xsl-list
[Top] [All Lists]

Re: misc. confusion on "footnote" handling

2004-08-25 01:56:35
Hi Bruce,

I want a parameter -- called citation-class -- where one option is
author-year (what I've been working on), and another is "footnote."

When the parameter is set to footnote, all citations get treated as
if they were a footnote (e.g. they become footnoted on output),
unless they are already in a footnote, in which case they just get
rendered.

I'm thinking I need to be doing something like this:

<xsl:template match="db:footnote|db:citation">
   <xsl:choose>
     <xsl:when test="$class='footnote'">
       ...
     </xsl:when>
     <xsl:otherwise>
       ...
     </xsl:otherwise>
   </xsl:choose>
</xsl:template>

But I'm not sure quite what to do next, or b) if there a better way
to do this? Maybe somehow using modes?

I'm not sure from your description what you're trying to do (what
output you're trying to achieve). It's not clear whether you actually
want a parameter (declared with <xsl:param>, set on the call with
<xsl:with-param>) or you're using the term 'parameter' in a more
descriptive way. Perhaps you want two different templates for the two
different kinds of citation:

<!-- citations appearing in footnotes -->
<xsl:template match="db:footnote/db:citation">
  ...
</xsl:template>

<!-- other citations -->
<xsl:template match="db:citation">
  ...
</xsl:template>

These could both 'call' the same code where they needed the same
processing (whether by actually calling a template by name or by
applying templates to the <citation> element using a different mode).
For example:

<!-- citations appearing in footnotes -->
<xsl:template match="db:footnote/db:citation">
  <xsl:apply-templates select="." mode="citation" />
</xsl:template>

<!-- other citations -->
<xsl:template match="db:citation">
  <footnote>
    <xsl:apply-templates select="." mode="citation" />
  </footnote>
</xsl:template>

<xsl:template match="db:citation" mode="citation">
  ...
</xsl:template>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/