[Pellet-users] Detaching Pellet model from a base model

Todor Dimitrov todor.dimitrov at stud.uni-due.de
Fri Jul 25 10:19:47 UTC 2008


Hi Evren,

the following code works also fine for me, but I get the  
OutOfMemoryError:

/**
  * @author Todor Dimitrov (todor.dimitrov at stud.uni-due.de)
  * @version Jun 23, 2008 3:26:02 PM
  */
public class TestJenaPellet {

	/** The base URI for the domain model */
	public static final String MODEL_URI = "http://www.owl-ontologies.com/domain-ontology.owl# 
";

	/** The base URI for the instances model */
	public static final String INSTANCES_URI = "http://www.owl-ontologies.com/test-ontology.owl# 
";

	/** Prefix for all SPAQL queries */
	public static final String SPARQL_PREFIX = "PREFIX domain:   <" +  
MODEL_URI
			+ ">\n"
			+ "PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"
			+ "PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>\n"
			+ "PREFIX owl:	 <http://www.w3.org/2002/07/owl#>\n"
			+ "PREFIX xsd:	 <http://www.w3.org/2001/XMLSchema#>\n";

	static {
		final OntDocumentManager manager = OntDocumentManager.getInstance();
		final String modelUri = MODEL_URI.substring(0, MODEL_URI
				.lastIndexOf("#"));
		try {
			manager.addAltEntry(modelUri, TestJenaPellet.class.getResource(
					"domain-ontology.owl").toString());
		} catch (Exception ex) {
			throw new RuntimeException(ex);
		}
	}

	/**
	 * Retrieves the pellet model
	 *
	 * @return the non-null model
	 */
	private static OntModel getPelletModel() {
		return  
ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC);
	}

	/**
	 * Retrieves the base model
	 *
	 * @return the non-null base model
	 */
	private static OntModel getBaseModel() {
		final OntModel ontModel = ModelFactory
				.createOntologyModel(OntModelSpec.OWL_DL_MEM);
		final String modelUri = MODEL_URI.substring(0, MODEL_URI
				.lastIndexOf("#"));
		final String instanceUri = INSTANCES_URI.substring(0, INSTANCES_URI
				.lastIndexOf("#"));
		final Ontology ontology = ontModel.createOntology(instanceUri);
		ontology.addImport(ontModel.createResource(modelUri));
		ontModel.loadImports();
		return ontModel;
	}

	/**
	 * Executes SPARQL queries
	 */
	@Test
	public void testQueries() throws Exception {
		final OntModel model = getBaseModel();
		final String queryString = "select ?room where {?room rdf:type  
domain:Room.}";
		final Set<Individual> rooms = new HashSet<Individual>();
		for (int i = 0; i < 10000; i++) {
			rooms.clear();
			final OntModel pelletModel = getPelletModel();
			pelletModel.addSubModel(model);
			final QueryExecution qe = QueryExecutionFactory.create(
					SPARQL_PREFIX + queryString, pelletModel);
			try {
				// Execute the query and obtain results
				final ResultSet result = qe.execSelect();
				while (result.hasNext()) {
					final QuerySolution solution = result.nextSolution();
					final RDFNode node = solution.get("room");
					final Individual room = model.getIndividual(node.asNode()
							.getURI());
					rooms.add(room);
				}
			} finally {
				// Important - free up resources used running the query
				qe.close();
			}
			System.out.println("Iteration " + (i + 1) + " :: number of rooms: "
					+ rooms.size());
			pelletModel.removeSubModel(model, false);
			pelletModel.close();
		}
	}
}

I'll try to send another example with the previously discussed behavior!

Best regards,

Todor


On 24.07.2008, at 20:50, Evren Sirin wrote:

> I was not able to reproduce this problem with the given code  
> snippet. Are there any additional steps you are doing? Can you  
> provide a complete program that demonstrates the problem?
>
> Thanks,
> Evren
>
> On 7/16/08 12:16 PM, Todor Dimitrov wrote:
>> Hi everybody,
>>
>> is there a possibility of detaching a Pellet model from its base  
>> model.
>> What I have tried is to add the base model as a sub-model and later  
>> on to
>> remove it. The problem is though that whenever I call close() on the
>> Pellet model, the base model also gets closed. Here is the example  
>> code:
>>
>> ...
>> m_pelletModel = ModelFactory.
>> createOntologyModel(PelletReasonerFactory.THE_SPEC);
>> m_pelletModel.addSubModel(m_baseModel);
>> ...
>>
>> ...
>> m_pelletModel.removeSubModel(m_baseModel, false);
>> m_pelletModel.close();
>> ...
>>
>> If I then call for example:
>>
>> ...
>> final OntClass ontClass = m_baseModel.getOntClass(classUri);
>> final Individual individual = ontClass
>>                                .createIndividual(instanceUri);
>> ...
>>
>> I get the following exception:
>>
>> Caused by: com.hp.hpl.jena.shared.ClosedException: already closed
>>        at  
>> com.hp.hpl.jena.graph.impl.GraphBase.checkOpen(GraphBase.java:62)
>>        at com.hp.hpl.jena.graph.impl.GraphBase.find(GraphBase.java: 
>> 239)
>>        at
>> org 
>> .mindswap 
>> .pellet 
>> .jena.DisjointMultiUnion.graphBaseFind(DisjointMultiUnion.java:125)
>>        at com.hp.hpl.jena.graph.impl.GraphBase.find(GraphBase.java: 
>> 240)
>>        at
>> com.hp.hpl.jena.graph.impl.GraphBase.graphBaseFind(GraphBase.java: 
>> 260)
>>        at com.hp.hpl.jena.graph.impl.GraphBase.find(GraphBase.java: 
>> 257)
>>        at  
>> org.mindswap.pellet.jena.OWLLoader.hasObject(OWLLoader.java:396)
>>        at  
>> org.mindswap.pellet.jena.OWLLoader.node2term(OWLLoader.java:657)
>>        at
>> org 
>> .mindswap 
>> .pellet 
>> .jena.DisjointMultiUnion.addABoxChange(DisjointMultiUnion.java:446)
>>        at
>> org 
>> .mindswap 
>> .pellet 
>> .jena.DisjointMultiUnion.notifyAddTriple(DisjointMultiUnion.java:172)
>>        at
>> com 
>> .hp 
>> .hpl 
>> .jena 
>> .graph 
>> .impl.SimpleEventManager.notifyAddTriple(SimpleEventManager.java:60)
>>        at  
>> com.hp.hpl.jena.graph.impl.GraphBase.notifyAdd(GraphBase.java:133)
>>        at com.hp.hpl.jena.graph.impl.GraphBase.add(GraphBase.java: 
>> 200)
>>        at
>> com.hp.hpl.jena.graph.compose.MultiUnion.performAdd(MultiUnion.java: 
>> 116)
>>        at com.hp.hpl.jena.graph.impl.GraphBase.add(GraphBase.java: 
>> 199)
>>        at com.hp.hpl.jena.rdf.model.impl.ModelCom.add(ModelCom.java: 
>> 939)
>>        at
>> com 
>> .hp 
>> .hpl.jena.rdf.model.impl.ResourceImpl.addProperty(ResourceImpl.java: 
>> 245)
>>        at
>> com 
>> .hp 
>> .hpl 
>> .jena 
>> .ontology.impl.OntModelImpl.getResourceWithType(OntModelImpl.java: 
>> 2963)
>>        at
>> com 
>> .hp 
>> .hpl 
>> .jena 
>> .ontology.impl.OntModelImpl.createOntResource(OntModelImpl.java:1836)
>>        at
>> com 
>> .hp 
>> .hpl 
>> .jena.ontology.impl.OntModelImpl.createIndividual(OntModelImpl.java: 
>> 1137)
>>        at
>> com 
>> .hp 
>> .hpl 
>> .jena.ontology.impl.OntClassImpl.createIndividual(OntClassImpl.java: 
>> 679)
>>
>>
>> Any clues on what I might be doing wrong?
>>
>>
>> Thanks in advance,
>>
>> Todor
>>
>>
>> _______________________________________________
>> Pellet-users mailing list
>> Pellet-users at lists.owldl.com
>> http://lists.owldl.com/mailman/listinfo/pellet-users
>> _______________________________________________
>>
>> Sponsored by Clark & Parsia, LLC http://clarkparsia.com/
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.owldl.com/pipermail/pellet-users/attachments/20080725/56a7e0cb/attachment-0001.htm 


More information about the Pellet-users mailing list