我有一个关于 RDFa 和 Microdata 的简短问题。
我目前的理解是 RDFa 是用 HTML 实现的 RDF,但对于像我这样的新开发人员来说很复杂,Microdata 看起来实现起来非常容易和快速。
围绕这两种语义格式的其他优缺点是什么?
这篇文章很长,但是对于这个问题,你能得到的最全面的答案之一是 Jeni Tennison 的这篇博客文章: 微数据与 RDFa 和谐共处
任何语义格式的主要优点是使用者可以重用您的数据。
例如,像 Google 这样的搜索引擎是重复使用你的数据来显示富摘要的消费者,比如下面这个:
为了决定哪种格式最好,您需要知道您想要针对哪些消费者。例如,Google 在他们的 常见问题中说他们将只处理微数据(尽管测试工具现在可以使用 RDFa,所以他们有可能接受 RDFa)。
除非您知道您的目标消费者只接受 RDFa,否则最好使用微数据。虽然许多使用 RDFa 的服务(如语义搜索引擎 Sindice)也接受微数据,但使用微数据的服务不太可能接受 RDFa。
虽然有许多(技术上的,较小的)差异,这里选择了那些我认为重要的(使用 我对网站管理员的回答作为基础)。
作为 W3C 编辑 Microdata 规范的 HTML WG 找不到志愿者,它是 现在只剩下一个 W3C Group Note(参见 历史) ,这意味着没有任何进一步的工作计划。
因此,WHATWG 的“ HTML 生活标准”中的 微数据部分是 Microdata 唯一可能发展的地方。根据改变的内容,他们的 Microdata 可能会与 W3C 的 HTML5不兼容。
更新: 2017年,工作又开始了,目标是以 W3C推荐标准的形式发布 Microdata。
RDFa 以 W3C推荐标准的形式发布。
微数据只能在(X) HTML5中使用(比如 WHATWG 定义的 超文本标示语言)。
RDFa 可以用于各种主机语言,例如几种(X) HTML 变体和 XML (因此也可以用于 SVG、 MathML、 Atom 等)。
并且可以支持新的主机语言,因为 RDFa 核心“是用于在任何标记语言中表示结构化数据的属性的规范”。
在 Microdata,为同一内容使用多个词汇比较困难,有时甚至是不可能的。
由于使用了前缀,RDFa 允许混合词汇表。
微数据不提供使用反向属性的方法。对于不定义反向属性的词汇表(例如,它们只定义 parent而不是 parent和 child) ,需要这样做。流行的 Schema.org 就是这样一个词汇表(只有少数较早的例外)。
parent
child
虽然 W3C Note 向 RDF 提供微数据定义了实验 itemprop-reverse,但是这个属性不属于 W3C 或 WHATWG 的 Microdata。
itemprop-reverse
RDFa 支持使用反向属性(使用 rev属性)。
rev
通过使用 Microdata,您不会直接参与到语义 Web 中(AFAIK Microdata 也不打算这样做) ,主要是因为它没有被定义为 RDF 序列化(尽管有一些方法可以实现 从 Microdata 提取资源数据库)。
RDFa 是 RDF序列化,而 RDF 是 W3C 的 语义网的基础。
规格 RDFa 核心和 HTML + RDF a可能比 HTML 微数据更复杂,但这不是一个“公平”的比较,因为它们提供了更多的功能。
与 Microdata 类似的将是 < strong > RDFa Lite (它“能满足大多数日常需求”) ,而且这个规范,至少在我看来,没有微数据那么复杂。
如果您想支持特定的使用者(例如,搜索引擎和浏览器插件) ,您应该检查他们关于支持的语法的文档。
如果您只想学习一种语法,并且在头脑中没有特定的使用者,(注意力,主观意见!)可以使用 RDFa.为什么?
请注意,也可以使用多种语法对于相同的内容,因此您可以使用 Microdata 还有 RDFa (还有 Microformat,还有 JSON-LD,还有...)以获得最大的兼容性。
下面是一个简单的微数据片段:
<p itemscope itemtype="http://schema.org/Person"> <span itemprop="name">John Doe</span> is his name. </p>
Here’s the same snippet using RDFa (Lite):
<p typeof="schema:Person"> <span property="schema:name">John Doe</span> is his name. </p>
And here both syntaxes are used together:
<p itemscope itemtype="http://schema.org/Person" typeof="schema:Person"> <span itemprop="name" property="schema:name">John Doe</span> is his name. </p>
But it’s typically not necessary/recommended to go down this route.
我不确定 unor 同时使用 Microdata 和 RDFa 的建议是否是一个好主意。如果你使用谷歌的结构化数据测试工具(或其他类似的工具)在他的例子中显示重复的数据,这似乎暗示谷歌机器人会在网页上找到两个名为 John Doe 的人,而不是原来的意图。
因此,我假设对给定的条目使用一种语法是一个更好的主意(只要它们描述单独的实体,您仍然应该能够混合语法)。
不过我很乐意被证明是错的。
我认为这在很大程度上取决于用例: 对于 Scientific 用例,RDF 是常见的,并且用于不同的方面。
为了丰富网站,现在推荐使用 JSON-LD,例如 Google。
页面头部的标记中嵌入的 JavaScript 表示法 标记不与用户可见的文本交错,后者 使嵌套数据项更容易表示,例如 一个活动的音乐场所的邮政地址。此外,谷歌可以阅读 当 JSON-LD 数据被动态注入到页面内容时, 例如通过 JavaScript 代码或内容中嵌入的小部件 管理制度。