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

Я хотел бы скопировать все данные из существующего репозитория Sesame в новый. Мне нужна миграция, чтобы использовать вывод 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, используя запросы аналогичной структуры.


person kurious    schedule 08.07.2015    source источник


Ответы (1)


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

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

Программно

Сначала откройте RepositoryConnnections в обоих репозиториях:

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

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

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

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

person Jeen Broekstra    schedule 08.07.2015
comment
Большое спасибо, Джин - person kurious; 09.07.2015
comment
Без проблем. Еще один совет: вместо того, чтобы благодарить меня в комментарии, вы должны проголосовать и/или принять ответы, которые вам помогли. См. что делать, когда кто-то отвечает из Раздел помощи SO - person Jeen Broekstra; 09.07.2015