## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0

# Example of a data service with only SPARQL query on an 
# in-memory inference model.  Data is taken from a file
# when the data service is started.

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

## Service with only SPARQL query on an inference model.
## Inference model bbase data in TDB.

<#service1>  rdf:type fuseki:Service ;
    fuseki:name              "inf-mem" ;
    fuseki:serviceQuery      "sparql" ;          # SPARQL query service
    fuseki:dataset           <#dataset> ;
    .

# Dataset with only the default graph.
<#dataset> rdf:type       ja:RDFDataset ;
    ja:defaultGraph       <#model_inf> ;
     .

# The inference model
<#model_inf> a ja:InfModel ;
     ja:baseModel <#baseModel> ;
     ja:reasoner [
         ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
     ] .

# The base data.
<#baseModel> a ja:MemoryModel ;
    ja:content [ja:externalContent <file:Data/data.ttl> ] ;
    .
