2006-02-20

xsl:param にノード集合を渡す。

久々にネットで情報収集をしていたら、xsl:param にノード集合を渡す。 [引用: http://lowreal.net/logs/2004/11/25/1 より] という記事を見つけました。これには文字通りXSLTの xsl:param にノード集合を渡す方法と一例が記載されています。ちょっと古い記事なので、既にTrackback突っ込みがありますが、渡されるのは結果ツリーフラグメントである。即ち、仕様の意図した方法ではありません。

[XSLT1.0] をご存知の方ならばご承知の様に、テンプレートへのパラメータの引き渡しは、xsl:with-param要素で渡すことができます。このパラメータの値の指定方法は、xsl:variablexsl:paramの場合と同様に、要素の内容で値を設定すると結果ツリーフラグメントに値を結びつけたことになります。つまり、XPath [XPath] のデータ型には結び付けられない。

然しながら、記事にある一例は、仕様の意図に反する方法(非準拠)な訳ですが、XSLTプロセッサのSablotronならば記事記載の変換後の様な誤った期待通りの処理を返すようです(これは、Sablotronが [XSLT1.0] に準拠してないだけなのです)。

この記事の一例は、記事を読んだ人の仕様への理解力によっては、一見、Sablotronを使う際の裏技と捕らえかねません。他の技術仕様(X/HTMLなど)でも同様の事、仕様の意図に反する方法(これには、仕様を正しく理解してない者が裏技などと称する方法も含む)は使用すべきではないということをここで念押ししておこう。