xsl-list
[Top] [All Lists]

RE: groupi-by statements?

2004-08-26 09:51:33
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(_at_)myrealbox(_dot_)com] 
Sent: 26 August 2004 16:51
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] 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[(_at_)type = 'family']|
                 mods:namePart[not(@type)],
                 mods:namePart[(_at_)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[(_at_)type='host']/mods:issuance =  
'continuing'">
          <xsl:for-each select="$bibref">
<!-- use periodical title -->
            <xsl:value-of  
select="mods:relatedItem[(_at_)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


--+------------------------------------------------------------------
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>