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);
            dataset.addNamedModel("metadata", projMeta);
            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. 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).

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