微数据与RDFa
我有一个关于RDFa和Microdata的简单问题。
我目前的理解是,RDFa被RDF实现成HTML,但对像我这样的新开发者来说很复杂,Microdata似乎真的很容易和快速实现。
这两种语义格式有哪些优点和缺点?
您从任何语义格式获得的主要优点是消费者能够重复使用您的数据。
例如,像Google这样的search引擎是重复使用您的数据来显示Rich Snippets的消费者,例如:
为了决定哪种格式是最好的,你需要知道你想要的目标消费者。 例如,Google在他们的FAQ中说,他们只能处理微数据(尽pipetesting工具现在可以与RDFa一起工作,所以他们可能接受RDFa)。
除非您知道您的目标消费者只接受RDFa,否则您最好使用微数据。 虽然许多RDFa消费服务(如语义search引擎Sindice)也接受微数据,但微数据消费服务不太可能接受RDFa。
微数据和RDFa的区别
虽然有很多(技术的,较小的)差异,但是这里select了一些我认为重要的select( 以网站pipe理员的答案作为基础)。
产品规格
-
由于W3C的HTML工作组没有发现志愿者编辑Microdata规范, 现在它只是一个W3C Group Note (参见历史 ),这意味着没有任何进一步的工作计划。
因此,WHATWG的“HTML生活标准”中的Microdata部分是微数据可能发展的唯一地方。 根据被更改的内容,可能会发生Microdata与W3C的HTML5不兼容的情况。
-
RDFa作为W3C推荐标准发布。
适用性
-
微数据只能在(X)HTML5(由WHATWG定义的HTML )中使用。
-
RDFa可用于各种主机语言,即几个(X)HTML变体和XML(因此也用于SVG,MathML,Atom等)。
并且可以支持新的主机语言,因为RDFa核心是“以任何标记语言表示结构化数据的属性的规范”。
使用多个词汇表
-
在Microdata中,对于相同的内容通常不可能使用多个词汇表。
-
由于使用了前缀,RDFa允许混合词汇表。
使用反向属性
-
Microdata不提供使用反向属性的方法。 对于没有定义反向属性的词汇表,您需要使用它(例如,它们只定义
parent
而不是parent
和child
)。 stream行的Schema.org就是这样的一个词汇表(只有一些例外)。虽然W3C Note Microdata to RDF定义了
itemprop-reverse
实验,但这个属性并不属于W3C或WHATWG的Microdata。 -
RDFa支持使用反向属性(使用
rev
属性 )。
语义Web
-
通过使用Microdata,您不直接参与语义Web(AFAIK Microdata不打算),主要是因为它没有被定义为RDF序列化(尽pipe有从Microdata中提取RDF的方法)。
-
RDFa是RDF序列化,RDF是W3C 语义Web的基础。
规范RDFa Core和HTML + RDFa可能比HTML Microdata更复杂,但它不是一个“公平的”比较,因为它们提供了更多的function。
与Microdata相似的是RDFa Lite (这对于大多数日常需求来说是有效的),至less在我看来,这个规范并不比Microdata复杂。
该怎么办?
如果您想要支持特定的使用者(例如search引擎和浏览器插件),则应检查其文档是否支持语法。
如果你只想学习一种语法,并没有考虑到特定的消费者,( 注意,主观意见! )与RDFa。 为什么?
- RDFa成熟多年,是一个W3C Rec,而Microdata是一个相对较新的发明,并没有被W3C标准化。
- RDFa可以用于多种语言,不仅仅是HTML5。
- RDFa允许将相同内容的词汇表混合使用,并且本机支持使用反向属性。
不能决定? 同时使用。
请注意,对于相同的内容, 您也可以使用多种语法 ,因此您可以使用Microdata 和 RDFa( 以及 Microformats 和 JSON-LD 等 )来实现最大的兼容性。
-
这是一个简单的Microdata片段:
<p itemscope itemtype="http://schema.org/Person"> <span itemprop="name">John Doe</span> is his name. </p>
-
以下是使用RDFa(Lite)的相同片段:
<p typeof="schema:Person"> <span property="schema:name">John Doe</span> is his name. </p>
-
在这里,这两种语法一起使用:
<p itemscope itemtype="http://schema.org/Person" typeof="schema:Person"> <span itemprop="name" property="schema:name">John Doe</span> is his name. </p>
但通常没有必要走这条路。
这很长,但是对于这个问题,最全面的答案之一就是Jeni Tennison的博客文章: Microdata和RDFa和睦相处
我不确定如果unorbuild议同时使用Microdata和RDFa是一个好主意。 如果你在他的例子中使用Google的结构化数据testing工具(或其他类似的工具),它会显示重复的数据,这似乎意味着Google机器人会在网页上选取两个名为John Doe的人,而不是原来的意图。
因此,我假定对一个给定的项目使用一种语法是一个更好的主意(只要它们描述独立的实体,你仍然应该能够混合语法)。
虽然我会很高兴在这方面被certificate是错误的。