W3C home > Mailing lists > Public > semantic-web@w3.org > February 2005

Re: Combined Inverse Functional Properties

From: <jos.deroo@agfa.com>
Date: Thu, 17 Feb 2005 16:08:34 +0100
To: Rogier Brussee <rogier.brussee@gmail.com>
Cc: Dan Brickley <danbri@w3.org>, Henry Story <henry.story@bblfish.net>, SWIG <semantic-web@w3.org>, semantic-web-request@w3.org, Yuzhong Qu <yzqu@seu.edu.cn>
Message-ID: <OFAD2020E7.44C44FE7-ONC1256FAB.004F68A1-C1256FAB.00532E71@agfa.com>

is indeed better with :productProperty and owl:InverseFunctionalProperty
have done test case

data   http://eulersharp.sourceforge.net/2004/04test/henry.n3
rules  http://eulersharp.sourceforge.net/2004/04test/rogier.n3
query  http://eulersharp.sourceforge.net/2004/04test/sameAsQ.n3
answer http://eulersharp.sourceforge.net/2004/04test/sameAsE.n3


it was tested with command line
.euler --nope --think 
http://eulersharp.sourceforge.net/2004/04test/henry.n3 
http://eulersharp.sourceforge.net/2004/04test/rogier.n3 --query 
http://eulersharp.sourceforge.net/2004/04test/sameAsQ.n3

and also via getting
http://wopeg.he.agfa.be/.euler+--nope+--think+http%3A%2F%2Feulersharp.sourceforge.net%2F2004%2F04test%2Fhenry.n3+http%3A%2F%2Feulersharp.sourceforge.net%2F2004%2F04test%2Frogier.n3+--query+http%3A%2F%2Feulersharp.sourceforge.net%2F2004%2F04test%2FsameAsQ.n3

from primitive service
java -Xmx800m -Dprocess.cwm="python /cwm-1.0.0/swap/cwm.py" 
-Dprocess.euler="java -Xmx800m euler.EulerRunner" -Dprocess.ttl=10000 R -p 
80 -debug

(version 
http://sourceforge.net/project/showfiles.php?group_id=77046&package_id=77935&release_id=305730
help http://eulersharp.sourceforge.net/2004/01swap/Euler.txt)


-- 
Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/




Rogier Brussee <rogier.brussee@gmail.com>
Sent by: semantic-web-request@w3.org
16/02/2005 16:13
Please respond to Rogier Brussee

 
        To:     SWIG <semantic-web@w3.org>
        cc:     Henry Story <henry.story@bblfish.net>, Jos 
De_Roo/AMDUS/MOR/Agfa-NV/BE/BAYER@AGFA, Dan Brickley <danbri@w3.org>, 
Yuzhong Qu <yzqu@seu.edu.cn>
        Subject:        Re: Combined Inverse Functional Properties



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 15:09:16 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 21:45:04 GMT