我正在创建一个关于作者的网站。他是主题。在这个网站上也出现了他的书籍。
不幸的是,我无法找到将这些书籍与主要人物元素联系起来的解决方案。我尝试了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>
有人有其他想法吗?
答案 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
属性来表示Person
是WebPage
的主要主题。
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的测试工具似乎无法识别它。