Fuseki owl reasoner not working with TDB

半世苍凉 提交于 2019-12-23 23:24:31

问题


This is my configuration file

# 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 ;
.

when I run fuseki (2.3) I can see my data set which uses TDB (not in memeory) I can upload my rdf triple, and even when i close fuseki and re open it, the triples are there, but the reaoner is not working

this is my data

@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 .

when i do this query

select * where {
:i a ?e
}

I get just :A where i should have gotten :B and :C

whats wrong in my configuration please?


回答1:


I guess you might not load the configuration file correctly, when you run the fuseki. Did you explicitly ask fuseki to use your configuration file?

I have my fuseki running well with reasoning capability, by following the instruction in this tutorial (http://krr.cs.vu.nl/wp-content/uploads/2013/09/protege-fuseki-yasgui-manual.pdf). Check the page 3, and I hope you would solve your problem.




回答2:


This line

<#dataset> rdf:type      tdb:DatasetTDB ;

says it's TDB database but that isn't what is needed. You need a ja:RDFDataset to contain the inf graph that uses TDB as it's base data.

(needs testing)

<#dataset> rdf:type       ja:RDFDataset ;
    ja:defaultGraph       <#model_inf> ;
    .



回答3:


Not being familiar with the specifics of Fuseki, I'd bet you need to explicitly invoke an inference engine on an OWL or RDFS profile. Once that is completed you should see the entailments you want. OTOH, there is a common SPARQL query that will get the same entailed results:

SELECT ?e
WHERE {
   :i a ?cls .
   ?cls rdfs:subClassOf* ?e .
}

Or, more compactly using property paths:

SELECT ?e
WHERE {
   :i rdf:type/rdfs:subClassOf* ?e .
}


来源:https://stackoverflow.com/questions/36067247/fuseki-owl-reasoner-not-working-with-tdb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!