#ruby #rdf #semantic-web #json-ld #linked-data
#ruby #rdf #семантическая сеть #json-ld #связанные данные
Вопрос:
Я привыкаю к набору инструментов Ruby RDF JSON-LD, и в настоящее время я пытаюсь извлечь знания из простых файлов JSON, которые не содержат контекста JSON-LD. Поэтому мне нужен способ установить локально предоставляемый контекст при их загрузке.
Итак, что я делаю, это использую JSON::LD::API.toRdf
. Но, похоже, я не могу установить локальный контекст непосредственно в его интерфейсе. Как это можно сделать?
Ответ №1:
API JSON-LD (спецификация и Ruby) описывает expandContext
опцию. В Ruby это может принимать строку (интерпретируемую как URL), что-то, на что реагирует #read
(например, StringIO или File), Hash
Array
, или экземпляр JSON::LD::Context
.
Обычно, если вы хотите передать локально предоставляемый контекст, вы можете сделать это как хэш. Общий шаблон, который я использую, следующий:
context = JSON.parse(%({
"@context": {...}
}))
graph = RDF::Graph.new
JSON::LD::API.toRdf(input, context) { |statement| graph << statement}
Взгляните на документацию здесь или, не стесняйтесь, найдите меня на gitter.
Комментарии:
1. К сожалению, когда я делаю так, как вы описали, я получаю следующую ошибку при вызове
toRdf
:ArgumentError: wrong number of arguments (given 2, expected 1)
. Я использую самуюjson-ld
популярную версию gem 3.1.5.2. Мне удалось сделать это сейчас, но мне пришлось использовать
JSON::LD::API.toRdf(input, expandContext: context) do |statement|
, и контекст должен был быть определен непосредственно вcontext
переменной, а не вложен в"@context" => {…}
член. Я делаю что-то не так, потому что ваш описанный способ не сработал?3. Нет, я думаю, вы правы. Возможно, код должен искать
@context
и использовать это, а не контекст без ссылок. Здесь мы выходим за рамки спецификации, поэтому это полностью определяется библиотекой Ruby. Если у вас что-то все еще не работает, отправьте сообщение о проблеме по адресу github.com/ruby-rdf/json-ld/issues .