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

RE: another update test added (was: RE: Questions on grammar restrictions on Blank Node reuse across...)

From: Polleres, Axel <axel.polleres@siemens.com>
Date: Mon, 28 May 2012 14:36:12 +0200
To: Andy Seaborne <andy.seaborne@epimorphics.com>
CC: "public-rdf-dawg@w3.org" <public-rdf-dawg@w3.org>, Gregory Williams <greg@evilfunhouse.com>
Message-ID: <9DA51FFE5E84464082D7A089342DEEE80139AEF88D42@ATVIES9917WMSX.ww300.siemens.net>
> What do the definitions say?

The current definitions that affect this behavior are
1) Dataset-UNION (df. http://www.w3.org/2009/sparql/docs/update-1.1/Overview.xml#def_datasetUnion )
 which does NOT standardize apart blank nodes
2) Dataset( QuadPattern,  P, DS, GS ) (cf. http://www.w3.org/2009/sparql/docs/update-1.1/Overview.xml#def_datasetPattern)
 which explicitly says that the scoping graph SG used for BGP matching is equal to the active graph,  i.e., blank nodes from the active graph are preserved in solutions.

"Historically" when we did that, it was because we wanted to preserve bnodes in updates on the same graph.

I.e., on 

  GS = {}
    <g1> { _:b :p :o }
a request such as:

update3 = 
 INSERT { GRAPH <g1> { ?S :q :o } }
 INSERT { GRAPH <g1> { ?S :p :o } }

should result in  

  GS' = {}
    <g1> { _:b :p :o ; :q :o }

instead of 

  GS'' = {}
    <g1> { _:b :p :o . _:c :q :o }

We didn't make any special assumptions about moving bnodes *across* graphs in the definitions for Dataset-UNION, and Dataset(),
that is, in this sense I understand these definitions such that the result of update1 and update 2 (from the previous mails 
should be equivalent. Anything else, it seems to me, would need a modification of the Update semantics definitions. 

Now, there is some room probably of what we consider "equivalent" for datasets... and that might have to do with
implementations... As Greg put it, he said that update1 would be idempotent, but he would return 
different bnode-ids, on update1, that was

GS'''' = {}
    <g1> { _:b :p :o }
    <g2> { _:c :p :o }

Question to greg here: is this because bnode-labels in greg's implementations are graph-specific? If so, and if these label 
renamings across graphs are round-trippable, then update 2 should probably also be idempotent, i.e. still the result would be 

GS'''' = {}
    <g1> { _:b :p :o }
    <g2> { _:c :p :o }

Is that so?

Axel (unfortunately probably not be able to dial in tomorrow being at ESWC)
From: Andy Seaborne [andy.seaborne@epimorphics.com]
Sent: Monday, May 28, 2012 11:47 AM
To: Polleres, Axel
Cc: public-rdf-dawg@w3.org; Gregory Williams
Subject: Re: another update test added (was: RE: Questions on grammar restrictions  on Blank Node reuse across...)

On 28/05/12 10:16, Polleres, Axel wrote:
> Dear all,
> I am a bit unsure/worried in the sense of what happens if I think this further...
> Take this simple modification:
> update2 =  INSERT { GRAPH<g2>    { ?S ?P ?O } }
>              WHERE { GRAPH<g1>    {?S ?P ?O } } ;
>             INSERT { GRAPH<g1>    { ?S ?P ?O } }
>              WHERE { GRAPH<g2>    {?S ?P ?O } }
> Note now the second update copies back data from g2 to g1 instead of repeating the first update...
> Would this second operation still be idempotent or not?

What do the definitions say?


> Best,
> Axel
Received on Monday, 28 May 2012 12:36:53 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:01:06 UTC