Re: [xsl] Defensive programming in XSLT using asserts and as="..."

Subject: Re: [xsl] Defensive programming in XSLT using asserts and as="..."
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 6 May 2022 16:26:15 -0000
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

Current Thread