- From: Peter F. Patel-Schneider <pfpschneider@gmail.com>
- Date: Mon, 20 Jun 2016 19:24:32 -0700
- To: Jeremy J Carroll <jjc@syapse.com>
- Cc: Gregg Kellogg <gregg@greggkellogg.net>, public-rdf-tests@w3.org, public-sparql-dev@w3.org
Sure, some of the problematic cases are not likely to be written by non-expert
users but the problematic cases cover just about anything a non-expert user is
going write, including
SELECT ?x WHERE { ?x :p :b . FILTER EXISTS { ?x :p :c . } }
and
SELECT ?x WHERE { ?x :p :b .
FILTER EXISTS { SELECT ?x WHERE { ?x :q :d . } } }
and
SELECT ?x WHERE { ?x :p ?y .
FILTER EXISTS { SELECT ?z WHERE { ?z :p ?y . } } }
Rewriting problematic cases as unproblematic ones is very tough.
Consider
SELECT ?x WHERE { ?x :p ?y . OPTIONAL { ?y :p ?z }
FILTER EXISTS { ?x :q ?z } }
How can that be transformed into an "equivalent" query that doesn't use ?x or
?z in a BGP or a subquery in the EXISTS.
peter
On 06/20/2016 05:38 PM, Jeremy J Carroll wrote:
> I agree that there is a defect.
>
> However, for
>
> EXISTS is implemented differently in different SPARQL implementations
> whenever a variable appears in a subquery but is not projected back up to
> the top level of the EXISTS argument.
>
> and
>
> EXISTS results in invalid semantic structures whenever a variable in a
> solution mapping appears anywhere in the argument
> - in a VALUES construct,
> - as a BIND variable,
> - as a SELECT variable,
> or
> - in a BOUND expression.
>
> I suggest that the queries that illustrate these are a little funky, in the
> sense, that to write them, one is likely to be a sufficiently advanced SPARQL
> developer to wonder what the semantics is, and then to get a little confused.
> Then the more cautious query writer may choose to rename some variables or
> make some other adjustment to the query.
>
>
>> On Jun 20, 2016, at 11:28 AM, Peter F. Patel-Schneider
>> <pfpschneider@gmail.com <mailto:pfpschneider@gmail.com>> wrote:
>>
>> On 06/20/2016 10:00 AM, Jeremy J Carroll wrote:
>> [...]
>>> (On (a) I found Peter’s assertion that EXISTS is broken to be somewhat
>>> polemical: there is clearly a much narrower set of unclear queries than any
>>> query containing EXISTS)
>>>
>>>
>>> Jeremy Carroll
>>
>>
>> Almost all subqueries in the EXISTS argument except those that don't use any
>> variables in the solution query are problematic. It is not possible to
>> determine if an EXISTS will be problematic just by examining its syntax if
>> any variable in the solution query shows up in a BGP (whose match makes a
>> difference to the final result). Even the most simple queries using EXISTS
>> are problematic, for example
>> SELECT ?x WHERE { ?x :p :b . FILTER EXISTS { ?x :p :c . } }
>>
>>
>>
>> EXISTS is implemented differently in different SPARQL implementations
>> whenever a variable appears in a subquery but is not projected back up to
>> the top level of the EXISTS argument.
>>
>> EXISTS is not implemented correctly in some SPARQL implementations whenever
>> a variable in a solution mapping is mapped to a blank node and that variable
>> occurs in a BGP.
>>
>> EXISTS is not implemented correctly in some SPARQL implementations whenever
>> a variable in a solution mapping is the only variable in commmon between the
>> two sides of a MINUS.
>>
>> EXISTS results in invalid semantic structures whenever a variable in a
>> solution mapping appears anywhere in the argument
>> - in a VALUES construct,
>> - as a BIND variable,
>> - as a SELECT variable,
>> or
>> - in a BOUND expression.
>>
>>
>>
>> I call this "broken".
>>
>>
>> Peter F. Patel-Schneider
>> Nuance Communications
>
Received on Tuesday, 21 June 2016 02:25:04 UTC