W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > April to June 2012

RE: Questions on grammar restrictions on Blank Node reuse across patterns and a more fundamental question on Update semantics for confirmation (was: Re:Draft response KK-15)

From: Polleres, Axel <axel.polleres@siemens.com>
Date: Thu, 24 May 2012 15:32:51 +0200
To: Andy Seaborne <andy.seaborne@epimorphics.com>, "public-rdf-dawg@w3.org" <public-rdf-dawg@w3.org>
Message-ID: <9DA51FFE5E84464082D7A089342DEEE80139B11A13F0@ATVIES9917WMSX.ww300.siemens.net>
Thanks for the quick response. I can live without the restriction for 
QuadData, i.e. allowing them to share bnodes (in fact, after re-thinking 
it makes things easier and is consistent with the behaviour outlined in 
the update1 example that graphs in the graph store can share bnodes.)... 
So we're in agreement. :-)

As for the steps to proceed:

> * Add the example of update1 from above to the update test cases, with outcome GS''.
>
> Not necessary but if you want to fine.  I think examples of corner cases are unhelpful - 
> concentrate on the important parts, examples do not cover everything.

Yes, I prefer to add that example, since I think it's rather clarifying intended behaviour than being a corner case only. Plus, despite I agree that we can't possivbly cover everyrging, I think we should strive for coverage wherever we are aware of. 

> > * Depending on 1) add
> >     INSERT DATA { GRAPH<g1>  { _:b1 :p :o} GRAPH<g2>  { 
> _:b1 :p :o} }
> >    as either a negative or positive syntax test, plus add 
> some clarifying
> >    remark on reuse of bnodes across QuadPatterns in the Update doc.
> 
> Positive test.

Fine with me.
 
> > * Add the restriction on blank node label usages across BGPs
> >    (and QuadPatterns? Depending on 1)) also to the grammar 
> restrictions
> >    in query, i.e. at 
> > http://www.w3.org/2009/sparql/docs/query-1.1/rq25.xml#sparqlGrammar
> 
> No.

I assume the "No" is for the QuadPAtterns part...  May I still suggest 
as small editorial fix to explicitly add the restriction on blank node 
label usages across BGPs in the numbered list in Section 19.8, i.e. 
add something like:

 <li>The same BLANK_NODE_LABEL must not appear in different GroupGraphPatterns 
  within the same query</li>

just in order to have *all* grammar restrictions in one place?


Any other opinions on any of the points above?

Cheers,
Axel
 
-- 
Dr. Axel Polleres 
Siemens AG Österreich 
Corporate Technology Central Eastern Europe Research & Technologies 
CT T CEE 
 
Tel.: +43 (0) 51707-36983 
Mobile: +43 (0) 664 88550859
Fax: +43 (0) 51707-56682 mailto:axel.polleres@siemens.com 
 

> -----Original Message-----
> From: Andy Seaborne [mailto:andy.seaborne@epimorphics.com] 
> Sent: Thursday, 24 May 2012 3:04 PM
> To: public-rdf-dawg@w3.org
> Subject: Re: Questions on grammar restrictions on Blank Node 
> reuse across patterns and a more fundamental question on 
> Update semantics for confirmation (was: Re:Draft response KK-15)
> 
> 
> 
> On 24/05/12 13:20, Polleres, Axel wrote:
> > Now for the question that came to my mind in relation to 
> the response 
> > to comment KK-15. Sorry it's a bit lengthy...
> >
> > In SPARQL 1.1 Query, we say in several places that blank 
> node labels 
> > may only be used in a single graph pattern in the query 
> pattern, e.g.
> > http://www.w3.org/TR/sparql11-query/#bgpBNodeLabels
> > http://www.w3.org/TR/sparql11-query/#grammarBNodeLabels
> >
> > The situation is not so clear for me in QuadPatterns in constructs.
> >   My understanding would be, that the restriction on not allowing 
> > reuse of blank node labels should also hold across different 
> > QuadPatterns as it is across basic grap patterns.
> >
> > i.e. for instance
> >
> >    INSERT DATA { GRAPH<g1>  { _:b1 :p :o} GRAPH<g2>  { _:b2 :p :o} }
> >
> > would be ok, but
> >
> >    INSERT DATA { GRAPH<g1>  { _:b1 :p :o} GRAPH<g2>  { _:b1 :p :o} }
> >
> > wouldn't, but I am not entirely sure.
> >   Do we *need* to restrict this?
> >   Do we *want* to restrict this?
> 
> No and no. Where "we" = "I"
> 
> This should be legal - it is inserting a share bNode which we allow
> 
> INSERT DATA does not take a quad *pattern* -- it's quad data.
> 
> > My guts feeling is that
> >
> >    INSERT DATA { GRAPH<g1>  { _:b1 :p :o} GRAPH<g2>  { _:b1 :p :o} }
> >
> > looks weird and shouldn't be allowed. On the other hand, it 
> doesn't seem to do harm either, since there is seemingly no 
> correlation between even same-labelled blank nodes across 
> graphs... i.e. it wouldn't be the "same" blank node, on the 
> other hand it would seem more clear cut to forbid it, even 
> with this understanding in mind, to be non-confusing for users.
> 
> Allow.
> 
> > However, even if we disallow that, I am afraid it doesn't 
> end here, so please *read on*:
> >
> > In our current semantics, the statement  that "there is no 
> correlation between even same-labelled blank nodes across 
> graphs" is - as I understand it - not quite true, see next:
> >
> 
> Where is that quoted text?
> 
> I can't find "correlated" in SPARQL Update or SPARQL Query.
> 
> 
> > The following example explains what makes my head spin now...
> > Take:
> >
> > Let your dataset consist of an empty default graph and two 
> named graphs g1, g2 as follows:
> > GS = {}
> >       <g1>  { _:b :p :o }
> >       <g2>  {}
> >
> > Now, let's write:
> >
> >    INSERT { GRAPH<g2>  { ?S ?P ?O } }
> >    WHERE { GRAPH<g1>  {?S ?P ?O } }
> >
> > which would result in the following:
> >
> > GS' = {}
> >       <g1>  { _:b :p :o }
> >       <g2>  { _:b :p :o }
> >
> > Now, however, what does a subsequent second repitition of
> >
> >    INSERT { GRAPH<g2>  { ?S ?P ?O } }
> >    WHERE { GRAPH<g1>  {?S ?P ?O } }
> >
> > result into?
> 
> No change - the real and actual bnode is the same.  Shared 
> bNodes (which are essential for subgraphs).
> 
> > According to the current semantics definition, my understanding it 
> > that this still results in:
> >
> > GS'' = {}
> >       <g1>  { _:b :p :o }
> >       <g2>  { _:b :p :o }
> 
> Good.
> 
> Bnodes are real objects you can manipulate.  They have an 
> internal unique identifier.  All this _:a business is merely 
> a label in a file and systems produce an internal identifier 
> for them (even the ones that claim otherwise have a pointer 
> to a datastructure so that is the internal name).
> 
> > Now, while this is against the possible intuition mentioned 
> above that 
> > there is no correlation between even same-labelled blank 
> nodes across 
> > graphs, it confirms the intuition that copying the same graph to 
> > itself is an idempotent operation, which - within a 
> graphstore would 
> > IMO makes sense. What do the current implementations do with this?
> >
> > The alternative would be that the result of two subsequent 
> > applications of this update would be:
> >
> > GS''' = {}
> >       <g1>  { _:b :p :o }
> >       <g2>  { _:b1 :p :o , _:b2 :p :o }
> 
> -1
> 
> >
> > But note that this would need, I am afraid, a significant change in 
> > the update document. I do rather *not* intend to make any 
> changes in 
> > the semantics at this point, but would prefer to make clear/confirm 
> > that the intended outcome is GS''.
> > Particularly, as saind above, I think that the semantics should be 
> > GS'' in order to make copying a graph on itself twice idempotent.
> 
> Yes (although the reason is deeper than just idempotency).
> 
> >
> > Still, I want to ask for clarification to the group on the 
> following two things:
> >
> > 1) Do we want to forbid "sharing bnodes across" across 
> QuadPatterns in INSERT and INSERT
> >     DATA?
> 
> I don't want to forbid it.
> 
> >
> > 2) Do we agree that the semantics of
> >
> >    update1 =  INSERT { GRAPH<g2>  { ?S ?P ?O } }
> >               WHERE { GRAPH<g1>  {?S ?P ?O } } ;
> >               INSERT { GRAPH<g2>  { ?S ?P ?O } }
> >               WHERE { GRAPH<g1>  {?S ?P ?O } }
> >
> >    should be GS'' (and not GS''')?
> 
> Yes
> 
> >
> > If we agree, I suggest to add the following points to proceed:
> >
> > * Depending on 1) add
> >     INSERT DATA { GRAPH<g1>  { _:b1 :p :o} GRAPH<g2>  { 
> _:b1 :p :o} }
> >    as either a negative or positive syntax test, plus add 
> some clarifying
> >    remark on reuse of bnodes across QuadPatterns in the Update doc.
> 
> Positive test.
> 
> > * Add the restriction on blank node label usages across BGPs
> >    (and QuadPatterns? Depending on 1)) also to the grammar 
> restrictions
> >    in query, i.e. at 
> > http://www.w3.org/2009/sparql/docs/query-1.1/rq25.xml#sparqlGrammar
> 
> No.
> 
> > * Add the example of update1 from above to the update test 
> cases, with outcome GS''.
> 
> Not necessary but if you want to fine.  I think examples of 
> corner cases are unhelpful - concentrate on the important 
> parts, examples do not cover everything.
> 
> > (Note that I still need to re-check the current test cases whether 
> > something similar is covered already, if someone can point me, 
> > thanks!)
> >
> >
> > Best,
> > Axel
> >
> > --
> > Dr. Axel Polleres
> > Siemens AG Österreich
> > Corporate Technology Central Eastern Europe Research&  
> Technologies CT 
> > T CEE
> >
> > Tel.: +43 (0) 51707-36983
> > Mobile: +43 (0) 664 88550859
> > Fax: +43 (0) 51707-56682 mailto:axel.polleres@siemens.com
> 
> 
Received on Thursday, 24 May 2012 13:33:26 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:48 GMT