我已在主页上定义的Organization
节点上定义了发布者WebSite
,现在我想从其他网页上的文章链接到该发布者。不过,我也希望链接到WebSite
,如果我遵循使用网址@id
的建议,他们自然会共享相同的@id
。
{
"@context": "http://schema.org",
"@type": "WebSite",
"@id": "http://www.example.com/",
"url": "http://www.example.com/",
...
"publisher": {
"@type": "Organization",
"@id": "http://www.example.com/", <-- duplicated
"url": "http://www.example.com/"
}
}
{
"@context": "http://schema.org",
"@type": "WebPage",
"@id": "http://www.example.com/news",
"url": "http://www.example.com/news",
"isPartOf": {
"@id": "http://www.example.com/" <-- site or publisher?
}
...
"publisher": {
"@id": "http://www.example.com/" <-- site or publisher?
}
}
我假设每个节点的ID必须是唯一的,那么是否有一种最佳实践可以统一ID,例如添加哈希?
{
"@id": "http://www.example.com/#site",
...
"publisher": {
"@id": "http://www.example.com/#publisher",
}
}
如果可行,处理器(Google)会加载@id
以查找节点其余部分的属性吗?
与此相关,如果缺少,许多节点类型中的url
属性被假定为@id
?我最终将页面的完整网址复制为大多数节点的@id
和url
。这是常态吗?
答案 0 :(得分:13)
@id
(JSON-LD)(Microdata中的itemid
和RDFa中的resource
也是如此)
每件事都应该获得不同的URI,如果多个节点大致相同,那么理想情况下应该重用这个URI。请注意,这些不一定是URL,它们通常不应用作Schema.org的url
属性的值(请参阅下面的部分)。
使用URI片段是实现此目的的常见且最简单的方法。有关示例(以及其他方式),请参阅我对这些问题的回答:
对于您的示例案例,组织的网站,根URL(http://www.example.com/
)通常“代表”三件事:
由于主页是获取的资源,因此应获取URI http://www.example.com/
。网站和组织应该得到自己的片段;由您决定选择哪些,例如:http://www.example.com/#site
代表网站,http://www.example.com/#organization
代表组织(FWIW,Apple seems to use #organization
。)
主页:
http://www.example.com/
整个网站:
http://www.example.com/#site
组织:
http://www.example.com/#organization
(通常只涉及两个不同的事情:文档和文档描述的事物。然后事物经常得到像#this
这样的片段,如果有人,#i
,但是这只是一个惯例。)
如果可行,处理器(Google)会加载
@id
以查找节点其余部分的属性吗?
Google不会记录他们是否尝试加载这些URI。
请注意,并不要求这些URI实际指向文档。您可以使用提供404答案的HTTP URI,或者您可以使用不允许检索文档的URI方案(例如urn
,tag
,...)。
url
(Schema.org) Schema.org的url
属性应该用于指向可以访问的网页的网址。它不是一种提供ID的方式,因此它不一定与@id
中提供的URI相同。
在您的示例中,您可能会对所有三件事使用相同的url
值:
主页:
@id
:http://www.example.com/
url
:http://www.example.com/
整个网站:
@id
:http://www.example.com/#site
url
:http://www.example.com/
组织:
@id
:http://www.example.com/#organization
url
:http://www.example.com/