JSON-LD类型的文档明确指出可以为节点定义多种类型。 https://www.w3.org/TR/json-ld11/#specifying-the-type 如果您从JSON-LD playground中的上述网址打开示例#14,您将看到它是有效的语法。
{
"@id": "http://me.markus-lanthaler.com/",
"@type": [
"http://schema.org/Person",
"http://xmlns.com/foaf/0.1/Person"
]
}
但是,如果尝试将此定义移至@context并将其应用于特定属性,则会从解析器中获取错误。选中here。
{
"@context": {
"some_property": {
"@id": "http://me.markus-lanthaler.com/",
"@type": [
"http://schema.org/Person",
"http://xmlns.com/foaf/0.1/Person"
]
}
},
"some_property": "value"
}
显示的错误是: jsonld.SyntaxError:无效的JSON-LD语法; @context @type值必须是字符串。
我仔细阅读了文档,并说可以为节点类型定义多个类型,但不能为值对象定义多个类型。 documentation明确表示,在同一词典中使用@value和@type时,@ type关键字表示值类型。否则,@type关键字表示节点类型。 但是here是另一个例子,表明可能并非如此。
有人知道如何在@context中定义多个节点类型吗?
答案 0 :(得分:1)
您不能,因为您根本无法在上下文中定义节点类型。
从规范开始。在https://www.w3.org/TR/json-ld11/#context-definitions中,我们读到:
如果扩展的术语定义包含@type关键字,则其值必须为绝对IRI,紧凑型IRI,term,null或关键字@ id,@ json,@ none或@vocab中的一个。 / p>
此处不允许使用数组。因为上下文中扩展术语定义中的@type
用于指定所定义属性的值的类型。如提到的。在https://www.w3.org/TR/json-ld11/#typed-values中:
可以使用三种方式在JSON-LD中表示类型化的值:
- 在@context部分中定义术语时,使用@type关键字。
最后,让我们看看如果我们将示例更正为具有@type
的字符串值,示例将扩展为什么。
{
"@context": {
"some_property": {
"@id": "http://me.markus-lanthaler.com/",
"@type": "http://schema.org/Person"
}
},
"some_property": "value"
}
扩展到
[
{
"http://me.markus-lanthaler.com/": [
{
"@type": "http://schema.org/Person",
"@value": "value"
}
]
}
]
如您所见,您确实确实拥有@value
和@type
。