使用两个不同的@types 压缩 JSON-LD 属性?
Compacting JSON-LD property w/ two different @types?
我正在尝试压缩 JSON-LD 文档,见下文(我们使用的是 URN,但 URL 也会出现同样的问题)。我希望在下面的两种用法中 "org:example:property:schema;2"
被压缩为 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" }
}
您所拥有的与您想要的非常接近。您可以在此处查看 playground link。
主要问题是 "org:example:instance:Schema:integer;2"
@id
值无法进一步压缩,因为 @id
的值被视为相对于文档位置的 IRI,或者 @base
。您可以在上下文中添加一个 @base
声明,这可以让您更接近。您可以使用范围上下文做得更好,并在 Property
或 schema
.
范围内的上下文中使用不同的 @base
如果不这样做,压缩结果如下所示:
{
"@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"
}
}
}
]
}
您可以在规范的 Shortening IRIs 部分阅读更多内容。
我正在尝试压缩 JSON-LD 文档,见下文(我们使用的是 URN,但 URL 也会出现同样的问题)。我希望在下面的两种用法中 "org:example:property:schema;2"
被压缩为 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" }
}
您所拥有的与您想要的非常接近。您可以在此处查看 playground link。
主要问题是 "org:example:instance:Schema:integer;2"
@id
值无法进一步压缩,因为 @id
的值被视为相对于文档位置的 IRI,或者 @base
。您可以在上下文中添加一个 @base
声明,这可以让您更接近。您可以使用范围上下文做得更好,并在 Property
或 schema
.
@base
如果不这样做,压缩结果如下所示:
{
"@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"
}
}
}
]
}
您可以在规范的 Shortening IRIs 部分阅读更多内容。