Скопируйте Сезам репозиторий в новый

Я хотел бы скопировать все данные из существующего хранилища Сезам в новое. Мне нужна миграция, чтобы я использовал вывод OWL в своем хранилище триплетов, что невозможно при использовании OWLIM в репозитории In Memory (тип моего существующего репозитория).

Каков наиболее эффективный способ скопировать все тройки из хранилища в новое?

ОБНОВЛЕНИЕ 1:

Мне любопытно понять, почему использование SPARQL INSERT не может быть правильным подходом. Я попробовал этот код в разделе обновления SPARQL нового репозитория:

PREFIX : <http://dbpedia.org/resource/>
INSERT{?s ?p ?o} 
WHERE 
{ 
SERVICE <http://my.ip.ad.here:8080/openrdf-workbench/repositories/rep_name>
{ 
?s ?p ?o 
} 
}

Я получаю следующую ошибку:

org.openrdf.query.UpdateExecutionException: org.openrdf.sail.SailException: org.openrdf.query.QueryEvaluationException:

Ошибка в запросе или данные не могут быть вставлены таким образом? Я вставил данные из DBpedia, используя запросы аналогичной структуры.

1 ответ

Решение

Вручную (верстак)

  1. Откройте репозиторий, из которого вы хотите скопировать.
  2. выберите "Экспорт".
  3. выберите подходящий формат экспорта ("TriG" или "BinaryRDF" - хороший выбор, так как они оба сохраняют контекстную информацию) и нажмите кнопку "Загрузить", чтобы сохранить экспорт данных на локальный диск.
  4. Откройте репозиторий, в который вы хотите скопировать.
  5. выберите "Добавить".
  6. выберите "выберите файл, содержащий данные RDF, которые вы хотите загрузить"
  7. Нажмите "Обзор", чтобы найти файл экспорта данных на локальном диске.
  8. Убедитесь, что "использовать базовый URI в качестве идентификатора контекста" не выбран.
  9. Хит "загрузить", и сидеть сложа руки.

Программный

Во-первых, открыть RepositoryConnnection для обоих репозиториев:

RepositoryConnection source = sourceRepo.getConnection();
RepositoryConnection target = targetRepo.getConnection();

Затем прочитайте все утверждения из source и сразу вставить в target:

target.add(source.getStatements(null, null, null, true)); 

Любой базовый метод должен прекрасно работать для любого хранилища размером до нескольких миллионов. Конечно, есть много более продвинутых методов для больших размеров.

Другие вопросы по тегам