(non) associativity slash operator

I have two questions about the associativity of the slash operator.

1. Why is the slash operator in XPath 2.0 defined in a non-associative way?

Having such algebraic identities is obviously important for
query optimization and I am in fact myself studying certain optimization
problems where having this identity would really simplify things. Hence the
question. The reason that the slash operator is not associative at the
moment is that it sets the position() and last() values. However, in XPath
1.0 I don't think you are actually able to use these values. The reason for
that is that after a slash there must be a <Step> expression and in that you
can only call functions inside a predicate, but for such a predicate the
values of position() and last() are overridden. So if I am correct then the
slash operation *is* actually associative in XPath 1.0, even though its
semantic definition seems otherwise. So that makes me wonder about the
reason why such a valuable algebraic identity was dropped.

2. Is the slash operator left- or right-associative?

In XPath 1.0 the slash operator was left-associative because of the way that
the syntax was defined. In the current XPath 2.0 syntax I think this is not
clear anymore, at least not from the syntax definition. If I look at the
normalization rules for the slash operator then there is only a rule for the
binary case (<stepExpr> / <stepExpr>) which means that if I have an
expression of the form

  <stepExpr> / <stepExp> / <stepExpr>

I can choose which slash I am going to normalize first, which makes the
semantics more ambiguous than is probably wanted.

Kind regards,

-- Jan Hidders

Received on Friday, 18 July 2003 09:37:57 UTC