在JSON-LD中引用另一个资源的正确方法是什么

时间:2016-09-23 17:18:40

标签: json-ld

所以我试图围绕JSON-LD,我看到的所有例子主要包括嵌入“链接数据”。但我想提供对链接数据的引用(主要是因为嵌入它可能导致10MB的有效负载)。所以我想知道我是否做得对。

这就是我所拥有的:

{
  "@context": "/contexts/Customers.jsonld",
  "@id": "/customers/1",
  "@type": "Customer",
  "sessions": {
    "@id": "/customers/1/sessions",
    "@type": "Session"
  },
  "dealer": "/dealers/2",
  "givenName": "Abe",
  "familyName": "Abrahms",
  /* ... snip ... */
}

我在这里讨论的链接数据的引用由sessions属性表示。假设这是正确的,那么我需要在Customer上下文中更改什么?

"@context": {
    "hydra": "http://www.w3.org/ns/hydra/core#",
    "doc": "https://api.waterlinkconnect.com/doc#",
    "Customer": "doc:Customer",
    "givenName": "doc:Customer/givenName",
    "familyName": "doc:Customer/familyName",
    "email":"doc:Customer/email",
    "address":"doc:Customer/address",
    "notes":"doc:Customer/notes",
    "phone1":"doc:Customer/phone1",
    "phone2":"doc:Customer/phone2"
    "sessions": "???????"
}

1 个答案:

答案 0 :(得分:2)

您只需提供IRI作为值,例如:

"propertyFoo": { "@id": "https://example.com/some-iri" }

(此处使用@id,以便IRI不会被解释为字符串值。)

因此,使用sessions的示例很好,但如果您不需要/需要,则

使用type coercion

如果此属性始终将IRI作为值,您可以在@type中定义:

@context

然后,您可以在提供值时省略"propertyFoo": { "@id": "https://your-vocabulary.example.com/propertyFoo", "@type": "@id" }

@id

(如果像这样使用类型强制,则无法为该节点提供其他属性。)