伸び縮みマークアップ言語 XML
■ テンプレートルール

■ XML文書内で使用するXSLTスタイルシートを指定する

XSLTスタイルシートを使用するには、XML文書内で使用するXSLTスタイルシートのパスを記述します。 XSLTスタイルシート処理命令のhref属性で、XSLTスタイルシートの「パス」を記述します。 href属性では、ウェブ上のファイルを指定することができます。type属性では 「text/xsl」を指定して下さい。

<?xml-stylesheet href="パス" type="text/xsl"?>

■ XSLTスタイルシートの構造

XSLTスタイルシートを記述する際、XML宣言が必要な事、要素名や属性の記述方法、ルート要素がひとつだけ 存在する事などはXMLを記述するルールと同じです。 ルート要素である、「xsl:stylesheet」要素ではXSLTの名前空間を指定しますが、 W3Cによって割り当てられたURIである「http://www.w3.org/1999/XSL/Transform 」 と記述しなければなりません。 ルート要素「xsl:stylesheet」タグの間に、テンプレートルール(変換規則)を記述します。

<?xml version="1.0" encoding="Shift-JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
この間にテンプレートルールを記述
</xsl:stylesheet>

■ テンプレートルールとは

テンプレートルールとは「xsl:stylesheet」要素内に指定する変換規則の事を指します。 XSLTではテンプレートルールを「xsl:template」要素で表現し、 XSLTスタイルシートはこのテンプレートの集まりからできています。

■ XSLTスタイルシートを記述する

■ ノードとは

ネットワークに接続された個々の構成要素をノード(接点)といいます。 XML文書をツリー上のネットワークと考えると、要素や属性がノードとなります。ツリー 状のノードの構造図のことを、ノードツリーと呼びます。

■ ルートノードを指定する

ルートノードとはXML文書の中で最も一番上の位置にあるノードでのことを言います。 しかし、ルート要素とは違い、ルートノードはルート要素の上に位置します。

下記をみればわかるように、XSLTスタイルシートで「xsl:template」要素の match属性に「/」が指定されています。 この「/」がルートノードです。
XSLTプロセッサはここで指定された位置から処理を開始します。
この例では、ルートノードを指定しているので、文書全体が処理対象と言う事になります。 XSLTスタイルシートではこのような開始点を含むテンプレートを必ず持たなければなりません。

<xsl:template match="/">
 <xsl:apply-templates/>
</xsl:template>


ノードツリー
■ 構造を変換する仕組み

■ XSLTスタイルシートによって変換される仕組みについて

XSLTスタイルシートとは、変換に関するルールが記述してあるファイルのことを言います。 XSLTスタイルシートと、XSLTプロセッサ(Internet Explorer 6)を使用することにより、XML文書のデータの構造を変換することができます。 XSLTスタイルシートは拡張子に「.xsl」を使用します。

XSLTスタイルシートを使用してXML文書を変換するときに、元になる文書のノードツリーを ソースツリー(Source Tree)、新しく作成される文書のノードツリーを 結果ツリー(Result Tree)と呼びます。 XSLTプロセッサはXSLTスタイルシートの変換規則どおりに処理を行い、XML文書から必要なデータを抽出したり追加したり することができます。

■ XSLTスタイルシートに記述されているテンプレートルール

XSLTスタイルシートに記述されている変換規則の事をテンプレートと呼びます。 テンプレートルールは「xsl:template」要素を使って記述し、ソースツリーのどのノード を変換するのかを「xsl:template」要素のmatch属性で指定します。 テンプレートルールに従ってソースツリーを解析し、match属性に適合したノードを見つけたら ルールを適用して変換処理を実行します。

■ テンプレートルールの定義

■ テンプレートルールの基本

下記のように、テンプレートルールは「xsl:template」要素で定義し、 「XPath式」で表される変換の起点から、処理を始める事ができます。 この部分を「パターン」と言います。(match属性)
「xsl:template」要素の中に、結果ツリーに含める要素やデータなどを、 記述します。 この部分をテンプレートと呼び、match属性と「xsl:template」要素の内容のテンプレート から構成されたものをテンプレートルールと言います。

<xsl:template match="XPath式">
 この間にテンプレートを記述
</xsl:template>

■ select属性

テンプレートルールを適用して変換を開始するために記述する文が 「xsl:apply-templates」要素であり、select属性の有無で 変換する対象のノードが変わります。 select属性がない場合、テンプレートの適用は「xsl:template」要素の match属性で指定されたルートノードより下にある、全ての子ノードが対象になります。

select属性がある場合、属性値に指定したノードより下に向かって処理を行います。 (下記の例では、ルートノード下にある「zokusei」要素の内容のみを変換処理を行います。)

<xsl:template match="/">
 <xsl:apply-templates select="zokusei"/>
</xsl:template>

■ xsl:value-of要素

ソースツリーからノードを選択して、結果ツリーに出力するには「xsl:value-of」要素を使用します。 select属性に「XPath式」で指定した要素や属性のテキストノードを出力することができます。 下記の例のselect属性の値に記述してある「.」は「属性」と言う名の要素をを指しています。

<属性>要素の内容</属性>


<xsl:template match="属性">
 <b><xsl:value-of select="."/></b>
</xsl:template>

■ 結果 ■

<b>要素の内容</b>

■ name属性

「xsl:template」要素には、match属性の他にname属性を指定することが可能です。 これらはどちらか一方のみ指定できます。name属性が指定されたテンプレートは 「xsl:call-template」要素で呼び出すことができます。
(name属性が指定されたテンプレートを名前付きテンプレートと言います。)

<属性>要素の内容</属性>


<xsl:template name="zokusei">
 要素の属性
</xsl:tamplate>

<xsl:template match="属性">
 <xsl:call-template name="zokusei"/>
</xsl:template>

■ 結果 ■

要素の属性

絶対指定・相対指定
XSLTスタイルシートで処理実行時、テンプレートの処理をする際に基準となるノードを コンテキストノード呼びます。 XPath式で起点を指定する際、ルートノードを指定する絶対指定と、コンテキストノードを指定する 相対指定があります。
(現在処理を実行しているノードをカレントノードと言います。)

■ テンプレートの動作確認

■ 動作確認

では、実際にXML文書とXSLTスタイルシートを作成して動作確認してみます。以下の2つのファイルをご覧下さい。

■ sample01.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet href="test01.xsl" type="text/xsl"?>
<個人情報>
 <氏名>例題太郎</氏名>
 <住所>大阪</住所>
 <電話>000-0000-0000</電話>
 <メール>reidai@ykr414.com</メール>
</個人情報>

■ test01.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="個人情報">
  <html>
  <body>
   <xsl:apply-templates/>
  </body>
  </html>

 </xsl:template>

 <xsl:template match="氏名">
  <b>氏名 : <xsl:value-of select="."/></b>
 </xsl:template>

 <xsl:template match="住所">
  <b>住所 : <xsl:value-of select="."/></b>
 </xsl:template>

 <xsl:template match="電話">
  <b>電話 : <xsl:value-of select="."/></b>
 </xsl:template>

 <xsl:template match="メール">
  <b>メール : <xsl:value-of select="."/></b>;
 </xsl:template>

</xsl:stylesheet>

これらのファイルを上から読んでいきます。
以下XSLTプロセッサの処理を視点に見て下さい。

まず、XSLTスタイルシートである「test.xsl」ファイルでmatch属性 に「/」(ルートノード)を指定したテンプレートから処理が始まります。 XML文書の上から下に向かって順番に、記述された行にテンプレートを適用します。

XML文書の内容で、ルートノードのすぐ下に「個人情報」要素があるので、 match属性に「個人情報」を指定したテンプレートを適用するので 「<html><body>」を出力し、 次に「<xsl:apply-templates/>」 が記述されているので、XML文書の個人情報ノードの下にあるノードを変換対象にします。

そして次にXML文書の「個人情報」ノードの下で一番初めに記述されているのは、 「氏名」なので、match属性に 「氏名」が指定されたテンプレートを適用します。
<b>氏名 : 要素の内容</b>」 を出力します。

そのようにして、「住所」ノードを指定したテンプレート、
<b>住所 : 要素の内容</b>
電話」ノードを指定したテンプレート、
<b>電話 : 要素の内容</b>
メール」ノードを指定したテンプレート、
<b>メール : 要素の内容</b>
を出力し、「個人情報」ノード以下にある子ノードの処理を終えたら 「個人情報」ノードに戻って、 「</body></html>」を出力、 そしてはじめの「/」テンプレートに戻って処理を終了します。

■ XPathの仕組み

■ XPathとは

XPathとはツリー内のノードの位置を正確に特定するためのもので、XML Path Languageの略です。 各ノードの位置をロケーションパスと言う式によって記述する事ができ、 XSLTスタイルシートではテンプレートルールのmatch属性に記述します。

XPath
XPathはXPointerとXSLTの共通の機能を取り出して仕様にしたものです。 XPointerとはXML文書内の特定の場所を指す機能を提供する言語です。

■ データモデル

データモデルと呼ばれるものがXPathにはあり、XML文書のデータは下記の7種類の ノードから構成されるツリーと考えます。

ノード名
意味
ルートノード
ルート要素上のノード
要素ノード
XMLの要素を表すノード
テキストノード
要素の内容を表すノード
属性ノード
属性値を表すノード
名前空間ノード
名前空間を表すノード
処理命令ノード
処理命令を表すノード
コメントノード
コメントを表すノード

■ データモデル

<?xml version="1.0" encoding="Shift_JIS"?>
<会員データ ID="01">
 <氏名 >名前太郎</氏名>
 <住所>大阪</住所>
 <電話>000-0000-0000</電話>
 <メール>namae@ykr414.com</メール>
</会員データ>

上記のコードをデータモデルで表すと、下図のようになります。 XML宣言はノードになりません。

データモデル

■ XPathの関数

ロケーションパスなどの式を評価するとき、XPathは関数を使用することが可能です。 下表のように関数には、ノード集合関数、文字列関数、数値関数、ブール関数があり、数字データ同士の 計算結果を表示させる事ができます。

関数の種類
内容
ノード集合関数
ノードに関する情報を取得
文字列関数
文字列を操作
数値関数
数値の演算を行う
ブール関数
ブール値を操作

ブール値とは
ブール値とは、真(true)または、偽(false)だけの型を持つ値のことで、 プログラム中の条件式などに利用します。

■ XPathの表記方法
データモデル

■ 要素ノードを指定

XPathで「/会員データ」と記述すると、ルートノードの下にある 会員データ要素を指定できます。 「/会員データ/氏名」と記述すると、会員データ要素の下にある 氏名要素を指定できます。 「//氏名」と記述すると、ルート要素から見て2つ下の階層(子孫)にある 氏名要素を 指定できます。

  • /会員データ     会員データ要素を指定
  • /会員データ/氏名     氏名要素を指定
  • //氏名     氏名要素を指定

■ テキストノードを指定

住所要素の内容「大阪」を指定するには、 「/会員データ/住所/text()」と記述します。 「text()」はテキストノードを指定する場合に記述し、 このXPath式をXSLTスタイルシートで記述する場合、 「<xsl:value-of select="/会員データ/住所/text()"/>」 と記述します。 もし、指定する要素の下にテキストノードがひとつしかない場合は 「<xsl:value-of select="/会員データ/住所"/>」 と記述しても同じです。

  • <xsl:value-of select="/会員データ/住所/text()"/>
  • <xsl:value-of select="/会員データ/住所"/>

■ 属性を指定

属性ノードを指定するには、「/会員データ/@ID」というように、 「@」を属性名の前に記述します。 XSLTスタイルシートで記述する場合、 「<xsl:value-of select="/会員データ/@ID"/>」と記述します。

  • <xsl:value-of select="/会員データ/@ID"/>

■ 絶対ロケーションパス・相対ロケーションパス

絶対ロケーションパスはルートノードを起点としてノードを指定します。 相対ロケーションパスはルートノード以外のノードを起点としてノードを指定します。

  • /会員データ/住所   ルートノードを起点
  • 会員データ/住所   会員データノードを起点

■ 要素の集合を指定

同じ名前の要素が複数ある場合に、XPath式で指定すると要素のリストが返ってきます。 下記の2番目の「東京」を指定するには 「/会員データ/住所[2]」と記述します。

<会員情報>
 <住所>大阪</住所>
 <住所>東京</住所>
 <住所>神戸</住所>
</会員情報>

XPathに関する技術仕様はXMLなどと同じようにW3Cのサイトで公開されています。

W3CでのXPathの技術仕様の確認
XPath1.0  http://www.w3.org/TR/xpath

«««« back           next »»»»
 
XMLとは
XML文書作成の大まかな流れ
XML文書の記述
XML文書ブラウザでの表示
XSLTスタイルシートの適用
XSLTの構造
XML文書の宣言
文字コードの設定
タグ付けのルール
要素名・属性の指定について
階層構造
実体参照・文字参照について
その他・コメントや処理
DTDの記述
名前空間の指定
情報をデータ化する
階層構造の作成
データからXML文書を作成する
会員情報の記述ルールを定義したDTD..
個々のXML文書を作成する
外部実体参照
テンプレートルール
XSLTスタイルシートを記述する 【ノード】
構造を変換する仕組み
テンプレートルールの定義
テンプレートの動作確認
XPathの仕組み  【XPathの関数】
XPathの表記方法
テキストの抽出  xsl:value-of
ノードのコピー  xsl:copy-of
テキストの生成  xsl:text
コメントの生成  xsl:comment
要素の生成  xsl:element
属性の生成  xsl:attribute
属性値の生成  【属性値テンプレート】
出力方法の指定  xsl:output
変数1  xsl:variable
変数2  xsl:param
変数3  xsl:with-param
繰り返し処理  xsl:for-each
再帰処理  xsl:if test
データの並べ替え  xsl:sort
データに番号をつけて出力  xsl:number
条件式に一致時のみ変換処理を実施 xsl:if
複数条件を設定して処理 xsl:choose
XSLTに別のXSLT.. xsl:import xsl:include
XSLT関数について
データを1件表示
データを決められた件数だけ表示
テキストと要素混在時のテキスト抽出法
データを全て表示する
表示するデータを並べ替える
条件式を設定して表示を変える
データを表にして表示する
複数件のデータを1つの表にして表示
リンクを加える  xsl:element xsl:attribute
データをCSV形式で出力する
DOM(Document Object Model)
DOMとjavascript
ノードにアクセスする
ノードにアクセスする 2
ノードにアクセスする 3
XSLTスタイルシートを読み込む
XSLTスタイルシートの切り替え
DOMとjavascriptで検索機能を作成する 1
DOMとjavascriptで検索機能を作成する 2
DOMとjavascriptで検索機能を作成する 3
DOMとjavascriptで検索機能を作成する (XSLTスタイルシート適用)
SVG(Scalable Vector Graphics)
SVG(Scalable Vector Graphics)の基本
「g」タグによるグループ化
図形の座標変換 transform属性
アニメーションを作成する animate要素
アニメーションを作成する animate要素2
イベント
DOMとJavaScriptを使用したイベント処理
XMLとXSLTからSVGを生成する
msxsl.exeのオプション
エラーメッセージの表示
LINK
XML(eXtensible Markup Language) バナーはダウ
ンロードして
お使い下さい。




Copyright © 2004 - ykr414 . All Rights Reserved.