【问题标题】:Specifying type of list objects in the json-ld context在 json-ld 上下文中指定列表对象的类型
【发布时间】:2022-12-11 07:33:06
【问题描述】:

使用 JSON-LD,并尝试创建一个可以在主数据集外部的 @context

我试图指定列表中的所有元素都属于指定类型,大致如下:

{
    "@context": {
        "ex": "http://example.org/",
        "group": "ex:group",
        "members": {"@type": "ex:individual", "@id": "ex:member", "@container": "@set"}
    },
    "@type": "group",
    "@id": "ex:mygroup",
    "members": [
        {"name": "John"},
        {"name": "Jeff"},
        {"name": "Jane"}
    ]
}

但是,我无法让@type“坚持”,由此产生的 rdf 没有说明约翰是个人。

如果声明“内部”的主要部分,像这样:

{
    "@context": {
        "ex": "http://example.org/",
        "group": "ex:group",
        "members": {"@type": "ex:individual", "@id": "ex:member", "@container": "@set"}
    },
    "@type": "group",
    "@id": "ex:mygroup",
    "members": [
        {"name": "John", "@type": "ex:individual"},
        {"name": "Jeff", "@type": "ex:individual"},
        {"name": "Jane", "@type": "ex:individual"}
    ]
}

它有效,但我真的想避免更改 JSON 结构的主要部分。

明显的好处是我可以将 JSON-LD 上下文附加到现有接口,例如使用链接标头。

我错过了什么?

编辑:可能是我希望将来的功能如here 所讨论的那样。

【问题讨论】:

    标签: json-ld


    【解决方案1】:

    我相信这里对 json-ld 有一些误解。 每个对象都应该有类型和 ID。您可以重命名它们。 所以你可以这样做:

    {
      "@context": {
        "class": "@type",
        "Member": {
            "@id": "http://example.org/schema#Member",
            "@context": {
              "name": "@id"
            }
        },
        "members": {
          "@id": "http://example.org/schema#members",
          "@type": "@id",
          "@container": "@list"
        }
     
      },
      "members": [{
        "name": "Jhon",
        "class": "Member"
      }]
    }
    
    

    但是你无法避免类型定义?‍♂️它只是不能隐式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多