我正在尝试将schema.org标记添加到律师事务所的网站(itemtype = schema.org / Attorney)。该网站包含一个专门针对公司中每位律师的页面(itemtype = schema.org / Person)。这些个人资料页面包含已发布作品的列表(例如itemtype = schema.org / Book)。我想指明该人是该组织的成员和该书的作者。我正在努力实现这一目标。
以下是我正在使用的一些代码:
<body itemscope itemtype="http://schema.org/Attorney">
<!-- this stuff just so the Yandex validator doesn't freak out -->
<meta itemprop="name" content="some law firm">
<meta itemprop="address" content="some address">
<meta itemprop="telephone" content="555-555-5555">
<h1>Book Test</h1>
<div id="profile" itemscope itemtype="http://schema.org/Person">
<h1 itemprop="name">John Smith</h1>
<h3>Published Works</h3>
<ul>
<li itemscope itemtype="http://schema.org/Book"><span itemprop="name">Some Book</span><meta itemprop="author" itemref="profile"></li>
</ul>
</div>
<meta itemprop="member" itemref="profile">
</body>
在https://dl.dropboxusercontent.com/u/292741/schema-test-book-stackoverflow.html
的浏览器中查看使用Google的结构化数据工具(google.com/webmasters/tools/richsnippets)或Yandex(webmaster.yandex.com/microtest.xml)进行测试时,我无法获得我想要的结果。在这种情况下,成员和作者属性未注册。
我尝试了很多变化。以下是一些重要的内容:
如果我在member和author属性元标记上放置了itemscope和itemtype = Person,那么属性就会注册,但工具认为我在谈论三个不同的人(就好像itemref没有注册)。
如果我将成员和作者属性放在#profile上,它们可以正常工作,但是我会收到错误,因为组织没有作者,书籍也没有成员。
这两者的组合只是部分成功。因此,将just成员属性放在#profile上并通过元标记执行作者会导致author属性被忽略(当我没有给它自己的范围和type = Person时)或者它适用于一些与之无关的随机人员。一个由#profile定义的(当我给它的ow范围等时)。
我也尝试过使用schema.org/WriteAction作为另一种方式来了解书与人之间的关系,但我遇到了同样的问题。我可以让组织 - >成员或写作 - >代理工作,而不是两者。
这是我得到的结构(由Google的工具代表):
Item
type: schema.org/attorney
property:
name: some law firm
address: some address
telephone: 555-555-5555
member:
Item
type: schema.org/book
property:
name: Some Book
author:
Item
type: schema.org/person
property:
name: John Smith
我想要的结构(由Google的工具代表)是这样的:
Item
type: schema.org/attorney
property:
name: some law firm
address: some address
telephone: 555-555-5555
member: Item 1 <-- now references the person
Item
type: schema.org/book
property:
name: Some Book
author: Item 1 <-- now references the person
Item 1
type: schema.org/person
property:
name: John Smith
我真的很感激任何建议。谢谢!
答案 0 :(得分:2)
多类型实体的使用似乎赶上了Microdata,因此使用未为所有指定类型定义的属性(如我在下面的旧答案中所述)在Schema.org中可能没问题。
无论如何,对标识符的支持(在Microdata:itemid
中)似乎现在好一些(至少在Google的测试工具中得到支持),这可能是适合您案例的解决方案:
itemid
author
和member
示例:
<div itemscope itemtype="http://schema.org/Person" itemid="/team/alice#i">
</div>
<div itemscope itemtype="http://schema.org/LegalService">
<link itemprop="member" href="/team/alice#i" />
</div>
<div itemscope itemtype="http://schema.org/Book">
<link itemprop="author" href="/team/alice#i" />
</div>
请注意,Attorney
类型现已弃用,因此我在此示例中使用了LegalService
。
(请注意,您对itemref
的使用不正确,因为它can only be used on elements with itemscope
。)
Microdata无法做到这一点。
这将导致使用对其父级无效的属性(无论是通过嵌套还是通过itemref
)itemtype:
您无法通过itemref
为律师和本书引用此人,因为这需要在Person上使用itemprop="author member"
(is valid语法明智的),但是author
不是律师的有效财产,member
不是Book的有效财产。
如果你在Book下面嵌入Person并使用itemref
从律师那里引用同一个人,那么同样的问题。或相反亦然。
所以我能看到的唯一方法是复制信息,这很可惜。