# Syntax issues, UNION and MINUS

From: Andy Seaborne <andy.seaborne@talis.com>
Date: Mon, 14 Jun 2010 12:27:57 +0100
Message-ID: <4C16123D.7090905@talis.com>
To: SPARQL Working Group <public-rdf-dawg@w3.org>
```In SPARQL 1.0,

{ A {B} UNION {C} }

where A, B, C are basic graph patterns

e.g:

{ :x :p ?v {?v :q1 ?v1} UNION {?v :q2 ?v2 } }

parses as:

group of
A
{B} UNION {C}

group of
BGP(:x :p ?v)
BGP(?v :q1 ?v1) UNION BGP(?v :q2 ?v2)

which becomes the algebra:

join(
A
union(B,C)
)

We discussed enabling a simpler form of UNION which might look like:

{ X UNION {Y} }

omitting the {} on the LHS.

To be fully compatible with SPARQL 1.0

{ {A} B UNION {C} }

is still :
join(
A
union(B,C)
)

[Caution: There is a bug in the current SPARQL 1.1 grammar here]

In SPARQL 1.0, OPTIONAL behaves differently: it extends whatever is in
the group at that point in the paring process:

{ A {B} OPTIONAL {C} }

so the LHS of the OPTIONAL  is "A {B}" or:

group of
A
{B}
OPTIONAL {C}

which is the algebra:

leftjoin(
join(A,B)
C
)

{ :x :p ?v {?v :q1 ?v1} OPTIONAL {?v :q2 ?v2 } }
=>
leftJoin(
join(BGP(:x :p ?v), BGP(?v :q1 ?v1))
C
)

The question is what is MINUS?  Is it like UNION or like OPTIONAL?

{ A {B} MINUS {C} }

Either:
minus(
join(A,B)
C
)

or

join(
A
minus(B,C)
)

{ :x :p ?v {?v :q1 ?v1} MINUS {?v :q2 ?v2 } }

=>
minus(
join(BGP(:x :p ?v), BGP(?v :q1 ?v1))
C
)

or
join(
BGP(:x :p ?v)
minus(BGP(?v :q1 ?v1), BGP({?v :q2 ?v2)
)

and whether a form of MINUS which is

{ {A} B MINUS {C} }

should allowed and whether it has the expected meaning (and what do we
expect it to mean).

Andy
```
Received on Monday, 14 June 2010 11:28:34 UTC

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