Subject: RE: groupi-by statements?
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Thu, 26 Aug 2004 17:51:33 +0100
|
The obvious answer is there's an error in your path expression, but it's
hard to identify it without having the source document handy.
Michael Kay
> -----Original Message-----
> From: Bruce D'Arcus [mailto:bdarcus@xxxxxxxxxxxxx]
> Sent: 26 August 2004 16:51
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: groupi-by statements?
>
> 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(@typ
> e)]/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
|