- From: Kay, Michael <Michael.Kay@softwareag.com>
- Date: Wed, 17 Sep 2003 15:48:55 +0200
- To: emerson@harvestman.net, "'Kay, Michael'" <Michael.Kay@softwareag.com>, public-qt-comments@w3.org
- Message-ID: <DFF2AC9E3583D511A21F0008C7E62106073DD12C@daemsg02.software-ag.de>
I think you are suggesting that "//" as a free-standing expression should mean the same as "/descendant-or-self::node()", that is, it should select all the nodes in a document except attributes and namespaces. If you can explain what use-cases require this construct, your argument might be a little more convincing. At present you can do this using either of the expressions "/descendant-or-self::node()" or "/|//node()", and I can't say that those are expressions I see being used so often than a shorter syntax for them is needed. There definitely are parsing difficulties using "//" as both an operator and an expression, just as there are with "/"; for example the expression "/ or -1" is a well-known ambiguity in the XPath 1.0 grammar, and extending the meaning of "//" would certainly exacerbate this. Michael Kay > -----Original Message----- > From: Emerson [mailto:emerson@harvestman.net] > Sent: 16 September 2003 17:05 > To: 'Kay, Michael'; public-qt-comments@w3.org > Subject: RE: Abbreviated Syntax "//" > > > > > Michael, > > > I know that the current interpretation of "//" has been > around since Xpath 1.0, but what im suggesting is actually > not that much of a departure from the concepts and patterns > that Xpath uses elsewhere. > > For example, using the abreviated parent syntax is it not possible to > say: > > "child::node()/child::node()/.." > > And > > "child::node()/../child::()" > > I see no difference between ".." and "//". The key to > understanding this suggestion in my opinion is to see that > "//" translates syntactically to "/X" or "/X/" depending on > whether it is followed by another step. Expansion is an > abstract creation of the free mind, and does not actually > become part of the synatx of the expression. To say that > "//para" expands to "/descendant-or-self::node()para" is > meaningless when processing the Xpath statement, because like > "..", "//" is an abreviation - and therefore both a separator > and a step. > > I would liken the problem to that of a URL, where sometimes > there is a trailing "/" i.e. "http://harvestman.net/" and > othertimes there is not "http://harvestman.net". But to a > suitably equipped URL/URI parser, the distinction is > irrelevant, because the trailing slash "/" serves no purpose > unless there is a following path. > > I belive that Xpath should behave the same way, that is... to > make the distinction between the separator "/" and the step. > > > [36] PathExpr ::= ("/" RelativePathExpr?) > | ("//" > RelativePathExpr) > | RelativePathExpr > > [37] RelativePathExpr ::= StepExpr (("/" | "//") > StepExpr)* > > > Nowhere in the above Xpath grammar can "//" be followed by a > "/" so I can not see how you could ever end up with an > expression of "///" > > > All that is required is to modify the production of [36] to become: > > [36] PathExpr ::= (("/" | "//") RelativePathExpr?) > | RelativePathExpr > > Similaryly production [37] to > > [37] RelativePathExpr ::= StepExpr ( "//" | (("/" | "//") > StepExpr))* > > Or less pedandically if your not concerned about trailing "/" > > [37] RelativePathExpr ::= StepExpr (("/" | "//") > StepExpr?)* > > I would debate just how infrequently the expressions you > showed are used, expecially since "//" abreviates one of the > most common and syntactically long location steps. I > personally use "//" all the time, though I can understand > that many users may steer away from the overhead, suffice to > say that my implementation provides optimisations such that > using "//" does not incur the cost of selecting all > descendant nodes in a document. > > emerson > > -----Original Message----- > From: Kay, Michael [mailto:Michael.Kay@softwareag.com] > Sent: Tuesday, 16 September 2003 4:22 PM > To: emerson@harvestman.net; public-qt-comments@w3.org > Subject: RE: Abbreviated Syntax "//" > > > If "//" expanded to "/descendant-or-self::node()" then > "//para" would expand to "/descendant-or-self::node()para", > which would be a syntax error. > > The language could of course be defined so that "//" was a > valid expression, meaning perhaps //* or //node() or even > /|//node(), but since all these possible interpretations can > already be easily written, there seems little benefit in > abbreviating them further, especially as none of these > expressions seem to be frequently required in practice. > > Also, if "//" was a valid expression, then it could be > followed by the "/" operator, exacerbating further the > problems in parsing pathological expressions such as "///". > Michael Kay > > > -----Original Message----- > > From: Emerson [mailto:emerson@harvestman.net] > > Sent: 16 September 2003 03:11 > > To: public-qt-comments@w3.org > > Subject: Abbreviated Syntax "//" > > > > > > > > > > Ive just noticed something that hasn't bothered me in the > > past due mainly to an omission on my part. In implementing > > some Xpath 2.0 features into my now hybrid 1.0 processor I > > noticed that according to both specifications; > > > http://www.w3.org/TR/xpath20/#abbrev > The abreviated, location path in 1.0 speak, or path > expression in 2.0 language i.e. "//" Is actually interpreted > as "/descendant-or-self::node()/" rather than > "/descendant-or-self::node()" I beg to ask, why the trailing > slash "/" ? > This forces the abreviated syntax to have a following step, > when there is a perfectly valid reason for wanting to use > "//" alone. I don't like to deviate, but this is one part of > the grammar that I don't think I will be enforcing... > emerson > >
Received on Wednesday, 17 September 2003 09:49:07 UTC