実践XSLT「やさしいXSLTの書き方」
第2回:XSLTの書き方
(株)日本ユニテック
青木 秀起
イントロダクション
政界において「構造改革」という言葉が飛び交う昨今、XMLの世界では一足先にXSLTによる「構造変換」が注目を浴びてきました。元のデータとは全く異なる"別物"を作り出すことのできる「構造変換言語」XSLT
- そのイメージは第1回でつかめたと思いますので、今回はXSLTの実際の書き方を解説します。
2.スタイルシート(XSLファイル)のフレーム
XSLT変換処理を行うスタイルシートのフレームは次のようなものです。まずXML宣言(①)とスタイルシート開始の宣言(②)を記述し、その後ソース・ツリーの最上位のノードから順に変換処理(マッピング)(③)してゆきます(この例では、"titleというノードを見つけたら、h1要素を生成し、titleの内容であるテキストを埋め込め!"という命令が記述されています)。
図1.スタイルシートのフレーム例
①XML宣言
XMLファイルと同じように、最初の行にXML宣言を書きます。この時の文字コード指定はXMLファイルと同じものでなければなりません。
②スタイルシート宣言:ルート要素
これが、XSLTファイルのフレームとなる部分の宣言で、「ルート要素」と言います。この内側(下位)に変換の指定を書いてゆきます。xsl:stylesheetの代わりにxsl:transformを使うこともできます。スタイルシートとして使用する時にはxsl:stylesheetを、変換として使用する時にはxsl:transformを使用して区別することもできますが、機能は全く変わりありません。
version="1.0" |
XSLTのバージョン指定 |
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
XSLTマークアップ定義情報の参照先URL |
xmlns="http://www.w3.org/1999/xhtml1/strict" |
スタイル・シートのデフォルト・マークアップに関する詳細情報の参照先URL(この場合はXHTML) |
表1 スタイルシート宣言の属性
この部分で変換のための指定を行います。テンプレート・ルールはテンプレートとパターンで構成されます。上の例ではmatchがパターン部です。match属性に指定された値に適合するノードを見つけたら、処理が定義されているテンプレートがインスタンス化されます。match属性値と適合するノードがあるたびにテンプレートがインスタンス化されます。
図2.テンプレート・ルール
④xsl:value-of命令
"指定された要素の内容を出力するように!"という命令です。select="."は、"現在のノード(title)"の文字列を指定しているので、<title>要素中の文字列を出力してくれます。
3.サンプルで復習してみよう!
これまで学習した内容に従って、次のサンプル・ファイルを変換するXSLファイルを書いてみましょう。
図3.サンプル・ファイル
メモ帳等のエディタを開き以下のように書いてゆきます。
①XML宣言を書く
<?xml version="1.0" encoding="shift_jis"?>
②スタイルシート宣言を書く
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml1/strict">
・・・・・・(この部分に③を書いてゆきます)・・・・・・
</xsl:stylesheet>
③テンプレート・ルールを書く
1.<document>を見つけたら<html>と<body>を生成する。
<xsl:template match="document">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<解説>ここで初めて<xsl:apply-templates/>という命令が出てきました。これは、"子要素(ここでは<title>や<para>)のテンプレート・ルールを適用してその結果をここに埋め込め!"という命令です。
2.<title>を見つけたら<h1>を生成して<title>の内容を書き出す。
<xsl:template match="title">
<h1><xsl:value-of select="."/></h1>
</xsl:template>
3.<para>を見つけたら<p>を生成して<para>の内容を書き出す。
<xsl:template match="para">
<p><xsl:value-of select="."/></p>
</xsl:template>
うまく書けましたか?全部書けたらstyle2.xslという名前を付けて保存してください。同じディレクトリに図3のサンプル・ファイルをダウンロードし、IEで開いてみてください。下図(図4)のように表示されるはずです。
◆サンプル・ファイル:sample2.xmlをダウンロード(このファイルはZIP形式で圧縮されています)
◆見本:style2.xslはこちら
図4 サンプル・ファイルの表示例
うまく表示されない場合、お持ちのIE付属のXMLパーサMSXMLのバージョンが古い可能性があります(詳細はIEのXSLTサポートについてをご覧ください)。その場合には、次の手順に従ってMSXML3.0をダウンロードしてください。
4.まとめ
今回は、XSLTの大まかな書き方を解説しました。<title>→<h1>や<para>→<p>の変換命令を一回書いてあげれば、それが何度出てきても処理を繰り返し行ってくれるというメリットにもお気づきになったことでしょう。あとは他のテンプレートやパスの書き方等を覚えながら実際に書いてみることができます。次回にご期待ください!
ノード
文書を構成する項目、ツリーを構成するそれぞれの節のこと。次の7種類のノード・タイプがある。
・ルート
・要素
・テキスト
・属性
・名前空間
・処理命令
・コメント
トップレベル要素
xsl:stylesheet(またはxsl:transform)の直下に来る要素のこと。次のような12個の要素を順序にこだわらずに使用することができる(例外:xsl:importだけは最初に置く)。
・xsl:import
・xsl:include
・xsl:strip-space
・xsl:preserve-space
・xsl:output
・xsl:key
・xsl:decimal-format
・xsl:namespace-alias
・xsl:attribute-set
・xsl:variable
・xsl:param
・xsl:template
XSLT変換処理を実際に行ってくれているのは、IEに組み込まれているMSXMLというXMLパーサです。このMSXMLはIEとは別にバージョンアップされているので、XSLTサポートについては、IEのバージョンというよりMSXMLのバージョンに注意する必要があります。下記のラフな表をご覧ください。
上図のように、MSXML 2.0は、XSLTが切り離されて勧告となる前の、ワーキングドラフト段階のXSLの仕様に基づいています。MSXML2.0ではサポートされていないXSLT機能があるため、うまく表示されないことがあります。一方、MSXML 3.0以降は、XSLTの現勧告仕様に基づいています。
ですから、使用しているMSXMLのバージョンに応じて、スタイルシート宣言の名前空間指定を変えなければなりません(実践XSLT第1回はMSXML2.0、第2回はMSXML 3.0を前提としています)。今回のサンプル・ファイルがうまく表示されない場合、MSXML 2.0をお使いになっている場合があります。XSLT機能をほぼサポートしているMSXML3.0をインストールされることをお勧めします。なお、現在XML Schema対応のMSXML 4.0プレビュー版がリリースされています。
<<msxml3.dllとxmlinst.exeのインストール方法>> |
1.MSXML3.0(msxml3.dll)をインストールする
①http://msdn.microsoft.com/xml/default.aspにリンクする
②「XML Downloads」→「Web Development」→「XML」→「MSXML Parser 3.0 Release」→「Download」の順にクリックしてmsxml3.dllをダウンロードする
2.インストールしたMSXML3.0を有効にする(切り換える)
①左のツールバーの「Xmlinst.exe Replace Mode Tool」をクリックしてxmlinst.exeをダウンロードする
②xmlinst.exeファイルを任意のディレクトリに解凍する
③DOSプロンプトを開き、xmlinst.exeを解凍したディレクトリに行き、そこでxmlinstと入力して実行する
>>次の記事「XSLTを実際に書いてみる-その1」
関連サービス
IT技術およびIT製品の可用性調査・検証業務
関連キーワード: XML変換
関連キーワード: XSLT
|