XQueryとは?SQLのようにXMLをクエリする高度な方法

こんにちは!私の名前はヴオンです。
株式会社メディアフュージョンで、XML関連製品の開発を担当しているベトナム出身のエンジニアです。
XMLに興味のある方や、XMLを利用されている方に、これまでに蓄積してきた経験を共有できればと思っています。

1. はじめに
これまでのシリーズでは、以下の技術について解説してきました。
- XPath:XML内のnodeを検索する方法
- XSLT:XMLをHTMLや別のXML、レポート形式に変換する方法
しかし、実際のシステムで大量のXMLデータを扱う場合、
XPathだけでは十分でないケースがあります。
例えば次のようなケースです。
- 複雑な条件によるデータ抽出
- 複数のXMLドキュメントの結合
- 既存データから新しいXML構造を生成
- SQLのような集計処理
このような問題を解決するために設計されたのが XQuery です。
XQueryは、XMLデータを対象としたクエリ言語であり、
リレーショナルデータベースにおけるSQLに近い役割を持ちます。
2. XQueryとは?
XQuery(XML Query Language) は、XMLデータを検索・操作するための言語で、W3Cによって標準化されています。
主な用途は以下の通りです。
- XMLデータの検索
- 複数のXMLドキュメントの結合
- 新しいXMLの生成
- filter、sort、join、aggregationなどの処理
XQueryは XPathをベースに設計されています。
簡単にまとめると:
XPath = nodeへのアクセス
XQuery = XMLデータを扱う完全なクエリ言語
3. XMLデータの例
次のようなXMLデータを例に考えます。

4. XQueryでXMLをクエリする
すべてのorderを取得

amountが10000以上のorderを取得

結果:

5. XQuery FLWOR式
XQueryの最も重要な構文は FLWOR expression です。
FLWORは次の要素で構成されます。
- For: ノードのシーケンスを取得する
- Let: シーケンスを変数に割り当てる
- Where: 条件に基づいてノードをフィルタリングする
- Order by: ノードを並び替える
- Return: 返却する結果を指定する(各ノードごとに評価される)
これはSQLのクエリ構造と非常によく似ています。
例

6. XQueryとSQLの比較
| SQL | XQuery |
| SELECT | return |
| FROM | for |
| WHERE | where |
| ORDER BY | order by |
SQLの例

XQueryで書くと

7. XQueryで新しいXMLを生成する
XQueryの強力な特徴の一つは
新しいXMLドキュメントを生成できることです。
例:

出力結果:

8. XQueryを使うべき場面
XQueryは次のような場合に適しています。
- XMLデータベースを扱う場合
- 大規模なXMLデータを検索する場合
- 複数のXMLデータを結合する場合
- SQLのようなクエリ処理が必要な場合
9. XQueryはどの環境で利用できるのか
XPathは一般的に DOM(Document Object Model) を操作するために利用されます。
JavaやJavaScriptなどのプログラミング環境では、XPathを使用してDOMツリー内のノードを検索することができます。
一方、XQueryはDOM操作を目的とした技術ではなく、XMLデータ全体をクエリするために設計された言語です。
XQueryを実行する方法は、主に次の 3つの方法 があります。
9.1. XMLデータベースで利用する方法
XQueryは多くの XMLデータベース(XML DB) でサポートされています。
代表的なXMLデータベースには、次のようなものがあります。
- BaseX
- eXist-db
これらのシステムではXMLデータをデータベースに保存し、
SQLと同様にXQueryを使用してXMLデータを検索することができます。
9.2. XQueryプロセッサを利用する方法
XMLファイルがデータベースに保存されていない場合でも、
XQueryプロセッサ を利用することでXMLファイルに対して直接XQueryを実行することができます。
代表的なXQueryプロセッサには、次のようなものがあります。
- Saxon
- BaseX
これらのツールはXMLファイルを読み込み、XQueryを実行することができます。
例:
- basex query.xq
このコマンドを実行すると、
query.xq に記述された XQueryが実行されます。
9.3. アプリケーションから利用する方法
XQueryは Javaなどのアプリケーションから利用することも可能 です。
例えば、Saxon APIを利用すると、次のような処理を実装することができます。
- XMLファイルを読み込む
- XQueryを実行する
- クエリ結果を取得する
まとめ
このようにXQueryは、次のようなさまざまな環境で利用することができます。
- XMLデータベース
- XQueryプロセッサ
- アプリケーション
つまり、XQueryはXMLデータベースだけでなく、XMLファイルに対しても柔軟に利用できるクエリ言語と言えます。
10. XPath・XSLT・XQueryの違い
| 技術 | 目的 |
| XPath | XMLノードを取得する |
| XSLT | XMLデータを変換する |
| XQuery | XMLデータをクエリする |
11. まとめ
- XQueryはXMLデータを扱うためのクエリ言語である
- W3Cによって標準化されている
- XPathをベースとしている
- FLWOR式によりSQLに似たクエリが可能
XPathがnodeを見つける技術だとすれば、XSLTはデータを変換する技術です。
そして XQueryはXMLをデータベースのように扱うための言語と言えるでしょう。
12. 参考文献
W3C: XQuery 3.1: An XML Query Language
https://www.w3.org/TR/xquery-31
Saxon Documentation
https://www.saxonica.com/documentation/
BaseX Documentation
https://docs.basex.org/wiki/XQuery
eXist-db Documentation
https://exist-db.org/exist/apps/doc/
W3Schools XQuery Tutorial
https://www.w3schools.com/xml/xquery_intro.asp

