- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Thu, 11 Aug 2005 13:47:37 +0100
- To: Dave Beckett <dave.beckett@bristol.ac.uk>
- CC: DAWG public list <public-rdf-dawg@w3.org>
Dave Beckett wrote:
> On Wed, 2005-08-10 at 17:52 +0100, Seaborne, Andy wrote:
>
>>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.
>
>
> That would have been helpful to have in the changes.
>
>
>>>* 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)
>
>
> For what it's worth, I don't do empty ()s either way before or after
> this change, but check it elsewhere.
>
>
>>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.
>
>
> That makes sense now. So this would have been a lot clearer to me if it
> had read IRIref | FunctionCall as they are really two entirely
> different things: qname, functioncall. I'd hope you would change this.
I'd like to.
I believe, for bison, it would be covered by the lookahead rule.
http://dinosaur.compilertools.net/bison/bison_8.html#SEC69
but I'd be grateful if someone would confirm this.
Andy
>
>
>
>>> 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.
>
>
> My example was in error; it should have been
> FILTER (my:function)
>
> However as you've described now, I see it does have a meaning. I'm not
> sure quite what to propose here with tests. Maybe make tests with both
> FILTER (my:function()) which is the function, and FILTER (my:function)
> as a qname evaluated as an EBV (always true?) explaining exactly what
> they are doing. Somebody might get caught out if they left out the ()s
> as some languages let you do that.
>
>
>>>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
>>
>>
>
>
> Dave
>
>
Received on Thursday, 11 August 2005 12:48:45 UTC