コンテキストに関する情報を扱う関数について紹介します.
■ current()
current()はXSLT1.0ではnodeでの使用があたりまえでした.例えば
current()はXSLT1.0ではnodeでの使用があたりまえでした.例えば
<xsl:template match="doc">
<xsl:apply-templates select="chapter[@xml:lang=current()/@xml:lang]"/>
</xsl:template>
<xsl:apply-templates select="chapter[@xml:lang=current()/@xml:lang]"/>
</xsl:template>
のように使えば、doc/@xml:langと同じ値を@xml:langに持ったchapterが処理されます.わざわざ次のように書かなくとも良かったわけです.
<xsl:template match="doc">
<xsl:variable name="doc" select="."/>
<xsl:apply-templates select="chapter[@xml:lang=$doc/@xml:lang]"/>
</xsl:template>
<xsl:variable name="doc" select="."/>
<xsl:apply-templates select="chapter[@xml:lang=$doc/@xml:lang]"/>
</xsl:template>
XSLT2.0では、current()はnodeだけでなく一般的なitem()を返すようになっています.例えば
<xsl:variable name="lang"
as="xs:string*"
select="('en-GB','en-US','ja','zh-CN','zh-TW','ko')"/>
as="xs:string*"
select="('en-GB','en-US','ja','zh-CN','zh-TW','ko')"/>
<xsl:template match="set">
<xsl:variable name="set" as="element()" select="."/>
<xsl:for-each select="$lang">
<xsl:apply-templates select="$set/book[@xml:lang=current()]"/>
</xsl:for-each>
</xsl:template>
<xsl:variable name="set" as="element()" select="."/>
<xsl:for-each select="$lang">
<xsl:apply-templates select="$set/book[@xml:lang=current()]"/>
</xsl:for-each>
</xsl:template>
というテンプレートは、set/bookを変数$langに定義されている'en-GB','en-US','ja','zh-CN','zh-TW','ko'の順に処理します.
current()は"[]"(predicate)の中でそのXPath式の外のコンテキストアイテムを参照するのに便利です.従来はカレントノードと表現してきたのですが、XSLT2.0ではカレントノードという言い方はなくなり、コンテキストアイテムという言い方に置き換えられました.current()という名前はXSLT1.0からのなごりの名前ですね.
■ default-collation()
既定のコレーションURIを返します.
既定のコレーションURIを返します.
<xsl:message>default-collation()="<xsl:value-of select="default-collation()"/>"</xsl:message>
とすれば、
default-collation()="http://www.w3.org/2005/xpath-functions/collation/codepoint"
と表示されます.パラメータでコレーションURIを与えて、比較をする際に既定値として使用するくらいでしょう.
■ current-group(), current-group-key()
この2つの関数は、<xsl:for-each-group>と組み合わせて使用します.項を改めて紹介したいと思います.
この2つの関数は、<xsl:for-each-group>と組み合わせて使用します.項を改めて紹介したいと思います.