On 04/04/18 11:56, Greg Albiston wrote:
Hi Andy,

I'm trying to use the TDB Java API so without Fuseki or command line.
The assembler is in a file passed to the TDB factory method.
Below is the example I was working from for reference 
(https://jena.apache.org/documentation/tdb/java_api.html):

String assemblerFile = "Store/tdb-assembler.ttl";
Dataset dataset = TDBFactory.assembleDataset(assemberFile);

That will look for TDB databases only.

You will need to use the general assembler.

(Dataset)AssemblerUtils.build("filename", "URI dataset inf graphs")

so the <URL of the assmembler file#dataset>
eassier;

<http://example#dataset> rdf:type       ja:RDFDataset ;
      ja:namedGraph       :my-model-inf1 ;
      ja:namedGraph       :my-model-inf2 .

and AssemblerUtils.build("filename", "http://example#dataset";)

which is code from

https://github.com/apache/jena/blob/master/jena-arq/src/main/java/org/apache/jena/sparql/core/assembler/AssemblerUtils.java

(I'm not sure what he official API way to do that is - that's what the commands and Fuseki uses via DatasetAssembler).

        Andy

Sorry for the confusion. I referred to Fuseki as there seem to be more examples 
which use assembler than for just TDB.
As you suggested I've added an RDFDataset to bring the models together but 
still no RDFS result.

Example:

<#dataset> rdf:type       ja:RDFDataset ;
     ja:namedGraph       :my-model-inf1 ;
     ja:namedGraph       :my-model-inf2 .

I can query the dataset for an asserted property but an inferred property isn't 
returned.
The test queries are successful when I use the Inference API approach to create 
a single InfModel so that shouldn't be the problem.

The other possible issue with the assembler content is loading the schema from 
file.
I've queried for properties contained in the schema and not in the data but 
they aren't showing either.
Deliberately entering an incorrect schema path gives no errors or warnings so 
it could be that the schema loading is silently failing.
The assembler loading throws syntax errors but nothing for the missing file.
Is there a way to confirm that the schema loads correctly?

Thanks,

Greg

-----Original Message-----
From: Andy Seaborne <a...@apache.org>
Sent: 04 April 2018 10:11
To: users@jena.apache.org
Subject: Re: TDB Assembly: Multiple Named Graphs with RDFS Inferencing

Hi Greg,

Just to check:
How are you running the server?
Is that assembler on the command line?

-----

When Fuseki starts up it looks for datasets by rdf:type.

In your assembler below there is one dataset:

  > #TDB dataset on disk.
  > :tdb-dataset rdf:type tdb:DatasetTDB ;
  >      tdb:location  "my_jena_tdb" .

and that is what Fuseki will find.

The rest of the assembler isn't connected to that.

You need two datasets - one to pull your graphs and inference together, and a 
subsidiary one to have the TDB storage.

Does this example help?

https://github.com/apache/jena/blob/master/jena-fuseki2/examples/service-inference-2.ttl

      Andy

On 03/04/18 15:14, Greg Albiston wrote:
Hello,

I'm trying to setup a TDB dataset that contains multiple named graphs which 
each use RDFS inferencing and a schema.
I've tried to follow the website documentation but there are several gaps on 
this topic.
For example, the RDFS section on 
https://jena.apache.org/documentation/tdb/assembler.html and the Inference 
section on 
https://jena.apache.org/documentation/fuseki2/fuseki-configuration.html don't 
seem to contain complete information.

The objective is that when using the Jena API a single Dataset object can be 
retrieved to execute queries against. The queries themselves will specify the 
graph to be selected.

I've tried a variant on the below which runs without error. The schema file and 
TDB folder are both located in the root of the application folder. However, a 
test query on the dataset for the named graph provides asserted results but not 
RDFS inferencing. I've confirmed through debugging that the assembly file is 
loaded.

Does a URI name need to be set for the inference model for referencing?
The below webpage has an example for Fuseki with persistent TDB and 
inferencing. It has a ja:RDFDataset that states the ja:defaultGraph as being 
the inference model. Is the same required for named graphs?
https://christinemdraper.wordpress.com/2017/04/09/getting-started-with
-rdf-sparql-jena-fuseki/

Any help would be much appreciated,

Greg

@prefix :      <http://example.org/my#> .
@prefix tdb:   <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .


[] ja:loadClass "org.apache.jena.tdb.TDB" .
tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
tdb:GraphTDB    rdfs:subClassOf  ja:Model      .

This isn't necessary nowadays - it's harmless.



#TDB dataset on disk.
:tdb-dataset rdf:type tdb:DatasetTDB ;
      tdb:location  "my_jena_tdb" .

#Create a RDFS Factory as re-used.
:rdfsFactory rdf:type ja:ReasonerFactory;
      ja:reasonerURL <http://jena.hpl.hp.com/2003/RDFSExptRuleReasoner>;
      ja:schema :myRDFS .

#RDFS Schema loaded as memory model.
:myRDFS rdf:type ja:MemoryModel ;
      ja:content [ja:externalContent <file:///my_schema.rdf>] .

#Specify named graph in the dataset.
:my-graph rdf:type tdb:GraphTDB ;
      tdb:dataset :tdb-dataset ;
      tdb:graphName <http://example.org#myGraph> .

#Inference model combining graph and reasoner.
:my-model-inf rdf:type ja:InfModel ;
      ja:baseModel :my-graph ;
      ja:reasoner :rdfsFactory.

Reply via email to