XSL はテンプレートに基づいています。
XML データは、3 つのレベルで「再利用」できます。最も基本的なレベルでは<xsl:for-each />
、XML を使用できます。
注: XSL の for-each はデータをループしているのではなく、データを照合しているだけです。また、for-each の「内部」の場合、その XML の「コンテキスト」の内部 (プログラミングにおける「スコープ」の概念に似ています)
for-each の使用と再利用の例
<xsl:for-each select="/xml/data/here">
... do some stuff ...
</xsl:for-each>
<xsl:for-each select="/xml/data/here">
... do some DIFFERENT stuff ...
</xsl:for-each>
for-each ノードはテンプレート ノードに含まれています (第 2 レベルの再利用)。テンプレート ノードには、Match と Named の 2 種類があります。テンプレートノードに一致し、上記の for-each ノードのように動作しますが、XSL 処理の開始時にいずれかのノードが一致すると、テンプレート エンジンによって自動的に呼び出されます。マッチ テンプレート ノードを明示的に適用することもできます。一方、名前付きテンプレートノードは常に明示的に適用され、同様の機能と考えることができます。
常に呼び出されるMatch テンプレートの例(ルート ノードが常に存在するため)
<xsl:template match="/">
... do some stuff ...
</xsl:template>
別のマッチ テンプレートを明示的に呼び出すマッチ テンプレート
<xsl:template match="/">
<xsl:apply-templates select="xml/data/too" />
</xsl:template>
<xsl:template match="xml/data/too">
... do something ...
</xsl:template>
注: 一致テンプレートが機能するには、一致する XML ノードが存在する必要があります。一致しない場合、そのテンプレートは呼び出されません。
名前付きテンプレートの例
<xsl:template name="WriteOut">
... data with NO Context Here ...
</xsl:template>
または、一致したテンプレートから名前付きテンプレートを呼び出す
<xsl:template match="/">
<xsl:call-template name="WriteOut" />
<xsl:template>
注: 一致したテンプレートと名前付きのテンプレートを呼び出す場所を組み合わせて一致させることができます。自分がどのコンテキストにいるかを監視するだけで済みます。
すべてのテンプレート ノードはXSL Stylesheetsに保持され、さまざまなスタイルシートを含めてインポートできます。たとえば、HTML ヘッダー ノードを扱うすべてのテンプレートを 1 つのテンプレートに保持し、HTML 本文ノードを扱うすべてのテンプレートを別のテンプレートに保持できます。次に、Header と Body の両方のスタイルシートを含む 1 つのスタイルシートを作成できます。
インクルード ノードの例
<xsl:include href="header.xsl" />
結論として、データのチャンクを抽象化するには、for-eaching、テンプレート化、またはスタイルシートを含めるという 3 つの方法があります。