2015-11-07 3 views
4

TL; DRJSON в JSON LD с минимальными изменениями исходного JSON (все изменения в контексте JSON-LD)

Если у меня есть 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 Ontology и ODRL Version 2.1 JSON Encoding.

Я хочу начать с JSON и генерировать JSON-LD, сопоставляя кодировку JSON с онтологией ODRL.

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

Следующая модель RDF Я хочу преобразовать этот json в. (Я поставил сериализацию черепахи, чтобы сделать ее более читаемой).

@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» в контексте?

Большое спасибо!

+0

, возможно, вы можете использовать эту библиотеку -> ** https: //github.com/digitalbazaar/jsonld.js** в 'jsonld.compact()' функция, кажется, быть тем, что вы ищете ... – davidkonrad

+0

Спасибо большое Дэвид! Это именно то, что мне нужно, я нахожу jsonld.js весьма полезным. Мое сомнение заключалось в том, как создать контекст, который нужен jsonld.compact() для ввода в этом конкретном случае. – Nandana

ответ

6

Можно не менять пары имя/юдоли { «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" 
} 
+0

Большое спасибо @ markus-lanthaler !! Как-то я пропустил псевдоним ключевого слова. – Nandana

 Смежные вопросы

  • Нет связанных вопросов^_^