ちょっとしたメモ

OperaのXSLT:document()関数サポート

Opera 9.5がようやくXSLTのdocument()関数をサポートするらしい。これは朗報だ。document()を使いたくても、Operaで致命的エラーが生じるためにこれまで見送ってきのだが、まもなく障壁が取り除かれることになる。

11月16日のEven more work - Desktop Teamで、Opera9.5α版の最新ビルドの機能がいくつか紹介されている中に、次の1行がある。

Added support for the XSLT document() function (poke to xmlhacker ;-) )

長い間(一部で)待たれていた機能がようやく実装されるということだ。Operaはこれまでdocument()をサポートしておらず、スタイルシートに記述するとCall to undefined function: documentと不平を述べて、XSLTの処理全体を放棄(XSLT processing failed!)してしまっていた。

厄介だったのは、Operaはコンパイル時にこの関数を見つけると、コンテクストにかかわらず処理を拒否してしまうこと。たとえば次のようにfunction-availableでチェックして、関数がサポートされているときだけdocument()を使おうとしても、うまくいかないのだ。

(例)

<xsl:variable name="d">
 <xsl:if test="function-available('document')">
  <xsl:value-of select="document('')"/>
 </xsl:if>
</xsl:variable>

IEもFireFoxもdocument()をサポートしているので、この関数を使いたい場面はあるのだが、Operaで致命的エラーになってしまうため、これまでは諦めざるを得なかった(Safariもdocument()はサポートしないが、そのテンプレートを無視して他の部分を処理するので、まだ何とかなる)。

上記ページから新しいビルドをダウンロードして試してみたところ、見事document()関数が機能した。そのほかXPath、XSLT関連のバグがたくさん修正されているということなので、XSLT使いとしては、Opera 9.5の正式登場に期待するところ大。

〔付記〕このα版はなんだかexclude-result-prefixesの処理がおかしく、宣言した接頭辞についてもundeclared prefixといって処理をやめてしまう。これでは使えないなぁ。

genre: xslt. at