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といって処理をやめてしまう。これでは使えないなぁ。