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

Dav*_*ess 5 url uri schema.org json-ld

我已经在主页上定义OrganizationWebSite节点上定义了发布者,现在我想从其他页面上的文章链接到该发布者.但是,我也希望链接到它WebSite,@id如果我遵循使用URL作为的建议,他们自然会共享相同的内容@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/"
    }
}
Run Code Online (Sandbox Code Playgroud)
{
    "@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?
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设每个节点的ID必须是唯一的,那么是否有一个最佳实践来统一ID,例如添加哈希?

{
    "@id": "http://www.example.com/#site",
    ...
    "publisher": {
        "@id": "http://www.example.com/#publisher",
    }
}
Run Code Online (Sandbox Code Playgroud)

如果可行的话,处理器(谷歌)会加载@id以查找节点的其余属性吗?

与此相关的是,url在许多节点类型中发现的属性是假设@id缺失的?我结束了复制网页的完整URL作为@idurl大多数节点.那是常态吗?

uno*_*nor 17

@id (JSON-LD)

(itemid在Microdata和resourceRDFa中也是如此)

每件事都应该得到一个不同的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似乎也使用它#organization).

  • 主页:
    http://www.example.com/

  • 整个网站:
    http://www.example.com/#site

  • 组织:
    http://www.example.com/#organization

(通常只涉及两个不同的事情:文档和文档描述的事物.然后事物经常得到一个片段#this,如果是人#i,但这只是一个惯例.)

如果可行的话,处理器(谷歌)会加载@id以查找节点的其余属性吗?

Google不会记录他们是否尝试加载这些URI.

请注意,不要求这些URI实际指向文档.你可以使用HTTP的URI,让404分的答案,或者你可以使用一个URI方案不允许检索文件开始与(例如urn,tag...).

url (Schema.org)

Schema.org的url属性应该用于指向可以访问的页面的URL.它不是一种提供ID的方式,因此它不一定与提供的URI相同@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/

  • @DavidHarkness:是的,如果有专门的页面,我将始终提供`url`属性。想要通过链接做某事的消费者将/应该使用“ url”,而不是“ @id”,因为“ @id”可能只是一个标识符(而不是现有页面的URL),我不希望所有使用者:a)检查`@id'是否指向现有/相关页面,甚至b)完全寻找`@ id`。 (2认同)