Cyber LuxeonでのXPath/XQuery実行
XPath/XQueryの具体的な文法について説明する前に、まずは実際にCyber Luxeon上でXPath/XQueryを実行する方法を説明します。
Cyber Luxeonの管理者用ツールであるDXE Managerを起動します。起動方法は「XMLDBとCyber Luxeonの基本」の「DXE Managerの基本的な使用方法」の「DXE Managerの起動、DXEサーバーへの接続」を参照してください。
DXE Managerのツリーペイン(ウィンドウ左側のペイン)上で、検索対象のXMLを右クリックして、[クエリー]-[クエリーの手動作成]を選択します。
[クエリ]ダイアログが開くので[クエリータイプ]のラジオボタンで[XPath]または[XQuery]を選択し、[クエリー文字列の入力]エリアに式を入力します。入力が終わったら[OK]ボタンを押下します。
![クエリーダイアログ クエリーダイアログ](http://cz-cdn.shoeisha.jp/static/images/article/922/luxeon_xquery_dxe_query_dia.gif)
正しく実行されると、次のように実行結果が表示されます(画像はXQueryで検索し、検索結果を「IEで表示」モードで表示したところ)。
XPath(1/2)
前述の「XQueryの仕様構成と関連する仕様」で述べたように、XQuery1.0ではXPathの新仕様であるXPath 2.0が使用されます。XPathは、XMLデータをあらわす木構造をたどって文書内のノードにアクセスするという特徴があります。
サンプルの実行
まずは、XPathの簡単なサンプルをCyber Luxeon上で実行してみます。以下の図がCyber Luxeon上に保存した検索対象のサンプルXMLになります。
![サンプルXML サンプルXML](http://cz-cdn.shoeisha.jp/static/images/article/922/luxeon_xpath_xml.gif)
このXMLからplayer
要素の中で、その子要素のname
要素が「イチロー」のものを抽出するXPathを実行します。
入力するXPathは次のようになります。
/child::players/child::player[child::name='イチロー']
上記の「Cyber LuxeonでのXPath/XQuery実行」で説明した方法で[クエリー]ダイアログを開き、クエリー文字列の入力欄にXPath式を入力し、[クエリータイプ]のラジオボタンで[XPath]を選択します。
![サンプルXPathの実行 サンプルXPathの実行](http://cz-cdn.shoeisha.jp/static/images/article/922/luxeon_xpath_dialog.gif)
[OK]ボタンを押下すると、以下の実行結果が表示されます(「IEで表示」モード)。
xlnxql:result
要素内に、XPathの実行結果が格納されています。実行結果で表示されている「xlnxql」はCyber Luxeon独自の名前空間(http://www.exeloncorp.com/DXE/namespaces/query)です。xlnxql:result
要素のxlnsql:query
属性には、XPath式、xlnxql:count
属性には抽出件数が設定されています。
シーケンス
XPath 2.0における機能追加の最も大きなものとしてシーケンスという概念の導入があります。XPath 2.0では、XML中のすべての対象物をシーケンスとして扱います。シーケンスは、さまざまな異なるアイテムの集合を順番に並べたものです。
アイテムとアトミック値
アイテムは、XML文書のノード、あるいはアトミック値のいずれかとなります。アトミック値とは、XML Schemaで定義されているビルトイン型のどれかの値をもつインスタンスのことで、型には、string
型、integer
型、decimal
型などがあります。アトミック値はそれ以上分割できないことから「アトミック」という名前がつけられています。
セットとシーケンス
XPath 1.0では集合をセットと呼んでいました。セットとシーケンスの異なる点は以下の2つです。
- 同じものが複数回登場してもかまわないこと(重複の許可)
- 配列の要素に順番の概念があること
- 2次クエリー(2つのクエリの連鎖)
- 変数バインド、ループ機能
- XML Schemaデータ型の完全サポート
- 正規表現や日付/時間、ストリング操作など
- コメント
基本式
基本式は、XPath内で使用される最も基本的な記述式を定義しています。基本式の構成要素を以下の表にまとめました。
式 | 説明 | 具体例 |
リテラル | アトミック値の表現方法のこと。リテラルは、数値リテラルと文字リテラルから構成され、数値リテラルは、さらに整数リテラル、小数リテラル、倍精度リテラルから構成されます。 | 「1.0」「東京」など |
変数参照 | 「$変数名」の形式で記述されます。 | $player |
丸括弧書き式 | "("と")"で式を囲む方式です。数式の優先順位などを指定指定する場合などに使用されます。 | (2+4) * 5 |
コンテキストアイテム式 | 「.」のことです。コンテキストアイテムは、現在処理されているノードのことで、ノードもしくは、アトミック値になります。 | /./ |
関数呼び出し | XQuery 1.0 and XPath 2.0 Functions and Operatorsで定義されているビルトイン関数の呼び出しです。関数名(引数,引数)の書式で記述されます。 | fn:abs(-22) |
パス
XPathの重要な概念として「パス」があります。パスとは、XML文書のツリー構造から特定のシーケンスを指定するための式のことをいいます。
サンプルのXPath式のパスの構成要素を示したものが以下の図になります。
![パスの記述 パスの記述](http://cz-cdn.shoeisha.jp/static/images/article/922/cyber_luxeon_2c.gif)
上図で示したように、パスは「/ステップ/ステップ/・・・(繰り返し)」のように、「/」と「ステップ」から構成されます(ステップについては次節で詳説します)。
また、これ以外にも「//」とステップの組み合わせによって記述する方法も用意されています。「//ステップ」と記述した場合は、コンテキストノード以下でマッチするノードすべてを表します。「//」を使用した例を以下に示します。
//name
「/players/player/name」という階層構造を持つXMLの場合、「//name」という記述で、name
要素すべてにマッチします。