JSON-LD Compaction和Compact IRI作为值

时间:2014-01-17 11:36:57

标签: semantic-web json-ld

我对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。

1 个答案:

答案 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"
    }
}

这应该会给你你想要的结果。