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

Remove extra parameters from framed JSON-LD

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

[
  {
    "@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"
}

但它并没有像我预期的那样工作。

使用framing flags"@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}
  }
}

但也许您只需要 compaction

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

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

游乐场:1, 2, 3.