- From: Steve Harris <S.W.Harris@ecs.soton.ac.uk>
- Date: Thu, 11 Nov 2004 01:44:40 +0000
- To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
On Tue, Nov 09, 2004 at 10:01:01 +0000, Andy Seaborne wrote:
> Steve Harris wrote:
> >On Mon, Nov 08, 2004 at 03:39:32PM +0000, Andy Seaborne wrote:
> >
> >>A/ Section 6: More Pattern Matching ??? Alternatives
> >>
> >>Text added that uses UNION to handle alternatives, having looked through
> >>the email traffic on the comments list, on this list and on what various
> >>systems do about it. I had a brief conversation with Steve before
> >>travelled to let him know I would be doing this.
> >
> >
> >Andy, just to check I understand what it means - those {}'s in the UNION
> >examples are just sugar, yes?
> >
> >In principle
> >
> >SELECT ?title ?author
> >WHERE ( ?book dc10:title ?title )
> > ( ?book dc10:creator ?author )
> >UNION ( ?book dc11:title ?title )
> > ( ?book dc11:creator ?author )
> >
> >could be an alternative syntax? Just checking that UNION has a similar
> >binding strength to SQLs UNION.
> >
> >I prefer it without {}'s, but I'm not really bothered if theres a good
> >parser/whatever reason for it.
> >
> >- Steve
> >
>
> Good point - the example in the doc isn't complex enough to show this and
> I'll expand it later.
>
> Isn't the SQL case a little different because UNION/SQL is " SQLstatement
> UNION SQLstatement" so the grouping comes about anyway because its an SQL
> statement, making it "SELECT ... UNION SELECT ..." not inside a SELECT
> statement.
Yes, this was the kind of behaviour I'd like to see in SPARQL, ie. it
effectivly works like a compund query. I'm ambiavlent about wether you
have to repeat the SELECT for each WHERE or not.
> The UNION operator could be greedy in its binding as you have it or it
> could be not-greedy - both are going to lead to confusion - its like the
> binding of "*" and "+" in arthimetic expressions except people aren't so
> used to it. With explict AND and OR, it's usually higher operator
> precedence on & (i.e "&" is "*" and "|" is "+") and programmers get it
> wrong frequently. But our conjunction is juxtaposition which throws things
> into confusion as to expectations based on syntax.
Well, except for the parallels with SQL.
> Consider these two fully grouped expressions:
>
> # An expanded example:
>
> SELECT ?title ?author ?price
> WHERE
> { ( ?book dc10:title ?title ) ( ?book dc10:creator ?author ) }
> UNION
> { ( ?book dc11:title ?title ) ( ?book dc11:creator ?author ) }
> (?book info:priceOnAmazon ?price )
OK, I would like this to be:
SELECT ?title ?author ?price
WHERE
( ?book dc10:title ?title ) ( ?book dc10:creator ?author )
( ?book info:priceOnAmazon ?price )
UNION
( ?book dc11:title ?title ) ( ?book dc11:creator ?author )
( ?book info:priceOnAmazon ?price )
> Whatever we decide about UNION, one of them needs the grouping. To remove
> brackets, the first wants a greedy (low precedence) UNION operator, the
> second wants a non-greedy (high precedence) form.
Well, yes, but this is the OR syntax with s/OR/UNION/, which is clearer I
think, but still not what I was trying to describe.
> If I had laid out your example as:
>
> SELECT ?title ?author
> WHERE ( ?book dc10:creator ?author )
> ( ?book dc10:title ?title ) UNION ( ?book dc11:title ?title )
> ( ?book dc11:creator ?author )
>
> the people might expect the other form (not that they are going to get the
> right answers!).
Right, I take that as one more reason to to include infix graph operators.
Braces hurt readability (to me, at least), and its the presence of infix
operators that requires them.
> My preference is:
> + calling it OR
This is dangerous, as it a non shortcutting operation, which will be
confusing, I think. Eric and I tried to discover if there was a
non-shortcutting || in SQL (only in the constraints of course, SQL doesnt
have a table disjunction), and it turns out that you cant really tell, as
there is no obvious way to spot it in constraints.
- Steve
Received on Thursday, 11 November 2004 01:44:43 UTC