String modelName = args[0];
Dataset dataset = Database.getDataset();
(Database.getDataset()??)
David -
Is the database empyy to start with?
Is the model name previously unused?
Andy
On 09/05/13 15:16, David Jordan wrote:
Andy,
I have included the complete program below. My code seems to be read only. It
works with a model stored in non-inferenced form. But I have another model that
I have pre-inferenced and stored, pre-inferenced using OWL_MEM_MICRO_RULE_INF
(if that is relevant). In this second case, I get this exception when I call
createOntologyModel.
So there are only two lines in the transaction before I get the exception
TDBException: Allocation attempt on NodeTableReadonly
Model model = dataset.getNamedModel(modelName);
OntModel omodel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM,
model);
The variable omodel is a transient model. Does passing the stored model
referenced by the variable model try to perform an update, in particular in the
case where that model has been pre-inferenced?
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.ontology.OntResource;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.query.ReadWrite;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
public class ListClassesAndNumInstances {
public static void main(String[] args) {
String modelName = args[0];
Dataset dataset = Database.getDataset();
try {
dataset.begin(ReadWrite.READ);
Model model = dataset.getNamedModel(modelName);
OntModel omodel =
ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM, model);
ExtendedIterator<OntClass> classes =
omodel.listClasses();
int totalClasses = 0;
int totalInstances = 0;
while( classes.hasNext() ){
OntClass oclass = classes.next();
totalClasses++;
String cname = oclass.getURI();
int cnt = 0;
ExtendedIterator<OntResource> instances =
(ExtendedIterator<OntResource>) oclass.listInstances();
while( instances.hasNext() ){
OntResource resource = instances.next();
cnt++;
}
totalInstances += cnt;
System.out.print(cname);
System.out.print(",");
System.out.println(cnt);
}
System.out.print("Total classes: ");
System.out.println(totalClasses);
System.out.print("Total instances: ");
System.out.println(totalInstances);
} finally {
dataset.end();
}
}
}
-----Original Message-----
From: Andy Seaborne [mailto:[email protected]]
Sent: Thursday, May 09, 2013 5:14 AM
To: [email protected]
Subject: Re: TDBException: Allocation attempt on NodeTableReadonly
On 08/05/13 21:02, David Jordan wrote:
What is the typical cause for the following exception?
Some kind of write action inside a read transaction. Read transactions really are
"read only" and it's enforced.
Here, it looks like it's the setNsPrefix of a prefix. That's fine if the profix
already exists so it does not in this case.
Do you have a complete, minimal example? TDBFactory has a method to make an in-memory
dataset that behaves exactly liek a disk-backed one (it uses a crude "RAM
disk"). Good for testing and portable examples.
Andy
[java] Exception in thread "main" com.hp.hpl.jena.tdb.TDBException:
Allocation attempt on NodeTableReadonly
[java] at
com.hp.hpl.jena.tdb.nodetable.NodeTableReadonly.getAllocateNodeId(NodeTableReadonly.java:37)
[java] at
com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete.addRow(NodeTupleTableConcrete.java:84)
[java] at
com.hp.hpl.jena.tdb.store.DatasetPrefixesTDB.insertPrefix(DatasetPrefixesTDB.java:122)
[java] at
com.hp.hpl.jena.sparql.graph.GraphPrefixesProjection.set(GraphPrefixesProjection.java:84)
[java] at
com.hp.hpl.jena.shared.impl.PrefixMappingImpl.setNsPrefix(PrefixMappingImpl.java:70)
[java] at
com.hp.hpl.jena.graph.compose.PolyadicPrefixMappingImpl.setNsPrefix(PolyadicPrefixMappingImpl.java:52)
[java] at
com.hp.hpl.jena.rdf.model.impl.ModelCom.setNsPrefix(ModelCom.java:975)
[java] at
com.hp.hpl.jena.ontology.impl.OntModelImpl.<init>(OntModelImpl.java:159)
[java] at
com.hp.hpl.jena.ontology.impl.OntModelImpl.<init>(OntModelImpl.java:123)
[java] at
com.hp.hpl.jena.rdf.model.ModelFactory.createOntologyModel(ModelFactory.java:370)
[java] at
com.sas.ta.om.ListClassesAndNumInstances.main(ListClassesAndNumInstances.java:26)
David Jordan
Senior Software Developer
SAS Institute Inc.
Health & Life Sciences, Research & Development Bldg R ▪ Office 4467
600 Research Drive ▪ Cary, NC 27513
Tel: 919 531 1233 ▪ [email protected]<mailto:[email protected]>
www.sas.com<http://www.sas.com/>
SAS® … THE POWER TO KNOW®