- From: Steve Harris <steve.harris@garlik.com>
- Date: Wed, 28 Apr 2010 16:29:27 +0100
- To: Paul Gearon <gearon@ieee.org>
- Cc: SPARQL Working Group <public-rdf-dawg@w3.org>
Mostly seems good, but I found a bit of optional syntax to complain about :) I'm a bit concerned about the optional-ness of WHERE in DELETE INSERT: > [ 'WITH <' uri '>' ] > 'DELETE {' modify_template [ modify_template ]* '}' > 'INSERT {' modify_template [ modify_template ]* '}' > [ 'USING <' uri '>' ]* > [ 'USING NAMED <' uri '>' ]* > [ 'WHERE' ] GroupGraphPattern This implies that DELETE { <a> <b> <c> } INSERT { <d> <e> <f> } { <x> <y> <z> } would be legal syntax, and with some pretty non-obvious behaviour. It's not optional in DELETE or INSERT individually, so it seems odd that it is here. - Steve On 2010-04-28, at 16:04, Paul Gearon wrote: > Initially sent to Andy, but the whole list should see this as well... > > > This is not formal, but here is the update syntax as it stands, along > with examples. I don't expect it to be completely correct, > but hopefully it is close. > > Regards, > Paul Gearon > > --- Insert data --- > > 'INSERT DATA {' graph_triples '}' > graph_triples :: = TriplesBlock | 'GRAPH <' graph_uri '> {' TriplesBlock '}' > > Eg: > PREFIX dc: <http://purl.org/dc/elements/1.1/> > INSERT DATA > { <http://example/book3> dc:title "A new book" ; > dc:creator "A.N.Other" . > } > > > --- Delete data --- > > 'DELETE DATA {' graph_triples '}' > > Eg: > PREFIX dc: <http://purl.org/dc/elements/1.1/> > DELETE DATA > { <http://example/bookx> dc:title "David Copperfield" ; > dc:creator "Edmund Wells" . > } > > > // Before semicolons were chosen to separate operations, > // the following was a valid example. I don't think that it > // is still valid without a semicolon. and a repeated PREFIX. > > PREFIX dc: <http://purl.org/dc/elements/1.1/> > DELETE DATA > { GRAPH <http://example/bookStore> { <http://example/book3> dc:title > "Fundamentals of Compiler Desing" } } > INSERT DATA > { GRAPH <http://example/bookStore> { <http://example/book3> dc:title > "Fundamentals of Compiler Design" } } > > > --- Delete/Insert --- > > [ 'WITH <' uri '>' ] > 'DELETE {' modify_template [ modify_template ]* '}' > 'INSERT {' modify_template [ modify_template ]* '}' > [ 'USING <' uri '>' ]* > [ 'USING NAMED <' uri '>' ]* > [ 'WHERE' ] GroupGraphPattern > > modify_template :: = ConstructTriples | graph_template > graph_template ::= 'GRAPH' VarOrIRIRef '{' ConstructTriples '}' > > Eg: > PREFIX foaf: <http://xmlns.com/foaf/0.1/> > WITH <http://example/addresses> > DELETE { ?person foaf:firstName 'Bill' } > INSERT { ?person foaf:firstName 'William' } > WHERE > { ?person a foaf:Person . > ?person foaf:firstName 'Bill' > } > > > --- Delete --- > > [ 'WITH <' uri '>' ] > 'DELETE' [ '{' modify_template [ modify_template ]* '}' ] > 'WHERE' GroupGraphPattern > > Eg: > PREFIX dc: <http://purl.org/dc/elements/1.1/> > PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> > DELETE > { ?book ?p ?v } > WHERE > { ?book dc:date ?date . > FILTER ( ?date < "2000-01-01T00:00:00-2:00"^^xsd:dateTime ) > ?book ?p ?v > } > > Eg2: > PREFIX foaf: <http://xmlns.com/foaf/0.1/> > WITH <http://example/addresses> > DELETE WHERE { ?person foaf:firstName 'Fred'; > ?property ?value } > > > --- Insert --- > > [ 'WITH <' uri '>' ] > 'INSERT {' modify_template [ modify_template ]* '}' > 'WHERE' GroupGraphPattern > > Eg: > PREFIX dc: <http://purl.org/dc/elements/1.1/> > PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> > INSERT > { GRAPH <http://example/bookStore2> { ?book ?p ?v } } > WHERE > { GRAPH <http://example/bookStore> > { ?book dc:date ?date . > FILTER ( ?date < "2000-01-01T00:00:00-2:00"^^xsd:dateTime ) > ?book ?p ?v > } } > > > Eg2: > // The following was also valid before the semicolon decision > // I'm pretty sure that we now need a semicolon and a repeated > // set of prefixes. > > PREFIX dc: <http://purl.org/dc/elements/1.1/> > PREFIX dcmitype: <http://purl.org/dc/dcmitype/> > PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> > > INSERT > { GRAPH <http://example/bookStore2> { ?book ?p ?v } } > WHERE > { GRAPH <http://example/bookStore> > { ?book dc:date ?date . > FILTER ( ?date < "2000-01-01T00:00:00-2:00"^^xsd:dateTime ) > ?book ?p ?v > } > } > WITH <http://example/bookStore> > DELETE > { ?book ?p ?v } > WHERE > { ?book dc:date ?date ; > dc:type dcmitype:PhysicalObject . > FILTER ( ?date < "2000-01-01T00:00:00-2:00"^^xsd:dateTime ) > ?book ?p ?v > } > > > --- Load --- > > 'LOAD <' documentURI '>' [ 'INTO <' uri '>' ] > > Eg: > LOAD <http://example.com/data/graph.rdf> INTO <http://service.com/graph> > > > --- Clear --- > > 'CLEAR' [ 'GRAPH <' uri '>' ] > > Eg: > CLEAR GRAPH <http://service.com/graph> > > > --- Create --- > > 'CREATE' [ 'SILENT' ] 'GRAPH <' uri '>' > > Eg: > CREATE <http://service.com/graph> > > > --- Drop --- > 'DROP' [ 'SILENT' ] 'GRAPH <' uri '>' > > Eg: > DROP SILENT <http://service.com/graph> > > > Regards, > Paul Gearon > -- Steve Harris, Garlik Limited 1-3 Halford Road, Richmond, TW10 6AW, UK +44 20 8439 8203 http://www.garlik.com/ Registered in England and Wales 535 7233 VAT # 849 0517 11 Registered office: Thames House, Portsmouth Road, Esher, Surrey, KT10 9AD
Received on Wednesday, 28 April 2010 15:29:58 UTC