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
"/>
<rdfs:range rdf:resource="#TCCLASS"/>
<rdfs:label rdf:datatype="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"
>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
"/>
<rdfs:domain rdf:resource="#TCCLASS"/>
<rdfs:label rdf:datatype="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.RBFExpression>
;
pco:childClassName <
http://seamless.pco-innovation.com/energy/common/software/tcua#TcClass.RBFOutput>
, <
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
>
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>
.
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
>>
>>
>>
>