- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Sun, 2 Apr 2017 11:28:19 -0700
- To: james anderson <james@dydra.com>, public-sparql-exists@w3.org
On 04/02/2017 11:23 AM, james anderson wrote: > good evening; > >> On 2017-04-02, at 20:05, Peter F. Patel-Schneider <pfpschneider@gmail.com> wrote: >> >> >> >> On 04/02/2017 11:01 AM, james anderson wrote: >>> good evening; >>> >>>> On 2017-04-02, at 19:37, Peter F. Patel-Schneider <pfpschneider@gmail.com> wrote: >>>> >>>> […] >>>>> >>>>>> >>>>>> So you do not agree, for example, that that it is problematic that according >>>>>> to the SPARQL specification that the running the query >>>>>> >>>>>> SELECT ?x WHERE { >>>>>> ?x :p :d . >>>>>> FILTER EXISTS { ?x :q :b . } } >>>>>> >>>>>> against the graph >>>>>> >>>>>> _:c :p :d . >>>>>> :e :q :b . >>>>>> >>>>>> produces a result set containing a query solution that maps ?x to _:c? >>>>>> >>>>>> peter >>>>> >>>>> it would be problematic were the recommendation to require an implementation to produce that result. >>>>> the recommendation does not require that. >>>>> i do understand that various interpretations of the recommendation lead one to believe that it implies that result. >>>>> those interpretations are flawed. >>>>> >>>>> best regards, from berlin, >>>>> >>>>> >>>>> >>>>> --- >>>>> james anderson | james@dydra.com | http://dydra.com >>>> >>>> Are you saying that the SPARQL specification at >>>> https://www.w3.org/TR/sparql11-query/ does not require this result? My >>>> understanding is that it does. >>> >>> we have been in disagreement on the conclusion, that the recommendation requires this interpretation, since the point when that example was put forward. >>> >>>> >>>> >>>> My understanding is that, assuming that joins of empty BGPs are removed >>>> everywhere, the SPARQL specification translates the above query into >>>> >>>> Project( ToList(Filter( exists ( BGP(?x :q :b) ) , BGP(?x :p :d) ) ) , >>>> { ?x } ) >>>> >>>> This expression is evaluated on the graph by first evaluating BGP(?x :p :d), >>>> resulting in the singleton multiset of solutions {{ {(?x,_:c)} }}. Then the >>>> exists substitution is performed for the solution {(?x,_:c)}, resulting in >>>> BGP(_:c :q :b), whose subsequent evalution results in the multiset of >>>> solutions {{ {} }}, i.e., a multiset containing the empty solution. >>>> >>>> Because the result is not the empty multiset, the filter does not filter out >>>> the solution {(?x,_:c)}. So the result of the Filter expression is the >>>> singleton multiset of solutions {{ {(?x,_:c)} }}, and then the result of the >>>> entire query is the unordered list of solutions [ {(?x,_:c)} ]. >>>> >>>> What is wrong with this analysis? >>> >>> your interpretation employs blank nodes in a manner which makes no sense. >>> >>> best regards, from berlin. >>> --- >>> james anderson | james@dydra.com | http://dydra.com >> >> I don't understand. How does making sense enter into the picture at all here? >> >> All I am doing is following through the definition of SPARQL from >> https://www.w3.org/TR/sparql11-query/. Are you saying that I am doing >> something that is not sanctioned by this definition? If so, where have I gone >> wrong? > > you misconstrue the notion of “substitution”. > > > > --- > james anderson | james@dydra.com | http://dydra.com How so? Substitution is a notion in the SPARQL evaluation semantics, defined in Section 18.5.1.8 of https://www.w3.org/TR/sparql11-query/ as Definition: Substitute Let μ be a solution mapping. substitute(pattern, μ) = the pattern formed by replacing every occurrence of a variable v in pattern by μ(v) for each v in dom(μ) How can this be read other than substitute(BGP(?x :q :b),{(x,_:c)} = BGP(_:c :q :b) peter
Received on Sunday, 2 April 2017 18:28:52 UTC