微数据与 RDFa

我有一个关于 RDFa 和 Microdata 的简短问题。

我目前的理解是 RDFa 是用 HTML 实现的 RDF,但对于像我这样的新开发人员来说很复杂,Microdata 看起来实现起来非常容易和快速。

围绕这两种语义格式的其他优缺点是什么?

22269 次浏览

这篇文章很长,但是对于这个问题,你能得到的最全面的答案之一是 Jeni Tennison 的这篇博客文章: 微数据与 RDFa 和谐共处

任何语义格式的主要优点是使用者可以重用您的数据。

例如,像 Google 这样的搜索引擎是重复使用你的数据来显示富摘要的消费者,比如下面这个:

Recipe Rich Snippet

为了决定哪种格式最好,您需要知道您想要针对哪些消费者。例如,Google 在他们的 常见问题中说他们将只处理微数据(尽管测试工具现在可以使用 RDFa,所以他们有可能接受 RDFa)。

除非您知道您的目标消费者只接受 RDFa,否则最好使用微数据。虽然许多使用 RDFa 的服务(如语义搜索引擎 Sindice)也接受微数据,但使用微数据的服务不太可能接受 RDFa。

Microdata 与 RDFa 的差异

虽然有许多(技术上的,较小的)差异,这里选择了那些我认为重要的(使用 我对网站管理员的回答作为基础)。

规格

适用性

  • 微数据只能在(X) HTML5中使用(比如 WHATWG 定义的 超文本标示语言)。

  • RDFa 可以用于各种主机语言,例如几种(X) HTML 变体和 XML (因此也可以用于 SVG、 MathML、 Atom 等)。

    并且可以支持新的主机语言,因为 RDFa 核心“是用于在任何标记语言中表示结构化数据的属性的规范”。

使用多种词汇

  • 在 Microdata,为同一内容使用多个词汇比较困难,有时甚至是不可能的。

  • 由于使用了前缀,RDFa 允许混合词汇表。

使用反向属性

  • 微数据不提供使用反向属性的方法。对于不定义反向属性的词汇表(例如,它们只定义 parent而不是 parentchild) ,需要这样做。流行的 Schema.org 就是这样一个词汇表(只有少数较早的例外)。

    虽然 W3C Note 向 RDF 提供微数据定义了实验 itemprop-reverse,但是这个属性不属于 W3C 或 WHATWG 的 Microdata。

  • RDFa 支持使用反向属性(使用 rev属性)。

语义网

  • 通过使用 Microdata,您不会直接参与到语义 Web 中(AFAIK Microdata 也不打算这样做) ,主要是因为它没有被定义为 RDF 序列化(尽管有一些方法可以实现 从 Microdata 提取资源数据库)。

  • RDFa 是 RDF序列化,而 RDF 是 W3C 的 语义网的基础。


规格 RDFa 核心HTML + RDF a可能比 HTML 微数据更复杂,但这不是一个“公平”的比较,因为它们提供了更多的功能。

与 Microdata 类似的将是 < strong > RDFa Lite (它“能满足大多数日常需求”) ,而且这个规范,至少在我看来,没有微数据那么复杂。

怎么办?

如果您想支持特定的使用者(例如,搜索引擎和浏览器插件) ,您应该检查他们关于支持的语法的文档。

如果您只想学习一种语法,并且在头脑中没有特定的使用者,(注意力,主观意见!)可以使用 RDFa.为什么?

  • RDFa 经过多年的发展已经成熟,是 W3C 的一个项目,而 Microdata 是一个相对较新的发明,没有被 W3C 标准化。
  • RDFa 可以在许多语言中使用,不仅仅是 HTML5。
  • 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 代码或内容中嵌入的小部件 管理制度。