Рассуждения при добавлении новых троек в именованный граф в Jena Fuseki - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь использовать API Jena Fuseki для создания FusekiServer с использованием модели OWL, обернутой в Dataset.

Я хотел бы, чтобы выводы OWL происходили при добавлении новых триплетов к этому Dataset (с использованием SPARQL) при сохранении возможности создания именованных графиков.

В обоих моих следующих примерах модель открывается следующим образом:

final Model m = ModelFactory.createOntologyModel(OntModelSpec.OWL_LITE_MEM_RULES_INF);
m.read(SparqlOwl.class.getResourceAsStream("/test_schema.ttl"), null, FileUtils.langTurtle);
m.read(SparqlOwl.class.getResourceAsStream("/test_data.ttl"), null, FileUtils.langTurtle);

Что я пробовал:

  1. Используя следующий метод, выводы OWL выполняются при загрузке модели и при добавлении новых триплетов с помощью SPARQL. С другой стороны, невозможно создать новый именованный граф (если я попытаюсь это сделать, у меня появится ошибка, в которой говорится, что это действие не поддерживается: java.lang.UnsupportedOperationException: DatasetGraphOne.add(named graph), что я понимаю по способу создания Dataset.) .
final Dataset ds = DatasetFactory.wrap(m);
FusekiServer server = FusekiServer.create()
        .add("/ds", ds, true)
        .build();
server.start();
Используя следующий метод, реализации OWL выполняются при загрузке модели. Действительно, можно добавлять новые тройки в именованный граф или в «базовый» граф. С другой стороны, новые выводы, описанные и ожидаемые из-за модели OWL, не делаются при добавлении новых триплетов (независимо от того, добавляются ли они в базовый граф или в именованный граф).
final Dataset ds = DatasetFactory.create();
ds.setDefaultModel(m);
FusekiServer server = FusekiServer.create()
        .add("/ds", ds, true)
        .build();
server.start();

Два файла, загруженные в этот пример, представляют собой простую модель и некоторые отдельные примеры, а именно:

test_schema.ttl :

@prefix ex: <http://example.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://example.com> .


ex:Person  a  owl:Class .

ex:hasChild a owl:ObjectProperty ;
    rdfs:domain ex:Person ;
    rdfs:range ex:Person .

ex:hasParent a owl:ObjectProperty ;
    owl:inverseOf ex:hasChild .

test_data .ttl

@prefix ex: <http://example.com/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@base <http://example.com> .

ex:John a owl:NamedIndividual .

ex:Marie a ex:Person ;
         ex:hasChild ex:John .

Тройки, которые я вставляю, используя SPARQL, чтобы проверить, сделаны ли выводы, - это просто такие вещи, как:

ex:Alice ex:hasParent ex:Bob

, чтобы увидеть, понимают ли они оба тот факт, что они ex:Person.

Я видел Рассуждения с использованием Fuseki, TDB и именованных графиков? но вопрос в том, подробнее о Fuseki TDB и "ассемблерном" интерфейсе Fuseki. Я думаю, что проблема частично связана, но она не дает ответа на мою проблему (которая кажется более «элементарной»). Я также видел поток Сохранение именованных графов в TDB с jena-fuseki в списке рассылки Jena, который частично говорит об этой проблеме, но больше ориентирован на сохранение именованных графов в TDB.

Подводя итог: как создать конечную точку SPARQL с программным интерфейсом Jena Fuseki c API, позволяющим использовать базовый граф и концепции именованного графа, в то же время позволяя делать выводы OWL во время выполнения при добавлении новых триплетов? Является ли это возможным ? Я что-то упустил?

...