Настроить фусеки с TDB2 и OWL Reasoner
Новый для fuseki/jena здесь. Мне удалось заставить fuseki работать с OWLFBRuleReasoner, используя tdb1 без проблем, но не могу заставить его работать с tdb2 ( http://jena.apache.org/2016/tdb). Я не смог найти явный пример конфигурации, который использует TDB2 и OWLFBRuleReasoner, поэтому я просто преобразовал этот (это работает)
@prefix : <http://base/#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
# fuseki configuration to have OWL entailment
# this is the configuration on s-stf-gin (fuseki data folder is on c:\)
:service_tdb_all a fuseki:Service ;
rdfs:label "TDB gsip" ;
fuseki:dataset :tdb_dataset_readwrite ;
fuseki:name "gsip" ;
fuseki:serviceQuery "query" , "sparql" ;
fuseki:serviceReadGraphStore "get" ;
fuseki:serviceReadWriteGraphStore
"data" ;
fuseki:serviceUpdate "update" ;
fuseki:serviceUpload "upload" .
# above, remove data, update and upload in prod
:tdb_dataset_readwrite
a ja:RDFDataset;
rdfs:label "GSIP";
ja:defaultGraph <#model_inf> ;
tdb:location "c:\\fuseki/databases/gsip" .
<#model_inf> a ja:InfModel ;
ja:baseModel <#graph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
] .
<#graph> rdf:type tdb:GraphTDB ;
tdb:dataset :tdb_dataset_readwrite .
(этот работает нормально. Я тестировал со свойством owl:inverseOf)
в этот (это не работает)
@prefix : <http://base/#> .
@prefix tdb2: <http://jena.apache.org/2016/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
:service_tdb_all a fuseki:Service ;
fuseki:dataset :dataset ;
fuseki:name "gsip" ;
fuseki:serviceQuery "query" , "sparql" ;
fuseki:serviceReadGraphStore "get" ;
fuseki:serviceReadWriteGraphStore "data" ;
fuseki:serviceUpdate "update" ;
fuseki:serviceUpload "upload" .
:dataset a ja:RDFDataset ;
ja:defaultGraph <#model_inf> ;
tdb2:location "c:\\fuseki/databases/gsip"
.
<#model_inf> a ja:InfModel ;
ja:baseModel <#graph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
] .
<#graph> rdf:type tdb2:GraphTDB ; # also tried tdb2:GraphTDB2
tdb2:dataset :dataset .
Как видите, я просто заменяю tdb на tdb2 (пространства имен и все). Fuseki запускается и работает нормально, но вывод OWL не работает.
Кто-нибудь может указать мне на соответствующую документацию / пример? или, может быть, я совершенно не понял сделку TDB1 против TDB2.
Спасибо вам
РЕДАКТИРОВАТЬ: исправил мой файл конфигурации TDB2 (по-прежнему не работает).
2 ответа
Это моя работа:
@prefix : <http://base/#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix tdb2: <http://jena.apache.org/2016/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
:service_tdb_all a fuseki:Service ;
rdfs:label "TDB2 food" ;
fuseki:dataset :tdb_dataset_readwrite ;
fuseki:name "food" ;
fuseki:serviceQuery "query" , "sparql" ;
fuseki:serviceReadGraphStore "get" ;
fuseki:serviceReadWriteGraphStore
"data" ;
fuseki:serviceUpdate "update" ;
fuseki:serviceUpload "upload" .
:tdb_dataset_readwrite a ja:RDFDataset;
ja:defaultGraph :modelInf;
.
:modelInf a ja:InfModel;
ja:reasoner [ ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>] ;
#ja:reasoner [ ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
# ja:rulesFrom <file:///C:/Users/shaoj/Documents/IntelligentQA/apache-jena-fuseki-3.8.0/run/databases/rules.ttl> ] ;
ja:baseModel :gra ;
.
:gra a tdb2:GraphTDB;
tdb2:location "C:\\Users\\shaoj\\Documents\\IntelligentQA\\apache-jena-fuseki-3.8.0\\run/databases/food" ;
tdb2:unionDefaultGraph true ;
.
Следующие работы для меня:
@prefix : <http://base/#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
:service_tdb_all a fuseki:Service ;
rdfs:label "TDB [MyDatasetName]" ;
fuseki:dataset :inferred_dataset ;
fuseki:name "[MyDatasetName]" ;
fuseki:serviceQuery "query" , "sparql" ;
fuseki:serviceReadGraphStore "get" ;
fuseki:serviceReadWriteGraphStore
"data" ;
fuseki:serviceUpdate "update" ;
fuseki:serviceUpload "upload" .
:inferred_dataset a ja:RDFDataset ;
ja:defaultGraph :inference_model .
:inference_model a ja:InfModel ;
ja:baseModel :tdb_graph ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
] .
:tdb_graph a tdb:GraphTDB ;
tdb:dataset :tdb_dataset_readwrite .
:tdb_dataset_readwrite
a tdb:DatasetTDB ;
tdb:location "[MyDatasetLocationOnDisk]" .
Основные отличия от вашей версии - это отдельный набор данных без вывода (вместо зацикливания "Barry NL", как уже было замечено) и другое пространство имен для префикса tdb. Обратите внимание, что префиксы пространства имен можно выбирать (они не имеют семантического значения), и изменение префикса пространства имен не имеет значения, если оно указывает на тот же URL-адрес пространства имен.