2015-11-07 89 views
4

TL; DRJSON以JSON LD與原來的JSON的最小變化(JSON-LD環境中的所有變化)

如果我有一個像

{ 
    "policyid": "http://example.com/policy:0099", 
    "policytype": "http://www.w3.org/ns/odrl/2/Set" 
} 

一個JSON文件,我想有類似

{ 
    "@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" 
} 

一個JSON-LD文件是否有可能不是這個名字/谷對{ 「策略ID」: 「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編碼映射到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,因爲它是,有沒有辦法說「策略ID」 - >「@id」的背景下?

非常感謝!

+0

也許你可以使用這個庫 - > **的https://github.com/digitalbazaar/jsonld.js**了'jsonld.compact()'功能似乎成爲你正在尋找的... – davidkonrad

+0

非常感謝大衛!這正是我需要的功能,我發現jsonld.js非常有用。我的疑問是關於如何生成jsonld.compact()在此特定情況下需要作爲輸入的上下文。 – Nandana

回答

6

是否可以不更改名稱/谷對{「策略ID」: 「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" 
} 
+0

非常感謝@ markus-lanthaler !!不知何故,我錯過了關鍵詞別名。 – Nandana