1

让我们考虑一个没有上下文的简单 JSON-LD 文档:

[
   {
      "@id": "http://stackoverflow.com/#users",
      "http://rdfs.org/sioc/ns#name": "SO Users",
      "http://xmlns.com/foaf/0.1/member":
      {
         "@id": "http://example.com/me#me"
      }
   },
   {
      "@id": "http://example.com/me#me",
      "http://xmlns.com/foaf/0.1/givenName": "Tomasz"
   }
]

我想在此文档中添加一个 @context 以获得如下内容:

{
   "@context": { /* what here? */ },
   "@graph": [
   {
      "@id": "http://stackoverflow.com/#users",
      "Name": "SO Users",
      "Members": [ "http://example.com/me#me" ]
   },
   {
      "@id": "http://example.com/me#me",
      "Name": "Tomasz"
   }]
}

这里的问题是 foaf:givenName 和 sioc:name 属性都映射到 json 中的 Name 键。手动创作此文档不会有问题,因为嵌套的@context 可用于覆盖属性。

但是,是否可以使用 JSON-LD 规范定义的 Compact 操作?或者是将每个谓词映射到明确属性的唯一选择(在这种情况下,可能是 Name 和 GivenName)

4

1 回答 1

4

因为Name要映射到每个对象内的不同 IRI,需要您在每个对象中都有一个单独的上下文,或者一个主上下文和一个覆盖您希望它表示不同含义的位置的上下文。但是,压缩算法对整个文档使用单个上下文,所以恐怕你不能用标准算法来做到这一点。

您想要使用单独的上下文的示例如下:

{
   "@context": {
      "Name": "http://rdfs.org/sioc/ns#name",
      "Members": "http://xmlns.com/foaf/0.1/member" },
   "@graph": [
   {
      "@id": "http://stackoverflow.com/#users",
      "Name": "SO Users",
      "Members": [ "http://example.com/me#me" ]
   },
   {
      "@context": {"Name": "http://xmlns.com/foaf/0.1/givenName"},
      "@id": "http://example.com/me#me",
      "Name": "Tomasz"
   }]
}

我们正在考虑一个框架功能,它允许在使用对象嵌入的文档的不同框架内定义和使用上下文,但这只是目前的一个提议。

http://json-ld.org/playground上测试不同算法效果的好游戏。

于 2014-02-05T21:32:51.850 回答