W3C home > Mailing lists > Public > public-owl-dev@w3.org > July to September 2007

Re: Inferring Properties based on Types

From: Ian Horrocks <horrocks@cs.man.ac.uk>
Date: Sun, 16 Sep 2007 16:55:49 +0100
Message-Id: <E321AB1B-F392-4940-BE07-B5BF27F587FC@cs.man.ac.uk>
Cc: Owl Dev <public-owl-dev@w3.org>, Michael Schneider <schneid@fzi.de>
To: "Swanson, Tim" <tim.swanson@semanticarts.com>

On 15 Sep 2007, at 23:18, Michael Schneider wrote:

>
> Hi, Tim!
>
>> -----Original Message-----
>> From: public-owl-dev-request@w3.org
>> [mailto:public-owl-dev-request@w3.org] On Behalf Of Swanson, Tim
>> Sent: Saturday, September 15, 2007 12:18 AM
>> To: public-owl-dev@w3.org
>> Subject: Inferring Properties based on Types
>>
>>
>> Is there any way in OWL (or in any of the proposed extensions) to
>> express an inference rule like the following:
>>
>> (?x :P ?y)
>> :A(?y)
>> =>
>> (?x :R ?y)
>>
>>
>> For a more concrete example:
>>
>> (?x :hasSibling ?y)
>> :Male(?y)
>> =>
>> (?x :hasBrother ?y)

It isn't possible in either OWL or OWL 1.1.

The "work-around" given below by Michael is similar to what you would  
get be using a suitable DL-safe rule -- intuitively, this is a rule  
of a form such that it will only affect named individuals. An  
arbitrary rule (such as the one you give above) can be transformed  
into a DL-safe one by introducing a new unary predicate, say  
NamedIndividual, that is true for all named individuals (this can be  
achieved by adding the ground fact => NamedIndividual(i) for every  
individual i occurring in the ontology), and by adding atoms  
NamedIndividual(?v) to the body of the rule for each variable ?v used  
in the rule.

Of course using a DL-safe rule (or equivalently Michael's work- 
around) with an ontology O will *not* (by itself) result in  
entailments such as the class of people having a male sibling being a  
subclass of the class of people having a brother.

Regards,
Ian


>
> I think, you can at least do the following:
>
> First, use the inverses of the roles 'hasSibling(.,.)' and
> 'hasBrother(.,.)', called 'isSiblingOf(.,.)' and isBrotherOf(.,.)',
> respectively.
>
> With this, the following rule is equivalent to yours:
>
>  (1) isSiblingOf(y,x), Man(y) => isBrotherOf(y,x)
>
> This can be transformed into:
>
>  (2) y IN {z|isSiblingOf(z,x)} AND Man(y) => y IN {z|isBrotherOf(z,x)}
>
> And this translates (and generalizes) into the following OWL/DL  
> (1.0) axiom:
>
>  (3) SubClassOf(
>         intersectionOf(
>             restriction( isSiblingOf value(x) )
>             Class(Man)
>         )
>         Restriction( isBrotherOf value(x) )
>      )
>
> Problem with this approach: You need one such axiom for each  
> individual x
> (the variable 'x' appears free in (2)).
>
> Cheers,
> Michael
>
>
> --
> 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 Sunday, 16 September 2007 15:56:07 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 10 December 2014 20:07:18 UTC