- From: Ian Horrocks <horrocks@cs.man.ac.uk>
- Date: Sun, 16 Sep 2007 16:55:49 +0100
- To: "Swanson, Tim" <tim.swanson@semanticarts.com>
- Cc: Owl Dev <public-owl-dev@w3.org>, Michael Schneider <schneid@fzi.de>
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