【问题标题】:JSON to JSON LD with minimal changes to the original JSON (all changes in JSON-LD context)JSON 到 JSON LD,对原始 JSON 的更改最小(JSON-LD 上下文中的所有更改)
【发布时间】:2015-11-08 00:22:47
【问题描述】:

TL;DR

如果我有一个像

这样的 JSON 文档
{
  "policyid": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set" 
}

我想要一个类似于

的 JSON-LD 文档
{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policytype": { "@id": "rdf:type",  "@type": "@id" }
   }
   "@id" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}

是否可以不将名称/值对 { "policyid": "http://example.com/policy:0099" } 更改为 { "@id" : "http://example.com/policy:0099" } 而是在上下文中说“policyid” ->“@id”。

{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policytype": { "@id": "rdf:type",  "@type": "@id" },
    #### something here that says "policyid" -> "@id"
   }
   "policyid" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}

我正在浏览规范示例,但找不到如何做到这一点。

更多上下文

假设我们有一个具有 RDF 和 JSON 编码规范的模型,例如 ODRL 2.1 OntologyODRL Version 2.1 JSON Encoding

我想从 JSON 开始,通过将 JSON Encoding 映射到 ODRL 本体来生成 JSON-LD。

{
  "policyid": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set",  
  "permissions": [{
     "target": "http://example.com/asset:9898",
     "action": "http://www.w3.org/ns/odrl/2/reproduce"
  }]
}

以下是我想将此 json 转换为的 RDF 模型。 (我会将 Turtle 序列化以使其更具可读性)。

@prefix odrl: <http://www.w3.org/ns/odrl/2/> .

<http://example.com/policy:0099> a odrl:Set .
<http://example.com/policy:0099> odrl:permission _:perm0 .
_:perm0 odrl:action <http://www.w3.org/ns/odrl/2/reproduce> .
_:perm0 odrl:target <http://example.com/asset:9898> . 

我几乎可以通过以下上下文进行最少的更改。

{
  "@context": { 
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "odrl": "http://www.w3.org/ns/odrl/2/",
    "policytype": { "@id": "rdf:type",  "@type": "@id" },
    "permissions": { "@id": "odrl:permission",  "@type": "@id"},
     "target" : {"@id": "odrl:target",  "@type": "@id" },
     "action" : {"@id": "odrl:action",  "@type": "@id" }
  },
  "@id": "http://example.com/policy:0099",
  "policytype": "http://www.w3.org/ns/odrl/2/Set",
  "permissions": [{ 
       "target": "http://example.com/asset:9898",
       "action": "http://www.w3.org/ns/odrl/2/reproduce" }]
}

但如果我想保持原来的 JSON 原样,有没有办法在上下文中说“policyid”->“@id”?

非常感谢!

【问题讨论】:

  • 也许你可以使用这个库 -> github.com/digitalbazaar/jsonld.js jsonld.compact() 函数似乎是你正在寻找的......
  • 非常感谢大卫!这正是我需要的功能,我发现 jsonld.js 非常有用。我的疑问是如何生成 jsonld.compact() 在这种特殊情况下需要作为输入的上下文。

标签: json rdf json-ld


【解决方案1】:

是否可以不更改名称/值对 { "policyid": "http://example.com/policy:0099" } 到 { "@id" : "http://example.com/policy:0099" } 而是在 上下文说“policyid”->“@id”。

是的,您只需将 policyid 映射到 @id。这称为keyword aliasing in the spec。所以你的例子看起来像这样:

{
  "@context": {
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "policyid": "@id",
    "policytype": { "@id": "rdf:type",  "@type": "@id" }
   },
   "policyid" : "http://example.com/policy:0099",
   "policytype": "http://www.w3.org/ns/odrl/2/Set"
}

【讨论】:

  • 非常感谢@markus-lanthaler !不知何故,我错过了关键字别名。
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多