- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Wed, 10 Aug 2005 17:52:02 +0100
- To: Dave Beckett <dave.beckett@bristol.ac.uk>
- CC: DAWG public list <public-rdf-dawg@w3.org>
Dave Beckett wrote: > I was wondering what changed as in the current rq23 ArgList is optional > for function calls and this seemed like a syntax change. This took a > little digging into the record so I'm recording what I found. Thanks for doing that. Something seems to have gone amiss. > > I finally tracked it down to rq23 between CVS 1.451 and 1.452: > [[ > Revision 1.452 2005/08/04 10:57:36 aseaborne > + Added "_" to start of variable names > ~ Tidied up by intrpducing NCCHAR1p and making NCCHAR1 be NCCHAR1p | '_' > ]] > > (for reference the last WD was around 1.432). > > This change seems to do a bit more than that: > * FunctionCall is removed from Constraint v1.463 says: [25] Constraint ::= 'FILTER' ( BrackettedExpression | BuiltInCall | FunctionCall ) [55] FunctionCall ::= IRIref ArgList [56] ArgList ::= ( '(' ')' | '(' Expression ( ',' Expression )* ')' ) The argument list is not optional for a function call at this point. The formatting for BuiltInCall could be better. Eric had some suggestions from using flex/bison related to the double meaning of () as an empty argument list and as rdf:nil. This was addressed by inlining explicitly the () cases, not having an explicit rule suggesting a unique tokenization. > * ConstructTemplate uses ConstructTriples for it's inner content I thought this had happened a while ago - must have had a synchronization error. In support of yacc, Eric made various suggestions that made it easier for him (and I presumed all bison/flex LALR(1) setups) as well as made the grammar more LL(1). > * ConstructTriples added with content from above. > * GraphTerm inlines the RDFTerm token and adds '(' ')' (empty > collection) Removed a rule that was used only once. Again, sometime ago and there has been a sync error. Apologies. > * BuiltInCall renamed from CallExpression and FunctionCall is removed as > an option. > * PrimaryExpression: > CallExpression renamed to BuiltInCall > Adds IRIref ArgList? Result of the discussion about resolving the ambiguity of qname vs function. "IRIref ArgList?" covers both cases. Example: FILTER ( ?x = ex:p ) # ex:p is a qname FILTER ( ?x = ex:f(?a, ?b) ) # ex:f is a function call http://www.w3.org/2005/06/14-dawg-irc Worrying mistake somewhere after that. > Adds RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | Var > > Most of that is tidying or reasonable change but the addition that is > the problem is IRIref ArgList? which is not the same as FunctionCall: > IRIref ArgList which I'm guessing it was intended to be. > > If you want a test: > > PREFIX my: <http://example.org/> > SELECT * > WHERE { > ?s ?p ?o . > FILTER my:function > } > > is legal according to my reading of rq23 whereas it used to be illegal. FILTER with no brackets follows rule 55 which does not allow omission of the argument list. > > I assume the additional '?' is a mistake or have I missed something? > Maybe just using FunctionCall instead would be easier. At that point it does. It's the other way of getting there that has the ambiguity. > > Dave Again, thanks Andy
Received on Wednesday, 10 August 2005 16:52:33 UTC