xsl-list
[Top] [All Lists]

RE: xsl:number and conditional

2005-05-31 15:31:14
 
Example:

<doc>
  <p>a <citation/> and a <footnote>and a <citation/> in a
footnote</footnote> and a <citation/></p>
</doc>

Correctly working stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:bib="http://purl.org/NET/xbiblio/citeproc";
  exclude-result-prefixes="xs bib" version="2.0">

  <xsl:template match="doc">
    <list>
      <xsl:apply-templates
select="//footnote|//citation[not(ancestor::footnote)]"/>
    </list>
  </xsl:template>

  <xsl:template match="p">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="footnote">
    <number>
      <xsl:value-of select="bib:footcite(.)"/>
      <xsl:apply-templates select="citation"/>
    </number>
  </xsl:template>

  <xsl:template match="citation">
    <number>
      <xsl:value-of select="bib:footcite(.)"/>
    </number>
  </xsl:template>

  <xsl:template match="citation[ancestor::footnote]">
    <nonumber/>
  </xsl:template>

  <xsl:function name="bib:footcite" as="xs:string">
    <xsl:param name="footciteable" as="element()"/>
    <xsl:for-each select="$footciteable">
      <xsl:number level="any" select="."
count="footnote|citation[not(ancestor::footnote)]"/>
    </xsl:for-each>
  </xsl:function>

</xsl:stylesheet>

Yields this output:

<list>
   <number>1</number>
   <number>2<nonumber/>
   </number>
   <number>3</number>
</list>

So this the output that you want? I think this illustrates the point that if
your count pattern matches the same nodes as the ones you select for
numbering, you will get consecutive numbers.


Now, if I change the function to this:

  <xsl:function name="bib:footcite" as="xs:string">
    <xsl:param name="footciteable" as="element()"/>
    <xsl:number level="any" select="$footciteable"
count="footnote|citation[not($footciteable/ancestor::footnote)]"/>
  </xsl:function>


I get:

<list>
   <number>1</number>
   <number>2<nonumber/>
   </number>
   <number>4</number>
</list>

I don't understand why you've changed a "correctly working stylesheet".


Saxon (8.4) will not allow me to remove the $footcitable on the count,
nor to add it as context to the footnote.

Your original "correctly working stylesheet" didn't have $footcitable in the
count pattern, and works with Saxon 8.4, so I don't understand what you mean
by this. And I don't know what you mean by "add it as context to the
footnote" either!

(But thanks for putting together a complete example.)

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



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>