サンプルで覚えるXSLTプログラミング
4. テンプレート系XSLTエレメント
テンプレート系エレメントは、テンプレートの宣言および呼び出しに関するタグ群です。 テンプレートとは、XSLTにおける処理のマクロだと考えていいでしょう。
<xsl:template>、<xsl:apply-templates>および<xsl:call-template>について、それぞれ簡単な機能の概略と、おもな属性の紹介、これらのタグを利用した簡単な例を紹介します。
テンプレートの定義
<xsl:template>
属性名 | 属性値 | 機能 |
match | XPath表現 | 処理中のノードにこのテンプレートが適応されるべきかどうかを吟味するための表現です。 |
name | 文字列 | テンプレートの名前です。 |
mode | 文字列 | “match”属性値の表現が同じ場合でも、“mode”属性を加えることで違うテンプレートを定義することができます。 |
“match”か“name”のいずれかの属性が必要で、両方が混在することは許されません。属性“match”は次の<xsl:apply-templates>と使われることを前提にしています。また属性“name”は<xsl:call-template>で呼び出されます。
例:<xsl:template match="/prefectures"> |
該当するテンプレートの適用
<xsl:apply-templates>
属性名 | 属性値 | 機能 |
select | XPath表現 | 処理中のノードに適応するテンプレートを選択するための表現で、必須です。 |
mode | 文字列 | “match”属性値の表現が同じ場合でも“mode”属性をくわえることで違うテンプレートを定義することができます。 |
<apply-templates>では、selectに指定された表現に当てはまる(マッチする)ごとに、該当するテンプレートが呼び出されます。この実際の例は後述します。
例:<xsl:apply-templates
select="prefecture"/> |
<xsl:apply-templates select="prefecture"/>
指定されたテンプレートの呼び出し
<xsl:call-template>
属性名 | 属性値 | 機能 |
name | 文字列 | テンプレートの名前です。 |
“name”で、呼び出すテンプレートを指定します。
例:<xsl:call-template
name="body"/> |
それでは上記3つのタグの使用例をみてみましょう。今回は、日本の都道府県についてのデータ(都道府県名、県庁所在地、面積、人口)が記述されたXML文書「prefecutres.xml」を使用します。これをスタイルシートでさまざまな形に加工していきましょう。
prefectures.xml(元になるXML文書)
|
まずはシンプルに、上記の都道府県名を順番どおりに表示してみます。「1.XSLTによるHTMLへの変換」で、XSLTプロセッサがスタイルシートをどのように処理していくのか説明しました。下記のスタイルシート「prefectures1.xsl」からなぜ、「出力1」が得られるのか、不明な場合は、もういちど前述の記事を見直してみてください。
prefectures1.xsl(都道府県名を抜き出すスタイルシート)
<xsl:template match="/prefectures">
|
出力1(スタイルシートを適用した結果)
|
「出力1」と同じ出力は、<xsl:call-template>タグを使用した「prefectures2.xsl」によっても得ることができます。<xsl:call-template>を呼び出すときは、属性に“name”を使い、またテンプレートも“name”で定義されていることに留意してください(下のほうに<xsl:value-of
select="name"/>という行がありますが、これは都道府県名を記すタグ/prefectures/prefecture/nameタグのことです。)
prefectures2.xsl(別のスタイルシート)
|
これらの例では<xsl:output>タグや<xsl:value-of>タグなどが出てきましたが、これらのタグの詳しい使い方はあとで述べることにします。また、属性“mode”の使用法についてはフローコントロール系の<xsl:if>タグのところで例を示します。ここではあくまでも、XSLTの処理のコアであるテンプレートの定義の仕方、および呼び出し方について簡単に理解してもらえばいいでしょう。
例として示したファイルは下記からダウンロードできます。
Index | |
サンプルで覚えるXSLTプログラミング | |
1.
XMLからHTMLへの変換 スタイルシートはどのように解釈されるか |
|
2.
XPathの基礎知識 XML文書をツリー構造で見る XPathの表記方法 |
|
3. XSLTエレメントの概要 コラム XSLTプロセッサのインストール |
|
4. テンプレート系XSLTエレメント テンプレートの定義 該当するテンプレートの適用 指定されたテンプレートの呼び出し |
|
5. 変数系XSLTエレメント 変数の定義1 変数の定義2 |
|
6. 出力系XSLTエレメント 該当する表現の値を代入 エレメントノードの生成 属性ノードの生成 テキストノードの生成 コメントノードの生成 PI(processing-instruction)の生成 出力方法の指定 |
|
7. フローコントロール系XSLTエレメント ループ処理 条件分岐 IF文 |
|
8. その他のXSLTエレメント
他のXSLファイルの読み込み 数の割り当て |
|
9.XSLT関数の概要 関数の主な分類 |
|
10. 文字列系関数 文字列の連結 文字列の調査 数字のフォーマッティング 空白の除去 …… |
|
11. 数値計算系関数 切り上げ 表現の数を数える 切り下げ 数値型への変換 四捨五入 加算 |
|
12. ノードに関する関数 | |
13. bool代数系関数 | |
14. その他の関数 | |
15. JavaによるXSLTの拡張
Built-inクラスの呼び出し カスタムメイドの関数を作る |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|