3. 結果ツリーの生成
XSLT 3章 結果ツリーの生成
- 3.1 xsl:namespace-alias を用いた名前空間 URI の置換
- 3.2 xsl:element を用いた要素の生成
- 3.3 xsl:attribute を用いた属性の生成
- 3.4 名前付き属性の集合
- 3.5 テキストの生成
- 3.6 処理命令の生成
- 3.7 コメントの生成
- 3.8 コピー
- 3.9 属性値テンプレート
- 3.10 ナンバリング
この章においては、以下の XML 文書を用いて結果ツリーの生成についてみていきたいと思います。
info.xml |
<?xml version="1.0"?> <root_before> <pic_before type="jpeg">pic.jpg</pic_before> <info_before>information</info_before> </root_before> |
3.1 xsl:namespace-alias を用いた名前空間 URI の置換
<xsl:namespace-alias stylesheet-prefix = prefix | "#default" result-prefix = prefix | "#default" />
XSLT 内のある名前空間 URI を結果ツリー内では別の名前空間 URI に置き換えたい場合に、xsl:namespace-alias 要素を使用します。xsl:namespace-alias 要素は、stylesheet-prefix 属性が指定する接頭辞に関連づけられている名前空間 URI が、result-prefix 属性の指定する接頭辞に関連づけられている名前空間 URI へのエイリアスであると宣言します。これは XSLT から XSLT に変換するときに特に有用です。なぜなら、どの名前空間 URI が入力に属しどれが出力に属し、そしてどれがスタイルシートに属しているのかは簡単には分かるものではないからです。
stylesheet-prefix 属性は必須属性であり、スタイルシート自身の内部で使われる名前空間接頭辞を指定します。接頭辞のないデフォルトの名前空間を使用する場合は #default を指定します。
result-prefix 属性は必須属性であり、結果ツリーで使われる名前空間接頭辞を指定します。接頭辞のないデフォルトの名前空間を使用する場合は #default を指定します。
<?xml version="1.0"?> <elements> <block>p</block> <block>h1</block> </elements>
上記のコードに以下のスタイルシートを適用すると
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"> <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> <xsl:template match="/"> <axsl:stylesheet> <xsl:apply-templates/> </axsl:stylesheet> </xsl:template> <xsl:template match="block"> <axsl:template match="{.}"> <fo:block><axsl:apply-templates/></fo:block> </axsl:template> </xsl:template> </xsl:stylesheet>
以下のテキストが出力されます。
<?xml version="1.0" encoding="UTF-8"?> <axsl:stylesheet xmlns:axsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <axsl:template match="p"><fo:block><axsl:apply-templates/></fo:block></axsl:template> <axsl:template match="h1"><fo:block><axsl:apply-templates/></fo:block></axsl:template> </axsl:stylesheet>
axsl 名前空間接頭辞の URI リファレンスが、xsl 名前空間接頭辞の URI リファレンスに変換され、出力される最上位の要素に名前空間の定義が出力されているのが確認できます。