2015-07-08 13 views
1

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

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

UPDATE 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

вручную (Workbench)

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

Программным

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

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

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

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

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

+0

спасибо, Jeen – kurious

+0

Нет проблем. Еще один совет: вместо того, чтобы благодарить меня в комментарии, вы должны продвигать и/или принимать ответы, которые вам помогли. См. [Что делать, когда кто-то отвечает] (http://stackoverflow.com/help/someone-answers) из раздела [SO help] (http://stackoverflow.com/help) –