我对JSON-LD compaction稍微感到困惑,是否可以用来压缩值的IRI。
我有以下JSON-LD对象
{
"@context": {
"@base": "file:///",
"x": "https://example.org/pub/x#",
"x-attribute": "https://example.org/pub/x-attribute#",
"x:purpose": {
"@type": "@id"
}
},
"https://example.org/pub/x#purpose": "https://example.org/pub/x-attribute#on"
}
以及以下新上下文
{
"x": "https://example.org/pub/x#",
"x-attribute": "https://example.org/pub/x-attribute#"
}
我期待......并且想要 ......来获取
{
"@context": {
"x": "https://example.org/pub/x#",
"x-attribute": "https://example.org/pub/x-attribute#"
},
"x:purpose": "x-attribute:on"
}
但我最终得到的是
{
"@context": {
"x": "https://example.org/pub/x#",
"x-attribute": "https://example.org/pub/x-attribute#"
},
"x:purpose": "https://example.org/pub/x-attribute#on"
}
如果你想尝试一下,可以将其插入JSON-LD Playground。
我如何才能完成我想要做的事情?即基本上在价值位置使用Compact IRI。
答案 0 :(得分:3)
首先快速说明:您没有使用在输入对象的上下文中定义的术语。由于您使用的是完整URI,因此未应用@type定义。相反,你应该使用术语(x:目的):
{
"@context": {
"@base": "file:///",
"x": "https://example.org/pub/x#",
"x-attribute": "https://example.org/pub/x-attribute#",
"x:purpose": {
"@type": "@id"
}
},
"x:purpose": "https://example.org/pub/x-attribute#on"
}
如果您未在数据中使用该术语,则需要指定该值为@id,如下所示:
{
"@context": {
"@base": "file:///",
"x": "https://example.org/pub/x#",
"x-attribute": "https://example.org/pub/x-attribute#",
"x:purpose": {
"@type": "@id"
}
},
"https://example.org/pub/x#purpose": {
"@id": "https://example.org/pub/x-attribute#on"
}
}
现在,要获得所需的效果,将值压缩到CURIE,您必须指出该值实际上是词汇表的一部分(如果您愿意,则为“枚举”)。您可以通过将新上下文更改为:
来完成此操作{
"x": "https://example.org/pub/x#",
"x-attribute": "https://example.org/pub/x-attribute#",
"x:purpose": {
"@type": "@vocab"
}
}
这应该会给你你想要的结果。