我对RDFa和微数据有一个快速的问题。
我目前的理解是RDFa是RDF实现到HTML中的,但是对于像我这样的新开发人员来说却很复杂,Microdata看起来确实很容易实现。
这两种语义格式的其他优点和缺点是什么?
我对RDFa和微数据有一个快速的问题。
我目前的理解是RDFa是RDF实现到HTML中的,但是对于像我这样的新开发人员来说却很复杂,Microdata看起来确实很容易实现。
这两种语义格式的其他优点和缺点是什么?
Answers:
尽管有很多(技术上的,较小的)差异,但是我认为很重要(我以网站管理员的回答为基础)。
由于W3C的HTML WG发现没有志愿人员编辑Microdata规范,因此它现在只是W3C小组说明(请参阅历史记录),这意味着没有计划在此基础上做任何进一步的工作。
因此,WHATWG的“ HTML生活标准”中的“微数据”部分是微数据可能发展的唯一场所。根据更改的内容,它们的微数据可能会与W3C的HTML5不兼容。
更新: 2017年,工作再次开始,旨在将Microdata作为W3C Recommendation发布。
RDFa作为W3C建议书发布。
微数据只能在(X)HTML5(由WHATWG定义的HTML)中使用。
RDFa可用于多种宿主语言,即几种(X)HTML变体和XML(因此也可用于SVG,MathML,Atom等)。
而且,由于RDFa Core “是一种规范,用于以任何标记语言表达结构化数据的属性规范” ,因此可以支持新的宿主语言。
在Microdata中,对同一内容使用多个词汇表比较困难,有时甚至是不可能的。
由于使用了前缀,RDFa允许混合词汇。
微数据没有提供使用反向属性的方法。对于不定义逆属性的词汇(例如,它们仅定义parent
而不是parent
&child
),您需要此词汇。流行的Schema.org就是这样的词汇表(只有一些较旧的例外)。
尽管RDF的W3C注意微数据定义了实验性功能itemprop-reverse
,但此属性不是W3C或WHATWG的微数据的一部分。
RDFa支持使用反向属性(带有rev
属性)。
通过使用Microdata,您不会直接参与语义Web(并且AFAIK Microdata并不想这样做),主要是因为它没有定义为RDF序列化(尽管有许多方法可以从Microdata中提取RDF)。
规范RDFa Core和HTML + RDFa可能比HTML Microdata更复杂,但是由于它们提供了更多的功能,因此这不是一个“公平”的比较。
与Microdata相似的是RDFa Lite(“可以满足大多数日常需求”),并且至少在我看来,此规范比Microdata复杂得多。
如果要支持特定使用者(例如,搜索引擎和浏览器加载项),则应查看其有关受支持语法的文档。
如果您只想学习一种语法并且没有特定的使用对象,(请注意,主观意见!)可以使用RDFa。为什么?
请注意,您还可以使用多种语法相同内容,所以你可以有微数据和RDFa的(和微格式,以及JSON-LD,以及...)的最大兼容性。
这是一个简单的Microdata代码段:
<p itemscope itemtype="http://schema.org/Person">
<span itemprop="name">John Doe</span> is his name.
</p>
这是使用RDFa(精简版)的相同代码段:
<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>
但是通常不必/不建议沿着这条路线走。
从任何语义格式中获得的主要优点是消费者可以重用数据。
例如,诸如Google之类的搜索引擎就是消费者,它们重用您的数据以显示Rich Snippets,例如:
为了确定哪种格式最好,您需要知道要定位的消费者。例如,谷歌在其常见问题解答中说,他们只会处理微数据(尽管该测试工具现在可以与RDFa一起使用,因此他们有可能接受RDFa)。
除非您知道目标消费者只接受RDFa,否则最好使用微数据。尽管许多使用RDFa的服务(例如语义搜索引擎Sindice)也接受微数据,但是使用微数据的服务不太可能接受RDFa。
很长,但是您将获得关于此问题的最全面的答案之一是Jeni Tennison的博客文章:Microdata和RDFa和谐共处
我不确定unor建议同时使用Microdata和RDFa是否是一个好主意。如果您在他的示例中使用Google的结构化数据测试工具(或其他类似工具),则会显示重复的数据,这似乎意味着Google机器人会在网页上抓起两个名为John Doe的人,而不是最初的意图。
因此,我假设对给定项目使用一种语法是更好的主意(只要它们描述了单独的实体,您仍然应该能够混合使用语法)。
尽管我很乐意被证明是错误的。