XPath 1章 XPath の基本
- 1.1 XPath とは
- 1.2 XPath のデータモデル
- 1.3 コンテキストノード
1.2 XPath のデータモデル
XML データは、ツリーとしてモデル化できます。また、要素など XML データを構成する各パーツは、ツリーを構成するノード(node:節点)としてモデル化できます。XPath のデータモデルでは、XML データを以下の 7 種類のノードから構成されるツリーと考えます。
- ルートノード:最上位ノード
- 要素ノード:XML の要素を表すノード
- テキストノード:開始タグと終了タグで挟まれた文字列データ
- 属性ノード:要素内で指定された属性を表すノード
- 名前空間ノード:名前空間 (Namespace) を表すノード
- 処理命令ノード:処理命令 (Processing Instruction)
を表すノード
処理命令とは <? と ?> で挟まれた一文のことです。XML 宣言は処理命令の形をしていますが、XML 1.0 の構文上、処理命令ではないため、XML 宣言は処理命令ノードとしては扱いません。 - コメントノード:コメントを表すノード
ただし、ドキュメント型宣言内に記述するコメントを除きます。
では、例を挙げ XPath のデータモデルを見ていくことにしましょう。下に示すのは XML 文書と、それを XPath のデータモデルによりツリーとして表したものです。
music.xml |
<?xml version="1.0" encoding="Shift_JIS"?> <music> <artist> <cd> <title releaseYear="1990">Glider</title> <trackListings> <track no="1">Soon</track> <track no="2">Glider</track> <track no="3">Don't Ask Why</track> <track no="4">Off Your Face</track> </trackListings> </cd> My Bloody Valentine </artist> </music> |
図を見ると XML 文書中の最上位要素 (ルート要素とも呼ばれます。ここでは music 要素のこと) の上に、もう 1 つ親ノードがあります。これを「ルートノード」と呼びます。ルートノードは、ノード位置を特定するための起点となる重要なノードです。『ルート要素 = ルートノード』ではないことに気をつけてください。また、この図を「ノードツリー」といいます。
図から属性もツリーを構成するノードとみなされることがわかりますが、属性ノードは特別扱いのノードとなります。属性ノードは要素ノードに従属していますが、その要素ノードの子ノードではありません。つまり、要素ノード title は属性ノード releaseYear の親ノードとなりますが、要素ノード title の子ノードを列挙する場合、属性ノード releaseYear は含まれません。
また要素が属性を共有することはありません。したがって、異なる 2つの要素ノードがある場合、片方の要素ノードの属性ノードはすべてもうひとつの要素ノードの属性ノードとは異なります。