XQuery

XQuery
パラダイム宣言型関数型モジュール型
デザイン:W3C
初登場2007
安定版リリース
3.1 / 2017年3月21日[ 1 ] ( 2017-03-21 )
タイピングの規律動的または静的、[ 2 ] [ 3 ]強い
OSクロスプラットフォーム
ファイル名拡張子.xq、.xql、.xqm、.xqy、.xquery
Webサイトwww .w3 .org /XML /クエリ/
主要な実装
多くの
影響を受けた
XPathSQLXSLT

XQueryXML Query)は、主にXML形式の構造化データおよび非構造化データのコレクションを照会および変換するために設計されたクエリ言語および関数型プログラミング言語です。また、テキストデータもサポートし、実装固有の拡張機能により、バイナリデータリレーショナルデータなどの他の形式もサポートします。

この言語はW3CのXML Queryワーキンググループによって開発され、バージョン1.0は2007年1月にW3C勧告となりました。XQueryの開発は、XSLワーキンググループによるXSLTの開発と密接に連携しています。両グループは、 XQueryとXSLTの共通コンポーネントであるXPathを共同で保守しています。XQueryは、FLWOR(For、Let、Where、Order by、Return)式などの機能を追加してXPathを拡張し、意味的にはSQLに似ていますが、リレーショナルデータではなく階層データに最適化されています。

2017 年 3 月に公開された XQuery 3.1 では、JSONのサポートが追加され、マップ配列、追加の高階関数が導入され、最新のデータ処理に対する言語の機能が大幅に拡張されました。

XQuery は、 BaseXeXistMarkLogicSaxonBerkeley DB XMLなど、多くのデータベース システムXML データベース、XML プロセッサによって実装されており、エンタープライズ ソフトウェアアプリケーションで XML データを処理するための基礎となるテクノロジとなっています。

特徴

XQuery の使命は次のとおりです。

「ワールドワイドウェブ上の現実および仮想文書からデータを抽出するための柔軟なクエリ機能を提供し、最終的にはウェブの世界とデータベースの世界の間で必要な相互作用を提供します。最終的には、XMLファイルのコレクションはデータベースのようにアクセスされるようになります。」[ 4 ]

これは関数型で副作用がなく、シンプルな型システムを持つ式指向プログラミング言語であり、キルペリネン氏は次のように要約している。[ 5 ]

すべての XQuery 式はシーケンスを操作し、シーケンスとして評価されます。シーケンスは、順序付けされた項目のリストです。項目は、XML 文書の構成要素を表すノード、またはxs:integerxs:stringなどの XML スキーマ基本型のインスタンスであるアトミック値のいずれかになります。シーケンスは空にすることも、単一の項目のみで構成することもできます。単一の項目とシングルトンシーケンスは区別されません。(...) XQuery/XPath シーケンスは、LispPrologなどの言語のリストとは異なり、ネストされたシーケンスを排除しています。XQuery の設計者は、ネストされたシーケンスは文書の内容を操作するのに不要だと考えていたのかもしれません。文書構造のネスト、つまり階層は、代わりにノードとその親子関係によって表現されます。

XQueryは、XML文書やリレーショナルデータベース[ 6 ]やオフィス文書 などのXMLとして表示できる任意のデータソースからデータを抽出して操作する手段を提供します。

XQueryには、XML文書の特定の部分を扱うためのXPath式構文のスーパーセットが含まれています。さらに、結合を実行するためのSQL風の「FLWOR式」も含まれています。FLWOR式は、FOR、LET、WHERE、ORDER BY、RETURNという5つの句で構成され、それぞれにちなんで名付けられています。

この言語は、新しいXML文書を構築するための構文も提供しています。要素名と属性名が事前にわかっている場合は、XMLに似た構文を使用できます。そうでない場合は、動的ノードコンストラクタと呼ばれる式を使用できます。これらの構成要素はすべて言語内で式として定義されており、任意に入れ子にすることができます。

この言語は、XML ドキュメントの情報内容のツリー構造モデルを使用するXQuery および XPath データ モデル(XDM) に基づいています。このモデルには、ドキュメント ノード、要素、属性、テキスト ノード、コメント、処理命令、名前空間の 7 種類のノードが含まれます。

XDMはすべての値をシーケンスとしてモデル化します(シングルトン値は長さ1のシーケンスとみなされます)。シーケンス内の項目は、XMLノードまたはアトミック値のいずれかです。アトミック値は整数、文字列、ブール値などです。型の全リストは、XMLスキーマで定義されているプリミティブ型に基づいています。

XML ドキュメントまたはデータベースを更新する機能、およびフルテキスト検索機能は、コア言語の一部ではありませんが、アドオン拡張標準で定義されています。XQuery Update Facility 1.0 は更新機能をサポートし、XQuery および XPath Full Text 1.0 は XML ドキュメント内のフルテキスト検索をサポートします。

XQuery 3.0 では、関数が操作可能な値 (変数に格納され、高階関数に渡され、動的に呼び出される) であるという点で、完全な関数型プログラミングのサポートが追加されました。

以下のサンプル XQuery コードは、hamlet.xmlにエンコードされたシェイクスピアの戯曲「ハムレット」の各幕の固有の話し手をリストします。

<html> <body> { for $ act in doc ( "hamlet.xml" )// ACT let $ speakers := distinct-values ( $ act // SPEAKER ) return <div> <h1> { string ( $ act / TITLE ) } </h1> <ul> { for $ speaker in $ speakers return <li> { $ speaker } </li> } </ul> </div> } </body> </html>

計算を実行するためのXQuery構造はすべて式です一部のキーワードは文のような動作を示唆しているように見えますが、文はありません。関数を実行するには、本体内の式が評価され、その値が返されます。したがって、入力値を2倍にする関数を書くには、次のように記述するだけです。

関数local:doubler ( $ x ) { $ x * 2 }を宣言する

「Hello World」という完全なクエリを書くには、次の式を記述します。

"こんにちは世界"

このスタイルは関数型プログラミング言語では一般的です。

アプリケーション

以下に、XQuery の使用方法の例をいくつか示します。

  1. ウェブサービスで使用するためにデータベースから情報を抽出する。[ 7 ]
  2. XMLデータベースに保存されたデータの概要レポートを生成する。[ 7 ]
  3. ウェブ上のテキスト文書から関連情報を検索し、その結果をまとめる。[ 8 ]
  4. XMLデータを選択し、Web上に公開するためにXHTMLに変換する。[ 7 ]
  5. アプリケーション統合に使用するためにデータベースからデータを取得する。[ 7 ]
  6. 複数のトランザクションを表すXML文書を複数のXML文書に分割する。[ 8 ]

XQueryとXSLTの比較

範囲

XQueryは当初、大規模なXML文書の集合に対するクエリ言語として考案されましたが、個々の文書を変換することも可能です。そのため、XQueryの機能は、入力XML文書をHTMLやその他の形式に変換するために特別に設計された XSLTと重複しています。

XSLT 2.0とXQuery標準は、W3C内の別々のワーキンググループによって開発され、適切な場合には共通のアプローチを確保するために協力しています。これらは同じデータモデル(XDM)、型システム、関数ライブラリを共有しており、どちらもサブ言語として XPath 2.0を含んでいます。

起源

しかし、これら2つの言語は異なる伝統に根ざしており、異なるコミュニティのニーズに応えています。XSLTは主にスタイルシート言語として考案され、その主な目的は画面上、Web上(Webテンプレート言語として)、または紙媒体上でXMLを人間の読者向けにレンダリングすることでした。XQueryは主にSQLの伝統に則ったデータベースクエリ言語として考案されました。

2 つの言語は異なるコミュニティから生まれたため、XSLT はより柔軟な構造を持つ物語文書の処理に優れており、XQuery はデータ処理 (リレーショナル結合の実行など) に優れています。

バージョン

XSLT 1.0は1999年に勧告として登場しましたが、XQuery 1.0は2007年初頭にようやく勧告となりました。そのため、XSLTは依然としてはるかに広く使用されています。両言語は同等の表現力を備えていますが、XSLT 2.0には、グループ化、数値と日付の書式設定、XML名前空間のより高度な制御など、XQuery 1.0にはない多くの機能があります。[ 9 ] [ 10 ] [ 11 ] これらの機能の多くは、XQuery 3.0で予定されていました。[ 12 ]

比較を行う際には、XSLTのバージョンを考慮する必要があります。XSLT 1.0とXSLT 2.0は大きく異なる言語です。特にXSLT 2.0は、強力な型付けとスキーマ対応においてXQueryの影響を強く受けています。

強みと弱み

ユーザビリティ研究では、特にSQLなどのデータベース言語の経験があるユーザーにとって、 XQueryはXSLTよりも習得しやすいことが示されています。 [ 13 ]これは、XQueryが学習すべき概念が少ない小さな言語であり、プログラムがより簡潔であるという事実に起因しています。また、XQueryはより直交性が高く、任意の式を任意の構文コンテキストで使用できることも事実です。対照的に、XSLTは2言語システムであり、XPath式をXSLT命令内にネストすることはできますが、その逆はできません。

XSLTは、文書に小さな変更を加える(例えば、すべてのNOTE要素を削除する)といった用途においては、現状ではXQueryよりも強力です。このような用途は、XSLTでは通常、すべてのノードを変更せずにコピーする同一テンプレートと、選択されたノードを変更する特定のテンプレートを組み合わせたコーディングパターンを用いて処理されます。XQueryにはこのコーディングパターンに相当するものはありませんが、将来のバージョンでは開発中の言語更新機能を用いてこのような問題に対処できるようになるでしょう。[ 14 ]

XQuery 1.0 には、動的バインディングやポリモーフィズムのためのメカニズムが全くありませんでした。これは、XQuery 3.0 で関数をファーストクラス値として導入することで改善されました。この機能の欠如は、大規模なアプリケーションを開発する場合や、異なる環境で再利用できるように設計されたコードを開発する場合に顕著になり始めます。XSLT はこの分野で、テンプレートルールの動的なマッチングと、 を使用したルールのオーバーライドという 2 つの補完的なメカニズムを提供しています。これらのメカニズムにより、xsl:import複数のカスタマイズ層を持つアプリケーションを開発することが可能になります。

XQuery 1.0 にこれらの機能が存在しないのは、意図的な設計上の決定でした。その結果、XQuery は静的解析に非常に適しており、これはデータベースクエリ言語に必要なレベルの最適化を実現するために不可欠です。また、コンパイル時に XQuery コードのエラーを検出することも容易になります。

XSLT 2.0 はXML構文を使用するため、XQuery 1.0 と比較すると冗長になります。しかし、多くの大規模アプリケーションでは、処理パイプラインの一部として XSLT を使用してスタイルシートを動的に読み取り、書き込み、または変更することで、この機能を活用しています。XML 構文を使用すると、XSLT コードの管理に XML ベースのツールを使用することもできます。対照的に、XQuery 構文は、Java ( XQuery API for Javaを参照) やC#などの従来のプログラミング言語に埋め込むのに適しています。必要に応じて、XQuery コードは XQueryX と呼ばれる XML 構文で表現することもできます。XQuery コードの XQueryX 表現はかなり冗長で人間にとって使いにくいですが、XML ツールで簡単に処理でき、たとえば XSLT スタイルシートで変換できます。[ 15 ] [ 16 ]

バージョンと拡張機能

バージョン

W3C拡張機能

World Wide Web Consortium (W3C) は、XQuery に対して 2 つの主要な拡張機能を開発しました。

  • XQuery 1.0とXPath 2.0 Full-Text [ 20 ]はXQueryをフルテキスト検索機能で拡張した。
  • XQuery Update Facility は、XQueryでのデータ変更を可能にします。

どちらもXQuery 1.0の拡張としてW3C勧告となりました。XQuery 3.0への適応はリソースの制約により断念されました。

XQueryのスクリプト(手続き型)拡張が提案されたが、完成しなかった。[ 21 ] [ 22 ]

EXPathコミュニティグループ[ 23 ]は、XQueryおよび関連標準(XPathXSLTXProcXForms)の拡張機能を開発しています。以下の拡張機能が利用可能です。

  • パッケージングシステム[ 24 ]はXQueryライブラリとモジュールを管理します。
  • ファイルモジュール[ 25 ]ファイルシステム操作用。
  • バイナリモジュール[ 26 ]バイナリデータを処理します
  • Webアプリケーション[ 27 ] Webベースのアプリケーションを構築するための

サードパーティの拡張機能

JSONiqは、 JSONドキュメントからのデータの抽出と変換をサポートするXQueryの拡張機能です。JSONiqはXQuery 3.0のスーパーセットです。Creative Commons Attribution-ShareAlike 3.0ライセンスの下で公開されています。

XQuery 3.1 では JSON の完全サポートが追加されたため、事実上 JSONiq は非推奨となっています。

EXQuery [ 28 ]プロジェクトは、移植性の高いXQueryアプリケーションの作成に関する標準を開発しています。現在利用可能な標準は次のとおりです。

さらに読む

  • XMLクエリ:コンテキストにおけるXQuery、XPath、SQL/XML。ジム・メルトン、スティーブン・バクストン共著。モーガン・カウフマン、2006年。ISBN 1-55860-711-0
  • ウォルムズリー、プリシラ (2007). XQuery 第1版. O'Reilly Media. ISBN 978-0-596-00634-1
  • ウォルムズリー、プリシラ (2015). XQuery 第2版. O'Reilly Media. ISBN 978-1-4919-1510-3
  • XQuery: XMLクエリ言語. マイケル・ブランデージ著. Addison-Wesley Professional, 2004. ISBN 0-321-16581-0
  • エキスパートによるXQuery:W3C XMLクエリ言語ガイド。ハワード・カッツ編。アディソン・ウェズリー、2004年。ISBN 0-321-18060-7
  • XQuery FLWOR式入門。マイケル・ケイ博士(W3C XQuery委員会)、2005年。

実装

一般的なXQuery実装の概要
名前 ライセンス 言語 XQuery 3.1 XQuery 3.0 XQuery 1.0 XQuery アップデート 1.0 XQuery フルテキスト 1.0
ベースXBSDライセンスジャワ はいはいはいはいはい
存在するLGPLジャワ 部分的部分的はいいいえいいえ
マークロジック独自の C++ いいえ部分的はいいいえいいえ
サクソン語HE Mozillaパブリックライセンスジャワ 部分的部分的はいはいいいえ
サクソンEE 独自の ジャワ はいはいはいはいいいえ
ザイデルGPLv3+フリーパスカル はいはいはいいいえいいえ
ゾルバApacheライセンスC++ いいえはいはいはいはい

参照

参考文献

  1. ^ 「XQuery 3.1勧告」 2017年3月21日。
  2. ^ 「XQuery 3.1: XMLクエリ言語」 2017年3月21日。
  3. ^ 「XQueryと静的型付け」 2023年4月3日。
  4. ^ W3C (2003-10-25). 「J.Robieによる引用」 .{{cite web}}: CS1 maint: 数値名: 著者リスト (リンク)
  5. ^ Kilpeläinen, Pekka (2012). 「問題解決のためのXQueryの使用」(PDF) .ソフトウェア: 実践と経験. 42 (12): 1433– 1465. doi : 10.1002/spe.1140 . S2CID 15561027.オリジナル(PDF)から2016年3月4日にアーカイブ。 2015年8月29日閲覧 
  6. ^「XQueryによるデータ取得」。2016年1月18日閲覧。
  7. ^ a b c d「XQueryチュートリアル」 . www.w3schools.com . 2025年11月6日閲覧。
  8. ^ a b「XQuery and XPath Full Text 3.0」 . www.w3.org . 2025年11月6日閲覧。
  9. ^ Kay, Michael (2005年5月). 「XSLTとXQueryの比較」 . 2018年6月27日時点のオリジナルよりアーカイブ。 2016年6月15日閲覧
  10. ^ Eisenberg, J. David (2005-03-09). 「XSLTとXQueryの比較」 .
  11. ^ Smith, Michael (2001-02-23). 「XQueryとXSLTの「重複」をめぐる議論」 . 2006年6月16日時点のオリジナルよりアーカイブ。 2006年6月19日閲覧
  12. ^ 「XQuery 3.0 の要件」
  13. ^ XMLクエリ言語の有用性。Joris Graaumans。SIKS博士論文シリーズNo. 2005-16、 ISBN 90-393-4065-X
  14. ^ 「XQuery更新機能」
  15. ^ 「XQuery の XML 構文 (XQueryX)」
  16. ^ Michael Kay. 「サクソン日記:定数を折りたたまない方法」
  17. ^ 「XMLおよびセマンティックWeb W3C標準タイムライン」(PDF) 2012年2月4日。2019年10月26日時点のオリジナル(PDF)からアーカイブ。 2012年2月4日閲覧
  18. ^ 「XQuery 3.0勧告」 2014年4月8日。
  19. ^ 「XQuery 3.1勧告」 2017年3月21日。
  20. ^ XQuery および XPath フルテキスト 1.0
  21. ^ XQuery スクリプティング拡張 1.0 の要件
  22. ^ XQuery 1.0 スクリプト拡張
  23. ^ EXPathコミュニティグループ
  24. ^包装システム
  25. ^ファイルモジュール
  26. ^バイナリモジュール
  27. ^ Webアプリケーション
  28. ^ 「ポータブルXQueryアプリケーションの標準」 。 2013年12月12日閲覧
  29. ^ 「RESTXQ 1.0: XQuery 用の RESTful アノテーション」