XQueryとは?SQLのように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は一般的に DOMDocument Object Model を操作するために利用されます。 
JavaやJavaScriptなどのプログラミング環境では、XPathを使用してDOMツリー内のノードを検索することができます。 

一方、XQueryDOM操作を目的とした技術ではなく、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を利用すると、次のような処理を実装することができます。 

  1. XMLファイルを読み込む 
  1. XQueryを実行する 
  1. クエリ結果を取得する 

まとめ 

このように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