【问题标题】:@id vs. URL for linking JSON-LD nodes@id 与链接 JSON-LD 节点的 URL
【发布时间】:2016-12-10 01:25:34
【问题描述】:

我在主页上定义的WebSite 节点上定义了发布者Organization,现在我想从其他页面上的文章链接到该发布者。但是,我也想链接到WebSite,如果我遵循使用 URL 作为@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(如果缺失)?对于大多数节点,我最终将页面的完整 URL 复制为 @idurl。这是常态吗?

【问题讨论】:

    标签: url uri schema.org json-ld


    【解决方案1】:

    @id (JSON-LD)

    (同样适用于微数据中的 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 方案(例如,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/

    【讨论】:

    • 我已经实现了这个。当@ids 是带有哈希的相同 URL 时,您是否认为有任何理由为所有这些节点包含 url 属性(例如,作为网站一部分的网页上带有评论的汽车)?
    • @DavidHarkness:是的,如果有专门的页面,我总是会提供url 属性。想要使用链接做某事的消费者将/应该使用url,而不是@id,因为@id 可能只是一个标识符(不是现有页面的URL),我不希望所有消费者a) 检查 @id 是否指向现有/相关页面,或者甚至 b) 完全查找 @id
    • 假设在我的服务页面中,我有一个关于 Service 的架构,而我的主页有一个关于 LocalBusiness 的架构。我使用 id(提供者:id:my-domain#local-business)将服务模式链接到我的本地业务。我是否需要将 LocalBusiness 架构和 Service shema 放在 1 个“大”架构下,以便 Internet 可以通过 id 理解链接?我怎么知道我的 id 是唯一的?假设有一个坏人试图复制我的 LocalBusiness id 并用它来引用不同的东西? @unor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多