XSLT 7章 出力とスタイルシートの結合
- 7.1 出力
- 7.2 スタイルシートのインクルード
- 7.3 スタイルシートのインポート
- 7.4 スタイルシートの埋め込み
7.2 スタイルシートのインクルード
<xsl:include href = uri-reference />
XSLT スタイルシートは xsl:include 要素を記述することにより、別の XSLT スタイルシートを取り込むことができます。より詳しく書くと、xsl:include 要素は自身を href 属性によって与えられた URI にある xsl:stylesheet 要素、または xsl:transform 要素の内容で置き換えます。
ある XML 文書で用いた XSLT スタイルシートを、別の XML 文書を変換するときにインクルードすることにより同様の変換を行うことができ、同じコードを何度も書く必要がなくなりますし、記述ミスを防ぐこともできます。xsl:include 要素は必須である href 属性を持ち、その属性値には、インクルードするスタイルシートを識別するための URI を指定します。
スタイルシートが自分自身を直接的または間接的にインクルードすることはできません。つまり、スタイルシート A がスタイルシート A 自身を取り込んでいるスタイルシート B を取り込むことはできません。
include.xsl のスタイルシート内 |
<xsl:output indent="yes"/> <xsl:template match="/people"> <xsl:element name="person"> <xsl:attribute name="sheet">include</xsl:attribute> <xsl:for-each select="person"> <person><xsl:value-of select="." /></person> </xsl:for-each> </xsl:element> </xsl:template> <xsl:include href="include2.xsl" /> |
include2.xsl のスタイルシート内 |
<xsl:template match="/people"> <xsl:element name="person"> <xsl:attribute name="sheet">included</xsl:attribute> <xsl:for-each select="person"> <person><xsl:value-of select="." /></person> </xsl:for-each> </xsl:element> </xsl:template> |
上記のスタイルシートを people.xml に適用すると以下の出力を得られます。
<?xml version="1.0" encoding="UTF-8"?> <person sheet="included"> <person>Kevin Shields</person> <person>Trent Reznor</person> </person>
同一のノードに対するテンプレートがいずれのスタイルシートにも含まれていますが、ドキュメント順で後ろにある include2.xsl のテンプレートが適用されていることがわかります。