Part5ではサンプル・ファイルに含まれているstyle1.xslを例にしてXSLTスタイルシートを解説した。Part6では引き続きstyle2.xslを取り上げよう。style2.xslの全体的な構成はstyle1.xslと同じなので,style1.xslと異なっている点にフォーカスして解説する。

<<サンプル・ファイルのダウンロード>>

 style2.xslを図1に示すが,まずは(1)に注目して欲しい。ここではHTMLのimg要素のsrc属性値の部分で「{ }」を使用している。XSLTスタイルシートでは,XSLT要素でない要素(リテラル結果要素という)の属性値の部分で「{ }」を使うことによって,「{ }」内部をXPath式として評価した結果の文字列を属性値にすることができる(属性値テンプレートという)。機能的には,以下のように記述したものと考えることができる。

図1●サンプル・ファイルのstyle2.xsl
図1●サンプル・ファイルのstyle2.xsl
[画像のクリックで拡大表示]

 <img border="0" src="<xsl:value-of select='itms:coverArt[3]'/>"/>

 XSLTではこのような記述はできない(もちろん,この記述はXMLの文法にも違反している)ため,この場合は「{ }」を用いた記述にする。

 そして属性値テンプレートでの記述の最後の「[3]」は,ノードに対するフィルター条件になっている(XPath式の述部という)。この場合は3番目のノードという条件である。変換元のXML文書であるアップルコンピュータのトップテンソングデータには,対象のcoverArt要素が3つある(図2(1))。このような場合に「[3]」といった条件を記述することによって,対象ノードを3番目のcoverArt要素に絞り込むことができる。この条件式はXPath式であり,演算子や関数を使ったほかの表現も可能である。

図2●アップルコンピュータが提供しているRSSデータ
図2●アップルコンピュータが提供しているRSSデータ
[画像のクリックで拡大表示]

 したがって,例えば3番目のcoverArt要素の文字列値が「http://a1.phobos.apple.com/XXXX.jpg」だった場合,図1(1)の変換結果は以下のようになる。


<img border="0" src="http://a1.phobos.apple.com/XXXX.jpg"/>

 属性値テンプレートでは「{ }」の記述でXPath式を使用することができるが,もしも「{」や「}」を属性値文字列として記したい場合は,「{」や「}」を2重に記述することでエスケープできる。例えばXSLTスタイルシートで以下のように記述したとしよう。


<input type="text" name="comment" onchange="{{thanks()}}"/>

 この場合のXSLT変換結果は以下のようになる。


<input type="text" name="comment" onchange="{thanks()}"/>

 図1(2)はXMLデータから情報を収集している部分であり,抽出しているデータ項目はstyle1.xslとは異なっている。またその他全体的に表示スタイルをstyle1.xslとは変えている。

 以上より,サンプル・ファイルのstyle2.xslを用いたXSLT変換結果は図3のようになる(途中2~9番目の処理結果は省略している)。

図3●style2.xslによるXSLT変換結果
図3●style2.xslによるXSLT変換結果
[画像のクリックで拡大表示]