- 7.1 出力
- 7.2 スタイルシートのインクルード
- 7.3 スタイルシートのインポート
- 7.4 スタイルシートの埋め込み
7.3 スタイルシートのインポート
<xsl:import href = uri-reference />
XSLT スタイルシートに、xsl:import 要素を使用して別の XSLT スタイルシートをインポートすることもできます。xsl:import 要素は、href 属性を持ち、その属性値には、インポートするスタイルシートを識別するための URI を指定します。
xsl:import 要素は、トップレベル要素中最初に記述しなければいけません。 xsl:include でスタイルシートをインクルードした場合、インクルードされるドキュメント内の xsl:import 要素はすべて、インクルードする側のドキュメント内にあるすべての xsl:import 要素の後ろに移動されます。
xsl:include 要素と同様に、スタイルシートが自分自身を直接的または間接的にインポートすることはできません。 スタイルシートのインポートは、スタイルシートのインクルードと似ていますが、インクルードのように単純な置き換えを行うのではなく、どのようにインポートされるかによってスタイルシートに含まれる定義とテンプレートルールの優先順位が異なります。
以下のような場合を想定します。
- スタイルシート A が、スタイルシート B と C をこの順序でインポートする。
- スタイルシート B がスタイルシート D をインポートする。
- スタイルシート C がスタイルシート E をインポートする。
この時、下図の左のようなインポートツリーという木構造を構成すると考えます。

次に、「兄弟ならば兄が先、親と子では子が先」という規則に従って木をたどります。すると、上図右のような順序となり、インポートの優先順位は、この順序が後であればあるほど高くなります。つまり、上記の例では、最も優先されるのが A、最も優先されないのが D ということになります。
| import1.xsl のスタイルシート内 | 
| <xsl:import href="import2.xsl" />
<xsl:template match="/people">
  <html lang="ja">
  <head><title>import1</title></head>
  <body>
    <xsl:apply-templates select="person" />
  </body>
  </html>
</xsl:template> | 
| import2.xsl のスタイルシート内 | 
| <xsl:template match="/people">
  <html lang="ja">
  <head><title>import2</title></head>
  <body>
    <xsl:apply-templates select="person" />
  </body>
  </html>
</xsl:template>
<xsl:template match="person">
  <p><xsl:value-of select="." /></p>
</xsl:template> | 
上記のスタイルシートを people.xml に適用すると以下の出力を得られます。
<html lang="ja"> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>import1</title> </head> <body> <p>Kevin Shields</p> <p>Trent Reznor</p> </body> </html>
同一のノードに対するテンプレートがいずれのスタイルシートにも含まれていますが、インポートした側のテンプレートが優先されているのがわかります。

![Webアプリ開発エンジニアのための技術情報サイト[テックスコア]](/common/img/description.gif) 
 







