Minor Syntax issues

This is about tuning the current syntax, post-WD2 publication, not 
redesigning the whole thing.

1/ Bound

This is special because it tests the variable, not the value.  It's the only
case where this happens.

The suggestion (PatH) was to make this different.  In other programming 
languages, there is just a plain function like many other library functions. 
  It returns a value (a boolean) like any other function.

Options:
1a/ BOUND(?x)   -- as the current grammar
1b/ BOUND[?x]   --  different grouping

Anything with a colon in it will look like a qname.

BOUND ?x is dangerous as it does not express the tight binding nature of
this operator: "BOUND ?x && ?y" is strange.

I prefer "BOUND(?x)" -- leave as is.
BOUND[] as a one-off is over doing it.

2/ AND

AND is a special keyword that starts constraints (SUCH THAT would be better
but its two words).  Currently in the grammar it is required because ?x-?y 
is unclear : can be "?x binary minus ?y" or two expressions "?x" then "unary 
minus ?y"

Proposal: use [] to mark constraints (see below).

3/ OPTIONALS

There are two syntactic forms "OPTIONAL" and "[]"

Proposal: just the OPTIONAL form, freeing up [] for constraints.

4/ Functions , casting and specials.
     &ex:foo() , xsd:byte(23) , isBlank(?x)

These have different aspects:

Functions act on values.  Currently, they are only filters (boolean valued).

The specials (isURI and friends) act on graph elements, not the individuals
represented by those elements.  The could be functions if we define their 
values - that would require a set of functions that all implementations had 
to have.  At the moment, the function mechanism is an extension point and an 
implementation can choose not to provide it at all.

Casting is like a function but it returns a value in a constrained way (no
assignment to variables, fixed set of casts) and the return is typed.

A concern I have with general functions (ones that return any value,
especially if they can assign to variables)) is that we getting into a
second computational system that needs a lot of thinking about, not in 
technical terms but in scope and appropriateness terms.

The obvious simplification is to use the same syntax of functions and casts,
make functions value-returning then provide a standard set of functions for
the casts.  The specials like isURI can be functions.

[Not sure about typing of function returns which might be lost in such a
scheme.  Does it hurt optimization?]

5/ LOAD => WITH

The word "LOAD" suggests, to some people, a permanent change to the database 
which is a wrong implication.  DaveB suggested changing the word to "WITH". 
  I have done this change (rq23 and the tests).

6/ Clause order

The current order is:

BASE
PREFIX
SELECT
WITH
FROM
WHERE
LIMIT

which is a mixed style.  It would make sense to have WITH and FROM before 
SELECT (declarations first) and have LIMIT before WHERE (modifier to 
SELECT).  It has confused some RDQL users that FROM comes after SELECT.

 Andy

Received on Friday, 11 February 2005 21:02:38 UTC