ボロボロのXSLTスタイルシート

委託先からXSLTスタイルシートの納品を受けました.お客様に納品するものですが、私の会社で工数的に無理だったのでお客様の了解をいただいて外部に委託したものです.受け取ってコードを見て、そのあまりのひどさに愕然としました.複数のXMLファイル出力があるから、XSLT2.0のxsl:result-documentが必須だと言っておいたのですが、確かにXSLT2.0ではあるもののコードのいい加減さといったら見ていて情けなくなるものでした.例えば、
 
<xsl:if test="[条件]">
  [処理1]
</xsl:if>
<xsl:if test="not([条件])">
  [処理2]
</xsl:if>
 
というコードが山ほどあります.確かにXSLTでは、残念ながら
 
<xsl:if test="[条件]">
  ....
<xsl:else/>
  ....
</xsl:if>
 
とはかけません.でも最初のように書くのは
 
<xsl:choose>
  <xsl:when test="[条件]">
    [処理1]
  </xsl:when>
  <xsl:otherwise>
    [処理2]
  </xsl:otherwise>
</xsl:choose>
 
とxsl:chooseを使って書くのが厄介だからです.これはエディタを使っているとすぐわかりますが、xsl:ifのダンゴだったら処理1と処理2が似ているならば、copy/pasteで簡単に(効率無視の)ロジックを書けてしまうからです.
 
それに比べてxsl:chooseと書くのは手間がかかります.こういうところからコーダーの思想性が見えてきます.C++, Javaでこんなコーディングをする人がいるでしょうか?決していないと思います.それがXSLTスタイルシートだと平気でこのようなコードを書いて納品します.
 
あとコードを書いた人はxsl:analize-stringに心酔しているらしく、使わなくてもいいところで山ほど使っています.例えばこんな具合です.
 
<xsl:variable name="href">
  <xsl:analyze-string select="string(@href)" regex="\.[Pp][Dd][Ff]">
    <xsl:matching-substring>.png</xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:value-of select="."/>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:variable>
 
これで、拡張子が".pdf"のパスを".png"に換えたつもりのようです.でも下手をすると.pdfなんていう綴り、パスの中にないという保証があるでしょうか?私だったら、拡張子だけを書き換えるxsl:functionを作りますが、この人はすべてをxsl:analyze-stringでやっています.プログラムとしてもダメで、xsl:analyze-stringは、単に可読性を低めているだけです.
 
またよくよく見たら、このスタイルシートには、変数やパラメータのas属性も、xsl:sequenceも、xsl:functionも一切ありませんでした.結局、XSLT2.0の機能は、xsl:result-documentとxsl:analize-stringで使われているだけといっても過言ではなかったようです.これではXSLT2.0といっても名ばかりです.
 
コードがこんな状態ですから、あにはからんやインタフェースもボロボロで現在修正中です.
 
この件があってから深く考えさせられました.C++Javaは本も山ほど出ていて習得するのに一定の道筋ができています.コーディングルールもできています.しかしXSLTスタイルシートはまだまだ日本ではそういう環境はありません.XSLT2.0に至っては、和書は皆無です.(唯一、インフォテリア社が「XSLT 2.0日本語マニュアル 」を出しています.)このような環境で何も知らないXSLT1.0プログラマーにXSLT2.0スタイルシートを書かせるのは、なんとかに刃物を持たせるのと同じだと思います.
 
またこのスタイルシートにはコメントがほとんどといって良いほどありませんでした.たまたまコメントがあるテンプレートがあるのでよく見たら私のスタイルシートからのデッドコピーという情けないあんばいです.コメントは大切です.C++Javaのプログラムが納品されればシステムが寿命を迎えるまで何年も使用/メンテナンスされるのは決して珍しくありません.メンテナンス時に適切なコメントがあれば非常に助かります.特に他人の書いたプログラムをメンテするときはなおさらです.この事情はXSLTスタイルシートも同じなのです.ここが理解されていません.他人にわかるプログラムを書いて、メンテナンスしやすくするのが結果的に如何に大切であるかがスタイルシートプログラマの思考から欠落してしまっています.
 
日本のXSLTスタイルシートはまだまだこれからと痛感させられました.