XQuery
XPathの基本的な説明が一通り終わりましたので、次はXQueryの説明に入ります。XQueryの最も大きな特徴に、FLWOR式という構文があげられます。本節では、まずCyber LuxeonでサンプルのXQueryを実行し、サンプルのXQueryに従って説明を進めていきます。
サンプルの実行
以下のXMLデータに対し、XQueryで検索を実行する例を説明します。検索対象のサンプルXMLには、XPathで使用したXMLと同じものを使用します。

上記のXMLから、position要素が「投手」のデータのみ抽出し、XMLとして出力するXQueryを実行してみます。以下の図にXQueryのサンプルを示しました。

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

以下の図のXMLがXQueryの実行結果となります。xlnxql:result要素はCyber Luxeonで実行した場合に、クエリー結果に対して自動的に付与されるルート要素です。
FLWOR式
では、上記のXQueryのサンプルで示された構文について、順に説明していきます。まずは、XQueryで使用するFLWOR式という構文について説明します。FLWORの名前は、For、Let、Where、Orderby、Returnの頭文字をとったものです。読み方は「フラワー式」と呼びます。以下にFLWOR式の構文を示します。
for $変数名 in 抽出対象のXPath式 let $変数名 := 抽出対象のXPath式 where 条件式 order by ソートキー return 出力コンストラクタ
FLWOR式は、1つ以上のfor/let句、0個または1個のwhere/order by句、1つのreturn句から構成されます。
for句
for句は繰り返し処理を指定します。for句の書式は次のようになります。
for $変数名 in 抽出対象のXPath式 [, $変数名 in 抽出対象のXPath式, …繰り返し]
抽出対象のXPath式で取得されたシーケンスから、繰り返しごとにノードを順に取り出し、変数に格納したうえで、それ以降の処理を行います。また「$変数名 in 式」を、カンマ区切りで複数回指定することによって複数の$変数にシーケンスを格納することができます。
以下は、上記サンプルXQueryのlet句を抜き出したものです。「players.xml」のplayers要素の子要素のplayer要素を順に取り出して、$pという変数に格納しています(document関数については後述します)。
for $p in document("test_xmlstore:/test_dir/players.xml")/players/player
document関数
サンプルのfor句で使用されているdocument関数はCyber Luxeonが処理の対象となるdocumentを抽出するために独自で用意している入力関数です。入力関数は製品ごとの実装が許されています。document関数の書式は次のようになります。
document( "XMLのURL" ) ※XMLのURL := XMLストア名:ディレクトリ名/ファイル名
let句
特定のシーケンスを$変数にセットするために使用します。$変数には、1つのシーケンスしか格納できないので、複数のシーケンスを使用する場合には、複数の$変数を使用する必要があります。let句の書式は次のようになります。
let $変数名 := 抽出対象のXPath式
以下は、上記サンプルXQueryのlet句を抜き出したものです。
let $backnum := $p/@backnumber
$p変数に格納されたシーケンスのbacknumber属性を$backnum変数に格納しています。
where句
処理する条件を指定する場合に使用します。where句の書式は次のようになります。
where 条件式
以下は、上記サンプルXQueryのwhere句を抜き出したものです。
where contains($p/position/text(),'投手')
$p変数の子要素のposition要素のテキスト値に「投手」という文字が含まれているかをcontains関数で判定しています。関数については後述します。
order by句
処理する順番を指定する場合に使用します。カンマ区切りで、処理の順番の条件を複数指定することができます。また、昇順の場合は「ascending」、降順の場合は「descending」を指定します。order by句の書式は次のようになります。
order by ソートキー [ascendingまたはdescending]
以下のサンプルでは、並び替えの第1キーを$b変数、第2キーを$c変数として、降順で処理順を指定しています。
order by $b,$c descending
order byは定義がなく、FLWR式として定義されていました。Cyber LuxeonのXQuery実装は、草案段階の機能を実装しているため、2007年1月現在ではorder by句をサポートしていません。return句
戻り値としてのシーケンスを構成します。return句はfor句とlet句で作成された1回の繰り返しに対して1回呼び出されます。
return句は、以下の書式で構成されます。コンストラクタには、戻り値として戻すXMLを直接記述します。変数、式をコンストラクタ内で評価する場合は"{"と"}"で囲んで記述します。
return 出力コンストラクタ
以下がreturn句のサンプルです。「$p/name/text()」を"{"と"}"で囲んでいます。
return <pitcher><name>{$p/name/text()}</name></pitcher>
- 修正履歴
-
- 2007/02/17 11:15 2007年1月23日のXQuery1.0の勧告にあわせて、内容を変更。
この記事は参考になりましたか?
- 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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

