- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Mon, 04 Oct 2010 15:32:37 +0100
- 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 UTC