Fuseki owl 推理机不与 TDB 一起工作
Fuseki owl reasoner not working with TDB
这是我的配置文件
# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
## Fuseki Server configuration file.
@prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
[] rdf:type fuseki:Server ;
fuseki:services (
<#service1>
)
.
# TDB
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
<#service1> rdf:type fuseki:Service ;
fuseki:name "rs" ; # http://host:port/ds
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:serviceQuery "query" ; # SPARQL query service (alt name)
fuseki:serviceUpdate "update" ; # SPARQL update service
fuseki:serviceUpload "upload" ; # Non-SPARQL upload service
fuseki:serviceReadWriteGraphStore "data" ; # SPARQL Graph store protocol (read and write)
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ; # SPARQL Graph store protocol (read only)
fuseki:dataset <#dataset> ;
.
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "RS" ;
ja:defaultGraph <#model_inf> ;
.
<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>]
.
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#RSDataSet> .
<#RSDataSet> rdf:type tdb:DatasetTDB ;
tdb:location "RS" ;
tdb:unionDefaultGraph true ;
.
当我 运行 fuseki (2.3) 我可以看到使用 TDB 的数据集(不在内存中)我可以上传我的 rdf 三元组,甚至当我关闭 fuseki 并重新打开它,三元组在那里,但 reaoner 不工作
这是我的数据
@prefix : <http://example.org/rs#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
:A rdfs:subClassOf :B .
:B rdfs:subClassOf :C .
:i a :A .
当我执行此查询时
select * where {
:i a ?e
}
我只得到 :A
我应该得到 :B
和 :C
请问我的配置有什么问题吗?
不熟悉 Fuseki 的细节,我敢打赌您需要在 OWL 或 RDFS 配置文件上显式调用推理引擎。完成后,您应该会看到所需的蕴含。 OTOH,有一个常见的 SPARQL 查询将获得相同的结果:
SELECT ?e
WHERE {
:i a ?cls .
?cls rdfs:subClassOf* ?e .
}
或者,更紧凑地使用 属性 路径:
SELECT ?e
WHERE {
:i rdf:type/rdfs:subClassOf* ?e .
}
我猜你可能没有正确加载配置文件,当你 运行 fuseki.您是否明确要求 fuseki 使用您的配置文件?
按照本教程 (http://krr.cs.vu.nl/wp-content/uploads/2013/09/protege-fuseki-yasgui-manual.pdf) 中的说明,我的 fuseki 运行推理能力很好。查看第3页,希望能解决你的问题
这一行
<#dataset> rdf:type tdb:DatasetTDB ;
说它是 TDB 数据库,但这不是所需要的。您需要 ja:RDFDataset
来包含使用 TDB 作为基础数据的信息图。
(需要测试)
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> ;
.
这是我的配置文件
# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
## Fuseki Server configuration file.
@prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
[] rdf:type fuseki:Server ;
fuseki:services (
<#service1>
)
.
# TDB
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
<#service1> rdf:type fuseki:Service ;
fuseki:name "rs" ; # http://host:port/ds
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:serviceQuery "query" ; # SPARQL query service (alt name)
fuseki:serviceUpdate "update" ; # SPARQL update service
fuseki:serviceUpload "upload" ; # Non-SPARQL upload service
fuseki:serviceReadWriteGraphStore "data" ; # SPARQL Graph store protocol (read and write)
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ; # SPARQL Graph store protocol (read only)
fuseki:dataset <#dataset> ;
.
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "RS" ;
ja:defaultGraph <#model_inf> ;
.
<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>]
.
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#RSDataSet> .
<#RSDataSet> rdf:type tdb:DatasetTDB ;
tdb:location "RS" ;
tdb:unionDefaultGraph true ;
.
当我 运行 fuseki (2.3) 我可以看到使用 TDB 的数据集(不在内存中)我可以上传我的 rdf 三元组,甚至当我关闭 fuseki 并重新打开它,三元组在那里,但 reaoner 不工作
这是我的数据
@prefix : <http://example.org/rs#>
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
:A rdfs:subClassOf :B .
:B rdfs:subClassOf :C .
:i a :A .
当我执行此查询时
select * where {
:i a ?e
}
我只得到 :A
我应该得到 :B
和 :C
请问我的配置有什么问题吗?
不熟悉 Fuseki 的细节,我敢打赌您需要在 OWL 或 RDFS 配置文件上显式调用推理引擎。完成后,您应该会看到所需的蕴含。 OTOH,有一个常见的 SPARQL 查询将获得相同的结果:
SELECT ?e
WHERE {
:i a ?cls .
?cls rdfs:subClassOf* ?e .
}
或者,更紧凑地使用 属性 路径:
SELECT ?e
WHERE {
:i rdf:type/rdfs:subClassOf* ?e .
}
我猜你可能没有正确加载配置文件,当你 运行 fuseki.您是否明确要求 fuseki 使用您的配置文件?
按照本教程 (http://krr.cs.vu.nl/wp-content/uploads/2013/09/protege-fuseki-yasgui-manual.pdf) 中的说明,我的 fuseki 运行推理能力很好。查看第3页,希望能解决你的问题
这一行
<#dataset> rdf:type tdb:DatasetTDB ;
说它是 TDB 数据库,但这不是所需要的。您需要 ja:RDFDataset
来包含使用 TDB 作为基础数据的信息图。
(需要测试)
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> ;
.