- From: Carlos Buil Aranda <cbuil@fi.upm.es>
- Date: Tue, 19 Oct 2010 10:40:59 -0300
- To: Gregory Williams <greg@evilfunhouse.com>
- CC: Axel Polleres <axel.polleres@deri.org>, SPARQL Working Group <public-rdf-dawg@w3.org>
apologies for this late reply. Answers come in line. On 18/10/2010 14:19, Gregory Williams wrote: > Carlos, > I have a few comments on your "certainly bound" work. > > "* P = SERVICE t { P1 } and either t is a IRI and ?X is strongly bound in P1" > I'm not sure what the second branch of the "either" is here. Was there meant to be more? sorry, it should say or. Either t is an IRI and thus identifies the address of a SPARQL EPR or is strongly bound in P1 > "* P = P1 BINDINGS ?X1 ... ?Xn { BindingValues } and ?X is either strongly bound within P1 or ?X = ?Xi and UNBOUND is not a possible value for a ?Xi in BindingValues." > What does "possible value" mean here? Does this eliminate the possibility of stream parsing BINDINGS clauses? I meant that null values may reject the possible solutions so they are not allowed, but I may be mistaken. > "* P = GRAPH t { P1 } and ?X is strongly bound in P1" > I believe this should also have an option for cases where t = ?X. I think so, this is under construction and any comment is very welcomed. > > After reading the "service-safeness" definition, I'm not sure it really captures what you want: > > """ > Let P be a graph pattern. P is service-safe if for every subpattern P1 of P such that P1 = SERVICE ?X P2 it hold that > > • there exists a subpattern P3 of P such that P1 is a subpattern of P3 and ?X is strongly bound in P3. > • P2 is service-safe. > """ > > The biggest thing that stands out to me in this definition is that I think this means that a pattern would be considered service-safe if ?x is strongly bound in P2 (inside the SERVICE pattern), and therefore strongly bound in P1 (the SERVICE) and in P3 (the group containing the SERVICE). This will leave ?x unbound at the point of execution of P1 if ?X is not strongly bound in a subpattern of P3 that *is not* P1. I meant that ?X should be bound before calling the SERVICE operator, so ?X should be bounded in P3. Then, if there is any SERVICE operator in P2, this P2 should have the variables that are present in the SERVICE bounded in order to be executed. P2 should not care about ?X because this should be handled by P3 in which is included P1. I hope I explained myself. > Moreover, I'm worried that trying too hard to specify these concepts of "strongly bound" and "service-safeness" will lead to legitimate queries being rejected because they are considered service-unsafe. For example, I think this should be a valid pattern (modulo the syntax of the BIND operator) but would be considered service-unsafe: > > SELECT * WHERE { > {} OPTIONAL {<foo> ns1:endpoint ?endpoint } > OPTIONAL {<foo> ns2:sparqlEndpoint ?endpoint } > OPTIONAL { BIND(?endpoint AS<http://default/endpoint>) } > SERVICE ?endpoint { ... } > } > > I think (but not completely sure) that this query could be rewritten by duplicating the SERVICE block inside each of the OPTIONAL branches. However, if that is in fact an equivalent rewriting, I'm not sure I want two semantically equivalent queries to be treated differently because the query engine/optimizer can't tell that they're equivalent. I think it should work (but I'm not sure about the behaviour of the BIND operator), I'll look at it more carefully after the call. again, apologies for this late reply, and thanks for the comments. The idea is to keep improving this definition. Carlos > thanks, > .greg > > >
Received on Tuesday, 19 October 2010 13:41:42 UTC