- From: Emerson <emerson@harvestman.net>
- Date: Wed, 10 Sep 2003 12:52:19 +0100
- To: <public-qt-comments@w3.org>
I think the part that you are missing is that we are dealing with
location step's not sequences.
http://www.w3.org/TR/xpath20/#doc-PathExpr
As you can plainly see from (http://www.w3.org/TR/xpath20/#doc-StepExpr)
the Xpath 2.0 specification does
Not allow anything other than axis/node-test specifiers within a
location step.
The good news is ive added the filter expression support to my Xpath 1.0
implementation and it works a treat. Ive also taken the liberty to
convert literals and functions which return strings into node-tests and
numbers into abreviated child::*[n] type step expressions (as is done in
Xpointer)
emerson
-----Original Message-----
From: Oliver Becker [mailto:obecker@informatik.hu-berlin.de]
Sent: Tuesday, 9 September 2003 5:29 PM
To: emerson@harvestman.net; public-qt-comments@w3.org
Subject: Re: Inability of location steps to support multiple axes
Emerson wrote:
> For example, in the current Xpath expresssions the following is
> cumbersome:
>
> "parent::a/following-sibling::*//text() |
> parent::a/preceding-sibling::*//text()"
>
> An obvious solution to the problem which I would like to propose is to
> allow Xpath filter expressions to occur as location steps. This is
easy
> to implement and does not deviate from the purpose of the filter
> expression which is to take a function or an expression which returns
a
> node-set and filter it by optional predicates, just like a location
> step.
>
[...]
> So the above example would become:
>
> "parent::a/(following-sibling::* | preceding-sibling::*)//text()"
>
> Which in my opinion is logically much more concise...
It could be that I am missing something, but I believe your proposal
is possible in XPath 2.0.
Check out the third item *before* 3.3 Sequence Expression (in reverse
document order ;-) ) for an example.
http://www.w3.org/TR/xpath20/#id-sequence-expressions
The parse tree for that is a little bit lengthy, but basically you can
reduce a StepExpr -> PrimaryExpr -> ParenthesizedExpr -> ...
-> '(' OrExpr ')' -> ... (many steps using always the first non
terminal) ...
-> '(' UnionExpr ')'
-> ... -> '(' PathExpr '|' PathExpr ')'
There you are!
Cheers,
Oliver
(not a WG member)
/-------------------------------------------------------------------\
| ob|do Dipl.Inf. Oliver Becker |
| --+-- E-Mail: obecker@informatik.hu-berlin.de |
| op|qo WWW: http://www.informatik.hu-berlin.de/~obecker |
\-------------------------------------------------------------------/
Received on Wednesday, 10 September 2003 07:56:06 UTC