W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > July to September 2006

Re: Blank node identifiers in FILTER clauses

From: Eric Prud'hommeaux <eric@w3.org>
Date: Sun, 16 Jul 2006 19:13:42 +0200
To: Enrico Franconi <franconi@inf.unibz.it>
Cc: RDF Data Access Working Group <public-rdf-dawg@w3.org>
Message-ID: <20060716171342.GA8900@w3.org>

On Fri, Jul 14, 2006 at 05:37:16PM +0200, Eric Prud'hommeaux wrote:
> 
> On Fri, Jul 14, 2006 at 02:48:10AM +0100, Enrico Franconi wrote:
> > 
> > On 13 Jul 2006, at 17:23, Eric Prud'hommeaux wrote:
> > 
> > >Note that this graph does not directly create any triples with
> > >food:hasDrink or wine:hasColor in the predicate. MyDinner must have a
> > >drink because it is a RedMeatCourse, which is a subClassOf something
> > >which, if it has a Drink, must have a Red drink. Also, it's a
> > >MealCourse, which must have at least one Drink.
> > >
> > >So there we go. It must hasDrink of something with the color Red.
> > >
> > >Query:
> > >PREFIX food: <http://www.w3.org/2001/sw/WebOnt/guide-src/food#>
> > >PREFIX wine: <http://www.w3.org/2001/sw/WebOnt/guide-src/wine#>
> > >SELECT ?Meal ?WineColor
> > >WHERE {
> > >   ?Meal food:hasDrink _:Wine .
> > >   _:Wine wine:hasColor ?WineColor }
> > >
> > >Pellet <http://www.mindswap.org/2003/pellet/demo> gives these
> > >results:
> > >
> > >|  Meal 	| WineColor |
> > >+---------------+-----------+
> > >| test:MyLunch 	| :White    |
> > >| test:MyDinner	| :Red	    |
> > >
> > >
> > >When querying Pellet for:,
> > >   ?Meal food:hasDrink ?Wine .
> > >   ?Wine wine:hasColor ?WineColor
> > >
> > >it gives no results because it has no bindings for the Wine. But why
> > >not? Certainly, it as deduced that there is something there, but it's
> > >opaque to RDF. Why doesn't it infer the triples:?
> > >  food:MyLunch hasDrink [ hasColor :White ] .
> > >  food:MyDinner hasDrink [ hasColor :Red ] .
> > 
> > You can't do that since you can not represent all the possible  
> > answers. You couldn't represent the case when there is a cyclic  
> > coreference between bnodes.
> > E.g., _:a R _:b.
> >       _:b S _:a.
> 
> Perhaps I misinterpret here, but I thought that would be an argument
> against materializing a closure and then querying it, as opposed to
> proving the existence of certain triples.
> 
> What query pattern could one match with bNodes and SPARQL's current
> entailment rules for matching that one couldn't match with variables
> against the inferred graph? (Note, showing me why Pellet should not
> infer
>   food:MyLunch hasDrink [ hasColor :White ] .
>   food:MyDinner hasDrink [ hasColor :Red ] .
> would be one way to answer this question.)

In order to give you more to argue with, I've worked out some triples
that I think are implied by your little house example.

We were trying match:
  Paul :hasFriend _:Y .
  _:Y rdf:type Employee .
  _:Y hasFriend _:Z .
  _:Z rdf:type Manager .
There are two possibile interpreations relavent to proving this.
Either the left or right of:
  Paul rdf:type Worker .        Paul rdf:type Worker .
  Paul :hasFriend Andrea .      Paul :hasFriend Simon .
  Andrea rdf:type Employee .    Simon rdf:type Employee .
  Andrea :hasFriend Caroline .  Simon :hasFriend Andrea .
  Caroline rdf:type Manager .   Andrea rdf:type Manager .

Since all sides of the disjunction ential
  Paul :hasFriend _:Y .
  _:Y rdf:type Employee .
  _:Y hasFriend _:Z .
  _:Z rdf:type Manager .
I think you should be able to infer it, and then query it:
SELECT ?X
WHERE { ?X rdf:type Worker .
        ?X :hasFriend ?Y .
        ?Y rdf:type Employee .
        ?Y :hasFriend ?Z .
        ?Z rdf:type Manager } # note ?vars

I'm really surprised this is not how people currently handle OWL
semantics. bNodes are perfect for this. If anyone wrote a backward-
chaining OWL engine, it seems they'd have to do this. (Come to think
of it, I think cwm is basically backward-chaining.)

Or maybe I just don't get something...


> > Bnodes give a true increase in expressivity whenever coreference in  
> > the answer set plays a role.
> > 
> > >That seems quite in order to me, freeing us to use bNodes as
> > >existential that affect future counting semantics, or remove them,
> > >treat them exactly as regular variables except you can't select them
> > >and they don't show up in SELECT *.
> > 
> > If you want to remove bnodes, and have variables to play their role  
> > when "not selected" (i.e., projected away), then the semantics of  
> > SPARQL should change: it should not be anymore the current two stages  
> > evaluation (BGP + algebra) but it should be uniformly defined with a  
> > *global* notion of (non-distinguished) variable assignment that  
> > considers the whole SPARQL expression. It could be interesting.  
> > Necessary time to come up with a convincing theory and practice about  
> > it: at least one year, I guess..., or more if we do start discussing  
> > with Pat about the details :-)
> > That's why I always said that a standardising effort like SPARQL  
> > should come *after* researchers have done their duty and the results  
> > are mature enough to be applied.
> > 
> > cheers
> > --e.
> 
> -- 
> -eric
> 
> home-office: +1.617.395.1213 (usually 900-2300 CET)
> 	    +33.1.45.35.62.14
> cell:       +33.6.73.84.87.26
> 
> (eric@w3.org)
> Feel free to forward this message to any list for any purpose other than
> email address distribution.

-- 
-eric

home-office: +1.617.395.1213 (usually 900-2300 CET)
	    +33.1.45.35.62.14
cell:       +33.6.73.84.87.26

(eric@w3.org)
Feel free to forward this message to any list for any purpose other than
email address distribution.
Received on Sunday, 16 July 2006 17:12:25 GMT

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