- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Tue, 26 Feb 2002 18:28:07 +0000
- To: "Cliff Binstock" <binstock@pacifier.net>
- CC: www-xpath-comments@w3.org
Hi Cliff,
> Looking at the XPath Recommendation, it appears that the notation
>
> element[@attribute]
>
> is not actually supported by the grammar.
I think that it is. In XPath 1.0, predicates are specified with:
[8] Predicate ::= '[' PredicateExpr ']'
[9] PredicateExpr ::= Expr
Then expressions are specified with a series of productions, as
follows:
[14] Expr ::= OrExpr
[21] OrExpr ::= AndExpr
| ...
[22] AndExpr ::= EqualityExpr
| ...
[23] EqualityExpr ::= RelationalExpr
| ...
[24] RelationalExpr ::= AdditiveExpr
| ...
[25] AdditiveExpr ::= MultiplicativeExpr
| ...
[26] MultiplicativeExpr ::= UnaryExpr
| ...
[27] UnaryExpr ::= UnionExpr
| ...
[18] UnionExpr ::= PathExpr
| ...
So eventually you get to path expressions, which can be location
paths:
[19] PathExpr ::= LocationPath
| ...
The @attribute in the example above is a relative location path:
[1] LocationPath ::= RelativeLocationPath
| ...
[3] RelativeLocationPath ::= Step
| ...
The Step is made up of an AxisSpecifier, a NodeTest and a Predicate.
You seem to be interested in the AxisSpecifier:
[4] Step ::= AxisSpecifier NodeTest Predicate*
| ...
[5] AxisSpecifier ::= AxisName '::'
| AbbreviatedAxisSpecifier
[6] AxisName ::= ...
| 'attribute'
...
[13] AbbreviatedAxisSpecifier ::= '@'?
So I think that XPath does support that syntax.
> In particular, I was looking at the grammar to see if the following
> statements would return the same results, albeit through different
> mechanism (I assume they would, maybe someone can comment):
>
> a/@b
> a/attribute::b
These return a node set containing the b attributes on the a elements
that are children of the context node.
> a[@b]
> a[attribute::b]
These return a node set containing the a elements that are children of
the context node and that have b attributes.
When you use a predicate, you filter a node set - the node set still
returns the same kind of node as it would without the predicate, but
returns only some of those nodes.
I hope that clears up your misapprehensions. Questions about what
XPath can and can't do, and what different paths mean are best
addressed to the XSL-List (http://www.mulberrytech.com/xsl/xsl-list).
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
Received on Tuesday, 26 February 2002 13:28:09 UTC