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

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


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 16:34:20 UTC