SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Cyber Luxeonで学ぶXMLDB入門

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

Cyber Luxeonで学ぶXMLDB入門 第2回


  • X ポスト
  • このエントリーをはてなブックマークに追加

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を右クリックして、[クエリー]-[クエリーの手動作成]を選択します。

XQuery実行方法
XQuery実行方法

 [クエリ]ダイアログが開くので[クエリータイプ]のラジオボタンで[XPath]または[XQuery]を選択し、[クエリー文字列の入力]エリアに式を入力します。入力が終わったら[OK]ボタンを押下します。

クエリーダイアログ
クエリーダイアログ

 正しく実行されると、次のように実行結果が表示されます(画像はXQueryで検索し、検索結果を「IEで表示」モードで表示したところ)。

XQuery実行結果
XQuery実行結果

XPath(1/2)

 前述の「XQueryの仕様構成と関連する仕様」で述べたように、XQuery1.0ではXPathの新仕様であるXPath 2.0が使用されます。XPathは、XMLデータをあらわす木構造をたどって文書内のノードにアクセスするという特徴があります。

サンプルの実行

 まずは、XPathの簡単なサンプルをCyber Luxeon上で実行してみます。以下の図がCyber Luxeon上に保存した検索対象のサンプルXMLになります。

サンプルXML
サンプルXML

 このXMLからplayer要素の中で、その子要素のname要素が「イチロー」のものを抽出するXPathを実行します。

 入力するXPathは次のようになります。

XPath例
/child::players/child::player[child::name='イチロー']

 上記の「Cyber LuxeonでのXPath/XQuery実行」で説明した方法で[クエリー]ダイアログを開き、クエリー文字列の入力欄にXPath式を入力し、[クエリータイプ]のラジオボタンで[XPath]を選択します。

サンプルXPathの実行
サンプルXPathの実行

 [OK]ボタンを押下すると、以下の実行結果が表示されます(「IEで表示」モード)。

サンプルXPathの実行結果
サンプルXPathの実行結果

 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つです。

  1. 同じものが複数回登場してもかまわないこと(重複の許可)
  2. 配列の要素に順番の概念があること
XPath 2.0の新機能(XPath 1.0との違い)
 XPath 2.0では、シーケンス以外にも、いくつかの機能が追加されました。以下が主な追加機能の一覧です。
  1. 2次クエリー(2つのクエリの連鎖)
  2. 変数バインド、ループ機能
  3. XML Schemaデータ型の完全サポート
  4. 正規表現や日付/時間、ストリング操作など
  5. コメント

基本式

 基本式は、XPath内で使用される最も基本的な記述式を定義しています。基本式の構成要素を以下の表にまとめました。

基本式の構成要素
説明具体例
リテラルアトミック値の表現方法のこと。リテラルは、数値リテラルと文字リテラルから構成され、数値リテラルは、さらに整数リテラル、小数リテラル、倍精度リテラルから構成されます。「1.0」「東京」など
変数参照「$変数名」の形式で記述されます。$player
丸括弧書き式"("と")"で式を囲む方式です。数式の優先順位などを指定指定する場合などに使用されます。(2+4) * 5
コンテキストアイテム式「.」のことです。コンテキストアイテムは、現在処理されているノードのことで、ノードもしくは、アトミック値になります。 /./
関数呼び出しXQuery 1.0 and XPath 2.0 Functions and Operatorsで定義されているビルトイン関数の呼び出しです。関数名(引数,引数)の書式で記述されます。fn:abs(-22)

パス

 XPathの重要な概念として「パス」があります。パスとは、XML文書のツリー構造から特定のシーケンスを指定するための式のことをいいます。

 サンプルのXPath式のパスの構成要素を示したものが以下の図になります。

パスの記述
パスの記述

 上図で示したように、パスは「/ステップ/ステップ/・・・(繰り返し)」のように、「/」と「ステップ」から構成されます(ステップについては次節で詳説します)。

 また、これ以外にも「//」とステップの組み合わせによって記述する方法も用意されています。「//ステップ」と記述した場合は、コンテキストノード以下でマッチするノードすべてを表します。「//」を使用した例を以下に示します。

「//」を使用した例
//name

 「/players/player/name」という階層構造を持つXMLの場合、「//name」という記述で、name要素すべてにマッチします。

著注:名前の変更
 XPath 1.0では「パス」は「ロケーションパス(Location Path)」、「ステップ」は「ロケーションステップ(Location Steps)」と呼ばれていましたが、XPath 2.0になり、呼び名が変更されました。

次のページ
XPath(2/2)

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Cyber Luxeonで学ぶXMLDB入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/922 2007/06/13 10:07

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング