我有一个关于 RDFa 和 Microdata 的快速问题。
我目前的理解是 RDFa 是 RDF 在 HTML 中实现的,但对于像我这样的新开发人员来说很复杂,Microdata 似乎真的很容易实现并且快速实现。
这两种语义格式的其他优点和缺点是什么?
我有一个关于 RDFa 和 Microdata 的快速问题。
我目前的理解是 RDFa 是 RDF 在 HTML 中实现的,但对于像我这样的新开发人员来说很复杂,Microdata 似乎真的很容易实现并且快速实现。
这两种语义格式的其他优点和缺点是什么?
虽然存在许多(技术上的、较小的)差异,但这里有一些我认为重要的选择(以我对网站管理员的回答为基础)。
由于 W3C 的 HTML WG没有发现自愿编辑 Microdata 规范,因此它现在只是W3C 组的一份说明(请参阅历史记录),这意味着没有任何进一步工作的计划。
因此,WHATWG 的“HTML 生活标准”中的微数据部分是微数据可能发展的唯一地方。根据发生的变化,他们的微数据可能会与 W3C 的 HTML5 不兼容。
更新: 2017 年,工作再次开始,旨在将微数据作为W3C 推荐标准发布。
RDFa 作为W3C Recommendation发布。
微数据只能用于 (X)HTML5(分别由 WHATWG 定义的HTML )。
RDFa 可用于各种宿主语言,即几种 (X)HTML 变体和 XML(因此也可用于 SVG、MathML、Atom 等)。
并且可以支持新的宿主语言,因为RDFa 核心“是一种用任何标记语言表达结构化数据的属性规范”。
在 Microdata 中,对同一内容使用多个词汇表更难,有时甚至是不可能的。
由于使用前缀,RDFa 允许混合词汇表。
微数据不提供使用反向属性的方法。对于没有定义逆属性的词汇表(例如,它们只定义parent
而不是parent
& child
),您需要这个。流行的 Schema.org 就是这样一个词汇表(只有几个旧的例外)。
虽然 W3C Note Microdata to RDF定义了实验性itemprop-reverse
,但此属性既不是 W3C 的一部分,也不是 WHATWG 的 Microdata 的一部分。
RDFa 支持使用反向属性(带有rev
属性)。
通过使用 Microdata,您不会直接参与语义 Web(AFAIK Microdata 也不打算这样做),主要是因为它没有定义为 RDF 序列化(尽管有一些方法可以从 Microdata 中提取 RDF)。
RDFa Core和HTML+RDFa规范可能比HTML Microdata更复杂,但这并不是一个“公平”的比较,因为它们提供了更多的功能。
与 Microdata 类似的是RDFa Lite(“确实可以满足大多数日常需求”),至少在我看来,这个规范远没有 Microdata 复杂。
如果您想支持特定的消费者(例如,搜索引擎和浏览器插件),您应该查看他们的文档以了解支持的语法。
如果您只想学习一种语法并且没有特定的消费者,(注意,主观意见!)选择RDFa。为什么?
请注意,您还可以对相同的内容使用多种语法,因此您可以使用 Microdata和RDFa(以及Microformats、JSON -LD和……)以获得最大的兼容性。
这是一个简单的微数据片段:
<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>
但通常没有必要/不建议沿着这条路线走。
您从任何语义格式中获得的主要优势是消费者能够重用您的数据。
例如,像谷歌这样的搜索引擎是消费者,他们重用你的数据来显示丰富的片段,比如这个:
为了决定哪种格式最好,您需要知道您想要定位哪些消费者。例如,谷歌在他们的常见问题解答中说他们只会处理微数据(尽管测试工具现在可以使用 RDFa,所以他们有可能接受 RDFa)。
除非您知道您的目标消费者只接受 RDFa,否则您可能最好使用微数据。虽然许多 RDFa 消费服务(例如语义搜索引擎 Sindice)也接受微数据,但微数据消费服务不太可能接受 RDFa。
这很长,但是您将获得的最全面的答案之一是 Jeni Tennison 的博客文章:Microdata and RDFa Living Together in Harmony
我不确定 unor 建议同时使用 Microdata 和 RDFa 是否是个好主意。如果您在他的示例中使用 Google 的结构化数据测试工具(或其他类似工具),它会显示重复数据,这似乎暗示 Google 机器人会在网页上找到两个名为 John Doe 的人,而不是最初意图的一个人。
因此,我假设对给定项目使用一种语法是一个更好的主意(只要它们描述单独的实体,您仍然应该能够混合语法)。
虽然我很高兴被证明是错误的。
我想说这在很大程度上取决于用例:对于科学用例,RDF 很常见,并且用于不同的方面。
现在推荐使用 JSON-LD 来丰富网站,至少由 Google 推荐。
嵌入在页面头部或正文中的标记中的 JavaScript 表示法。标记不与用户可见的文本交错,这使得嵌套数据项更易于表达,例如事件的 MusicVenue 的 PostalAddress 的 Country。此外,当 JSON-LD 数据动态注入页面内容时,Google 可以读取它,例如通过 JavaScript 代码或内容管理系统中的嵌入式小部件。