@id 与 URL 用于链接 JSON-LD 节点
@id vs. URL for linking JSON-LD nodes
我已经在主页上定义的 WebSite
节点上定义了发布者 Organization
,现在我想从其他页面上的文章 link 到该发布者。但是,我也想 link 到 WebSite
,如果我遵循使用 URL 作为 [=18] 的建议,它们自然共享相同的 @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
如果丢失?我最终将页面的完整 URL 复制为大多数节点的 @id
和 url
。这是常态吗?
@id
(JSON-LD)
(Microdata 中的 itemid
和 RDFa 中的 resource
也是如此)
每个事物都应该有一个不同的 URI,如果多个节点是关于同一个事物,理想情况下它们应该重用这个 URI。请注意,这些不一定是 URLs,并且它们通常不应用作 Schema.org 的 url
属性 的值(请参阅下面的部分)。 =51=]
使用 URI 片段是实现此目的的最常见且最简单的方法。有关示例(和其他方式),请参阅我对这些问题的回答:
- Best practices for adding semantics to a website
- Concepts for RDFa DRY references
- RDF 303 redirect clarification
对于您的示例,一个组织的网站,根 URL (http://www.example.com/
) 通常 "stands for" 三件事:
- 首页
- 整个网站
- 组织
由于主页是获取的资源,因此它应该获取 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
, 但这只是一个惯例。)
If that works, will processors (Google) load the @id
to find the rest of the node's properties?
Google 不会记录他们是否尝试加载这些 URI。
请注意,不要求这些 URI 实际上指向文档。您可以使用提供 404 答案的 HTTP URI,或者您可以使用不允许以开头检索文档的 URI 方案(例如,urn
、tag
、...)。
url
(Schema.org)
Schema.org 的 url
属性 应该用于指向可以访问的页面的 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/
我已经在主页上定义的 WebSite
节点上定义了发布者 Organization
,现在我想从其他页面上的文章 link 到该发布者。但是,我也想 link 到 WebSite
,如果我遵循使用 URL 作为 [=18] 的建议,它们自然共享相同的 @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
如果丢失?我最终将页面的完整 URL 复制为大多数节点的 @id
和 url
。这是常态吗?
@id
(JSON-LD)
(Microdata 中的 itemid
和 RDFa 中的 resource
也是如此)
每个事物都应该有一个不同的 URI,如果多个节点是关于同一个事物,理想情况下它们应该重用这个 URI。请注意,这些不一定是 URLs,并且它们通常不应用作 Schema.org 的 url
属性 的值(请参阅下面的部分)。 =51=]
使用 URI 片段是实现此目的的最常见且最简单的方法。有关示例(和其他方式),请参阅我对这些问题的回答:
- Best practices for adding semantics to a website
- Concepts for RDFa DRY references
- RDF 303 redirect clarification
对于您的示例,一个组织的网站,根 URL (http://www.example.com/
) 通常 "stands for" 三件事:
- 首页
- 整个网站
- 组织
由于主页是获取的资源,因此它应该获取 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
, 但这只是一个惯例。)
If that works, will processors (Google) load the
@id
to find the rest of the node's properties?
Google 不会记录他们是否尝试加载这些 URI。
请注意,不要求这些 URI 实际上指向文档。您可以使用提供 404 答案的 HTTP URI,或者您可以使用不允许以开头检索文档的 URI 方案(例如,urn
、tag
、...)。
url
(Schema.org)
Schema.org 的 url
属性 应该用于指向可以访问的页面的 URL。它不是作为提供 ID 的一种方式,因此它不一定与 @id
.
在您的示例中,您可能会对所有三件事使用相同的 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/