- From: Alexandre Riazanov <ariazanov@systap.com>
- Date: Mon, 25 Apr 2016 15:41:37 -0300
- To: public-sparql-dev@w3.org
- Message-ID: <CANK0mJR4+puP2_ZyeeGDLMWgo2w_PF0hQFf6aG1y56caJOw4Jw@mail.gmail.com>
Hi everybody, I would appreciate any help on the following problem related to interpretation of the SPARQL 1.1 standard. To summarise the issue, it seems that one of the standard tests ( http://www.w3.org/2009/sparql/docs/tests/data-sparql11/subquery/manifest#subquery03 , a.k.a. sq03) contradicts the spec https://www.w3.org/TR/sparql11-query/ . In https://www.w3.org/TR/sparql11-query/#sparqlAlgebraEval , the spec says: > eval(D(G), Graph(var,P)) = > Let R be the empty multiset > foreach IRI i in D > R := Union(R, Join( eval(D(D[i]), P) , Ω(?var->i) ) > the result is R Earlier (https://www.w3.org/TR/sparql11-query/#rdfDataset) the spec also says: > An RDF Dataset comprises one graph, the default graph, which does not have a name, > and zero or more named graphs, where each named graph is identified by an IRI. which means that we never consider the default graph as active when we compute > foreach IRI i in D > R := Union(R, Join( eval(D(D[i]), P) , Ω(?var->i) ) because the default graph does not have an IRI. Another definition from https://www.w3.org/TR/sparql11-query/#sparqlAlgebraEval : > Definition: Evaluation of Project > eval(D(G), Project(L, vars)) = Project(eval(D(G), L), vars) so, in a sense, a GRAPH "distributes" over SELECT. Now, consider the specific query in https://www.w3.org/2009/sparql/docs/tests/data-sparql11/subquery/sq03.rq : select ?x where { graph ?g { {select ?x where {?x ?p ?g}} } } To leave the issue of variable scoping aside, we can consider an equivalent query: select ?x where { graph ?g1 { {select ?x where {?x ?p ?g}} } } The data for the test is https://www.w3.org/2009/sparql/docs/tests/data-sparql11/subquery/sq01.rdf: <rdf:RDF> <rdf:Description rdf:about="http://www.example.org/instance#a"> <ex:p rdf:resource="http://www.example.org/instance#b"/> </rdf:Description> <rdf:Description rdf:about="http://www.example.org/instance#c"> <ex:p rdf:resource=""/> </rdf:Description> </rdf:RDF> so, there is a default graph with two triples and no named graphs, therefore, according to the spec, the sub-query is only evaluated on the named sets <http://www.example.org/instance#a>, < http://www.example.org/instance#b>, <http://www.example.org/instance#c>, < http://www.example.org/instance#p> and <>, which are all empty. Therefore, the pattern ?x ?p ?g is never matched by any triples, the result multisets of the sub-query are empty, and thus the overall result multiset is empty. However, https://www.w3.org/2009/sparql/docs/tests/data-sparql11/subquery/sq03.srx specifies the result to contain two assignments: {x -> http://www.example.org/instance#c} and {x -> http://www.example.org/instance#a}, as if the subquery was evaluated on the default graph. Is my reasoning correct (and therefore the test is broken), or I am missing something? Can anybody shed some light on this? Cheers, ====================================== Alexandre Riazanov (Alexander Ryazanov), PhD Saint John, New Brunswick, Canada Skype: alexandre.riazanov http://riazanov.webs.com/ http://www.linkedin.com/in/riazanov tel: +1 506 639 1529 ======================================
Received on Tuesday, 26 April 2016 08:47:20 UTC