Hi Dave,

Thank you for your support.
Yesterday, I was not able to send a minimal example quickly (that's why I
have firstly been focused on the data).

My component read a set of XML files and create a OWL files (using Jena).
Then, we apply inference rules on it (to create inverse properties and so
far, transitive inference).

When making the minimal example, I have tried to avoid the read/write thing
from XML files and directly populate the model with 4 individuals. And,
transitive inference was working well.
=>So, the problem came from the data.

It was weird because when opening the OWL file within Protégé, everything
was well-displayed. Even when I was using a functionnality to see "inferred
properties values" (by making a right click on an individual) I was able to
see the transitive values.


In fact, the error was about a namespace problem when filling the 2
properties on which I want to run inbference. (see details below)




*Details:* When reading the XML file, we manage to complete the property of
allparents using

 tcuaInstance.addProperty(allParentsClassName, modelKB.createResource( "#"
+ getParentUid()));

The parent Resource was created in the modelKB. When outputing the model in
a file, the default namespace and xml:base properties were filled in with
the same namespace. That's why everything was well-displayed in Protégé.
However, I was expecting a similar behavior when using jena inference.

By replacing, the above line by the full URI of the parentResource, the
inference is working well.

 tcuaInstance.addProperty(allParentsClassName, modelKB.createResource(
ONTOLOGY_NAMESPACE + getParentUid()));




Thank you again for your support and the directions that you share to help
me resolving this use case,

BR,


Brice

2013/7/22 Dave Reynolds <[email protected]>

> Hi,
>
> That's not a complete, minimal example - there's not enough info there to
> create something we can test. There's nothing in that snippet that shows
> any transitive inference is possible since we can't see the 3 and 4 other
> individuals you are referring to and can't see what properties they have to
> start the inference.
>
> If you can create something more complete so we can see an minimal example
> then we might be able to help.
>
> One oddity which might be cut/paste issues in your email or might mean
> there's a namespace problem ...
>
> In parts of your example you show:
>
> <#TcClass.RBFParamDef>
>
> and in other parts
>
> <http://seamless.pco-**innovation.com/energy/common/**
> software/tcua#TcClass.**RBFParamDef<http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFParamDef>
> >
>
> Unless you have an explicit @base declaration in that Turtle file then
> those are two different resources.
>
> Dave
>
>
> On 22/07/13 15:12, Brice Sommacal wrote:
>
>> Hi again,
>>
>> The transitive properties are well-defined in my ontology:
>>
>>    <owl:ObjectProperty rdf:about="#allparents">
>>      <rdf:type rdf:resource="http://www.w3.**org/2002/07/owl#**
>> TransitiveProperty <http://www.w3.org/2002/07/owl#TransitiveProperty>
>> "/>
>>      <rdfs:range rdf:resource="#TCCLASS"/>
>>      <rdfs:label 
>> rdf:datatype="http://www.w3.**org/2001/XMLSchema#string<http://www.w3.org/2001/XMLSchema#string>
>> "
>>      >allparents</rdfs:label>
>>      <owl:inverseOf rdf:resource="#allchilds"/>
>>      <rdfs:domain rdf:resource="#TCCLASS"/>
>>      <rdfs:comment rdf:datatype="http://www.w3.**
>> org/2001/XMLSchema#string <http://www.w3.org/2001/XMLSchema#string>"
>>      >parentClassName</rdfs:**comment>
>>    </owl:ObjectProperty>
>>
>>    <owl:ObjectProperty rdf:ID="allchilds">
>>      <rdfs:range rdf:resource="#TCCLASS"/>
>>      <rdf:type rdf:resource="http://www.w3.**org/2002/07/owl#**
>> TransitiveProperty <http://www.w3.org/2002/07/owl#TransitiveProperty>
>> "/>
>>      <rdfs:domain rdf:resource="#TCCLASS"/>
>>      <rdfs:label 
>> rdf:datatype="http://www.w3.**org/2001/XMLSchema#string<http://www.w3.org/2001/XMLSchema#string>
>> "
>>      >allchilds</rdfs:label>
>>      <owl:inverseOf>
>>        <owl:ObjectProperty rdf:ID="allparents"/>
>>      </owl:inverseOf>
>>    </owl:ObjectProperty>
>>
>>
>> Here are extract from the infModel :
>>
>> <#TcClass.RBFParamDef>
>>        a       pco:BMIDE , owl:Thing , rdfs:Resource , _:b1 , pco:TCCLASS
>> ;
>>        pco:allchilds <
>> http://seamless.pco-**innovation.com/energy/common/**
>> software/tcua#TcClass.**RBFOutput<http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFOutput>
>> >
>> , <
>> http://seamless.pco-**innovation.com/energy/common/**
>> software/tcua#TcClass.**RBFExpression<http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFExpression>
>> >
>> ;
>>        pco:childClassName <
>> http://seamless.pco-**innovation.com/energy/common/**
>> software/tcua#TcClass.**RBFOutput<http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFOutput>
>> >
>> , <
>> http://seamless.pco-**innovation.com/energy/common/**
>> software/tcua#TcClass.**RBFExpression<http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFExpression>
>> >
>> ;
>>        owl:sameAs <#TcClass.RBFParamDef> .
>>
>> <
>> http://seamless.pco-**innovation.com/energy/common/**
>> software/tcua#TcClass.**RBFParamDef<http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFParamDef>
>>
>>>
>>>         a       pco:BMIDE , owl:Thing , rdfs:Resource , _:b1 ,
>> pco:TCCLASS ;
>>        pco:allparents <#TcClass.BusinessElement> ;
>>        pco:className "RBFParamDef" ;
>>        pco:custo "False" ;
>>        pco:description "" ;
>>        pco:isExportable "false"^^xsd:boolean ;
>>        pco:isUninheritable "false"^^xsd:boolean ;
>>        pco:isUninstantiable
>>                "false"^^xsd:boolean ;
>>        pco:parentClassName <#TcClass.BusinessElement> ;
>>        owl:sameAs <
>> http://seamless.pco-**innovation.com/energy/common/**
>> software/tcua#TcClass.**RBFParamDef<http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFParamDef>
>> >
>> .
>>
>>
>>
>> I expect 3 individuals in pco:allparents and 4 individuals in
>> pco:allchilds.
>>
>> Initially, pco:allchilds is populated from pco:childclassname.
>> Same for pco:allparents with pco:parentClassName.
>>
>> As you can see, the inferred type values are well retrived. But nothing
>> about the inference on transitive properties.
>>
>> Regards,
>>
>>
>> Brice
>>
>>
>>
>> 2013/7/22 Dave Reynolds <[email protected]>
>>
>>  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:dave.e.reynolds@gmail.****com <[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