サンプルで覚えるXSLTプログラミング
2.XPathの基礎知識
XSLTのスタイルシートの記述の中には、XML文書が持つツリー構造の表記法、すなわちXPath表現が出てきます。XPathはXMLツリーの場所を指定する言語(表記方法)です。ここでは、そのXPath表現の基本的な部分を紹介しましょう。ちなみに、XPathはXMLでは表記されていません。
XML文書をツリー構造で見る
XPathについて説明する前に、実際にXPathの例をいくつか見ていただきましょう。サンプルとして、PCの情報を記述した以下のXML文書を使います。
<PC> |
このXML文書をツリー構造で表示してみると次のようになります。
この図の概要を説明しつつ、XPathについての説明を加えていきましょう。
まず、このツリーの解説を行う前にいくつかの用語を紹介します。
ノードはXML文書の最小構成単位だと考えてください。ノードの種類にはいくつかあります。おもなものは、タグを表すエレメントノード、タグの中の属性(Attribute)である属性ノードなどです。そのほかにもテキストノード、コメントノードなどがあります。この解説ではノードを親子関係にして説明しています。
次にツリーの構造を見ていきましょう。まず、どのXML文書にも必ず“root”(ルート)があります。 図ではその子エレメントノードとして“PC”があります。この場合の“PC”ノードを、ドキュメントエレメントと呼ぶことがあります。また、“PC”ノードには直接のテキスト値がありませんから、空を意味する“*”が記入されています。
さらにツリーを下っていきます。“PC”の子エレメントノードは3つあります。年上順(記述されている順番)に“CPUS” “MEMORIES” “HDD”です。
“CPUS”は“CPU”という子エレメントノードを持っています。このエレメントノード“CPU”にもテキスト値がないので、空を意味する“*”が記入されています。
このエレメントノード“CPU”には3つの子エレメントノードがいます。年上順に“MANUFACTURE” “MODEL” “CLOCK”です。一番兄の“MANUFACTURE”は“INTEL”、2番目の“MODEL”は“Pentimum III”、一番下の“CLOCK”は“700”を、それぞれテキスト値として持っています。
一番下のエレメントノード“CLOCK”は、属性ノード“UNIT”を持っています。 属性ノード “UNIT”は、テキスト値“MHz”を持っています。
これが、XML文書をツリーで表現する基本的な方法です。
XPathの表記方法
では。XPathでそれぞれのノード、もしくはノード群をどのように表記するのか、具体例を説明していきましょう。ただし、この連載で使用するのは、以降のXSLTでの解説に必要な省略系の表記だけにします。
まず、“root”は“/”で表記されます。その下のエレメントノード“PC”は“/PC”、その子エレメントノード“CPUS”は“/PC/CPUS”と、絶対パスで表記されます。
もし現在地がエレメントノード“PC”であった場合、子エレメントノード “CPUS”は“CPUS”と表記されます。
ここまでくればXPathのElementの表記が、UNIXのファイルシステムのディレクトリによく似ていることがお分かりでしょう。
次は属性ノードです。属性ノードはエレメントノードとは違う表記をする必要があります、例えば、 “/PC/CPU/CPUS/CLOCK”の属性ノード“UNIT”は、“/PC/CPUS/CPU/CLOCK/@UNIT”と、表記されます。
XPathではUNIXのパス表記と同じようにワイルドカード“*”が使用できます。 例えば “/PC/*”とするとPCの子エレメントノード3つを同時に表し、“/PC/CPUS” “/PC/MEMORIES” “/PC/HDD”が該当します。
また、UNIX同様に親ディレクトリを表す“..”もXPathで使用することが可能です。エレメントノード“CLOCK”の兄エレメントノードである“MODEL”は、“CLOCK”からは“../MODEL”と表記されます。
さらに、このXML文書には3つの“MANUFACTURE”と呼ばれるエレメントノードが存在しています。このすべてを指す表現もあります。それは“//MANUFACTURE”と表記すればいいのです。“//”は必ずしも先頭にある必要はなく、“/PC//MANUFACTURE”でもかまいません。
さて、これでXPathによる表記法の基本的な知識が身についたことになります。ここで説明しきれなかったものもありますが、それらついては、その場で必要に応じて説明していくことにしましょう。
Index | |
サンプルで覚えるXSLTプログラミング | |
1.
XMLからHTMLへの変換 スタイルシートはどのように解釈されるか |
|
2.
XPathの基礎知識 XML文書をツリー構造で見る XPathの表記方法 |
|
3. XSLTエレメントの概要 コラム XSLTプロセッサのインストール |
|
4. テンプレート系XSLTエレメント テンプレートの定義 該当するテンプレートの適用 指定されたテンプレートの呼び出し |
|
5. 変数系XSLTエレメント 変数の定義1 変数の定義2 |
|
6. 出力系XSLTエレメント 該当する表現の値を代入 エレメントノードの生成 属性ノードの生成 テキストノードの生成 コメントノードの生成 PI(processing-instruction)の生成 出力方法の指定 |
|
7. フローコントロール系XSLTエレメント ループ処理 条件分岐 IF文 |
|
8. その他のXSLTエレメント
他のXSLファイルの読み込み 数の割り当て |
|
9.XSLT関数の概要 関数の主な分類 |
|
10. 文字列系関数 文字列の連結 文字列の調査 数字のフォーマッティング 空白の除去 …… |
|
11. 数値計算系関数 切り上げ 表現の数を数える 切り下げ 数値型への変換 四捨五入 加算 |
|
12. ノードに関する関数 | |
13. bool代数系関数 | |
14. その他の関数 | |
15. JavaによるXSLTの拡張
Built-inクラスの呼び出し カスタムメイドの関数を作る |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|