JSON-LD: проблема с созданием троек без IRI в качестве @id в документе json

Я использую https://github.com/jsonld-java/jsonld-java для создание троек из документа JSON. Я новичок в json-ld, и мне было интересно, есть ли способ генерировать триплеты с @id, являющимся литералом, или для @id требуется IRI?

Пример ввода Json:

[
  {
"@context": {
  "@vocab": "http://schema.org/",
  "@base": "test.com"
},
"@graph": [
  {
    "@type": [
      "Person",
      "Entity"
    ],
    "@id": "abcdef",
    "personName": "David"
  }
  ]
 }
]

Фрагмент кода:

JsonLdProcessor.toRDF(obj, options)

для параметров я использую следующую конфигурацию JsonLd Options

this.format = "application/nquads"

Приведенный выше документ не создает троек. Когда я изменяю поле @id в вышеуказанном документе json на "@id": "http://abcdef", он генерирует следующие тройки.

<http://abcdef> <http://schema.org/personName> "David" _:b0 .

<http://abcdef> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Entity> _:b0 .

<http://abcdef> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person> _:b0 .

Любые указатели или предложения были бы замечательными.


person Sathibhu    schedule 17.02.2015    source источник


Ответы (1)


Поскольку вы говорите о NQuad, предметом всегда должен быть либо IRI, либо BNode. Поскольку моделью данных для JSON-LD является RDF, это более широко применимо к значениям @id.

Однако можно указать @id, используя только строку, которая будет рассматриваться как компонент пути в зависимости от местоположения документа или @base в контексте. Обратите внимание, что эта форма IRI называется относительным IRI, поэтому существуют синтаксические ограничения, основанные на спецификации URI/IRI. Как правило, JSON-LD это не волнует, и он с радостью создаст недопустимый IRI. Но, если нет базы документов, он молча отбрасывает тематические узлы.

Вы используете @base в своем контексте, но это не абсолютный IRI, поэтому возникает ошибка. Вы можете превратить его в абсолютный IRI, используя что-то вроде http://test.com/ (обратите внимание на косую черту в конце). Это может быть больше, что вы ищете.

Также хорошо попробовать примеры на площадке JSON-LD.

person Gregg Kellogg    schedule 17.02.2015
comment
Идеальный. Большое спасибо за ваш ответ. По замыслу @ base в контексте использует URN вместо URI во всех документах json. Я попытался переопределить @base с помощью новых JsonLdOptions(test.com/). Параметр jsonLd не переопределяет базу @, доступную в документах json. Вы знаете, как поступить с этим? - person Sathibhu; 18.02.2015
comment
Если вы можете изменить источник, то. Вы можете добавить контекст с новой @base. В противном случае нет реального способа изменить способ генерации IRI. - person Gregg Kellogg; 19.02.2015