XSLT(Extensible Stylesheet Language Transformations)

XSLT:あるXML文書を別の階層構造(XML文書やHTML文書)に変換するときに使用する。

1.XMLのスタイルシート言語

XSL:SGMLのDSSSLから受け継がれたもので、XML文書をWEBブラウザで表示したり、印刷するときの設定(文字の書式やサイズ、段落設定)を指定できるスタイルシート言語である。

  • ページの概念がある
  • XML形式で記述する(XML文法に従う)

CSS(Cascading Style Sheets):HTMLと組み合わせて使用する言語である。

  • CSS2からXMLにも対応した
  • CSSの文法は、独自の文法を使用する
  • CSSでは、大文字小文字を区別しない

2.XSLTの機能

XSLTスタイルシート:XML文書の変換処理ルールを記述する。
XSLTプロセッサ:XML文書にXSLTスタイルシートを適用して、別の文書に変換していくアプリケーション。

3.XSLTスタイルシート

XSLTスタイルシート構成

  • XML宣言:XML文書であることの宣言を行う。XMLのバージョン、文字エンコーディングを指定する。
  • xsl:stylesheet要素:スタイルシートの宣言を行う。XSLTスタイルシートのルート要素となる。XSLTのバージョン、名前空間を指定する。
  • トップラベル要素:xsl:stylesheet要素の子要素となる。入出力方法や変換時に適用するテンプレートルールを記述する。

XML宣言

XMLのバージョンとXSLTスタイルシートで使用する文字エンコーディングを指定する。

xsl:stylesheet要素:XSLTのバージョン、名前空間を指定する

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

version:必須項目、XSLTのバージョンを指定。
xmlns:xsl:必須項目、XSLTの名前空間。

トップレベル要素

ルート要素であるxsl:stylesheet要素の子要素。
XSLTのトップレベル要素

テンプレートルール:テンプレート規則

  • テンプレート:変換規則のこと。
  • パターン:変換規則の適用先となるソースXML文書のノード指定のこと。
    • 指定できる軸は「child::」と「attribute::」(@)のみ
    • 「.」(自分自身のノード)と「..」(親ノード)は使えない
    • 「/」「//」は使える。但し、「descendant-self」は使えない。

4.XSLT処理の実行順序

変換処理はルートノードから順に実行していく。xsl:template要素のmatch属性でルートノードが指定されていなかった場合(match="/"でない場合)、ルートノードに近いものから変換される。

5.XSLTで使用できる関数

関数 説明
current カレントノードを返す
document 複数の文書を読み込む
element-available 要素が使用可能か否かを示す
format-number 数値を文字列に変換する
function-available 関数が使用可能か否かを示す
generate-id XSLTプロセッサがノードに割り当てた識別子を返す
key 指定したキー値を持つノードを検索する
system-property XSLTプロセッサのプロパティを調べる
unparsed-entity-uri 解析対象ではない実体にURIを用いてアクセスする

6.XSLTの要素

XSLTの要素一覧

xsl:value-of  xsl:value-of 記述例

[命令]テキスト生成:ソースXML文書から動的にテキストを生成する。
 書式: <xsl:value-of select="XPath式">

xsl:apply-templates  xsl:apply-templates 記述例

[トップレベル命令]テンプレートの適用:xsl:apply-templates要素は、select属性で指定した式を評価する。評価した結果、ノードが選択された場合、そのノードにマッチするテンプレートルールをXSLTスタイルシートから探して変換処理を行う。
 書式: <xsl:apply-templates select="次に処理をするノード集合">

xsl:call-template  xsl:call-template 記述例

[命令]名前付きテンプレートの呼び出し:別のテンプレートルールの呼び出し
 書式: <xsl:call-template name="呼び出すテンプレートルールの名前">  
呼び出されるテンプレートルールの定義方法:
<xsl:template name="テンプレートルールの名前">
  テンプレート
</xsl:template>

xsl:for-each  xsl:for-each 記述例

[命令]繰り返し処理:select属性で選択したノードひとつひとつに対しテンプレートが適用される。
 書式:                   
  <xsl:for-each select="処理の対象となるノードを選択するXPath式">
    テンプレート
  </xsl:for-each>

xsl:if  xsl:if 記述例

[命令]条件分岐処理:test属性の式の値が真の場合にテンプレートに記述した処理が実行される条件付きの処理
 書式:                   
  <xsl:if test="式">
    テンプレート
  </xsl:if>

xsl:choose  xsl:choose 記述例

 書式:                   
  <xsl:choose>
    <xsl:when test="式1">
      テンプレート1
    </xsl:when>
    <xsl:when test="式2">
      テンプレート2
    </xsl:when>
    ……
    <xsl:otherwise>
      テンプレートn
    </xsl:otherwise>
  </xsl:choose>

  • xsl:when要素は必須要素なので省略できない。
  • xsl:otherwise要素は省略可能。省略した場合、xsl:whenに該当するものがなければ何も処理されない。
xsl:sort  xsl:sort 記述例

[命令]ソート処理:xsl:apply-templates要素やxsl:for-each要素のselect属性で選択したノードをソートする。
 書式:                   
  <xsl:sort
    select = "ソートキーとなる文字列"
    lang = "ソートキーの言語"
    data-type = {"text" | "number" | "名前空間接頭辞付きの修飾名" }
    order = {"ascending" | "descending" }
    case-order = {"upper-first" | "lower-first" } />

  • select:ソートキーとなる文字列を指定する。省略可能。省略した場合、処理をしているノード(.)になる
  • lang:ソートキーの言語(ja等)を指定する
  • data-type:文字データ型を指定する
  • order:昇順、降順の指定。デフォルトでは昇順
  • case-order:大文字小文字のどちらを優先させるかを指定する。data-type属性で「text」を指定している場合に有効になる
xsl:element  xsl:element 記述例

[命令]要素の生成
 書式:                   
  <xsl:element name="要素名">
    テンプレート
  </xsl:element>

xsl:attribute  xsl:attribute 記述例

[命令]属性の生成:要素ノードを生成する場所の最初に記述しなければならない
 書式:                   
  <xsl:attribute name="属性名">
    テンプレート
  </xsl:attribute>

xsl:attribute-set  xsl:attribute-set 記述例

[トップレベル要素]属性の集合の定義:名前付きの属性ノードの集合を定義する。xsl:use-attribute-sets属性を使用して、属性集合を参照できる。
 xsl:attribute-set 書式            
  <xsl:attribute-set name="属性の集合の名前">
    属性宣言 (xsl:attribute要素)
    属性宣言 (xsl:attribute要素)
    ……
  </xsl:attribute-set>

 xsl:use-attribute-setsの基本書式
  <xsl:element name="要素名" xsl:use-attribute-sets="属性の集合の名前" >
  <xsl:copy xsl:use-attribute-sets="属性の集合の名前" >
  <リテラル結果要素 xsl:use-attribute-sets="属性の集合の名前" >

xsl:text

[命令]テキスト生成:テキストノードを生成する。
書式:                   
  <xsl:text>
    テキスト
  </xsl:text>

xsl:processing-instruction

[命令]処理命令の生成:処理命令(PI)ノードを生成する。
書式:                   
  <xsl:processing-instruction name="処理命令ターゲット名">
    処理命令内容
  </xsl:processing-instruction>

xsl:comment

[命令]コメントの生成
書式:                
  <xsl:comment>
    コメント内容
  </xsl:comment>

xsl:copy、xsl:copy-of  xsl:copy、xsl:copy-of 記述例

[命令]ノードのコピー

  • xsl:copy要素:カレントノードのみをコピーして、子ノードはコピーしない。
  • xsl:copy-of要素:指定したノード以下全てのノードをコピーする。

xsl:copy 書式:
  <xsl:copy/>
  または                 
  <xsl:copy>
    テンプレート
  </xsl:copy>

xsl:copy-of 書式:
  <xsl:copy-of select="式" />

xsl:output

[トップレベル要素]出力形式の指定
書式:                
  <xsl:output
    method = "xml" | "html" | "text"
    version = "バージョン番号"
    encoding = "文字コード"
    omit-xml-declaration = "yes" | "no"
    standalone = "yes" | "no"
    doctype-system = "公開識別子"
    cdata-section-elements = "要素名のリスト"
    indent = "yes" | "no"
    meida-type = "MIMEタイプ" />

  • method:出力されるデータ形式を指定
  • version:XML形式またはHTML形式の出力データのバージョンを指定
  • encoding:文字エンコーディングを指定
  • omit-xml-declaration:XML宣言を出力するか否かを指定する。yesの場合、XML宣言は出力されない。
  • standalone:スタンドアロン宣言を出力
  • doctype-system:DOCTYPE宣言を出力
  • cdata-section-elements:内容のテキストデータをCDATAセクションとして出力したい要素の名前のリストを指定
  • indent:字下げのための空白を出力するかどうかを指定
  • media-type:出力データのMIMEタイプを指定

7.リテラル結果要素

テンプレートに記述した文字列(XSLT要素以外)がそのまま出力結果として出力される文字列をリテラルと呼ぶ。
リテラル結果要素記述例

8.スタイルシート処理命令

スタイルシート処理命令は、XML文書をWEBブラウザなどで表示するときに使用する命令である。
スタイルシート処理命令の書式:                
  <?xml-stylesheet
    href = "適用するスタイルシートの格納場所を示すURI"
    title = "スタイルシートを表すタイトル"
    type = "スタイルシートの記述言語"
    media = "XML文書を表示する媒体"
    charset = "スタイルシートを記述している文字コード"
    alternate = "yes" | "no"
   ?>

  • href:適用するスタイルシートの格納場所を示すURIを記述する。必須項目
  • title:ユーザーが代替スタイルシートを選択するときに選択項目として表示される。適用するスタイルシートを表すスタイルを記述する。
  • type:スタイルシートの記述言語を記述する。CSSのスタイルシートを適用するときは「"text/css"」、XSLTのスタイルシートを適用するときは「"text/xsl"」と記述する。必須項目
  • meida:スタイルシートが適用されたXML文書が表示される媒体メディア記述子を用いて指定する。媒体の種類としては、画面やプリンタなどがある。
  • charset:スタイルシートを記述するのに使用している文字コードをIANA(Internet Assigned Number Authority)に登録された文字コード名で指定する。
  • alternate:複数のスタイルシートを使用するかどうかを指定する。デフォルト値は"no"
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License