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

Re: Attributes, modes and templates

Subject: Re: Attributes, modes and templates
From: Alex Lancaster <alex@xxxxxxxxxxx>
Date: 27 Apr 2000 18:23:44 -0600
mode xsl
>>>>> "WP" == Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> writes:

WP> Alex, I haven't tested this, but looking at your examples, I think
WP> the problem is in your wildcard template:

Wendell,

Thanks for your advice, unfortunately, I tried it out, and I don't
think I'm much closer to a solution.

>> <!-- template (1) --> <xsl:template match="*"
>> mode="programmer-info-mode"> <xsl:text>Running wildcard template
>> for mode: </xsl:text><br/> <xsl:apply-templates select="."/>
>> </xsl:template>

WP> What this template seems to be doing is putting out your tracing
WP> text, then processing the node again in the default mode. So any
WP> time the mode is invoked with the match not otherwise specified,
WP> it gets uninvoked. So the node with the mode calls the same node
WP> with no mode (sorry). This is overriding the default general match
WP> for elements in the mode, which would be:

WP> <xsl:template match="*" mode="programmer-info">
WP> <xsl:apply-templates mode="programmer-info"> </xsl:template>

WP> One solution may be to change the wildcard template to a called
WP> template, like: <xsl:template name="programmer-info-mode-start">
WP> <xsl:text>Starting processing in mode: </xsl:text><br/>
WP> <xsl:apply-templates select="." mode="programmer-info-mode"/>
WP> </xsl:template>

Thanks.  I created this.

I think this is what you were suggesting as the modified stylesheet to
use:

<xsl:import href="/opt/src/alex/src/docbook/xsl-1.9/xhtml/xtchunk.xsl"/>

  <xsl:template match="variablelist">
    <xsl:choose>
      <xsl:when test="@role='programmers'">
        <xsl:call-template name="programmer-info-mode-start"/>
    <!--    <xsl:apply-templates mode="programmer-info-mode"/> -->
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>Applying imports:</xsl:text><br/>
        <xsl:apply-imports/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name="programmer-info-mode-start"> 
    <xsl:text>Starting processing in mode: </xsl:text><br/>
    <xsl:apply-templates select="."  mode="programmer-info-mode"/> 
  </xsl:template>

  <xsl:template match="corpauthor" mode="programmer-info-mode">
    <strong><em>
        <xsl:text>Group: </xsl:text>
      </em></strong>
    <em><xsl:value-of select="."/></em>
  </xsl:template> 
</xsl:stylesheet>

WP> Call this template using <xsl:call-template> instead of the
WP> <xsl:apply-templates mode="programmer-info-mode"/> in the calling
WP> template.  Let the default for the mode stay the default
WP> (i.e. process children in the mode).

I now call the named template, and yes in processing the children with
the "programmer-info-mode", I get the correct formatting for the
CORPAUTHOR element, but the text in the other (`non-special') elements
is just concatenated together, with no formatting (i.e no templates
applied to them) at all.  Here's what it looks like (when I use the
stylesheet I included above:

 http://www.santafe.edu/~alex/tmp/output.html

WP> Then you have to decide what you want to have happen with elements
WP> content called in the mode, but not in your special element. If
WP> it's just suppress it, one way would be to override the default
WP> template for text() in the mode, as in

WP> <xsl:template match="text()" mode="programmer-info"/>

This is the nub of my problem, exactly: for all elements called in the
mode (but not in the special element) I want the xsl templates in the
_imported_ Norman Walsh's stylesheets to be called (i.e. the templates
I didn't write!)  So my _desired_ output is:

 http://www.santafe.edu/~alex/tmp/desired-output.html

(Note I just hacked the HTML to look right in the above example).

In other words, the indentation and linking of the URL comes from the
imported stylesheets.

The LISTITEM is a child of VARIABLELIST, which is an element in the
mode, but I don't want to have to write a mode-specific rule for this,
because then I'd need to write a mode-specific rule for LINK (to get
the <A href > etc.).

Hopefully this makes my problem a bit clearer.

Alex
-- 
Alex Lancaster * alex@xxxxxxxxxxx * www.santafe.edu/~alex * 505 984-8800 x242
Santa Fe Institute (www.santafe.edu) & Swarm Development Group (www.swarm.org)


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


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.