> Bad example. Here's the real thing. I found myself having to write
>
> [A] if (parent::*) then $fRename(name(..),..) else ()
>
> instead of
>
> [B] $fRename(name(..),..) [parent::*] at a pinch I should possibly be able
to write
>
> [C] $fRename(name(..),..) [current()/parent::*] in which case the
predicate is not dependent on the evaluating the expression.
>
[A] tests whether the context item has a parent node, [B] tests whether the
result of calling $Rename() has a parent node, so they are completely
different expressions.
[C] (which I've corrected to make current() a function call) is semantically
equivalent to [A] except that the spec guarantees in the case of [A] that the
call on $fRename will not be evaluated (i.e. will not have any errors or
side-effects) if the condition is false, and there is no such guarantee for
[C].
Michael Kay
Saxonica
I've taken this off the Saxon list, since having a thread on two lists with
overlapping membership must be irritating people, and is generally
disapproved.
|