| |
XSLTテンプレートの機能を継承する | ||
|
<xsl:import>要素を利用した外部スタイルシートのインポートで、優先順位の低いテンプレートを完全に打ち消すのではなく、現存するテンプレートの機能に追加するテクニックを紹介します。
|
2003/10/17
別稿「XSLTテンプレートをインポートする」では、<xsl:import>要素を利用した外部スタイルシートのインポートについて解説し、<xsl:import>要素によってインポートされた外部ファイルには優先順位がある、と紹介しました。すなわち、<xsl:import>要素を使用した場合、テンプレートは呼び出される側よりも呼び出す側の方が、前に記述された方よりも後に記述された方が、それぞれ優先順位は高くなります。
しかし、優先順位の低いテンプレートを完全に打ち消すのではなく、現存するテンプレートの機能に「追加」したいというケースがあるでしょう。そのような場合には、<xsl:apply-template>要素を使用することで、元のテンプレートの機能にほかのテンプレートの機能を入れ子で適用することが可能になります。以下のスタイルシートのロジックそれ自体に関しては、別稿「文章の一部分を強調文字で出力する」を参照してください。
[descript.xsl] |
[include.xsl] |
別稿「XSLTテンプレートをインポートする」のdescript.xslと比較してください。違いは、descript.xslにおいて、<xsl:template match="description">要素が記述されているかどうかです。<xsl:template match="description">要素が記述されていない場合には、単純にinclude.xslで定義された<xsl:template match="keywd">、<xsl:template match="text()">が適用され、<keywd>要素の内容がボールド体で表示されます。
しかし、例えば、descript.xslの内部に以下のように<xsl:value-of select="." />と記述された場合にはどうでしょう。
<xsl:template match="description"> |
この場合、<xsl:import>要素のルールに従い、呼び出し側のスタイルシートが優先され、include.xslの内容は無視されてしまうのです。つまり、<description>要素の内容はただ単にイタリック体で表示されるだけです。
では、<description>要素の内容をイタリック体で表示し、かつ<keywd>要素の内容をボールド体で表示するにはどのようにしたらよいのでしょう。それが本稿で紹介する<xsl:apply-imports>要素の役割なのです。
<xsl:template match="description"> |
これによって、優先順位のルールからすれば「本来であれば実行されないはず」の、include.xslの内容が適用され、<keywd>要素がボールド体に修飾された<description>要素の内容が、さらにイタリック体に修飾されて表示されるというわけです。
![]() |
| 図 <description>要素の中身を斜体で、かつ<keywd>要素の部分を強調表示 |
<xsl:apply-imports>要素によって、単にテンプレートを置き換えるわけではなく、テンプレートの機能を積み上げ式に追加することが可能になります。より柔軟にスタイルシートを記述する場合に有用なテクニックですので、しっかりとおさえておいてください。
| 「XMLテクニック集」 |
TechTargetジャパン
- 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」の詳細も紹介する
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

