I need to repeat this question:
My 2.o stylesheet has a function it uses to group records based on
author.
However, the grouping and sorting problem is more complex than this,
and is based on the following rule:
1) use author-name string
2) if there is no author name:
a. when dealing with a periodical, use the periodical title in place
of the author name
b. otherwise use "anonymous"
So, in other words, if I have a magazine article from Newsweek, it
would sort and format like so:
Newsweek (2000) Article Title ....
Currently, it incorrectly does this:
(2000) Article Title ....
Here's my current code:
<xsl:function name="bib:grouping-key" as="xs:string">
<xsl:param name="bibref" as="element(mods:mods)" />
<xsl:choose>
<xsl:when test="$bibref/mods:name">
<xsl:value-of separator=";">
<xsl:for-each select="$bibref/mods:name">
<xsl:value-of
select="string-join((mods:namePart[@type = 'family']|
mods:namePart[not(@type)],
mods:namePart[@type = 'given']), ',')" />
</xsl:for-each>
</xsl:value-of>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<!-- test to see if we have a periodical article -->
<xsl:when
test="$bibref/mods:relatedItem[@type='host']/mods:issuance =
'continuing'">
<xsl:for-each select="$bibref">
<!-- use periodical title -->
<xsl:value-of
select="mods:relatedItem[@type='host']/mods:titleInfo[not(@type)]/mods:
title"/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:text>Anonymous</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
The main bib template then just calls the function like so:
<xsl:for-each-group select="$bibref" group-by="bib:grouping-key(.)">
<xsl:sort select="current-grouping-key()"/>
What have I done wrong, and how do I fix it?
Bruce
--
Bruce D'Arcus, PhD
Miami University
216 Shideler Hall
Oxford, OH 45056
513-529-1521