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