Subject: Re: [xsl] configuring a conditional From: Bruce D'Arcus <bdarcus@xxxxxxxxx> Date: Tue, 24 May 2005 11:44:53 -0400 |
The question I'd ask is what's @linkend. This of course depends on what the context node is -- so we need to consider where this appears.
XSLT 2.0 functions work different from templates in that they don't have a context node (or position or size) ... instead of relying on being able to traverse from the context node to its @linkend attribute, for example, you have to pass the node in and then traverse to $node/@linkend.
Could this be an issue here? We need to see more code. But guessing out of the blue (that is, guessing you are defining a function here) I suppose you might try test="$cite-ref is key('refs',$cite-ref/@linkend)[1]".
I'd like to have a function, but thought I'd start with a variable first. I didn't post the code because it's a little hairy, but here goes:
<xsl:template name="bib:format-citation"> <xsl:param name="output-format" as="xs:string"/> <!-- create a temporary tree to hold the processing citations --> <xsl:variable name="intermediate-citation"> <xsl:value-of select="$style-citation/cs:prefix"/> <xsl:choose> <!-- FIX: add additional sort modes --> <xsl:when test="$sort_order-bib='author-year'"> <xsl:apply-templates select="." mode="sort_citation_author-year"> <xsl:with-param name="output-format" select="$output-format" as="xs:string" tunnel="yes" /> </xsl:apply-templates> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="db:biblioref" mode="otherwise"/> </xsl:otherwise> </xsl:choose> <xsl:value-of select="$style-citation/cs:suffix"/> </xsl:variable> <!-- create formatted output by running appropriate output mode on the temporary tree in the intermediate-citation variable --> <xsl:choose> <xsl:when test="$output-format='latex'"> <xsl:apply-templates select="$intermediate-citation" mode="output-latex"/> </xsl:when> <xsl:when test="$output-format='xhtml'"> <xsl:apply-templates select="$intermediate-citation" mode="output-xhtml"/> </xsl:when> </xsl:choose> </xsl:template>
<xsl:template match="db:citation" mode="sort_citation_author-year"> <!-- store citation for future use --> <xsl:variable name="citation" select="."/> <xsl:variable name="local-cite-style" select="db:biblioref/@xrefstyle"/> <xsl:variable name="idref" select="db:biblioref/@linkend, course:reading/@refid"/> <xsl:variable name="bibref"
select="$enhanced-biblist/mods:modsCollection/mods:mods[@ID=$idref]"/> <bib:span class="citation"> <xsl:for-each-group select="$bibref" group-by="@bib:sort-on"> <xsl:sort select="current-grouping-key()"/> <xsl:variable name="refs-for-author-sorted-by-year" as="element(mods:mods)*"> <xsl:perform-sort select="current-group()"> <xsl:sort select="bib:year"/> </xsl:perform-sort> </xsl:variable> <xsl:variable name="first-ref-for-author" as="element(mods:mods)" select="$refs-for-author-sorted-by-year[1]"/> <xsl:variable name="last-ref-for-author" as="element(mods:mods)" select="$refs-for-author-sorted-by-year[position() = last()]"/> <xsl:for-each-group select="$refs-for-author-sorted-by-year" group-adjacent="bib:year"> <xsl:for-each select="current-group()"> <xsl:variable name="first-in-author-group" select=". is $first-ref-for-author" as="xs:boolean"/> <xsl:variable name="last-in-author-group" select=". is $last-ref-for-author" as="xs:boolean"/> <xsl:variable name="id" select="@ID"/> <!-- earlier the cite-ref variable was defined as just element(), but for some reason this yielded an empty-sequence error in one case --> <xsl:variable name="cite-ref" as="element()*"> <xsl:sequence select="$citation/db:biblioref[@linkend=$id]"/> </xsl:variable> <xsl:choose> <xsl:when test="$citeclass='note-bib' or $citeclass='note-nobib'"> <xsl:apply-templates select="." mode="citation_note"> <xsl:with-param name="first-in-author-group" select="$first-in-author-group"/> <xsl:with-param name="last-in-author-group" select="$last-in-author-group"/> <xsl:with-param name="local-cite-style" select="$local-cite-style"/> <xsl:with-param name="cite-ref" select="$cite-ref" as="element()*"/> </xsl:apply-templates> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="." mode="citation_author-year"> <xsl:with-param name="first-in-author-group" select="$first-in-author-group"/> <xsl:with-param name="last-in-author-group" select="$last-in-author-group"/> <xsl:with-param name="local-cite-style" select="$local-cite-style"/> <xsl:with-param name="cite-ref" select="$cite-ref" as="element()*"/> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:for-each-group> <xsl:if test="position() != last()">; </xsl:if> </xsl:for-each-group> </bib:span> </xsl:template>
<xsl:template match="mods:mods" mode="citation_author-year"> <xsl:param name="local-cite-style"/> <xsl:param name="cite-ref" as="element()*"/> <xsl:param name="citation"/> <xsl:param name="first-in-author-group" as="xs:boolean"/> <xsl:param name="last-in-author-group" as="xs:boolean"/> <xsl:message> <xsl:if test="$cite-ref is key('refs',@linkend)[1]">FIRST</xsl:if> </xsl:message> <bib:a class="citation" href="#{@ID}"> <xsl:if test="$first-in-author-group and not($local-cite-style='year')"> <xsl:choose> <xsl:when test="bib:noname-substitute"> <xsl:value-of select="bib:noname-substitute"/> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="mods:name[mods:role/mods:roleTerm=$primary-contributors]" mode="short"/> </xsl:otherwise> </xsl:choose> <xsl:value-of select="$style-citation/cs:entry/cs:creator/cs:suffix"/> </xsl:if> <xsl:value-of select="bib:year"/> <xsl:value-of select="bib:year-suffix"/> <xsl:if test="$cite-ref/@begin"> <xsl:value-of select="$style-citation/cs:entry/cs:point/cs:prefix"/> <xsl:value-of select="$cite-ref/@begin"/> <xsl:if test="$cite-ref/@end"> <xsl:text></xsl:text> <xsl:value-of select="bib:number-condense($cite-ref/@begin, $cite-ref/@end)"/> </xsl:if> </xsl:if> </bib:a> <xsl:if test="not($last-in-author-group)">, </xsl:if> </xsl:template>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] configuring a conditional, Wendell Piez | Thread | Re: [xsl] configuring a conditional, Wendell Piez |
Re: [xsl] backtracking to find all , Aron Bock | Date | Re: [xsl] configuring a conditional, Wendell Piez |
Month |