具有空字符串前缀的紧凑型IRI:可以完成吗?

时间:2018-02-02 00:29:18

标签: json-ld

在许多关联数据和语义网络语言(如TURTLE)中,支持IRI的命名空间。

@prefix foaf: <http://xmlns.com/foaf/0.1/>

<#me> foaf:name "Cort Ammon" .

那是使用TURTLE表示法。 foaf:name已解析为http://xmlns.com/foaf/0.1/name

JSON-LD具有相同的功能:

{
    "@context" {
        "foaf": "http://xmlns.com/foaf/0.1/"
    },
    "@id": "#me",
    "foaf:name": "Cort Ammon"
}

我希望使用空字符串前缀来创建:name:foo等IRI。在TURTLE中,可以使用

完成
@prefix : <some/absolute/IRI>

但是,JSON不允许将空字符串用作术语(因为它可能无法在所有语言中使用)。我无法做到自然

{
    "@context" {
        "": "some/absolute/IRI"
    },
    ...
}

有没有办法在JSON-LD中使用这个空字符串前缀?

2 个答案:

答案 0 :(得分:3)

我们可以重新访问1.1,因为我相信所有语言现在都能够处理空字符串的JSON密钥。

事实上,如果您在JSON-LD操场上使用“”代替“foaf”来尝试您的示例,它将正确扩展。 JavaScript实现强制规范要求术语不是空字符串,因此在尝试使用这样的上下文进行压缩时会出错,但我自己的Ruby实现似乎没有这样的限制,正如您可以通过尝试看到的那样here,因为API算法没有专门调用此类错误。

输入:

[
  {
    "@id": "https://json-ld.org/playground/#me",
    "http://xmlns.com/foaf/0.1/name": [
      {
        "@value": "Cort Ammon"
      }
    ]
  }
]

上下文:

{
  "@context": {"": "http://xmlns.com/foaf/0.1/"}
}

答案 1 :(得分:1)

要实现基本相同的最简单解决方案是使用@vocab。您的Turtle示例将被翻译为

{
    "@context" {
        "@vocab": "some/absolute/IRI"
    },
    "@id": "#me",
    "name": "Cort Ammon"
}

请注意name没有前缀。