JSON-LD不能在@context中定义多个节点类型
JSON-LD can't define multiple node types in @context
JSON-LD 类型的文档明确指出,您可以为一个节点定义多种类型。
https://www.w3.org/TR/json-ld11/#specifying-the-type
如果您在 JSON-LD playground 中打开上述 url 中的示例 #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 中定义多个节点类型吗?
你不能,因为你根本无法在上下文中定义节点类型。
正常启动。在 https://www.w3.org/TR/json-ld11/#context-definitions 中我们读到:
If the expanded term definition contains the @type keyword, its value MUST be an absolute IRI, a compact IRI, a term, null, or one of the keywords @id, @json, @none, or @vocab.
此处不允许使用数组。因为 @type
在上下文中的扩展术语定义中用于指定定义的值的类型 属性。如前所述,例如。在 https://www.w3.org/TR/json-ld11/#typed-values:
Typed values may be expressed in JSON-LD in three ways:
- By utilizing the @type keyword when defining a term within an @context section.
最后,让我们看看如果我们将您的示例更正为具有 @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
。
JSON-LD 类型的文档明确指出,您可以为一个节点定义多种类型。 https://www.w3.org/TR/json-ld11/#specifying-the-type 如果您在 JSON-LD playground 中打开上述 url 中的示例 #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 中定义多个节点类型吗?
你不能,因为你根本无法在上下文中定义节点类型。
正常启动。在 https://www.w3.org/TR/json-ld11/#context-definitions 中我们读到:
If the expanded term definition contains the @type keyword, its value MUST be an absolute IRI, a compact IRI, a term, null, or one of the keywords @id, @json, @none, or @vocab.
此处不允许使用数组。因为 @type
在上下文中的扩展术语定义中用于指定定义的值的类型 属性。如前所述,例如。在 https://www.w3.org/TR/json-ld11/#typed-values:
Typed values may be expressed in JSON-LD in three ways:
- By utilizing the @type keyword when defining a term within an @context section.
最后,让我们看看如果我们将您的示例更正为具有 @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
。