@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 复制为大多数节点的 @idurl。这是常态吗?

@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 方案(例如,urntag、...)。

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/