【问题标题】:JSON-LD can't define multiple node types in @contextJSON-LD 不能在 @context 中定义多个节点类型
【发布时间】:2019-11-15 21:30:18
【问题描述】:

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 中定义多个节点类型吗?

【问题讨论】:

    标签: json-ld


    【解决方案1】:

    你不能,因为你根本无法在上下文中定义节点类型。

    正常启动。在https://www.w3.org/TR/json-ld11/#context-definitions 我们读到:

    如果扩展术语定义包含@type 关键字,其值必须是绝对IRI、紧凑IRI、术语、null 或关键字@id、@json、@none 或@vocab 之一。

    此处不允许使用数组。因为@type 在上下文中的扩展术语定义中用于指定已定义属性的值的类型。如前所述。在https://www.w3.org/TR/json-ld11/#typed-values:

    类型化的值可以用 JSON-LD 以三种方式表示:

    1. 在@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

    【讨论】:

    • 感谢您的回答。它有很大帮助。但是,我提到的最后一个问题呢?如果您查看我在帖子中的最后一个示例(最后一个 url。由于字符限制,我无法在此处发布),您会在扩展的表单中看到 typevalue 处于同一级别,因此 type 是值类型定义。但是,根据documentation(示例下方的绿色注释),值类型只能有一种类型,而不是我们示例中的两种。
    • @papazulu 是的,很有趣。如果我理解正确,那么最后一个示例可以作为框架文档。我这样的文件value pattern 可以有一个字符串列表作为它的@type
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多