Subject: Re: [xsl] [xslt 2.0] Difference betwen functions and templates From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx> Date: Sat, 21 Jul 2007 12:04:28 +0530 |
Hi Justin, I agree with you, that "xsl:template match= ..." is the essence of XSLT. Without it, XSLT cannot work.
I feel, it's interesting to discuss the differences between "xsl:template name= ..." and xsl:function. Both are callable components, and are sort of subroutines (they, actually are). Are both of these needed in XSLT 2.0, or we can just have xsl:function or xsl:template name= ...
As we have already discussed, xsl:function (a user-defined function) can be called only from within a XPath expression (something like, /abc/pqr[xx = ns:func()]/uvw
But, xsl:template name= ... *cannot* be called from a XPath expression. Now the questions is, is xsl:template name= ... able to do something, which xsl:function cannot do? Yes, xsl:template name= has some features, which xsl:function doesn't have.
<?xml version="1.0"?> <xsl:stylesheet xmlns:xx="http://dummy-ns" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/"> <result> <xsl:call-template name="dummy-template" /> </result> </xsl:template>
<xsl:function name="xx:dummy-func" as="node()+"> <dummy-content/> </xsl:function>
<xsl:template name="dummy-template"> <dummy-content/> </xsl:template>
I am calling a named template, using xsl:call-template. The output of this stylesheet is:
<?xml version="1.0" encoding="UTF-8"?> <result xmlns:xx="http://dummy-ns"> <dummy-content/> </result>
[1] <xsl:template match="/"> <result> xx:dummy-func() </result> </xsl:template>
[2] <xsl:template match="/"> <result> <xsl:value-of select="xx:dummy-func()" /> </result> </xsl:template>
I would have considered xsl:function and xsl:template name= ... to be equivalent, if [1] produced the same output as, xsl:call-template.
My conclusion therefore is, xsl:function and xsl:template name= are very different, and both are required in XSLT 2.0.
Mukul,
Thanks for your contribution to this lively discussion.
>I feel, having xsl:template in XSLT 2.0 is very important, for XSLT >2.0 to be backward compatible with XSLT 1.0.
It is not a question of backward compatibilty.
xsl:template is the very essence of XSLT as opposed to XQuery.
Take away xsl:template's from XSLT and you essentiallly have XQuery availalble to you in a lesser XML-based syntax.
The whole model of XSLT is to present to the programmer a series of nodes which can be matched to a path-match expression and then have automatic invocation of a rule to prepare (return) a result (nodal) series (aka sequence) upon recursive descent of the input XML tree.
This is important in anyone's undertanding of XSLT :-
What the XSLT processor does for you, and saves you the trouble of, is to do a recursive descent of the source XML tree and match rules, which you declare via xsl:template, to be fired (much like callbacks in C/C++) whenever the recursive descent of the source tree encounters an XML node which matches the pattern you declared via xsl:template match=
XQuery has no facility to do this. XQuery is dumbed down XSLT, though has some facilities which are important when dealing with larger databases.
XQuery, exists soley for the reason of an attempt to by-pass an XML-based programming language syntax for the processing XML.
I am sure that Michael Kay would reply in a more concise manner than myself.
The bottom line is that named templates and functions are essentially >> the same thing and it would have been possible for XSLT 2.0 to do >> away with either xsl:call-template or xsl:function.
>They probably look similar, but IMHO both are useful members of XSLT >2.0. As you also said, xsl:function can be called from within an XPath >expression (and, this is a very important difference) while >xsl:template cannot be.
>I feel, having xsl:template in XSLT 2.0 is very important, for XSLT >2.0 to be backward compatible with XSLT 1.0.
>And of course, xsl:function is really beneficial, as also stated by >others in this thread. > >-- >Regards, >Mukul Gandhi
Justin Johansson Schema-aware XSLT evangelist
-- Regards, Mukul Gandhi
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] [xslt 2.0] Difference bet, Justin Johansson | Thread | RE: [xsl] [xslt 2.0] Difference bet, Michael Kay |
[xsl] Re: Visual Studio 2005 XSL Co, Karl Stubsjoen | Date | RE: [xsl] Finding the ID attribute , Michael Kay |
Month |