微数据与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而不是parentchild )。 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是错误的。