Hi Brice,

Using Models with an explicit reasoner or an OntModel with a suitable OntModelSpec should result in exactly the same inferences.

This list doesn't accept attachments. The thing to do is to cut your ontology down a minimal complete test case with you then either post inline or use a pastebin type service.

Cutting the ontology down to a test case may reveal the answer anyway :)

Dave

On 22/07/13 14:29, Brice Sommacal wrote:
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]
<mailto:[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