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

Reply via email to