XSLT3.0への道(24) 閑話休題;その昔と今のマイクロソフト

もう昔なので確たる年は忘れてしまいましたが社長から「XMLに命をかけろ(!?)」と言われて、XSLTの勉強をしだしたのが2000年頃だっと思います.XSLT 1.0は1999年11月に勧告になっていましたが、そのころ和書でXSLTが載っている本と言えばこのCD-ROMがオマケで付いてきた「XML + XSL サンプル集」というCQ出版から出ていた本しかなかったのではと思います.

イメージ 1


早速買って(確かその当時すでにダウンロード可能だった)MSXMLやSaxonで試してみたのですが、サンプルはまったく動いてくれませんでした.理由はとても簡単、この本の元になってたのは当時マイクロソフトXSLTのワーキングドラフトを元にしてインプリメントしたIEにバンドルされたMSXMLでしか動かなかったのです.という訳で高いお金を出したのも関わらずお話にならなかったので本は怒って破って捨てました.(筆者のみなさんゴメンナサイ)

今回年度末の大掃除をしていたら、オマケのCD-ROMが出てきました.せっかくなので少し中のコードを見てみるとXSLT 1.0が勧告になるまでの足取りを見ることができます.例えば次のようなコードがあります(一部省略)

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xml:lang="ja">
    ...
  <xsl:template match="全体">
    <table>
      <tr>
        <th>番号</th>
        <th>品名</th>
        <th>価格</th>
      </tr>
      <xsl:for-each select="商品">
        <xsl:if test="価格[.$gt$ 150000]">
          <tr>
            <td>
              <xsl:value-of select="番号"/>
            </td>
            <td>
              <xsl:value-of select="品名"/>
            </td>
            <td style="text-align:right">
              <xsl:value-of select="価格"/>
            </td>
          </tr>
        </xsl:if>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>

ワーキングドラフトの段階では数値比較の演算子は "$gt$"なんて表されていたのですね.まあ昔をしのぶのは良いのですが、このマイクロソフトのフライイングによるXSLTの実装は不評を買い、それ以降マイクロソフトが先行してこのような仕様を先行実装するという事はなかったと思います.そしてXSLT 2.0の時代になるとマイクロソフトはまったくXSLTからそっぽを向いてしましました.

でも2017年の今になって、何やら動きがあるようです.いわくマイクロソフトXSLT 3.0を.NETに実装する(かも!?)というものです.

XSLT 2.0/3.0 in .Net Core

Implement XSLT 3.0 for .Net

まあまだ賛同者を募っている状態なのでどうなるかはわかりません.しかし私がみた時点では1,344人の賛同者がいます.もしあなたも賛同者に加わっていただければ、巨人マイクロソフトも動くやもしれません.

私はStackOverflowのXSLTの質問を購読していますが、ある意味は二極分化しているようにも見えます.どうしてもXSLT 1.0でやるにはどうするのか?という質問(たぶんMXSMLや.NETのXSLT)と、XSLT 2.0やXSLT3.0でもOK(JavaのSaxonなど)という質問です.前者の質問はいわばマイクロソフトプラットフォームの制約に縛られていて哀れでもあります.マイクロソフトの.NET戦略の中でもいつまでもXSLT 1.0(XPath 1.0)ではやってゆけないと考えるときが来てくれるのかもしれません.