On 20/03/13 22:08, Niclas Hoyer wrote:
Thank you very much for the quick reply and the complete example!
Is it also possible to use SPARQL 1.1 UPDATE requests with this setup?
I don't think so.
If you update the base dataset directly (additional service in Fuseki),
the base data changes but the inference engine will not see that until a
restart.
If you update the inference model, the problem is that union graph is
read-only.
If it was a union default graph, you can update via the inference model.
If you update the dataset for the inference setup as a named graph, it
isn't the named graph of the base datasets.
Andy
I added the following to the service description:
fuseki:serviceUpdate "update" ;
fuseki:serviceReadWriteGraphStore "data" ;
and inserted some data into a named graph (e.g. "Example 2" from the
SPARQL 1.1 spec):
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX ns: <http://example.org/ns#>
INSERT DATA
{ GRAPH <http://example/bookStore> { <http://example/book1> ns:price 42 } }
I expected the triple to be visible in the default graph, but I get no
result for the following query:
PREFIX ns: <http://example.org/ns#>
SELECT ?x ?p WHERE { ?x ns:price ?p }
Is this intended? Maybe I misunderstood the meaning of a union default
graph.
Regards,
Niclas
Am 20.03.2013 22:43, schrieb Andy Seaborne:
On 20/03/13 21:21, Niclas Hoyer wrote:
Hi,
I try to get a TDB dataset with a union default graph and a reasoner to
work.
For a simple TDB dataset with a union default graph I used:
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
<#dataset> a tdb:DatasetTDB ;
tdb:location "ds" ;
tdb:unionDefaultGraph true .
For reasoning with TDB I used:
<#dataset> a ja:RDFDataset ;
ja:defaultGraph <#model> .
>
<#model> a ja:InfModel ;https://svn.apache.org/repos/asf/jena/site/trunk/
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
] .
<#tdbGraph> a tdb:GraphTDB ;
tdb:location "ds" .
Now I have no clue how to bring them together. The domain of
tdb:unionDefaultGraph is tdb:DatasetTDB, but the example with reasoning
uses ja:RDFDataset.
Is it even possible to use reasoning with a union default graph?
You don't need to bring the <#datasets> together.
<#dataset> a ja:RDFDataset ;
is fine - a general purpose, in-memory dataset to hold the inference
and be the target for the query.
You then need to define the base data.
<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "ds" ;
tdb:unionDefaultGraph true .
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#dataset> .
i.e. the TDB dataset is only there to hook the TDB graph into the system.
You'll need to use <#dataset> in the service.
Full example:
-------------------------------------
@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 tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
[] rdf:type fuseki:Server ;
fuseki:services (
<#service1>
) .
# Custom code.
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
# TDB
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
<#service1> rdf:type fuseki:Service ;
fuseki:name "inf" ; # http://host/inf
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:dataset <#dataset> ;
.
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> ;
.
<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
] .
<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
tdb:unionDefaultGraph true .
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbDataset> .
-------------------------------------
Regards,
Niclas