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

Reply via email to