Удалить дополнительные параметры из фреймированного JSON-LD

#json #rdf #semantic-web #json-ld

#json #rdf #семантическая сеть #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 список, чтобы он содержал только идентификаторы:

 "children": [
    "2"
]
  

Я попытался добавить это в свой фрейм:

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

Но это работает не так, как я ожидаю.

Ответ №1:

Используйте флаги фрейминга: "@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);
  

Детская площадка: 1, 2, 3.