Re: [xsl] xsl:function vs. xsl:template

Subject: Re: [xsl] xsl:function vs. xsl:template
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Wed, 19 Nov 2008 05:40:24 -0800
> What are other benefits/shortcomings of either side? I haven't found
> any documentation on this issue but would appreciate any hints as to
> where to find some.

Benefits of using <xsl:function/>:

  1. Composability.

   2. Looks great in an expression which uses it as a parameter, as
return value or as a partial application.

   3. Readability (compactness) and maintainability.

   4. More loose coupling (does not depend on an  implicit context node)

   5. Can be referenced in an XPath expression


   1. Parameters are identified only by position (not by name)

    2. Can be impure (can have a side effect, such as creating new
node(s)) and just by looking at an expression referencing this
function people may not understand that it has a side effect. However
this possibility of confusion can be eliminated if proper naming is

I tend always to use <xsl:function/>. In the cases when the function
creates new node(s) I follow the convention of starting its local-name
with the string "make", as in makePerson().

Dimitre Novatchev
Truly great madness cannot be achieved without significant intelligence.
To invent, you need a good imagination and a pile of junk
Never fight an inanimate object
You've achieved success in your field when you don't know whether what
you're doing is work or play

On Wed, Nov 19, 2008 at 4:38 AM, Felix Geller <fgeller@xxxxxxxxx> wrote:
> Hi all,
>   how does the experienced XSLT 2.0 programmer decide on whether to
> use a xsl:function or a (named) xsl:template? Are any performance
> issues involved (the processor I'm using is Saxon)?
> When trying to comprehend a stylesheet, I find it easier if the
> control-flow is managed by explicit function calls.
> Using functions imposes the additional "burden" of passing the node to
> work on, when compared to xsl:call-template. However, passing the node
> brings the benefit of making the "context" explicit.
> Being able to use a function in XPath expression also offers a less
> verbose invocation of functionality.
> cheers
> -- Felix

Current Thread