[Pellet-users] Inference problem
Role Francois
francois.role at univ-paris5.fr
Mon Sep 24 09:54:34 UTC 2007
Hi,
Thanks for your previous reply.
I am now starting to write and run two simple swrl rules, using a slightly
modified version of Rulesexample.java (source and rules below).
I want the Reasoner to infer :
- that Luc is a person (given that he is a Boy = BoyRule) = it works
- that Jacques is Pierre's uncle (standard UncleRule) = it does not work
The call to "printPropertyValues( Pierre, uncle );" prints "Pierre
has parent(s): Paul" ??
There are also some "Consistency not" messages in the output, that worry me.
run:
.................................
2 Properties: 3 Individuals: 4 Strategy: RuleStrategy
[java] INFO [main] (ABox.java:1530) - ABox consistency for 0
individuals
[java] INFO [main] (ABox.java:1619) - Consistent: true Tree depth: 5
Tree
size: 16 Time: 47
[java] Pierre has parent(s): Paul
[java] INFO [main] (ABox.java:1532) - Consistency
not(http://localhost/ess
ai.owl#Person) for 0 individuals []
[java] INFO [main] (ABox.java:1619) - Consistent: true Tree depth: 1
Tree
size: 1 Time: 15
[java] INFO [main] (ABox.java:1532) - Consistency
http://localhost/essai.o
wl#Person for 0 individuals []
[java] INFO [main] (ABox.java:1619) - Consistent: true Tree depth: 4
Tree
size: 4 Time: 0
[java] INFO [main] (ABox.java:1532) - Consistency
not(http://localhost/ess
ai.owl#Person) for 4 individuals [http://localhost/essai.owl#Luc,
http://localho
st/essai.owl#Paul, http://localhost/essai.owl#Jacques,
http://localhost/essai.ow
l#Pierre]
[java] INFO [main] (ABox.java:1619) - Consistent: false Tree depth:
0 Tree
size: 16 Time: 16
[java] INFO [main] (ABox.java:1532) - Consistency
not(http://localhost/ess
ai.owl#Person) for 2 individuals [http://localhost/essai.owl#Luc,
http://localho
st/essai.owl#Paul]
[java] INFO [main] (ABox.java:1619) - Consistent: false Tree depth:
0 Tree
size: 16 Time: 31
[java] INFO [main] (ABox.java:1532) - Consistency
not(http://localhost/ess
ai.owl#Person) for 2 individuals [http://localhost/essai.owl#Jacques,
http://loc
alhost/essai.owl#Pierre]
[java] INFO [main] (ABox.java:1619) - Consistent: false Tree depth:
0 Tree
size: 16 Time: 0
[java] Person instances: Luc, Paul, Jacques, Pierre
JAVA CODE
===========
public class RulesExample {
public static void main(String[] args) {
String ont = "http://localhost/essai.owl";
OntModel model = ModelFactory.createOntologyModel(
PelletReasonerFactory.THE_SPEC, null ) ;
model.read( ont );
ObjectProperty uncle = model.getObjectProperty( ont + "#parent" );
OntClass Person = model.getOntClass( ont + "#Person" );
Individual Pierre = model.getIndividual( ont + "#Pierre" );
Individual Paul = model.getIndividual( ont + "#Paul" );
Individual Jacques = model.getIndividual( ont + "#Jacques" );
model.prepare();
printPropertyValues( Pierre, uncle ); // should display Jacques not OK
printInstances( Person); // should include Luc OK
}
SWRL FILE
==========
<!-- ******************************* Classes
********************************************* -->
<owl:Class rdf:about="#Person">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#parent" />
<owl:someValuesFrom rdf:resource="#Person" />
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:about="#Boy" />
<!-- ******************************* Properties
********************************************* -->
<owl:ObjectProperty rdf:about="#uncle" />
<owl:ObjectProperty rdf:about="#parent" />
<owl:ObjectProperty rdf:about="#brother" />
<!-- ******************************* Instances
********************************************* -->
<dl-safe:Person rdf:about="#Pierre">
<dl-safe:parent rdf:resource="#Paul" />
</dl-safe:Person>
<dl-safe:Person rdf:about="#Paul">
<dl-safe:brother rdf:resource="#Jacques" />
</dl-safe:Person>
<dl-safe:Person rdf:about="#Jacques" />
<dl-safe:Boy rdf:about="#Luc" />
<!-- So Jacques is Pierre's uncle -->
<!-- ******************************* Rules
********************************************* -->
<swrl:Variable rdf:about="#a" />
<swrl:Variable rdf:about="#b" />
<swrl:Variable rdf:about="#c" />
<swrl:Imp rdf:about="#UncleRule">
<swrl:head rdf:parseType="Collection">
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#uncle" />
<swrl:argument1 rdf:resource="#a" />
<swrl:argument2 rdf:resource="#c" />
</swrl:IndividualPropertyAtom>
</swrl:head>
<swrl:body rdf:parseType="Collection">
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#parent" />
<swrl:argument1 rdf:resource="#a" />
<swrl:argument2 rdf:resource="#b" />
</swrl:IndividualPropertyAtom>
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#brother" />
<swrl:argument1 rdf:resource="#b" />
<swrl:argument2 rdf:resource="#c" />
</swrl:IndividualPropertyAtom>
</swrl:body>
</swrl:Imp>
<!-- a boy is a person -->
<swrl:Imp rdf:about="#BoyRule">
<swrl:head rdf:parseType="Collection">
<swrl:ClassAtom>
<swrl:classPredicate rdf:resource="#Person" />
<swrl:argument1 rdf:resource="#a" />
</swrl:ClassAtom>
</swrl:head>
<swrl:body rdf:parseType="Collection">
<swrl:ClassAtom>
<swrl:classPredicate rdf:resource="#Boy" />
<swrl:argument1 rdf:resource="#a" />
</swrl:ClassAtom>
</swrl:body>
</swrl:Imp>
More information about the Pellet-users
mailing list