On 16/01/14 19:01, Ed Swing wrote:
Here's the write code block:

             Dataset dataset =
                 TDBFactory.createDataset(baseDir + "/" + projName);
             dataset.begin(ReadWrite.WRITE);
             Model defModel = dataset.getDefaultModel();
             defModel.setNsPrefix("", SemanticStoreService.BASE_URI + projName
                 + "/");
             OntModel project =
                 ModelFactory
                     .createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF);
             defModel.add(project);
             OntModel projMeta =
                 ModelFactory
                     .createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF);
             projMeta.setNsPrefix("", SemanticStoreService.BASE_URI);

projMeta is an in-memory graph

             dataset.addNamedModel("metadata", projMeta);

addNamedModel does not copy prefixes.

Model dbm1 = dataset.getNamedModel("metadata");
dbm1.add(projMeta) ;
dbm1.setNsPrefixes(projMeta) ;

Tested - works for me (are youusing an old version?)

             OntModel projOnt =
                 ModelFactory
                     .createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF);
             projOnt.setNsPrefix("", SemanticStoreService.BASE_URI + projName
                 + "/");
             dataset.addNamedModel("ontology", projOnt);
             dataset.commit();
             dataset.end();

It doesn't seem to set the NsPrefix even when I supposedly set it on the 
default model.

Where?

Here's the fragment where I get the model and print the namespace:

         Dataset dataset =
             dir.exists() ? TDBFactory.createDataset(directory) : null;
         Model model = null;
         dataset.begin(ReadWrite.WRITE);
         model =
             (modelName == null) ? dataset.getDefaultModel() : dataset
                 .getNamedModel(modelName);
         System.out.println("Read model " + projName + " " + modelName
             + " baseURI=" + model.getNsPrefixURI(""));

The model.getNsPrefixURI returns null for all three graphs (default, ontology, 
and metadata).

TDBFactory.createDataset() creates an in-memory TDB store that behaves exactly like the disk one.

Please can you provide complete, minimal and portable examples using that? thanks.

        Andy





-----Original Message-----
From: Andy Seaborne [mailto:[email protected]]
Sent: Thursday, January 16, 2014 1:48 PM
To: [email protected]
Subject: Re: Another Problem: can't set default graph

On 16/01/14 18:40, Ed Swing wrote:
I made the change below, and now I notice that the setNsPrefix() method doesn't seem to 
work. More specifically, when I later retrieve the stored model, 
getNsPrefix("") returns null.

Model.add does not copy prefixes.

You'll need to set them on the model for the default graph of the dataset.

        Andy


-----Original Message-----
From: Andy Seaborne [mailto:[email protected]]
Sent: Thursday, January 16, 2014 1:16 PM
To: [email protected]
Subject: Re: Another Problem: can't set default graph

On 16/01/14 17:55, Ed Swing wrote:
Onto another problem...

           File dir = new File(baseDir + "/" + projName);
           if (!dir.exists()) {
               dir.mkdirs();s
               Dataset dataset =
                   TDBFactory.createDataset(baseDir + "/" + projName);

The dataset now exists.

               dataset.begin(ReadWrite.WRITE);
               OntModel project =
                   ModelFactory
                       .createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF);
               model.setNsPrefix("", SemanticStoreService.BASE_URI + projName
                   + "/");
               dataset.setDefaultModel(project);

Same issue - a dataset in TDB is not something you flip graphs on - they have 
to be copied in and out because they are bytes on disk (+caching).

The default graph is already there.  You need to add to it.

dataset.getDefaultModel().add(project);


throws the following exception:
Exception in thread "main" java.lang.UnsupportedOperationException: Can't set 
default graph via GraphStore on a TDB-backed dataset
          at 
com.hp.hpl.jena.tdb.store.DatasetGraphTDB.setDefaultGraph(DatasetGraphTDB.java:314)
          at 
com.hp.hpl.jena.sparql.core.DatasetGraphTrackActive.setDefaultGraph(DatasetGraphTrackActive.java:115)
          at 
com.hp.hpl.jena.sparql.core.DatasetImpl.setDefaultModel(DatasetImpl.java:215)
          at
com.sas.store.service.SemanticStoreService.createProject(SemanticStore
Service.java:203)

I'm not sure what's going on here. How would you set the default graph of a 
newly created dataset? Note that this code is for the case when the dataset 
does not exist yet.

On a side note, it might be nice to add a method for 
TDBFactory.createDataset(File dir)...

Fore now, you can use:
TDBFactory.createDataset(dir.getAbsolutePath()) ;



Edward Swing
Applied Research Technologist
Vision Systems + Technology, Inc., a SAS Company
6021 University Boulevard * Suite 360 * Ellicott City * Maryland *
21043
Tel: 410.418.5555 Ext: 919 * Fax: 410.418.8580
Email: [email protected]<mailto:[email protected]>
Web: http://www.vsticorp.com<http://www.vsticorp.com/>









Reply via email to