Как создать Jena Triple Store на основе существующего файла OWL с использованием Jena API, Fuseki и TDB?

В настоящее время я работаю над проектом, в котором есть исходный файл .owl, содержащий базовую схему для нашей онтологии. Мы загружаем этот файл с помощью Jena API и выполняем над ним различные манипуляции, например, добавляем классы онтологий и индивидуумов.

Мы стремимся перенести систему на тройное хранилище, что означает, что вместо постоянного чтения и записи файлов .owl мы хотим один раз загрузить исходный файл .owl, а затем выполнять дальнейшие операции на сервере.

Я не совсем понял концепции, объясняемые документацией Jena, потому что они, кажется, расходятся во всех направлениях; однако я понял, что для этого мы должны использовать встроенную Fuseki и Jena TDB. Я попробовал следующий код (параметр OntModel в данном случае содержит схему нашей онтологии):

public Store(OntModel model) {
    Dataset ds = DatasetFactory.assemble(model);
    File dsDir = new File(ClassLoader.getSystemClassLoader().getResource("ds/")
            .getFile());

    ds.begin(ReadWrite.WRITE);

    server = FusekiServer.create().add(dsDir.getAbsolutePath(), ds).build();
}

Это дает мне следующую ошибку: org.apache.jena.sparql.ARQException: No root found for type <http://jena.hpl.hp.com/2005/11/Assembler#RDFDataset>. Пожалуйста, предоставьте мне несколько примеров использования.


person vladek    schedule 01.08.2018    source источник


Ответы (1)


DatasetFactory.assemble означает создание новой модели на основе описания, которое также содержится в RDF (в Йене они называются ассемблерами).

Если вам нужен сервер Fuseki, запустите его и используйте пользовательский интерфейс для создания набора данных и загрузки файла.

OR

Чтобы загрузить данные:

Создайте и загрузите набор данных TDB с помощью командной строки tdbloader в каталог "DIRECTORY_NAME". Это нужно сделать только один раз.

Чтобы запускать сервер каждый раз:

Dataset ds = TDBFactory.createDataset("DIRECTORY_NAME");
FusekiServer server = FusekiServer.create().add("/myName", ds).build();
server.start();

а интерфейс HTTP SPARQL набора данных (программный) доступен по адресу http://localhost:3030/myName.

Если вам нужен пользовательский интерфейс запросов, используйте полный сервер Fuseki.

person AndyS    schedule 01.08.2018
comment
Мне нужен тройной магазин, но только локально. Нужно ли мне по-прежнему использовать Fuseki? Есть ли способ использовать TDB без? - person vladek; 01.08.2018
comment
Используйте набор данных ds напрямую (с транзакциями — см. Txn). - person AndyS; 01.08.2018
comment
Я все еще не могу загрузить свой файл. Давайте забудем об этом на секунду: у меня есть OntModel, который содержит все тройки, и я хочу, чтобы все эти тройки были в моем хранилище троек. Как мне это сделать? Пожалуйста, приведите явный пример. - person vladek; 02.08.2018
comment
Внутрипроцессное тройное хранилище — это класс Dataset. См. Фабрика наборов данных. - person AndyS; 02.08.2018