DFN要素を抜き出して索引を作る

DFN要素の説明ではよく、文章全体からこの要素タイプを検索してリストアップすることで、索引を自動生成するなどの使い方が可能ですみたいなことが書かれているのだけれども、実際にそんなシステムを提供しているサイトは寡聞にして知らなかったりする。なので私は、日記のログから特定の要素を抽出して、それを索引にして表示する XSL ファイルを書いてみた。んで、実際に抽出して列挙してみたら、2003年以降 DFN 要素を11回しか使っていなかったことが分かった。これでは寂しいのでログを見直して定義語を探し出し、悉く DFN 要素にマークアップしていきたい感じだ。

というか;

<xsl:template match="list">
  <xsl:variable name="a" select="item[starts-with(@ruby,'あ')] | item[starts-with(@ruby,'い')] | item[starts-with(@ruby,'う')] | item[starts-with(@ruby,'え')] | item[starts-with(@ruby,'お')]" />
  <xsl:variable name="ka" select="item[starts-with(@ruby,'か')] | item[starts-with(@ruby,'き')] | item[starts-with(@ruby,'く')] | item[starts-with(@ruby,'け')] | item[starts-with(@ruby,'こ')] | item[starts-with(@ruby,'が')] | item[starts-with(@ruby,'ぎ')] | item[starts-with(@ruby,'ぐ')] | item[starts-with(@ruby,'げ')] | item[starts-with(@ruby,'ご')]" />

  (中略)

  <xsl:if test="$a">
    <div class="section" id="a">
      <h2></h2>
      <ul>
        <xsl:for-each select="$a">
          <xsl:sort select="@ruby" />
          <xsl:call-template name="link" />
        </xsl:for-each>
      </ul>
    </div>
  </xsl:if>
  <xsl:if test="$ka">
    <div class="section" id="ka">
      <h2></h2>
      <ul>
        <xsl:for-each select="$ka">
          <xsl:sort select="@ruby" />
          <xsl:call-template name="link" />
        </xsl:for-each>
      </ul>
    </div>
  </xsl:if>

  (中略)

</xsl:template>

自分でも、なんて馬鹿な方法なのだろうと思っているのだけれども、もっとエレガントな方法ってないのかな。本当は item[stars-with(@ruby,('あ'|'い'|'う'|'え'|'お'))] とかしたかったのだけれども、そうは問屋が卸してくれなかった。