- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Thu, 25 Mar 2010 01:40:00 -0400
- To: SPARQL Working Group <public-rdf-dawg@w3.org>
This is in reference to http://www.w3.org/2009/sparql/track/actions/202 . It's not a complete proposal, but has most elements of one. I have not discussed this with Paul. 1/ Add FROM and FROM NAMED clauses to the INSERT/DELETE update form(s) in the same syntactic location and with the same semantics as SPARQL Query. This means: # UPDATE outline syntax : general form: [ WITH <uri> ] DELETE { modify_template [ modify_template ]* } INSERT { modify_template [ modify_template ]* } [ FROM <uri> ] [ FROM <uri> ] ... [ FROM NAMED <uri> ] [ FROM NAMED <uri> ] ... WHERE GroupGraphPattern The FROM and FROM NAMED clauses together specify an RDF Dataset. The default graph of the RDF Dataset is the RDF merge of the graphs identified in the FROM clauses. (This is as in SPARQL query.) All pattern matching in the GroupGraphPattern is performed against this RDF Dataset as per SPARQL Query semantics. I'd _like_ to be able to say that the RDF Dataset is a subset of the Graph Store, but given that the Graph Store defines a single unnamed graph whereas the RDF Dataset allows me to craft a default graph as the merge of multiple graphs, I don't know how to formally specify this subset relationship. 2/ Deal with the confusion between WITH and FROM/FROM NAMED by removing WITH entirely. On a recent teleconference, someone asked what the relationship between WITH and FROM/FROM NAMED would be. My gut reaction was: -- WITH gives the default graph for the INSERT and DELETE templates, while FROM/FROM NAMED give the graphs for the query pattern. I still think this is workable, but I also think it is confusing at best. Instead I would propose: * No WITH clause. * Triple patterns within a template that are not within a GRAPH clause are inserted into / deleted from the query's default graph. This graph is determined as follows: * If the query has a single FROM clause, that is the default graph * If the query has no FROM clause, the default graph is the Graph Store's unnamed graph (implementation defined) * If the query has multiple FROM clauses, the query is an error and/or undefined. In my mind, this would make SPARQL Update treat graphs and datasets in basically the same way as SPARQL Query, with the distinction that the template part of the update statements can refer to graphs not in the RDF Dataset by means of a GRAPH clause. WITH g1 INSERT { x y z } DELETE { a b c } FROM g2 WHERE { ... } becomes INSERT { GRAPH g1 { x y z } } DELETE { GRAPH g1 { a b c } } FROM g2 WHERE { ... } To me, this _slightly_ more verbose form is well worth removing the new WITH construct and unifying the dataset semantics of SPARQL Query and SPARQL Update. 3/ As with SPARQL Query, if no FROM or FROM NAMED is given, then the dataset is determined by the implementation. (I suspect this is just as in the update draft now - the dataset in this case is the Graph Store.) This means that a query like the example in 4.1.4 works by changing the WITH into a GRAPH clause. That is: PREFIX foaf: <http://xmlns.com/foaf/0.1/> WITH <http://example/addresses> DELETE WHERE { ?person foaf:firstName 'Fred'; ?property ?value } would become: PREFIX foaf: <http://xmlns.com/foaf/0.1/> DELETE WHERE { GRAPH <http://example/addresses> { ?person foaf:firstName 'Fred'; ?property ?value } } ...which, if we're counting characters, is 3 characters longer. Anyway, we can discuss later at the face-to-face, and my apologies for the very late nature of this proposal. Lee
Received on Thursday, 25 March 2010 05:40:49 UTC