W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > October to December 2010

Review of Update Formal Model

From: Andy Seaborne <andy.seaborne@epimorphics.com>
Date: Mon, 04 Oct 2010 15:32:37 +0100
Message-ID: <4CA9E585.2080905@epimorphics.com>
To: SPARQL Working Group <public-rdf-dawg@w3.org>
v1.65
Main points:
The definitions look right.

I have a suggestion to write them differently for clarity (the details 
need careful checking but I thought "now" and "outline" was better than 
"later" and "detailed").

	Andy

-------------

4.1.2:
The use of time isn't necessary - see below where t isn't used.

4.1.3 UpdateOperation
Need to define UpdateRequest as a sequence of UpdateOperations.  An 
UpdateRequest is atomic.

Applying an UpdateRequest is defined as applying each UpdateOperation in 
sequence order.

4.2.1 InsertDataOperation

Need to say something about how the {triples} and {(<i>, triples_i)} 
come about.

It's {(<i>, {triples_i)}} -- an extra {} to show it's a set of triples
a set of pairs of uri and a set of triples (= a graph).

<i> gets overused.  It would be clearer to distinguish <i> in the 
starting GS and the <j>, say, coming from the operation.

UNION: Set union doesn't quite do the right there here.  It does not 
merge the two structures which is what we want.

I think the best way is to define two auxillary operations GS-UNION  and 
GS-DIFF that do the work (they get used several times in the definitions):

Write DS' = {triples}, {(<j>, {triples_j})}) from parsing
then

Write I for the set of <i>, J for the set of <j>


OpInsertData(GSS(GS), DS') = GS-UNION(GSS,DS')

where
GS-UNION(GSS, DS) =
GS-UNION((DG1, {(<i>, G_i)}), (DG2, {(<j>, G_j)}) =
    ( DG1 union DG2,
      {{triples_k}) | k in I union J })

where
{triples_k} = {triples_i} union { triples_j}
               if i = k, j = k and k in I and k in J

{triples_k} = {triples_i} if i = k, k in I and k not in J
{triples_k} = {triples_j} if j = k, k in J and k not in I


GS-DIFF is the same except
{triples_k} = {triples_i} set-difference { triples_j}
               if i = k, j = k and k in I and k in J
{triples_k} = {triples_i} if i = k, k in I and k not in J
No { triples_k} if k in J and not I.

Without the auxiliary functions, I found myself having to repeat this 
block of definitions which lead to rather large definitions.

4.2.2 DeleteDataOperation
Same except GS-DIFF and mention what happens about any (<i> {}) that arise.

4.2.3 DeleteInsertOperation

Could this be broken up a bit?

P = pattern (WHERE clause)
B = bindings from solve P
D = delete template
I = insert template

X = ({triples}, {(<i> {triples_i})} formed by D(B)
Y = ({triples}, {(<i> {triples_i})} formed by I(B)

OpDeleteInsert(GSS(GS), D, I, P) =
   GS-UNION(GS-DIFF(GSS, X), Y)


4.2.4, 4.2.5 similarly.

4.2.6 DeleteWhereOperation

Set D=P, noting the restricted P.

4.2.7 LoadOperation

Define X = triples from remote and use GS-UNION

4.3.2

s/{()}/{}/ --it's an empty set, no tuples. () woudl be the zero-length 
tuple.
Received on Monday, 4 October 2010 14:33:20 GMT

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