- From: Axel Polleres <axel.polleres@deri.org>
- Date: Sat, 9 Jan 2010 01:26:31 +0000
- To: SPARQL Working Group <public-rdf-dawg@w3.org>
- Message-Id: <2FD80D53-87AB-4CD2-B931-6941BDE15EFE@deri.org>
added this comment to http://www.w3.org/2009/sparql/wiki/Comments volunteers to pick it up, welcome! Axel Begin forwarded message: > Resent-From: public-rdf-dawg-comments@w3.org > From: "Richard Newman" <rnewman@twinql.com> > Date: 9 January 2010 00:32:52 GMT > To: <public-rdf-dawg-comments@w3.org> > Subject: SPARQL 1.1 Update > archived-at: <http://www.w3.org/mid/4DE4ACE6-BA40-4180-95F2-CFE6EBAB7175@twinql.com> > > Hi folks, > > A few questions/comments on the Update portion of the 1.1 draft: > > * DELETE/MODIFY/INSERT are described in terms of CONSTRUCT templates. > CONSTRUCT templates allow blank nodes, which are generated as fresh > blank nodes for each input row. This makes sense for INSERT, but it > doesn't make sense for DELETE: the fresh blank node will never match a > triple in the store, than thus > > DELETE { ?s ?p [] } WHERE { ?s ?p ?o } > > is a no-op by definition. It would be good for this issue to be > addressed in the spec, with one of the following possible resolutions: > > 1. Forbid blank nodes in a DELETE template. > > 2. Define those blank nodes as being null placeholders, such that > > DELETE { ?s _:x _:y } WHERE { ?s rdf:type rdfs:Class } > > would delete every triple whose subject is an rdfs:Class. > > 3. Document that DELETE triple patterns containing blank nodes will > never match. > > * INSERT et al permit multiple "INTO" URIs: > > INSERT [ INTO <uri> ]* { template } [ WHERE { pattern } ] > > but the text discusses the graph in the singular ("The graph URI, if > present, must be a valid named graph..."). Is it intended that '*' > actually be '?'? > > If not, the text should be changed, and text added to describe how an > implementation should process multiple graphs: e.g., should they run > DELETE then INSERT on each graph in turn, or should all DELETEs be > batched together prior to the INSERTs? > > * Re atomicity: it would seem that, for systems which will allow > multiple SPARQL/Update requests within a single transaction, the > requirement that "Each request should be treated atomically by a > SPARQL-Update service" is onerous. I don't know of too many systems > that support sub-transactions, and thus implementations will be forced > to take one of two routes: > > 1. Violating the spec: "sorry pal, that doesn't apply: our > transactions have multi-request scope" > 2. Annoying users: "sorry pal, we aborted your transaction because > SPARQL 1.1 says we have to, even though you wanted to handle it > yourself". > > Neither choice is beneficial to users (the former because it reduces > their ability to rely on the spec). I'd suggest changing the language > to require that implementations provide "some method of atomically > executing the entire contents of a SPARQL/Update request", which > allows for the execution of a request within an existing transaction, > as well as for approaches that execute requests within their own new > transaction. > > * There doesn't seem to be any mention at all of responses in the > draft. Is that intentional? > > * Re LOAD: if we can have CREATE SILENT, how about LOAD SILENT, which > doesn't fail (and abort your transaction!) if the LOAD fails? > > * I'd like to throw my 2¢ in for Issue 20. > > It strikes me as a little short-sighted to assume that every store > operates with first-class graph objects, such that they can be created > and deleted in a closed-world fashion: not only does this conflict > with some implementations (e.g., those which use quad stores to > efficiently implement named graphs, and those which dynamically load > data from a graph on an ad hoc basis), but it also is dissonant with > the "triple stores are caches of the semantic web" open-world view. > > I see in emails text like "We have agreed on the need to support a > graph that exists and is empty"[1]. I would like to see strong > supporting evidence for this in the spec (or some other persistent and > accessible place) before resolving this issue. I personally don't see > any need to distinguish an empty graph (after all, it's easy to add an > all-bnodes triple to it to make it non-empty but without excess > meaning). > > I note that there is no proposal for CREATE SUBJECT (or PREDICATE or > OBJECT), nor CREATE LANGTAG. I see little point in unnecessarily > special-casing one value space to reduce its dynamism. > > From interactions with users, I expect that "oh, you mean I have to > CREATE a graph before I can use it in an INSERT query?" will be a > common question, and "always preface your query with CREATE SILENT..." > the pervasive response. Seems like a waste of time to me. > > (Regardless of the official outcome of the issue, my implementation is > unlikely to strictly follow the CREATE/DROP behavior, because it would > be inefficient to track graphs for the sole purpose of throwing errors > in edge cases. CREATE will be a no-op, and DROP will be identical to > CLEAR.) > > Thanks for your time. > > -Richard Newman > > [1] <http://lists.w3.org/Archives/Public/public-rdf-dawg/2010JanMar/0070.html > > >
Received on Saturday, 9 January 2010 01:27:07 UTC