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

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

■ サンプルのstyle2.xsl


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


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

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


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

 したがって,例えば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()}"/>


図3 style2.xslによるXSLT変換結果
[画像のクリックで拡大表示]
 図1(2)はXMLデータから情報を収集している部分であり,抽出しているデータ項目はstyle1.xslとは異なっている。またその他全体的に表示スタイルをstyle1.xslとは変えている。

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

■ XSLT変換結果を確認する


リスト XSLT変換を行うtransform.htmファイルのソース
ソースのダウンロード
[画像のクリックで拡大表示]

図4 Internet Explorerによるtransform.htmファイルの表示
[画像のクリックで拡大表示]

図5 transform.htmファイルの実行例
[画像のクリックで拡大表示]
 これまでXSLT変換の仕組みを解説してきたが,サンプル・ファイルを実行した場合,変換結果が直接ブラウザに表示されてしまうため,上記のようにタグの記述としての結果を確認することができない。そこで変換結果をテキスト・エリアに表示するようにして,結果のHTMLをソースとして確認できるようにしてみよう。加えてXML文書とXSLTスタイルシートのファイル名をテキスト・ボックスで入力するようにすれば,さまざまなXSLT変換を試してみることができる。サンプル・ファイルのindex.htmを基にして前述のような変更を加えたものをリストに示す。

 このtransform.htmをInternet Explorerで開いて実行すると,図4のような表示になる。実行時にページ上部の「情報バー」にメッセージが表示された場合は,そこをクリックして「ブロックされているコンテンツを許可」していただきたい。この状態で,「XMLファイル」入力欄にアップルコンピュータのトップテンソングデータのURLを入力し,「XSLTスタイルシート」入力欄でサンプル・ファイルの「style2.xsl」を指定し,「変換実行」ボタンをクリックすると,テキスト・エリアに変換結果が表示される(図5)。

 これまで,サンプルを交えてXML,名前空間,XSLT変換などを解説してきた。入門として押さえて欲しい基本的な内容で構成してきたが,XMLおよびその関連技術には,ここで触れていない機能や文法がまだまだ多くある。XMLをうまく活用できると,かなり自由度の高いデータ操作ができるようになる。インターネット上では,BtoBなどのビジネス用途でXMLデータが交換されている例は多いが,最近はもっと身近なところでもXMLが使用されている。もしも興味のある部分でXMLが使用されていれば,そのXMLデータを自分なりに応用してみることを考えてみるのもよいだろう。自分で工夫して動かした結果は,それだけ自分の技術になるはずだ。

木村 達哉
インフォテリア 教育部
インフォテリア認定教育センターの運営や,XML技術者認定制度のXMLマスターに対応したコーステキストの開発などに携わる。XMLは,何となく知っているようでもそれを正しく扱うためにはなかなか奥が深いもの。そんなXMLへの入口を紹介します。