Re: Inferring Properties based on Types

Thanks for pointing out my error in asserting that it wasn't possible  
to express Tim's rule in OWL 1.1.

Now you have pointed out the basic trick, I wonder why the set of  
axioms for expressing this rule is so complex. In particular, why do  
we need it to be the case that manman(x,x) <=> Man(x) -- wouldn't it  
be enough that Man(x) => manman(x,x)? We could also do without  
reflexivity -- we could simply use an existential restriction to  
force the existence of *some* manman relation and then use (sibling  
manman InverseObjectProperty(manman)) as the role chain implying  
brother. This would give:

SubClassOf(Man ObjectExists(manman Thing))
SubObjectPropertyOf(SubObjectPropertyChain(sibling manman  
InverseObjectProperty(manman)) brother)

Regards,
Ian


On 2 Oct 2007, at 08:52, Michael Schneider wrote:

> Hi, again!
>
> I wrote on October 01, 2007:
>
>> Many thanks again, Evren, for re-investigating!
>>
>> So I attach below a demo ontology, which exactly consists of
>> the five axioms
>> I gave in the beginning. Additionally, it contains the
>> following assertions:
>>
>>    * :alice a owl:Thing .
>>    * :bob a :Man .
>>    * :alice :sibling :bob .
>>
>> Also, I attach below some working Jena/Pellet code, which builds an
>> inference model from this ontology, and then checks, if this
>> inference model
>> 'contains()' the triple
>>
>>    :alice :brother :bob .
>>
>> The result is:
>>
>>    "Exists inferred triple [alice brother bob]? true"
>>
>> And you say that I can believe in this result?
>>
>> Hey, Tim, good news, it seems to work! You get your rule in
>> OWL-1.1! :-)
>>
>> So, end of day now!
>>
>> Cheers,
>> Michael
>
> A few corrections/enhancements.
>
> I now checked Evren's observation that I can remove the axiom (A2),  
> which
> was specified in my original mail by:
>
>   (A2) SubClassOf( ObjectMinCardinality(1 manman owl:Thing) Man )
>
> You are wright, Evren! So the set of axioms is now:
>
>   (R4) SubObjectPropertyOf(SubObjectPropertyChain(sibling manman)  
> brother)
>   (A1) SubClassOf( Man ObjectExistsSelf(manman) )
>   (A3) ObjectPropertyDomain( manman Man )
>   (A4) FunctionalObjectProperty( manman )
>
> The "Deduction of (S1b')" in my original mail, where
>
>   (S1b') FORALL x: ( EXISTS y: manman(x,y) ) ==> Man(x)
>
> has then to be changed the following way:
>
>   * Deduction of (S1b'): Given an instance x, and an instance y,  
> for which
> manman(x,y) holds. Then x is in the domain of 'manman'. And from  
> axiom (A3)
> we can conclude Man(x).
>
> The original "Deduction of (A2)" gets then removed, of course.
>
> Btw, in my previous post, I had the axiom (A2) wrong in the demo  
> ontology.
> Because in that ontology, I had accidentally made the minCardinality
> restriction a QCR restricted to class Man, instead of owl:Thing. Not a
> dangerous bug, but now the complete axiom has vanished, anyway. :-)
>
> There was also a confusing typo in the javadoc of the demo code,  
> where the
> string for the rule contained the predicate "Man" with variable "x"  
> instead
> of "y".
>
> I attach the corrected/enhanced versions of the ontology and the  
> demo code
> below.
>
> Cheers,
> Michael
>
> ===== Ontology "timsrule.owl" (no axiom (A2) anymore) =============
>
> <?xml version="1.0"?>
> <rdf:RDF
>     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>     xmlns="http://example.org/timsrule.owl#"
>     xmlns:owl="http://www.w3.org/2002/07/owl#"
>     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
>     xmlns:owl11="http://www.w3.org/2006/12/owl11#"
>     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
>   xml:base="http://example.org/timsrule.owl">
>   <owl:Ontology rdf:about="">
>     <rdfs:comment>Encoding of the rule
> [sibling(x,y)^Man(y)-&gt;brother(x,y)] in OWL-1.1</rdfs:comment>
>     <owl:versionInfo rdf:datatype="http://www.w3.org/2001/ 
> XMLSchema#string"
>> Created with TopBraid Composer</owl:versionInfo>
>   </owl:Ontology>
>   <owl:Class rdf:ID="Man">
>     <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/ 
> owl#Thing"/>
>     <rdfs:subClassOf>
>       <owl11:SelfRestriction>
>         <owl:onProperty>
>           <owl:ObjectProperty rdf:ID="manman"/>
>         </owl:onProperty>
>       </owl11:SelfRestriction>
>     </rdfs:subClassOf>
>   </owl:Class>
>   <owl:ObjectProperty rdf:about="#manman">
>     <rdfs:domain rdf:resource="#Man"/>
>     <rdf:type
> rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
>   </owl:ObjectProperty>
>   <owl:ObjectProperty rdf:ID="sibling"/>
>   <owl:ObjectProperty rdf:ID="brother"/>
>   <rdf:List rdf:ID="subRoleChain">
>     <rdf:first rdf:resource="#sibling"/>
>     <rdf:rest rdf:parseType="Collection">
>       <owl:ObjectProperty rdf:about="#manman"/>
>     </rdf:rest>
>     <rdfs:subPropertyOf rdf:resource="#brother"/>
>   </rdf:List>
>   <owl:Thing rdf:ID="alice">
>     <sibling>
>       <Man rdf:ID="bob"/>
>     </sibling>
>   </owl:Thing>
> </rdf:RDF>
>
> <!-- Created with TopBraid Composer -->
>
> ===== Democode (corrected typo in class docu) =====================
>
> // Note: need a current version of Pellet (>= 1.5)
>
> import org.mindswap.pellet.jena.PelletReasonerFactory;
> import com.hp.hpl.jena.ontology.OntModel;
> import com.hp.hpl.jena.rdf.model.ModelFactory;
> import com.hp.hpl.jena.rdf.model.ResourceFactory;
>
> import java.io.FileInputStream;
>
> /**
>  * Rule [sibling(x,y) AND Man(y) ==> brother(x,y)] in OWL-1.1
>  * @author Michael Schneider (m_schnei@gmx.de)
>  */
> public class TimsRuleDemo {
>     public static void main(String[] args) {
>         String ONT_FILENAME = "timsrule.owl"; // put in project- 
> toplevel
>         String BASE_URI = "http://example.org/timsrule.owl";
>         try {
>             OntModel ontModel =
> ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC);
>             ontModel.read(new FileInputStream(ONT_FILENAME),  
> BASE_URI);
>             System.out.println("Exists inferred triple [alice  
> brother bob]?
> " +
>                     ontModel.contains(
>
> ResourceFactory.createResource(BASE_URI+"#alice"),
>                             ResourceFactory.createProperty(BASE_URI,
> "#brother"),
>                             ResourceFactory.createResource(BASE_URI 
> +"#bob")
>                     )
>             );
>         } catch (Throwable e) {
>             e.printStackTrace();
>         }
>     }
> }
>
> ===================================================================
>
> --
> Dipl.-Inform. Michael Schneider
> FZI Forschungszentrum Informatik Karlsruhe
> Abtl. Information Process Engineering (IPE)
> Tel  : +49-721-9654-726
> Fax  : +49-721-9654-727
> Email: Michael.Schneider@fzi.de
> Web  : http://www.fzi.de/ipe/eng/mitarbeiter.php?id=555
>
> FZI Forschungszentrum Informatik an der Universität Karlsruhe
> Haid-und-Neu-Str. 10-14, D-76131 Karlsruhe
> Tel.: +49-721-9654-0, Fax: +49-721-9654-959
> Stiftung des bürgerlichen Rechts
> Az: 14-0563.1 Regierungspräsidium Karlsruhe
> Vorstand: Rüdiger Dillmann, Michael Flor, Jivka Ovtcharova, Rudi  
> Studer
> Vorsitzender des Kuratoriums: Ministerialdirigent Günther Leßnerkraus

Received on Saturday, 6 October 2007 10:36:14 UTC