Я пытаюсь использовать 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);
Что я пробовал:
- Используя следующий метод, выводы 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 во время выполнения при добавлении новых триплетов? Является ли это возможным ? Я что-то упустил?