- From: Rogier Brussee <rogier.brussee@gmail.com>
- Date: Wed, 16 Feb 2005 16:13:31 +0100
- To: SWIG <semantic-web@w3.org>
- Cc: Henry Story <henry.story@bblfish.net>, jos.deroo@agfa.com, Dan Brickley <danbri@w3.org>, Yuzhong Qu <yzqu@seu.edu.cn>
On Wed, 16 Feb 2005 11:22:57 +0800, Yuzhong Qu <yzqu@seu.edu.cn> wrote:
> It seems to me that:
>
> what CIFP means is very close to that intersectionOf(r1, r2, ..., rn) is a reverse functional property.
>
[snip]
Except that it is not so clear what the domain (i.e. "outcome") of :cifp is.
> > > I did just a 5 min test with Cwm and Euler :)
> > >
> > > given data
> > >
> > > :a :r1 :b.
> > > :a :r2 :c.
> > > :g :r1 :b.
> > > :g :r2 :c.
> > > :p :cifp (:r1 :r2).
> >
It seems to me that the "combined inversefunctional property" is not a
primitive notion. It seems more natural and general to have a notion
of productProperty (or combined property) which can in particular be
inverse functional. Thus I would replace the last sentence by :
:p :productProperty (:r1:r2).
:p a owl:InverseFunctionalProperty.
:productProperty should model a list of simulaneous properties, and it
seems easiest if it takes values in a list. To be of any use as an
inverse functional property we have to assume that two lists are
owl:sameAs if their entries are owl:sameAs and have the same order,
just as Yuzhong Qu seems to suggest.
We can define some rules capturing the notion of :productProperty.
I have no rule engine around here but does something like this work ?
:productProperty a owl:InverseFunctionalProperty;
rdfs:domain rdf:Property.
# bottom of recursion
{
?p :productProperty ?L.
?L rdf:first ?q.
?L rdf:rest rdf:nil.
}
=>
{
{?x ?q ?a} <=> {?x ?p ?A. ?A rdf:first ?a. ?A rdf:rest rdf:nil}
} .
#recursion
{
?p :productProperty ?L.
?L rdf:first ?q.
?L rdf:rest ?M.
?r :productProperty ?M}
=>
{
{?x ?q ?a. ?x ?r ?B} <=> {?x ?p ?A. ?A rdf:first ?a. ?A rdf:rest ?B}
}.
# ?q :composition (?p rdf:first). ?r :composition (?p rdf:rest). Sigh
> > >
> > > and some rules capturing only cases for 1, 2 and 3 cifp properties
> > >
> > > {?C :cifp ?L.
> > > ?L rdf:first ?P;
> > > rdf:rest rdf:nil.
> > > ?A ?P ?X.
> > > ?B ?P ?X}
> > > =>
> > > {?A owl:sameAs ?B}.
> > >
> > > {?C :cifp ?L.
> > > ?L rdf:first ?P;
> > > rdf:rest ?M.
> > > ?M rdf:first ?Q;
> > > rdf:rest rdf:nil.
> > > ?A ?P ?X;
> > > ?Q ?Y.
> > > ?B ?P ?X;
> > > ?Q ?Y}
> > > =>
> > > {?A owl:sameAs ?B}.
> > >
> > > {?C :cifp ?L.
> > > ?L rdf:first ?P;
> > > rdf:rest ?M.
> > > ?M rdf:first ?Q;
> > > rdf:rest ?N.
> > > ?N rdf:first ?R;
> > > rdf:rest rdf:nil.
> > > ?A ?P ?X;
> > > ?Q ?Y;
> > > ?R ?Z.
> > > ?B ?P ?X;
> > > ?Q ?Y;
> > > ?R ?Z}
> > > =>
> > > {?A owl:sameAs ?B}.
> > >
> > >
> > > the N3QL query
> > >
> > > [] q:select {?X owl:sameAs ?Y}; q:where {?X owl:sameAs ?Y}.
> > >
> > > gave us
> > >
> > > :a owl:sameAs :a.
> > > :a owl:sameAs :g.
> > > :g owl:sameAs :a.
> > > :g owl:sameAs :g.
> > >
So nice.
> >
> >
> >
> >
Received on Thursday, 17 February 2005 09:26:26 UTC