W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > January to March 2011

SPARQL 1.1 Update Review (part 2)

From: Andy Seaborne <andy.seaborne@epimorphics.com>
Date: Thu, 10 Mar 2011 16:48:22 +0000
Message-ID: <4D7900D6.8020602@epimorphics.com>
To: SPARQL Working Group <public-rdf-dawg@w3.org>
==== SPARQL Update (part 2)
This completes my review.

Covers section 4 onwards but also ..

=== 3.1.1 INSERT DATA

INSERT DATA { graph_triples }

Graph triples are defined as:

   graph_triples ::= TriplesBlock | GRAPH <uri> { TriplesBlock }

This disallows:

INSERT DATA { :s :p :o . GRAPH :g { :s1 :p1 :o } }
INSERT DATA { GRAPH :g2 {:s :p :o } . GRAPH :g { :s1 :p1 :o } }

Is there a reason for this?
The grammar allows it.

Its seems unnecessary to force the application to separate out the triples.

This is repeated:
modify_template ::= ConstructTriples | graph_template
= 3.1.4 DELETE
= 3.1.5 INSERT

== Section 4:

I suggest a section on how certain forms map to other forms, then must 
define the fundamental forms.

Rewrites for ADD, COPY, MOVE (some text exists elsewhere but should be 
in the formal section)

Maybe CLEAR as well.


Something on WITH and USING to formalise them as syntactic features. 
There is material elsewhere but I feel the formal section should be 
self-contained able to cover all SPARQL Update.

Need an account of how the syntax maps to the operations.  It's fairly 
obvious but probably should be said.

== 4.1.1 Graph Store

[]  s/associated to/associated with/

[*] Say the IRIi are distinct.

[] It says: "1 <= i <= n" but nothing about n

== 4.1.2 Update Operation

The "t+1" notation isn't used anywhere.

As the state of a store only depends on the previous state and the 
operation and not t-2, it's not necessary.

Is this definition used anywhere?  I could immediately see that it's 
needed and wondered if it is historical now.

== 4.2 Auxiliary Definitions
== 4.2.1 Dataset-UNION

[*] An RDF dataset is a set { DG, (<u_i>, G_i)} -- write it same as 
query has it, not "DG' union {(iri'j, G'j) | 1 <= j <= m})"

[**] Not merge - this must be a union. not rename blank nodes apart. 
Otherwise one operation followed by another will not update the same 
bNode.  And  datseta-diff is not going to work.

== 4.2.2 Dataset-DIFF

[*] dataset comment as dataset-union.
[**] Its says "merge" (bullet 3). Should be set-difference or minus.
[] G_j should be G sub j.

== 4.3.1 Insert Data Operation

graph_triples, i.e. either a dataset consisting of a single named graph 
and an empty default graph
[**] As we have defined dataset-union, I think this should be dataset 
union, nor limited to one graph.  See also the graph_triples issue above.

== 4.3.2 Delete Data Operation

[**] graph_triples

== 4.3.3 Delete Insert Operation

Triples are identified as they match a particular Group Graph Pattern P.
[**] The triples here are the ones to be deleted or inserted - they are 
not identified by matching - there is a template stage in between.

[**] Define modify_template sub DEL  and  modify_template sub INS

[**]  Dataset(modify_template, P)

Write this out formally:

Dataset(modify_template, P) = {  instantiate(modify_template)  |  μ a 
solution of P }

instantiate(modify_template) = ....

These are superseded if there is an abbreviated forms section:
   == 4.3.4 Delete Operation
   == 4.3.5 Insert Operation
   == 4.3.6 Delete Where Operation

== 4.3.7 Insert Where Operation
[**] What's this used with?
"Insert Where ... are *deleted* from the Graph Store"

== 4.4.1 Create Operation

[*] Either something on what happens about empty graphs or, in the 
section intro, say the definitions assume we can have empty graphs.  the 
latter is probably better.

== 5 Conformance
[*] remove / update name to "RDF Dataset HTTP Protocol"
Received on Thursday, 10 March 2011 16:49:00 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:45 GMT