I was already writing about the logical difference between tamplates and functions. This time I've realized another, technical one. It's related to lazy evaluation, permitted by language specification.
I was arguing as follows:
This conclusion looked ridiculous to me, as it means that I cannot reliably expect creation of documents built with xsl:result-document instruction.
To resolve the issue I've checked specification. Someone has already thought of this. This is what specification says:
[Definition: Each instruction in the stylesheet is evaluated in one of two possible output states: final output state or temporary output state].
[Definition: The first of the two output states is called final output state. This state applies when instructions are writing to a final result tree.]
[Definition: The second of the two output states is called temporary output state. This state applies when instructions are writing to a temporary tree or any other non-final destination.]
The instructions in the initial template are evaluated in final output state. An instruction is evaluated in the same output state as its calling instruction, except that xsl:variable, xsl:param, xsl:with-param, xsl:attribute, xsl:comment, xsl:processing-instruction, xsl:namespace, xsl:value-of, xsl:function, xsl:key, xsl:sort, and xsl:message always evaluate the instructions in their contained sequence constructor in temporary output state.
xsl:variable
xsl:param
xsl:with-param
xsl:attribute
xsl:comment
xsl:processing-instruction
xsl:namespace
xsl:value-of
xsl:function
xsl:key
xsl:sort
xsl:message
[ERR XTDE1480] It is a non-recoverable dynamic error to evaluate the xsl:result-document instruction in temporary output state.
xsl:result-document
As you can see, xsl:function is always evaluated in temporary output state, and cannot contain xsl:result-document, in contrast to xsl:template, which may be evaluated in final output state. This difference dictates the role of templates as a "top level functions" and functions as standalone algorithms.
You can find more on subject at "Lazy evaluation and predicted results".
Remember Me
a@href@title, b, blockquote@cite, em, i, strike, strong, sub, super, u