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

Re: MINUS vs. UNSAID

From: Lee Feigenbaum <lee@thefigtrees.net>
Date: Mon, 06 Jul 2009 20:58:36 -0400
Message-ID: <4A529DBC.9090504@thefigtrees.net>
To: Eric Prud'hommeaux <eric@w3.org>
CC: public-rdf-dawg@w3.org
Eric Prud'hommeaux wrote:
> I've been noodling on this for a while, trying to see practical
> differences between MINUS (evaluated purely bottom-up) and UNSAID
> (which appears to seed the outermost BGP with variable bindings from
> outside).
> 
> I implemented UNSAID probably 6 years ago in Algae2, and I complained
> bitterly that the bottom-up semantics of SPARQL were confusing for
> users. Despite that, I have to say that MINUS is much more clear to me
> as UNSAID carries variable bindings into nested evaluations in ways I
> don't fully understand.

For the moment, I'm excerpting only to the "real" data ones, since I 
find them a lot easier to think about.
> 
> Data D3
> _:eric :givenname "eric"; :holdsAccout <act1>. <act1> :accountName "eric".
> _:bobS :givenname "bob" ; :holdsAccout <act2>. <act2> :accountName "bobs".
> _:eve  :givenname "eve" ; :holdsAccout <act3>.
> (
>  or in tabular form for brevity:
>         givenname holdsAccount accountName
>  _:eric "eric"    <act1>       "eric"
>  _:bobS "bob"     <act2>       "bobs"
>  _:eve  "eve"     <act3>
> )
> 
> Find the folks for whom I need to create accounts based on their given name:
> 
> Query M3: 
> ?who foaf:givenname ?name
> MINUS {
>   ?who foaf:holdsAccount ?act 
>   OPTIONAL {
>     ?act foaf:accountName ?name .
>   }
> }
> Result M3:
> ?who   ?name    ?who   ?act   ?name    ?who   ?name 
> _:eric "eric"   _:eric <act1> "eric"   _:bobS "bob" 
> _:bobS "bob"  - _:bobS <act2> "bobS" = _:eve  "eve" 
> _:eve  "eve"    _:eve  <act3>	       
> 
> 
> Query U3: 
> ?who foaf:givenname ?name
> MINUS {
>   ?who foaf:holdsAccount ?act 
>   OPTIONAL {
>     ?act foaf:accountName ?name .
>   }
> }

Do you mean s/MINUS/UNSAID, I imagine

> Result U3 (extrapolated from UNSAID results above):
> ?who   ?nam  
> _:eve  "eve" 

If I understand UNSAID correctly, you'd do the above MINUS query as:

?who foaf:givenname ?name .
UNSAID {
   ?who foaf:holdsAccount ?act .
   ?act foaf:accountName ?name .
}

"People with a certain name for whom it is unsaid that their account has 
the same name."

Is that right or wrong?

If it's right, I find (to me) the UNSAID way to be a much more natural 
way of writing this query - I'm not actually convinced the MINUS version 
is any clearer than OPTIONAL + !bound :-)

Lee


> 
> 
> Note, these are untested, please verify.
Received on Tuesday, 7 July 2009 00:59:33 GMT

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