2017-02-22 22 views
0

Я пытаюсь вставить файл JSON-LD в свой CouchDB. Единственная проблема, с которой я сталкиваюсь, заключается в том, что когда я вставляю свой файл JSON-LD, полученный CouchDB бессмыслен, потому что идентификаторы не связаны друг с другом.JSON-LD to normal JSON

Пример того, что мой файл JSON-LD выглядит следующим образом:

"contributor": [ 
{ 
    "@id": "_:N6e57c55b35b74782ada714fdc6d66bf1" 
}, 
{ 
    "@id": "_:N810e115dfb3348579a7b826a7548095b" 
} 

И другая часть:

{ 
    "@id": "_:N6e57c55b35b74782ada714fdc6d66bf1", 
    "@type": "Person", 
    "label": "Isely, Duane, 1918-" 
}, 

{ 
    "@id": "_:N810e115dfb3348579a7b826a7548095b", 
    "@type": "Person", 
    "label": "Cronquist, Arthur" 
} 

Теперь идентификаторы в «вкладчике» ссылается два полех второе часть, которая описывает человека. Я хотел бы знать, как связать их (правильный путь), так что я хотел бы получить что-то вроде этого:

"contributor": [ 
{ 
     "@type": "Person", 
     "label": "Isely, Duane, 1918-" 
}, 
{ 
     "@type": "Person", 
     "label": "Cronquist, Arthur" 
} 

ответ

1

Вы можете использовать процессор JSON-LD (вос) создать более хороший JSON для вашей БД. Хорошей возможностью предписать структуру документов JSON-LD является to define a frame.

Цитата спецификации:

JSON-LD Обрамление позволяет разработчикам запрашивать пример и заставить конкретный макет дерева с JSON-LD документа.

Пример:

Предполагая, что ваш документ выглядит

{ 
    "@context": { 
    "contributor": { 
     "@type": "@id", 
     "@id": "http://purl.org/dc/terms/contributor", 
     "@container": "@list" 
    }, 
    "label": { 
     "@id": "http://www.w3.org/2004/02/skos/core#prefLabel" 
    } 
    }, 
    "@graph": [ 
    { 
     "@type": "MainResource", 
     "@id": "_:foo", 
     "contributor": [ 
     { 
      "@id": "_:N6e57c55b35b74782ada714fdc6d66bf1" 
     }, 
     { 
      "@id": "_:N810e115dfb3348579a7b826a7548095b" 
     } 
     ] 
    }, 
    { 
     "@id": "_:N6e57c55b35b74782ada714fdc6d66bf1", 
     "@type": "Person", 
    "label": "Isely, Duane, 1918-" 
    }, 
    { 
     "@id": "_:N810e115dfb3348579a7b826a7548095b", 
     "@type": "Person", 
     "label": "Cronquist, Arthur" 
    } 
    ] 
} 

Добавить JSON-LD кадр как

{ 
    "@context": { 
    "contributor": { 
     "@type": "@id", 
     "@id": "http://purl.org/dc/terms/contributor", 
     "@container": "@list" 
    }, 
    "label": { 
     "@id": "http://www.w3.org/2004/02/skos/core#prefLabel" 
    } 
    }, 
    "@type": "MainResource", 
    "@embed": "always" 
} 

Брось его к JSON-LD процессор вашего выбора и вы получите что-то вроде

{ 
    "@context": { 
    "contributor": { 
     "@type": "@id", 
     "@id": "http://purl.org/dc/terms/contributor", 
     "@container": "@list" 
    }, 
    "label": { 
     "@id": "http://www.w3.org/2004/02/skos/core#prefLabel" 
    } 
    }, 
    "@graph": [ 
    { 
     "@id": "_:b0", 
    "@type": "http://json-ld.org/playground/MainResource", 
     "contributor": [ 
     { 
      "@id": "_:b1", 
      "@type": "http://json-ld.org/playground/Person", 
      "label": "Isely, Duane, 1918-" 
     }, 
     { 
      "@id": "_:b2", 
      "@type": "http://json-ld.org/playground/Person", 
      "label": "Cronquist, Arthur" 
     } 
     ] 
    } 
    ] 
} 

Вот полный пример json-ld.org/playground

К сожалению обрамление не equaly хорошо поддерживается. Таким образом, результат зависит от используемого вами процессора JSON-LD.

Дополнительную информацию можно найти, удалив из ваших данных знаки "@". Просто добавьте следующие строки в контекст:

"type" : "@type", 
"id" :"@id" 

Кроме того, вы можете добавить рассыпчатости для типов в контексте документ

"MainResource": "http://json-ld.org/playground/MainResource" 

См пример json-ld.org/playground

Для полного примера кода Java с rdf4j взглядом здесь: How to convert RDF to pretty nested JSON using java rdf4j.