目次へ

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>
XPathのデータモデルによるツリー表示

図を見ると XML 文書中の最上位要素 (ルート要素とも呼ばれます。ここでは music 要素のこと) の上に、もう 1 つ親ノードがあります。これを「ルートノード」と呼びます。ルートノードは、ノード位置を特定するための起点となる重要なノードです。『ルート要素 = ルートノード』ではないことに気をつけてください。また、この図を「ノードツリー」といいます。

図から属性もツリーを構成するノードとみなされることがわかりますが、属性ノードは特別扱いのノードとなります。属性ノードは要素ノードに従属していますが、その要素ノードの子ノードではありません。つまり、要素ノード title は属性ノード releaseYear の親ノードとなりますが、要素ノード title の子ノードを列挙する場合、属性ノード releaseYear は含まれません。
また要素が属性を共有することはありません。したがって、異なる 2つの要素ノードがある場合、片方の要素ノードの属性ノードはすべてもうひとつの要素ノードの属性ノードとは異なります。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp