W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2005

collection access: inferred property vs. syntax

From: Eric Prud'hommeaux <eric@w3.org>
Date: Tue, 1 Feb 2005 11:19:57 -0500
To: public-rdf-dawg@w3.org
Message-ID: <20050201161957.GA29375@w3.org>
As DanC pointed out, any inferred triple can't be distinguished from a
ground fact. The exciting difference with olw:member is that we turn a
closed list into repeated properties. This has impact when we ask the
members of a list and want to know that was a whole list.

Infered property owl:member approach:

  Server1 knows:
    Joe hasAssets (house, car, boat).

  Client1 asks Server1:
    CONSTRUCT *
    WHERE { (Joe hasAssets ?list) (?list owl:member ?asset) }

  Client1 learns:
    Joe hasAssets ?list. ?list owl:member house, car, boat.

  Client2 asks Client1 (same query):
    SELECT ?asset
    WHERE { (Joe hasAssets ?list) (?list owl:member ?asset) }

  Client2 learns:
    house
    car
    boat.

We have closure but no confidence that we have the complete list.

Special syntax approach 1, constraint extension:

  Server1 knows:
    Joe hasAssets (house, car, boat).

  Client1 asks Server1:
    CONSTRUCT *
    WHERE { (Joe hasAssets ?list) }
      AND (?list MEMBER ?asset)

  Client1 learns, um, I dunno, maybe MEMBER makes CONSTRUCT * include
  the ground facts:
    Joe hasAssets (house, car, boat).

  Client2 asks Client1 (same query):
    SELECT ?asset
    WHERE { (Joe hasAssets ?list) }
      AND (?list MEMBER ?asset)

  Client2 learns knows is has a complete list of:
    house
    car
    boat.

Special syntax approach 2, triplePattern keyword:
    CONSTRUCT *
    WHERE { (Joe hasAssets ?list) (?list %MEMBER ?asset) }

The motivation for approach 2 is that scalar constraints can be
processed without adding solutions to the set (I think). In addition,
it may look more natural to have that %MEMBER arc in the graph rather
than in the scalar constraints.


Things get a bit more confusing when there are multiple lists:

    Eric sharesOfficeWith (Philippe, David),
                          (Michiko, Yoshio, ...).

  Client1 asks Server1:
    CONSTRUCT *
    WHERE { (Eric sharesOfficeWith ?list) (?list owl:member ?who) }

  Client1 learns:
    Joe hasAssets ?list. ?list owl:member (Philippe, David, Michiko, 
					   Yoshio, ...)

which is not wrong, but slightly misleading. The magic predicate rule
  {?x sharesOfficeWith ?l.
   ?l owl:member (?m1, ?m2). } => { ?m1 sitsNear ?m2 }
could be valid for the ground facts (if the binding made sure that no
?m1 and ?m2 came from different lists), but couldn't be made to work
on what Client1 learned. 


All in all, I'd like to walk away from this (or risk having to specify
statments like "I dunno, maybe MEMBER makes CONSTRUCT * include the
ground facts." I know we should be seeing what we *can* do with RDF
rather than what we can't, but I can't help picking at things.
-- 
-eric

office: +81.466.49.1170 W3C, Keio Research Institute at SFC,
                        Shonan Fujisawa Campus, Keio University,
                        5322 Endo, Fujisawa, Kanagawa 252-8520
                        JAPAN
        +1.617.258.5741 NE43-344, MIT, Cambridge, MA 02144 USA
cell:   +81.90.6533.3882

(eric@w3.org)
Feel free to forward this message to any list for any purpose other than
email address distribution.

Received on Tuesday, 1 February 2005 16:19:57 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:22 GMT