[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Second of two consecutive call-template instructio

Subject: RE: Second of two consecutive call-template instructions appears to affect the first?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 15 Mar 2006 13:03:36 -0000
mike pic templates
This template:

  <xsl:template name="does-image-flickr">
    <xsl:choose><!-- photo is a flickr link -->
      <xsl:when test="/page/images/image[@name=$name]/flickr">
        <a href="{/page/images/image[@name=$name]/flickr}">
          <xsl:call-template name="pass-image-params" />

contains two refences to the variable $name, which isn't in scope in this
template. If you want it to be available in this template, you need to pass
it as a parameter.

It looks as if Xalan isn't reporting this error if it occurs in a template
that isn't called. The XSLT 1.0 spec isn't very precise about which errors
are static errors and which are dynamic, so that's probably conformant: XSLT
2.0 makes it mandatory to report this as a static error.

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: Sebastian Tennant [mailto:sebyte@xxxxxxxxxxxxxxx] 
> Sent: 15 March 2006 12:46
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re:  Second of two consecutive call-template 
> instructions appears to affect the first?
> 
> "Michael Kay" <mike@xxxxxxxxxxxx> wrote:
> 
> >> Regarding the problem in hand, I just don't get it.  
> >
> > I suspect no-one else does either, which accounts for the 
> lack of response
> > (the only answers, I think, have been wild guesses). I'd 
> suggest posting the
> > complete stylesheet both with and without the offending 
> lines, and telling
> > you which XSLT processor you are using. At the very least 
> we can then
> > determine whether other processors report the same error.
> >
> > Michael Kay
> > http://www.saxonica.com/
> 
> I'm so pleased it's not just me that thinks this is strange, *phew*,
> and you'll no doubt be pleased to hear Michael, that it isn't Saxon
> which is choking, but Xalan.
> 
> I'm using:
> 
>   Xalan version 1.10.0
>   Xerces version 2.7.0
> 
> I haven't tried Saxon yet, but now I think I just might give it a
> go...
> 
> The whole stylesheet is below, as requested and the offending lines
> are commented out.  My original post explains the required form of the
> XML source and the exact error text I'm getting is:
> 
>   "XSLException Type is: XSLTProcessorException
>                 Message is: The variable 'name' is not defined.
>   
> (file:///home/sebyte/xml/html/justonecornetto.org/xml/xsl-src/
> images.xsl,
>    line 47, column 63)"
> 
> sdt
> 
> P.S. I tried sending it as an attachment but the list server didn't
>      like it, hence here it is, no doubt all horribly wrapped :-(
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
>                 xmlns="http://www.w3.org/1999/xhtml"
>                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> 
>   <!-- photos -->
>   <xsl:template match="//photos">
>     <xsl:for-each select="photo">
>       <xsl:apply-templates select=".">
>         <xsl:with-param name="ppos"><xsl:value-of 
> select="../@ppos" /></xsl:with-param>
>         <xsl:with-param name="cpos"><xsl:value-of 
> select="../@cpos" /></xsl:with-param>
>         <xsl:with-param name="stacked">true</xsl:with-param>
>       </xsl:apply-templates>
>     </xsl:for-each>
>   </xsl:template>
> 
>   <!-- photo -->
>   <xsl:template match="//photo">
>     <xsl:param name="name"><xsl:value-of select="@name" /></xsl:param>
>     <xsl:param name="ppos"><xsl:value-of select="@ppos" /></xsl:param>
>     <xsl:param name="cpos"><xsl:value-of select="@cpos" /></xsl:param>
>     <xsl:param name="caption"><xsl:value-of select="@caption" 
> /></xsl:param>
>     <xsl:param name="stacked" />
>     <xsl:variable name="class">
>       <xsl:choose><!-- photos must either be stacked or 
> individual floats -->
>         <xsl:when test="$stacked='true'"><xsl:value-of 
> select="concat('photo stacked-',$ppos)" /></xsl:when>
>         <xsl:otherwise><xsl:value-of select="concat('photo 
> float-',$ppos)" /></xsl:otherwise>
>       </xsl:choose>
>     </xsl:variable>
>     <xsl:choose>
>       <xsl:when test="$cpos!=''"><!-- there's a caption which 
> requires a surrounding div -->
>         <div class="{$class}" 
> style="{concat('width:',/page/images/image[@name=$name]/width,'px')}">
>           <xsl:call-template name="does-image-flickr" />
> <!--           <xsl:call-template name="write-caption"> -->
> <!--             <xsl:with-param name="cpos"><xsl:value-of 
> select="$cpos" /></xsl:with-param> -->
> <!--             <xsl:with-param name="caption"><xsl:value-of 
> select="$caption" /></xsl:with-param> -->
> <!--           </xsl:call-template> -->
>         </div></xsl:when>
>       <xsl:otherwise><!-- or there isn't -->
>         <xsl:call-template name="does-image-flickr" />
>       </xsl:otherwise>
>     </xsl:choose>
>   </xsl:template>
> 
>   <xsl:template name="does-image-flickr">
>     <xsl:choose><!-- photo is a flickr link -->
>       <xsl:when test="/page/images/image[@name=$name]/flickr">
>         <a href="{/page/images/image[@name=$name]/flickr}">
>           <xsl:call-template name="pass-image-params" />
>       </a></xsl:when>
>       <xsl:otherwise><!-- or it isn't-->
>       <xsl:call-template name="pass-image-params" /></xsl:otherwise>
>     </xsl:choose>
>   </xsl:template>
> 
>   <xsl:template name="pass-image-params">
>     <xsl:apply-templates select="/page/images/image[@name=$name]">
>       <xsl:with-param name="cpos"><xsl:value-of 
> select="$cpos" /></xsl:with-param>
>       <xsl:with-param name="caption"><xsl:value-of 
> select="$caption" /></xsl:with-param>
>       <xsl:with-param name="class"><xsl:value-of 
> select="$class" /></xsl:with-param>
>     </xsl:apply-templates>
>   </xsl:template>
> 
>   <!-- images -->
>   <xsl:template match="//image">
>     <xsl:param name="cpos" />
>     <xsl:param name="caption" />
>     <xsl:param name="class" />
> 
>     <xsl:element name="img">
>       <xsl:attribute name="alt"><xsl:choose><!-- alt 
> attribute defaults to desc -->
>         <xsl:when test="$caption!=''"><xsl:value-of 
> select="$caption" /></xsl:when>
>         <xsl:otherwise><xsl:value-of select="desc" /></xsl:otherwise>
>       </xsl:choose></xsl:attribute>
>       <!-- src attribute -->
>       <xsl:attribute name="src"><xsl:value-of select="file" 
> /></xsl:attribute>
>       <!-- class attribute required if no caption and hence 
> no containing div -->
>       <xsl:if test="$cpos=''">
>         <xsl:attribute name="class"><xsl:value-of 
> select="$class" /></xsl:attribute>
>       </xsl:if>
>     </xsl:element>
>   </xsl:template>
> 
>   <xsl:template name="write-caption">
>     <xsl:param name="cpos" />
>     <xsl:param name="caption" />
>     <xsl:if test="$cpos='below'"><br /></xsl:if>
>     <xsl:if test="$cpos!=''"><!-- caption position specified -->
>       <xsl:choose><!-- but no caption specified, use desc as 
> default -->
>         <xsl:when test="$caption!=''"><xsl:value-of 
> select="$caption" /></xsl:when>
>         <xsl:otherwise><xsl:value-of select="desc" /></xsl:otherwise>
>       </xsl:choose>
>     </xsl:if>
>   </xsl:template>
> 
> </xsl:stylesheet>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.