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

I think that the scope-related issue is number 5.

Other scope-related issues are hidden by issue 2.

peter


On 07/14/2016 11:08 AM, Andy Seaborne wrote:
> 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:20:55 UTC