Re: Bnodes in DELETE templates

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