@id与用于链接JSON-LD节点的URL

时间:2016-12-10 01:25:34

标签: url uri schema.org json-ld

我已在主页上定义的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?我最终将页面的完整网址复制为大多数节点的@idurl。这是常态吗?

1 个答案:

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

url(Schema.org)

Schema.org的url属性应该用于指向可以访问的网页的网址。它不是一种提供ID的方式,因此它不一定与@id中提供的URI相同。

在您的示例中,您可能会对所有三件事使用相同的url值:

  • 主页:
    @idhttp://www.example.com/
    urlhttp://www.example.com/

  • 整个网站:
    @idhttp://www.example.com/#site
    urlhttp://www.example.com/

  • 组织:
    @idhttp://www.example.com/#organization
    urlhttp://www.example.com/