在许多关联数据和语义网络语言(如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中使用这个空字符串前缀?
答案 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
没有前缀。