链接微数据中的独立元素

时间:2016-07-29 14:34:55

标签: html5 schema.org microdata

我正在创建一个关于作者的网站。他是主题。在这个网站上也出现了他的书籍。

不幸的是,我无法找到将这些书籍与主要人物元素联系起来的解决方案。我尝试了itemref,但在链接到没有itemprop值的“独立”元素时它不起作用(表示Google测试工具)。以下两本“书” - 都不起作用。

<div id="author" itemscope="" itemtype="http://schema.org/Person">
  <span itemprop="name">Marvin</span>
</div>

<div itemscope="" itemtype="http://schema.org/Book">
  <span itemprop="name">Nice Book</span>
  <meta itemprop="author" itemref="author" />
</div>

<div itemscope="" itemtype="http://schema.org/Book">
  <span itemprop="name">Best Book</span>
  <meta itemprop="author" itemscope="" itemtype="http://schema.org/Person" itemref="author" />
</div>

有人有其他想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用link标记来实现此目的,请查看以下代码段:

<div itemid="#author-marvin" itemscope="" itemtype="http://schema.org/Person">
  <span itemprop="name">Marvin</span>
</div>
<div itemscope="" itemtype="http://schema.org/Book">
  <span itemprop="name">Nice Book</span>
  <link itemprop="author" href="#author-marvin">
</div>
<div itemscope="" itemtype="http://schema.org/Book">
  <span itemprop="name">Best Book</span>
  <link itemprop="author" href="#author-marvin">
</div>
代码段的

itemid应与整个页面标记中的书籍摘要中href的{​​{1}}匹配。

更多示例here

答案 1 :(得分:2)

您有三种选择。

itemid

作为described by @Dharmang。您为Person提供了一个URI(带有itemid属性),并在每个Book中使用author属性引用此URI。

<div itemscope itemtype="http://schema.org/Person" itemid="#person-1">
</div>

<div itemscope itemtype="http://schema.org/Book">
  <link itemprop="author" href="#person-1" />
</div>

<div itemscope itemtype="http://schema.org/Book">
  <link itemprop="author" href="#person-1" />
</div>

(此URI可供其他人使用,他们也想对此人说些什么,或者想要识别那个人。所以[your-domain]/[your-path]#person-1是一个代表实际人的URI,而不只是一个关于那个人。如果那个人已经存在这样的URI,你可能想重复使用它而不是创建自己的URI。)

问题:消费者支持可能不是最好的(但Google的测试工具似乎认识到了这一点)。

itemref

您必须将itemprop="author"添加到Person项,并使用id属性从每个Book引用其itemref。您不必为此添加meta元素,只需在包含itemscope的元素上执行此操作。

<div itemprop="author" itemscope itemtype="http://schema.org/Person" id="author">
</div>

<div itemscope itemtype="http://schema.org/Book" itemref="author">
</div>

<div itemscope itemtype="http://schema.org/Book" itemref="author">
</div>

问题: Person项目的父级不能包含itemscope(因为会将author属性添加到其中)。因此,这意味着,您无法使用mainEntity属性来表示PersonWebPage的主要主题。

itemprop-reverse

如果您可以将Book项嵌套在Person项中,则可以使用itemprop-reverse属性,该属性允许您在另一个方向上使用属性:

<div itemscope itemtype="http://schema.org/Person">

  <div itemprop-reverse="author" itemscope itemtype="http://schema.org/Book">
  </div>

  <div itemprop-reverse="author" itemscope itemtype="http://schema.org/Book">
  </div>

</div>

(如果您无法嵌套,您仍然可以将其与URI值一起使用,但在这种情况下使用itemid可能是更好的选择。)

问题:此属性不是Microdata规范的一部分。这是defined in W3C’s Microdata to RDF Note。因此消费者支持可能不太好。 Google的测试工具似乎无法识别它。