xsl-list
[Top] [All Lists]

Re: regexs, grouping (?) and XSLT2?

2004-08-08 21:19:21
On Aug 8, 2004, at 6:45 PM, Michael Kay wrote:

I think you're trying to solve several problems at the same time here. It fails my 10-minute rule: I never spend more than ten minutes answering a
question on this list.

Fair enough. Anything to get me pointed in the right direction is appreciated. Let me just see if I understand the following:

Essentially both the para output and the list of citations are grouping problems that can be tackled using xsl:for-each-group, probably using group-adjacent. You may need to write a function that calculates the grouping key. The suffix "a", "b" etc can be obtained using xsl:number. It may be simplest to start by generating a copy of the bibliography in which the list of authors (Doe and Jones) and the year/serial (1999b) appear as additional computed child elements or attributes, and then working with this copy.

So something like this to start?

<xsl:template match="mods:modsCollection">
  <xsl:for-each-group select="mods:mods"
                      group-by="mods:name/mods:namePart[(_at_)type='family']">
    <author>
      <xsl:attribute name="key">
        <xsl:value-of select="current-grouping-key()"/>
      </xsl:attribute>
      <xsl:for-each-group select="current-group()"
                          
group-by="substring(mods:originInfo/mods:dateIssued,1,4)">
        <year>
          <xsl:attribute name="key">
            <xsl:value-of select="current-grouping-key()"/>
          </xsl:attribute>
          <xsl:copy-of select="current-group()"/>
        </year>
      </xsl:for-each-group>
    </author>
  </xsl:for-each-group>
</xsl:template>

This gives me output like:

<author key="Jones">
   <year key="1999">
      <mods xmlns="http://www.loc.gov/mods/v3"; ID="three">
        etc.

The problem is that the author key only captures the first name element. Is this why you say I may need to "write a function that calculates the grouping key"? Any further hints on how to do this?

Bruce