@IT XSLTテンプレートの機能を継承する


http://www.atmarkit.co.jp/fxml/tecs/018xslt/18.html

多くの場合、<description>要素は<xsl:template match="description">で定義されたテンプレートで処理されます。

しかし、このdescription.xslには<xsl:template match="description">で定義されたテンプレートはありません。その場合には、その子ノード(つまり、<keywd>要素とテキストノード)に合致するテンプレートが検索されます。

<xsl:import>要素を使用した場合、テンプレートは呼び出される側よりも呼び出す側の方が、前に記述された方よりも後に記述された方が、それぞれ優先順位は高くなります。

しかし、例えば、descript.xslの内部に以下のように<xsl:value-of select="." />と記述された場合にはどうでしょう。

<xsl:template match="description">
  <i><xsl:value-of select="." /></i>
</xsl:template> 

 この場合、<xsl:import>要素のルールに従い、呼び出し側のスタイルシートが優先され、include.xslの内容は無視されてしまうのです。つまり、<description>要素の内容はただ単にイタリック体で表示されるだけです。

 では、<description>要素の内容をイタリック体で表示し、かつ<keywd>要素の内容をボールド体で表示するにはどのようにしたらよいのでしょう。それが本稿で紹介する<xsl:apply-imports>要素の役割なのです。

<xsl:template match="description">
  <i><xsl:apply-imports /></i>
</xsl:template> 

 これによって、優先順位のルールからすれば「本来であれば実行されないはず」の、include.xslの内容が適用され、<keywd>要素がボールド体に修飾された<description>要素の内容が、さらにイタリック体に修飾されて表示されるというわけです。