从框架JSON-LD中删除额外的参数

问题描述 投票:0回答:2

因此,让我们考虑以下从数据库获取的数据:

[
  {
    "@id": "http://example.com/1",
    "http://example.com/label": "Parent",
    "http://example.com/status": "Active",
    "http://example.com/children": [
      {
        "@id": "http://example.com/2"
      }
    ]
  },
  {
    "@id": "http://example.com/2",
    "http://example.com/label": "Child",
    "http://example.com/status": "Active"
  }
]

还有框架:

{
  "@context": {
    "@base": "http://example.com/",
    "@vocab": "http://example.com/"
  },
  "@graph": {
    "status":{}
  }
}

结果将如下所示:

{
  "@context": {
    "@base": "http://example.com/",
    "@vocab": "http://example.com/"
  },
  "@graph": [
    {
      "@id": "1",
      "children": {
        "@id": "2",
        "label": "Child",
        "status": "Active"
      },
      "label": "Parent",
      "status": "Active"
    },
    {
      "@id": "2",
      "label": "Child",
      "status": "Active"
    }
  ]
}

正如您在第一个对象中看到的,在

children
部分中,除了 id 之外,我还获得了一些额外的参数。

有没有办法可以简化

children
列表以仅包含 id:

"children": [
    "2"
]

我尝试将其添加到我的框架中:

"children": {
  "@id": "http://example.com/children",
  "@type": "@id"
}

但是它并没有像我想象的那样工作。

json rdf semantic-web json-ld
2个回答
2
投票

使用框架标志

"@embed": "@never"
"@explicit": true

{
  "@context": {
    "@base": "http://example.com/",
    "@vocab": "http://example.com/"
  },
  "@graph": {
    "status": {},
    "@embed": "@never"
  }
}

{
  "@context": {
    "@base": "http://example.com/",
    "@vocab": "http://example.com/"
  },
  "@graph": {
    "status": {},
    "children": {"@explicit": true, "@omitDefault": true}
  }
}

但也许您需要的只是压缩

如果您不想压缩数组,请切换相应的选项。在 JSONLD-Java 中:

final JsonLdOptions options = new JsonLdOptions();
options.setCompactArrays(false);

游乐场:123


0
投票

有了这个框架

    {
  "@context": {
    "@base": "http://example.com/",
    "@vocab": "http://example.com/",
    "children": {"@type": "@id"}
  },
  "@graph": {
    "status":{},
    "children": {
        "@embed": "@never"
    }
  }
}

这就是结果

{
  "@context": {
    "@base": "http://example.com/",
    "@vocab": "http://example.com/",
    "children": {
      "@type": "@id"
    }
  },
  "@graph": [
    {
      "@id": "1",
      "children": "2",
      "label": "Parent",
      "status": "Active"
    },
    {
      "@id": "2",
      "children": null,
      "label": "Child",
      "status": "Active"
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.