- From: Axel Polleres <axel.polleres@deri.org>
- Date: Tue, 22 Feb 2011 21:51:39 +0000
- To: Andy Seaborne <andy.seaborne@epimorphics.com>
- Cc: "Steve Harris" <steve.harris@garlik.com>, "Paul Gearon" <gearon@ieee.org>, "SPARQL Working Group" <public-rdf-dawg@w3.org>
On 22 Feb 2011, at 17:28, Andy Seaborne wrote: > rq25 also says: > > """ > If any such instantiation produces a triple containing an unbound > variable or an illegal RDF construct, such as a literal in subject or > predicate position, then that triple is not included in the output RDF > graph. > """ > N.B. literals-not-objects as well. > from SPARQL 1.0 which seems sufficient to me, unless we find time to > include it in the formal section as suggested by Birte. ok. > > Template instantiation in SPARQL Update can't rely on CONSTRUCT because > CONSTRUCT constructs graphs, and update works on quads. yeah, as said in prev. mail, the definition of Dataset(template,P) needs some more work, it seems. > My example of bnodes+unbound variables was to ask in which order > processing takes places: reduce to legal RDF triples, then apply bnodes > -as-variables (so not bNodes in predicate position so the join/DISTINCT > has picked up more terms than needed) or to match and then reduce to > legal RDF, which needs to explain about named variables at the time of > matching. Not sure whether I understand the difference entirely. As I understood it so far, Dataset(template,P) would create an RDF dataset DS- or, synonymously, as you suggested a set of quads - analogously to the way CONSTRUCT creates RDF Graphs - i.e. a set of triples. DS would then be DIFFed from GS. > The test cases do not cover this [*], and the current formalisation in > the doc of Update only works for deleting in the presence of named > variables, not insertion. I have added two test cases (the one originally from your mail and the variant I had in my mail to Paul) now: dawg-delete-insert-08 dawg-delete-insert-09 but the solution to these depends on which semantics we choose (discussed as Option1-Option2-Option3 in today's TC, cf. [1] for the moment, I picked Option1-semantics in the test cases, to be decided/discussed next TC (and further on email, I hope). We might need more test cases along similar lines for INSERT still, probably: Any suggestions, volunteers welcome! best, Axel 1. http://www.w3.org/2009/sparql/meeting/2011-02-22#update_semantics > It can ignore illegal forms in delete in the > diff works because its removing things that can't be there. The same is > not true for INSERT. > > Andy > > [*] when I looked yesterday. > > On 22/02/11 09:20, Axel Polleres wrote: > > Hi Steve, > > > > I agree with your understanding of CONSTRUCT. > > > >> * but actually, I can't find anywhere in the SPARQL 1.1 draft that explicitly says that. Could well be looking in the wrong places though. > > > > > > As far as I can see, it is not really "formalized", but covered by the following sentence in Section 16.2 [1] > > > > "The result is an RDF graph formed by taking each query solution > > in the solution sequence, substituting for the variables in the graph template, > > and combining the triples into a single RDF graph by set union." > > > > I don't think we need to further formalise that, but it seems to me that it might be clearer to write: > > > > "The result is an RDF graph formed by taking each query solution > > in the solution sequence, substituting for the variables in the graph template, > > and combining the<a href="http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-rdf-triple">valid RDF triples</a> into a single RDF graph by set union." > > > > Opinions? > > > > (The treatment of bnodes in CONSTRUCT templates is covered by what is said in Section 16.2.1.) > > > > Axel > > > > > > > > 1. http://www.w3.org/2009/sparql/docs/query-1.1/rq25.xml#construct > > > > > > On 22 Feb 2011, at 08:43, Steve Harris wrote: > > > >> My recollection of CONSTRUCT is that the template would match*, but only completely bound triples would be output, so > >> > >> CONSTRUCT { > >> _:a :p 12 . > >> _:a :q ?o . > >> } > >> WHERE { > >> ?s :r ?q > >> OPTIONAL { ?s :s :o } > >> } > >> > >> Would give > >> > >> _:b1 :p 12 . > >> > >> This seems inline with a usecase for DELETE: "Delete this pattern, and if it exists also this pattern" e.g. > >> > >> DELETE { > >> ?x :name ?name . > >> ?x :phone ?phone . > >> } > >> WHERE { > >> ?x a :Person . > >> OPTIONAL { ?x :name ?name } > >> OPTIONAL { ?x :phone ?phone } > >> } > >> > >> When I wrote this pattern, my intention was that it would delete whatever names and phone numbers for people it could find. > >> > >> * but actually, I can't find anywhere in the SPARQL 1.1 draft that explicitly says that. Could well be looking in the wrong places though. > >> > >> - Steve > > > > >
Received on Tuesday, 22 February 2011 21:53:15 UTC