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

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 15:26:26 UTC