- From: Paul Gearon <gearon@ieee.org>
- Date: Tue, 8 Feb 2011 11:24:45 -0500
- To: Lee Feigenbaum <lee@thefigtrees.net>
- Cc: Axel Polleres <axel.polleres@deri.org>, SPARQL Working Group <public-rdf-dawg@w3.org>, Alexandre Passant <Alexandre.Passant@deri.org>
On Tue, Feb 8, 2011 at 9:58 AM, Lee Feigenbaum <lee@thefigtrees.net> wrote: > On 2/7/2011 10:38 PM, Paul Gearon wrote: >> >> Alex originally dealt with Axe's review, but I am going over it now. >> >> I have a question about Axel's point 27: >> >> >> On Thu, Sep 30, 2010 at 6:10 PM, Axel Polleres<axel.polleres@deri.org> >> wrote: >>> >>> 27) >>> "Using a new blank node in a delete template will lead to nothing being >>> deleted, as the new blank node cannot match anything that already exists." >>> >>> this seems to contradict resolution >>> http://www.w3.org/2009/sparql/meeting/2010-03-09#resolution_2 >>> I haven't seen any resolution overriding that, but I might have missed >>> that. Even if we decided to override that resolution, it is not entirely >>> clear to me what "new" blank node means exactly here. >> >> Here is a copy of the resolution that Alex mentions: >> >> "Blank nodes in DELETE templates act as "wild cards", effectively as >> variables bound to all RDF terms; the same blank node cannot be used >> in the WHERE clause and the template, or in multiple BGPs" >> >> Unfortunately, I was not at this meeting, and it's something that I >> missed when the minutes came around. I find this to be an unfortunate >> decision, as it effectively makes the template part of the WHERE >> clause. To illustrate, the operation: >> >> DELETE { [] :p ?x } >> WHERE { ?x :q :z } >> >> Is going to be effectively the same as: >> >> DELETE { ?a :p ?x } >> WHERE { ?x :q :z . ?a ?p ?o } > > Right, this was the goal of the resolution. Can you explain your concern? It brings some of the operation of the WHERE clause into the DELETE clause. In general, the WHERE clause provides bindings by doing a query on the data, while the DELETE clause is a template that describes triples/quads based on those bindings. The above approach allows the DELETE clause to participate in the query, which blurs the operations between the two clauses. The syntax also seems misleading. I expect that users being introduced to this would expect [] to bind only to blank nodes. I know that blank nodes in WHERE clauses have always bound to anything, but until now templates (ie. in CONSTRUCT queries) have always used [] to refer to blank nodes. So this is another case where the DELETE template is taking on some of the semantics of the WHERE clause. >From a practical perspective, this means that the parse/transformation code needs to update the query portion of this operation based on the template. I can usually keep them separate, and this is an exception that doesn't seem to have any benefit. Given that it's easy to express a "wildcard" with a variable and an update to WHERE, then I don't see any benefits to this semantics. Instead I see it as an annoying exception. >> (ignoring the existence of the ?p and ?o) >> >> I'm really uncomfortable with this. Is it set in stone? > > Like all decisions, we can revisit it if there is new information that was > not originally considered, but the later we get in the process, the higher > the bar for substantive new information to cause us to change a decision > should probably be. It's not a large part of the Update document, and it's easy for me to change either way. The document doesn't currently match the resolution, so I'm supposed to update it right now. However, it's not a change I like making for the above reasons, which is why I would like the resolution revisited. Regards, Paul Gearon
Received on Tuesday, 8 February 2011 16:25:22 UTC