- From: Michael Dyck <MichaelDyck@home.com>
- Date: Wed, 11 Jul 2001 22:41:45 -0700
- To: www-xml-query-comments@w3.org
XQuery 1.0: An XML Query Language W3C Working Draft 07 June 2001 I've found a nasty ambiguity in the XQuery grammar. I can demonstrate it with the phrase /<QName>stuff</QName>/QName It looks odd, but it's a grammatically valid expression with two quite different parses: [view these parse trees in a fixed-width font] PathExpr | +---------+----------+ | | | RelativePathExpr | | | +------------+------+ | | | | | StepExpr | StepExpr | | | | | OtherStepExpr | OtherStepExpr | | | | | Primary | Primary | | | | | ElementConstructor | NodeTest | | | | | +--+--+---+---+---+--+ | NameTest | | | | | | | | | | / <QName> stuff </QName> / QName RelationalExpr | +----------+------+----+ | | | RelationalExpr | | | | | +------+---+----+ | | | | | | | RelationalExpr | Expr | Expr | | | | | +-----+--+---+ | PathExpr | PathExpr | | | | | | | RelationalExpr | Expr | +--+--+ | +--+--+ | | | | | | | | | +-----+---+ | | | | StepExpr | | StepExpr | | | | | | | : | | : Expr | Expr | | | | : | | : | | : | | | | : | | : PathExpr | : | | | | : | | : | | : | | | | : | | : / < QName > stuff < / QName > / QName One way to eliminate the ambiguity would be to somehow disallow an ElementConstructor as a StepExpr. However, (a) this would complicate the grammar; and (b) it would eliminate a potentially useful construct. (Not that the example shown is useful, but I can imagine cases where having an ElementConstructor as the *first* step in a relative path would be useful.) Or you could disallow cascading RelationalExprs, but (a) that too would complicate the grammar; and (b) you'd still have a shift-reduce conflict that would require 3 symbols of lookahead to resolve. Probably the simplest fix would be to replace the relational operators ("<" and ">") with keywords ("lt" and "gt"). [I notice that the XQuery Core Syntax does this.] True, it does decrease readability slightly, but presumably people working with XML would be used to the idea of angle-brackets being reserved for tag-delimiting only. -Michael Dyck
Received on Thursday, 12 July 2001 01:46:57 UTC