CodeZine(コードジン)

特集ページ一覧

XMLデータの操作(前編) ~ XPath、XQuery

Cyber Luxeonで学ぶXMLDB入門 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

XPath(2/2)

ステップ(Step)

 ステップは、以下に示したパターンで記述されます。軸を使った形式のステップは「軸ステップ(AxisStep)」と言います。2つ目の書式は述語を省略したパターンです。

  1. 軸 + ノードテスト[述語(繰り返し可能)]
  2. 軸 + ノードテスト
  3. フィルタ

 以下では、ステップの構成要素である、軸、ノードテスト、述語、フィルタについて説明します。

軸(Axis)

 軸とは、ステップを使用して選択するノードとコンテキストノードとの間のツリー上の位置関係を指定する方法のことです。軸の指定方法には、XMLツリーの順方向に向かう指定方法(前方軸)とXMLツリーの逆方向に向かう指定方法(後方軸)があります。軸は「child::」のように、軸の名前と「::」の組み合わせで記述します。

軸の種類

 以下の表に、軸の種類を方向別にまとめました。

前方軸の種類
説明
childコンテキストノードの子ノードの集合。
descendantコンテキストノードの子孫ノードの集合。
attributeコンテキストノードの属性の集合。
selfコンテキストノード自身の集合。
descendant-or-selfコンテキストノードとその子孫ノードの集合。
following-siblingコンテキストノードの後ろにあるすべての兄弟ノードの集合。
followingコンテキストノードと同じドキュメント内にあり、ドキュメント順でコンテキストノード以降にあるすべてのノードの集合。
namespaceコンテキストノードの名前空間の集合。
後方軸の種類
説明
parentコンテキストノードの親ノードの集合。
ancestorコンテキスト ノードの祖先ノードの集合。
preceding-siblingコンテキストノードの前にあるすべての兄弟ノードの集合。
precedingコンテキストノードと同じドキュメント内にあり、ドキュメント順でコンテキストノードより前にあるすべてのノードの集合。
ancestor-or-selfコンテキストノードとその祖先ノードの集合。
軸の省略記述

 軸のうちの以下に示したものは、省略した形で記述することができます。

  1. child:: → 記述なし
  2. attribute::ノードテスト → 「@ノードテスト」
  3. parent:: → 「..」

 以下は、child::を省略した例です。

child::の省略(通常表記)
/child::players/child::player[child::name= 'イチロー']
child::の省略(省略形)
/players/player[name.='イチロー']

ノードテスト(NodeTest)

 ノードテストとは、選択するノードの種類や名前を指定する方法のことで、軸によって選択されたノード集合に、さらに条件を付加します。ノードテストは、以下の2通りによって表現されます。

  1. ノードの種類(要素、属性、テキスト、ドキュメント、処理命令)
  2. ノード名(QNameまたはワイルドカード「*」)

 以下の表に、ノードテストをノードの種類で指定する方法の主なものをまとめました。

ノードテストのノード型指定
ノード型の指定説明
node()すべてのノードにマッチする。
text()すべてのテキストノードにマッチする。
comment()すべてのコメントノードにマッチする。
element()すべての要素ノードにマッチする。
attribute()すべての属性ノードにマッチする。
document-node()すべてのドキュメントノードにマッチする。

述語(Predicate)

 述語とは、ノードテストで選出されたノード集合を、さらに振り分けするために該当ノードの条件を記述する方式です。述語は以下の書式に示すように、式を"["と"]"で囲んで記述します。

述語 ::= "[" 式 "]"

フィルタ(Filter)

 フィルタはそれ自体で、ステップを構成することができ、基本式と述語の組み合わせで構成されます。

フィルタ ::= 基本式[述語(繰り返し可能)]

演算子

 XPathでは、数値計算や、比較、論理条件を指定するための演算子を用意しています。以下に演算子を種類別にまとめました。

数式(Arithmetic Expressions)

 数式は、加減剰余の四則演算で使用する演算子を定義しています。以下の表に四則演算で使用する演算子をまとめました。

比較式
演算子意味使用例
+ 加算$a + $b
-減算$a - $b
*乗算$a * $b
div除算$a div $b
mod剰余演算$a mod $b

比較式(Comparison Expressions)

 比較式は、2つの値を比較します。以下の表に比較式の演算子をまとめました。

比較式
演算子意味使用例
eq または = 等しい$a eq $b または $a=$b
ne または !=等しくない$a ne $b または $a!=$b
lt または <より小さい$a lt $b または $a<$b
le または <=以下$a le $b または $a<=$b
gt または >より大きい$a gt $b または $a>$b
ge または >=以上$a ge $b または $a>=$b

論理式(Logical Expressions)

 論理式は、条件式をand、orで判定します。以下の表に論理式の演算子をまとめました。

論理式
演算子意味使用例
and 2つの条件をAnd条件で真偽値判定する条件1 and 条件2
or2つの条件をOr条件で真偽値判定する条件1 or 条件2

  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2007/02/17 11:15 2007年1月23日のXQuery1.0の勧告にあわせて、内容を変更。

バックナンバー

連載:Cyber Luxeonで学ぶXMLDB入門

著者プロフィール

  • WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5