If you can express the condition with an @as attribute, use that in preference
to an xsl:assert, because it's much more amenable to static analysis -
certainly with Saxon, xsl:assert will only ever give you a run-time error. The
diagnostics for type errors will also tend to be better.
>
> <xsl:param name="item" as="element(author)"/>
>
> is equivalent to:
>
> <xsl:param name="item"/>
> <xsl:assert test="name($item) eq 'author'"/>
>
Almost. name() is sensitive to the choice of namespace prefixes, and should
only be used to generate diagnostic output. If you need an assertion here,
use
<xsl:assert test="$item[self::author]"/>
or
<xsl:assert test="$item instance of element(author)"/>
Michael Kay
Saxonica
|