Re: updated draft

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