Short-circuit boolean operators
Saxon provides two additional boolean operators:
These have the same effect as
and, except that there is a guarantee
that the second operand will not be evaluated unnecessarily. This makes it possible to ensure that
evaluating the second operand does not produce an error. For example, the expression:
//chapter[pages=0 orElse length div pages]
will never fail with a divide-by-zero error, because the division will never be executed if the
pages is zero.
When the ordinary
and operators are used, the W3C specification
gives XPath processors license to re-arrange the order of execution, and Saxon will occasionally do so.
Using these operators is therefore advised when the first condition is a guard to prevent the second condition
The same effect can be achieved without relying on extensions, by writing
A orElse B as
if (A) then true() else boolean(B), and rewriting
X andAlso Y as
if (X) then boolean(Y) else false().