- From: Axel Polleres <axel.polleres@deri.org>
- Date: Wed, 16 Mar 2011 15:39:20 +0000
- To: Andy Seaborne <andy.seaborne@epimorphics.com>
- Cc: "SPARQL Working Group" <public-rdf-dawg@w3.org>
- Message-Id: <584F0D66-9856-48AC-9FA1-8E2FDF4D3819@deri.org>
Hi Andy, all, > [*] 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})" Indeed, an RDF dataset is a set: { G, (<u1>, G1), (<u2>, G2), ... (<un>, Gn) } that is just the same as writing { G } union {(iri'j, G'j) | 1 <= j <= n } so, G would need to be in parentheses at least, I see. BTW, I think we should probably just unify the definitions of Graph Store and Dataset. Next, I was thinking a bit about the following: >> Dataset(modify_template, P) = { instantiate(modify_template) | μ a solution of P } >> >> instantiate(modify_template) = .... > I couldn't really come around for a definition of instantiate(), but - at least inspired by your suggestion - I think something like the following would work: ---------------------------------------------------------------------- ======================================= Auxiliary Definition: Dataset(modify_template, μ ) Let μ be a solution mapping. * For a modify_template of the form '{ TriplesBlock }' Dataset(modify_template, μ ) is the Dataset consisting of only a default graph composed by all valid RDF triples obtained from substituting the variables in TriplesBlock according to μ and combining the triples into a single RDF graph by set union. * For a modify_template of the form 'GRAPH VarOrIRIref { TriplesBlock }' Dataset(modify_template, μ ) is the Dataset consisting of the empty default graph and a named graph μ(VarOrIRIref) composed by all valid RDF triples obtained from substituting the variables in TriplesBlock according to μ and combining the triples into a single named RDF graph by set union. * For a complex modify_template of the form '{ modify_template1 modify_template2 }' Dataset(modify_template, μ ) = Dataset-UNION ( Dataset(modify_template1, μ ) , Dataset(modify_template2, μ ) ) ======================================= ======================================= Definition: Dataset(modify_template, P, GS ) Let sk() is a bijection that replaces every bnode identifier in the graph store GS with a unique fresh constant and sk^-1() is the inverse mapping to sk() reintroducing the original bnode labels. Dataset(modify_template, P, GS ) = Dataset-UNION( sk^-1( Dataset(modify_template, μ) ) ) over all μ such that μ is a solution of P over Dataset sk(GS) ======================================= Here, the application of sk() prior to query evaluation guarantees that co-referent bnode identifiers in GS are not "lost" during pattern evaluation, cf. 17.3.2 Treatment of Blank Nodes of SPARQL1.1 Query. ---------------------------------------------------------------------- The functions sk and sk^-1 are needed to address the problem we discussed in [1] I can also attempt to put that in the xml form necessary for Update. best, Axel 1. http://lists.w3.org/Archives/Public/public-rdf-dawg/2011JanMar/0328.html > On 10 Mar 2011, at 16:48, Andy Seaborne wrote: > ==== 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: > = 3.1.2 DELETE DATA > = 3.1.3 DELETE/INSERT > 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) > DELETE WHERE, DELETE {} WHERE, INSERT {} WHERE > > Maybe CLEAR as well. > > then define DELETE{}INSERT{}WHERE{}, LOAD, CREATE, DROP, INSERT DATA, > DELETE DATA. > > 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 Wednesday, 16 March 2011 16:01:12 UTC