- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Wed, 08 Jul 2009 13:17:11 -0400
- To: Eric Prud'hommeaux <eric@w3.org>
- CC: SPARQL Working Group <public-rdf-dawg@w3.org>
Eric Prud'hommeaux wrote: >> OK, with this spelled out, I wanted to look at Eric's treatment in >> http://lists.w3.org/Archives/Public/public-rdf-dawg/2009JulSep/0022.html. >> In particular, looking at this example in Eric's mail: >> >> """ >> 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> >> """ >> >> The only way that I can see that (?who=_:eve, ?name="eve") is retained >> in the result of the MINUS is if Eric is using the "looser" form of the >> MINUS-set definition that I give above. Eric, can you confirm this is >> the case? The two MINUS-AntiJoin* definitions would, I think, eliminate >> that solution because (?who=_:eve, ?name="eve") is compatible with >> (?who=_:eve, ?act=<act3>). > > I think you've made a leap from "AND share at least one bound > variable" to "have any variables in common". As I understand both I don't understand the difference between these two phrasings :) > MINUS-AntiJoin and MINUS-AntiJoin+Restriction, both restrict A if > there is a tuple in B with the same values for all the bindings. > Thus, a distinguishing test case for these would be: > > ?who foaf:givenname ?name > MINUS { > ?who2 foaf:holdsAccount ?act > OPTIONAL { > ?act foaf:accountName ?name2 . > } > } That's definitely a test case. Since it doesn't make any rational sense to me, though, I have no real basis from which to draw a preference... One possible idea is to syntactically prohibit A MINUS B where A and B share no variables in common :-) Lee > >> ...I'm going to punt on UNSAID tonight because it's getting late and I >> don't have an easy way to explain it. Andy explains it as a !EXISTS >> filter (i.e., solve A and then for each solution in A, filter it against >> a !EXISTS filter) - but without totally understanding what !EXISTS >> means, I can't really see how that relates to these MINUS definitions. >> >> Greg (& someone else?) explained UNSAID today as AntiOptional. I'm >> wondering if "AntiOptional" is actually the same as >> MINUS-AntiJoin+Restriction? Can anyone tell? >> >> Lee >> >
Received on Wednesday, 8 July 2009 17:18:20 UTC