Скопируйте Сезам репозиторий в новый
Я хотел бы скопировать все данные из существующего хранилища Сезам в новое. Мне нужна миграция, чтобы я использовал вывод 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 ответ
Вручную (верстак)
- Откройте репозиторий, из которого вы хотите скопировать.
- выберите "Экспорт".
- выберите подходящий формат экспорта ("TriG" или "BinaryRDF" - хороший выбор, так как они оба сохраняют контекстную информацию) и нажмите кнопку "Загрузить", чтобы сохранить экспорт данных на локальный диск.
- Откройте репозиторий, в который вы хотите скопировать.
- выберите "Добавить".
- выберите "выберите файл, содержащий данные RDF, которые вы хотите загрузить"
- Нажмите "Обзор", чтобы найти файл экспорта данных на локальном диске.
- Убедитесь, что "использовать базовый URI в качестве идентификатора контекста" не выбран.
- Хит "загрузить", и сидеть сложа руки.
Программный
Во-первых, открыть RepositoryConnnection
для обоих репозиториев:
RepositoryConnection source = sourceRepo.getConnection();
RepositoryConnection target = targetRepo.getConnection();
Затем прочитайте все утверждения из source
и сразу вставить в target
:
target.add(source.getStatements(null, null, null, true));
Любой базовый метод должен прекрасно работать для любого хранилища размером до нескольких миллионов. Конечно, есть много более продвинутых методов для больших размеров.