Re: Issue-3 - Blank nodes substituted into BGPs act as variables

On 14/07/16 17:33, Peter F. Patel-Schneider wrote:
> Let's try to keep issues clean.
>
> Issue-3 is about how blank nodes work when they are substituted.  When to
> substitute is a different matter.
>
> peter

+1

I picked the example to be issue-3 only

Daniel : for the numbering:

https://w3c.github.io/sparql-exists/docs/sparql-exists.html
   Issue-2 : variable only locations.
   Issue-4 : scope related

 Andy

>
>
> On 07/14/2016 08:25 AM, Daniel Hernández wrote:
>> Hi all,
>>
>> With the same data that Andy proposed, another query is:
>>
>> Query 2:
>> ---------------------
>> PREFIX : <http://example/>
>>
>> SELECT * {
>>     ?s :p ?o
>>     FILTER EXISTS { SELECT ?p { ?s ?p 1 } }
>> }
>>
>> In this case ?s is not in-scope on the inner graph pattern. However, Virtuoso
>> and rdf4j
>> assume that ?s in the outer and inner graph patterns are correlated. That is,
>> the result is
>>
>> Outcome 1:
>> -----------------
>> | s    | p  | o |
>> =================
>> | _:s1 | :p | 1 |
>> -----------------
>>
>> I think that substituting a variable that occurs in a basic graph pattern has
>> some problems
>> that are originated by the two roles that it has. First, it has the role of
>> naming a value from
>> the data. Second, it has the role of using a value from the current solution
>> mapping.
>>
>> In the report (http://arxiv.org/abs/1606.01441) we normalize a query before
>> applying
>> substitution:
>>
>> Query 3:
>> ---------------------
>> PREFIX : <http://example/>
>>
>> SELECT * {
>>     ?s :p ?o
>>     FILTER EXISTS { SELECT ?p { ?z ?p 1 FILTER (!(bound(?z) && bound(?s)) || ?z
>> = ?s) } }
>> }
>>
>> After the normalization, the inner graph pattern is equivalent with the
>> previous one, but
>> the variable ?s does not occur in a basic graph pattern, so it only has the
>> role of using values.
>> In this case substitution is safe respect to the issue of blank nodes.
>>
>> Daniel
>>
>>
>>
>

Received on Thursday, 14 July 2016 18:08:47 UTC