#json #rdf #semantic-web #json-ld
#json #rdf #семантическая сеть #json-ld
Вопрос:
Итак, давайте рассмотрим следующие данные, извлеченные из БД:
[
{
"@id": "http://example.com/1",
"http://example.com/label": "Parent",
"http://example.com/status": "Active",
"http://example.com/children": [
{
"@id": "http://example.com/2"
}
]
},
{
"@id": "http://example.com/2",
"http://example.com/label": "Child",
"http://example.com/status": "Active"
}
]
И фрейм:
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": {
"status":{}
}
}
Результат будет выглядеть так:
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": [
{
"@id": "1",
"children": {
"@id": "2",
"label": "Child",
"status": "Active"
},
"label": "Parent",
"status": "Active"
},
{
"@id": "2",
"label": "Child",
"status": "Active"
}
]
}
Как вы можете видеть в первом объекте, в children
разделе я получаю некоторые дополнительные параметры в дополнение к id.
Есть ли способ упростить children
список, чтобы он содержал только идентификаторы:
"children": [
"2"
]
Я попытался добавить это в свой фрейм:
"children": {
"@id": "http://example.com/children",
"@type": "@id"
}
Но это работает не так, как я ожидаю.
Ответ №1:
Используйте флаги фрейминга: "@embed": "@never"
или "@explicit": true
.
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": {
"status": {},
"@embed": "@never"
}
}
или
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": {
"status": {},
"children": {"@explicit": true, "@omitDefault": true}
}
}
Но, возможно, все, что вам нужно, — это уплотнение.
Если вы не хотите сжимать массивы, переключите соответствующую опцию. В JSONLD-Java:
final JsonLdOptions options = new JsonLdOptions();
options.setCompactArrays(false);