Hello Dave, Thank you for your answer. However, I didn't figure out why it was not working.
You were right, I was meaning owl:TransitiveProperty. My first code fragment was using Model while the second piece of code was using OntModel. I was thinking that this 2 differents Model may have incidences on the inference engine. Updating the OntModelSpec to OWL_DL_MEM_RULE_**INF didn't change anything in the output file. I am able to see the infered type, but nothing about my transitive properties. See ontology.owl attached. Regards, Brice 2013/7/19 Dave Reynolds <[email protected]> > On 19/07/13 15:54, Brice Sommacal wrote: > >> Hello everyone, >> >> In the past, I was able to execute inference engine to retrieve transitive >> values like the following: >> >> // model intialisation >> Model typesModel = ModelFactory.**createDefaultModel(); >> typesModel.read(inStream, "RDF"); >> >> //function to run inference: >> public void applyInference(Model model) throws FileNotFoundException{ >> >> Model modelTemp = model; >> Reasoner reasoner = ReasonerRegistry.**getOWLMicroReasoner(); >> reasoner = reasoner.bindSchema(ev6Model); >> InfModel infmodel = ModelFactory.createInfModel(**reasoner, model); >> >> Model modelTemp2 = ModelFactory.**createDefaultModel(); >> Property prop21 = ev6Model.getProperty(ns+"#**parentsType"); >> for (StmtIterator sti = infmodel.listStatements(null, prop21, >> (RDFNode) >> null); >> sti.hasNext(); ) { >> Statement stmt = sti.nextStatement(); >> modelTemp2.add(stmt); >> } >> modelTemp.add(modelTemp2); >> } >> > > By "transitive" I assume you mean as in owl:TransitiveProperty? > > > Actually, I'm working on a other project which deal with OntModel like the >> following: >> >> public static OntModel readOntology(File ontoFile) throws >> FileNotFoundException >> { >> Model myModel = null; >> FileInputStream inStream = new FileInputStream(ontoFile); >> >> myModel = ModelFactory.**createDefaultModel(); >> myModel.read(inStream, ""); >> >> OntModel sourceModel = >> ModelFactory.**createOntologyModel(**OntModelSpec.OWL_MEM, myModel); >> >> return sourceModel; >> } >> >> I have 2 transitive properties in my model. When I make a call to the >> function which deal with inference, the transitive values are not >> returned. >> >> Here is how my inference engine is initialized: >> >> Reasoner reasoner = ReasonerRegistry.**getTransitiveReasoner(); >> reasoner = reasoner.bindSchema(srcModel); >> InfModel infmodel = ModelFactory.createInfModel(**reasoner, kbModel); >> > > Can't see how this code fragment relates to the above code fragment. I'll > assume that srcModel is the result of a call to readOntology. > > The problem is that the TransitiveReasoner only does transitive closure > (and reduction) of the the subClassOf/subPropertyOf hierarchies. Despite > the name it doesn't handle owl:TransitiveProperty. > > You want OWL_MICRO (or better). > > > I have tried several way to make it works, but I din't figure out yet: >> - Modify the inference engine intialization with Model instead of >> OntModel >> > > Should not make any difference. > > > - Modify the specification with OntModelSpec.OWL_DL_MEM_RULE_**INF >> instead >> of OntModelSpec.OWL_MEM >> > > In readOntology? That should work, though then you don't need the second > InfModel wrapper. > > > - Modify the reasonner from getTransitiveReasonner to getOwlMicro >> > > That should also work. > > I would start with the simplest standalone test which just creates an > OntModel and use OntModelSpec.OWL_MEM_MICRO_**RULE_INF. No separate > InfModel wrappers. > > If that works then you can repackage to separate out a readOntology > function however you wish. > > If it doesn't work then that suggests a problem with the ontology or the > test code. [Or a bug in the reasoner but if you have had the same case work > before then hopefully that's not the case.] > > Dave > >
