XSLT 1.0 で文字種の判定

XSLT変換でややこしい依頼があったのだが、XSLT 2.0だとcastableで文字種の判定が出来そうなのでそれで関数を書いて解決…したと思ったら「1.0で書いてくれ」と言われてしまってへこんだ。そもそも、1.0では関数の宣言が出来ないわけですが…


とりあえず、関数のかわりに名前付き、パラメーター付きのテンプレートを使用して記述に成功する。関数ならXPathの判定でも使う事が出来るはずだが、テンプレートだと出力にしか使えない…。*1その上、パラメーター付きテンプレートは関数に比べて記述が太って分かりにくい。


文字種については今回は「数字か否か」しか問題ではなかったので、translate(文字, "1234567890", "0000000000")で変換してしまい、結果がゼロか否かで判定するという方法を思いついた。どれぐらい独創的なのかと思って検索すると似た例がたくさん見つかったが、どうもOracleSQLで組み込み関数にも同名同機能のtranslateがあるらしく、そこで多用される方法らしい事が分かった。XSLTではあまりないようだが、世にOracleの技術者は多いから、あまり独創的と言えない事は確かだ(笑)

*1:いや、さらに回りくどい事をすればいけるのか?