#rdf #json-ld
#rdf #json-ld
Вопрос:
Я пытаюсь выполнить сжатие в документе JSON-LD, смотрите Ниже (мы используем URNS, но та же проблема возникает с URL-адресами). Я хочу, "org:example:property:schema;2"
чтобы оно было сжато до schema
в обоих приведенных ниже вариантах использования, и вложенные объекты свойства schema также должны быть сжаты разумно. К сожалению, это кажется пока невозможным.
[
{
"@id": "org:example:ExampleThing",
"org:example:property:contents;2": [
{
"@type": "org:example:class:Property;2",
"org:example:property:schema;2": {
"@id": "org:example:instance:Schema:integer;2"
}
}
]
},
{
"@id": "org:example:ExampleThing2",
"org:example:property:contents;2": [
{
"@type": "org:example:class:Property;2",
"org:example:property:schema;2": {
"@type": "org:example:class:Enum;2",
"org:example:property:valueSchema;2": {
"@id": "org:example:instance:Schema:string;2"
}
}
}
]
}
]
Что я хотел бы получить, так это следующее:
[
{
"@id": "org:example:ExampleThing",
"contents": {
"@type": "Property",
"schema": {
"@id": "integer"
}
}
},
{
"@id": "org:example:ExampleThing2",
"contents": {
"@type": "Property",
"schema": {
"@type": "Enum",
"valueSchema": "string"
}
}
}
]
Самое близкое, что я получил, — это следующий контекст. В нем, однако, org:example:instance:Schema:integer;2
оно не уплотняется так, как требуется. Добавление "@type": "@vocab"
к schema
определению решает эту проблему для ExampleThing
, но тогда schema
термин не соответствует использованию свойства в ExampleThing2
, поэтому вместо этого он не уплотняется там.
{
"Property": { "@id": "org:example:class:Property;2" },
"Enum": { "@id": "org:example:class:Enum;2" },
"contents": { "@id": "org:example:property:contents;2" },
"schema": { "@id": "org:example:property:schema;2" },
"valueSchema": {
"@id": "org:example:property:valueSchema;2",
"@type": "@vocab"
},
"integer": { "@id": "org:example:instance:Schema:integer;2" },
"string": { "@id": "org:example:instance:Schema:string;2" }
}
Ответ №1:
То, что у вас есть, довольно близко к тому, что вы хотите. Вы можете проверить ссылку на игровую площадку здесь.
Основная проблема заключается в том, что "org:example:instance:Schema:integer;2"
@id
значение не может быть сжато дальше, поскольку значения @id
обрабатываются как IRIs относительно местоположения документа или @base
. Вы могли бы добавить @base
объявление в контекст, что могло бы вас несколько приблизить. Вы могли бы добиться большего успеха, используя контексты с ограниченной областью действия, и использовать другое @base
в контексте, ограниченном либо Property
, либо schema
.
Без этого результат сжатия выглядит следующим образом:
{
"@context": {
"Property": {"@id": "org:example:class:Property;2"},
"Enum": {"@id": "org:example:class:Enum;2"},
"contents": {"@id": "org:example:property:contents;2"},
"schema": {"@id": "org:example:property:schema;2"},
"valueSchema": {
"@id": "org:example:property:valueSchema;2",
"@type": "@vocab"
},
"integer": {"@id": "org:example:instance:Schema:integer;2"},
"string": {"@id": "org:example:instance:Schema:string;2"}
},
"@graph": [
{
"@id": "org:example:ExampleThing",
"contents": {
"@type": "Property",
"schema": {
"@id": "org:example:instance:Schema:integer;2"
}
}
},
{
"@id": "org:example:ExampleThing2",
"contents": {
"@type": "Property",
"schema": {
"@type": "Enum",
"valueSchema": "string"
}
}
}
]
}
Вы можете прочитать больше в разделе спецификации о сокращении IRIs.
Комментарии:
1. Спасибо! К сожалению, я не могу достичь того, чего хотел бы здесь, но, думаю, мне придется обойтись.