| パラダイム | 宣言型、関数型、モジュール型 |
|---|---|
| デザイン: | ウィキペディア |
| 初登場 | 2007 |
| 安定リリース | 3.1 / 2017年3月21日[1] |
| タイピングの規律 | 動的または静的、[2] [3] 強い |
| OS | クロスプラットフォーム |
| ファイル名拡張子 | .xq、.xql、.xqm、.xqy、.xquery など |
| Webサイト | www.w3.org/XML/クエリ/ |
| 主な実装 | |
| 多くの | |
| 影響を受けた | |
| XPath、SQL、XSLT | |
XQuery ( XML Query ) は、構造化データと非構造化データのコレクションを照会および変換するクエリおよび関数型プログラミング言語です。通常、データ形式はXML 、テキスト、および他のデータ形式 ( JSON、バイナリなど)用のベンダー固有の拡張機能です。この言語は、 W3CのXML Queryワーキング グループによって開発されています。この作業は、 XSL ワーキング グループによるXSLTの開発と密接に連携しており、この 2 つのグループは、 XQuery のサブセットである XPath の責任を共有しています。
XQuery 1.0は2007年1月23日にW3C勧告となった。 [4]
XQuery 3.0は2014年4月8日にW3C勧告となった。[5]
XQuery 3.1は2017年3月21日にW3C勧告となった。[6]
「XML Query プロジェクトの使命は、ワールド ワイド ウェブ上の実際のドキュメントと仮想ドキュメントからデータを抽出するための柔軟なクエリ機能を提供することです。これにより、最終的には Web の世界とデータベースの世界の間で必要な相互作用が実現します。最終的には、XML ファイルのコレクションがデータベースのようにアクセスされるようになります。」[7]
特徴
XQueryは、関数型で副作用がなく、シンプルな型システムを備えた式指向のプログラミング言語であり、Kilpeläinenは次のように要約しています。[8]
すべての XQuery 式はシーケンスに対して動作し、シーケンスに評価されます。シーケンスは、項目の順序付きリストです。項目は、XML ドキュメントのコンポーネントを表すノード、またはxs:integerやxs:stringなどの XML スキーマ基本型のインスタンスであるアトミック値のいずれかになります。シーケンスは空にすることも、1 つの項目のみで構成することもできます。1 つの項目とシングルトン シーケンスは区別されません。(...) XQuery/XPath シーケンスは、ネストされたシーケンスを除外することで、 LispやPrologなどの言語のリストとは異なります。XQuery の設計者は、ネストされたシーケンスはドキュメント コンテンツの操作には不要であると考えていた可能性があります。ドキュメント構造のネスト、つまり階層は、代わりにノードとその親子関係によって表されます。
XQueryは、XML文書やリレーショナルデータベース[9]やオフィス文書など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 := distinctive-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 の使用方法の例をいくつか示します。
- Web サービスで使用するためにデータベースから情報を抽出します。
- XML データベースに保存されたデータの概要レポートを生成します。
- Web 上のテキスト文書から関連情報を検索し、結果をまとめます。
- XML データを選択して XHTML に変換し、Web 上に公開します。
- アプリケーション統合に使用するデータをデータベースから取得します。
- 複数のトランザクションを表す XML ドキュメントを複数の XML ドキュメントに分割します。
XQuery と XSLT の比較
範囲
XQuery は当初、大規模な XML ドキュメントのコレクションに対するクエリ言語として考案されましたが、個々のドキュメントを変換することもできます。そのため、その機能は、入力 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 にはない多くの機能があります。[10] [11] [12] これらの機能の多くは XQuery 3.0 で計画されていました。[13]
比較する場合は、XSLT のバージョンを考慮する必要があります。XSLT 1.0 と XSLT 2.0 は非常に異なる言語です。特に、XSLT 2.0 は、強力な型指定とスキーマ認識への移行において、XQuery の影響を強く受けています。
強みと弱み
ユーザビリティ研究では、特にSQLなどのデータベース言語の経験があるユーザーにとっては、 XQueryの方がXSLTよりも習得しやすいことが示されています。 [14]これは、XQueryの方が習得すべき概念が少ない小さな言語であり、プログラムがより簡潔であることに起因しています。また、XQueryの方がより直交性が高く、任意の式を任意の構文コンテキストで使用できることも事実です。対照的に、XSLTは2言語システムであり、XPath式をXSLT命令にネストできますが、その逆はできません。
XSLT は、文書に小さな変更を加える (たとえば、すべての NOTE 要素を削除する) ようなアプリケーションでは、現在 XQuery よりも強力です。このようなアプリケーションは、通常、選択されたノードを変更する特定のテンプレートによって変更されたすべてのノードを変更せずにコピーするアイデンティティ テンプレートを含むコーディング パターンを使用して XSLT で処理されます。XQuery にはこのコーディング パターンに相当するものはありませんが、将来のバージョンでは、開発中の言語の更新機能を使用してこのような問題に対処できるようになります。[15]
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 表現はかなり冗長で人間には不便ですが、たとえば XSLT スタイルシートで変換するなど、XML ツールで簡単に処理できます。[16] [17]
拡張と今後の作業
W3C 拡張
XQuery の 2 つの主要な拡張機能が W3C によって開発されました。
- XQuery 1.0とXPath 2.0フルテキスト[18]
- XQuery 更新機能
どちらも XQuery 1.0 の拡張機能として勧告ステータスに達しましたが、XQuery 3.0 で動作するように進める作業はリソース不足のため中止されました。
XQuery 3.0の作業は2014年4月8日に勧告として公開され、[19] XQuery 3.1は2017年2月時点で勧告となっています。
XQueryのスクリプト(手続き型)拡張が設計されたが、完成しなかった。[20] [21]
EXPathコミュニティグループ[22]は、 XQueryやその他の関連標準(XPath、XSLT、XProc、XForms)の拡張を開発しています。現在利用可能な拡張は次のとおりです。
- 包装システム[23]
- ファイルモジュール[24]
- バイナリモジュール[25]
- ウェブアプリケーション[26]
サードパーティの拡張機能
JSONiq は、JSONドキュメントからデータを抽出および変換するためのサポートを追加する XQuery の拡張機能です。JSONiq は、XQuery 3.0 のスーパーセットです。Creative Commons Attribution-ShareAlike 3.0ライセンスに基づいて公開されています。
XQuery 3.1 では JSON の完全なサポートが追加されたため、事実上 JSONiq は非推奨となっています。
EXQuery [27]プロジェクトは、移植可能なXQueryアプリケーションの作成に関する標準を開発しています。現在利用可能な標準は次のとおりです。
- RESTXQ [28]
さらに読む
- XML のクエリ: コンテキスト内の XQuery、XPath、および SQL/XML。Jim Melton および Stephen Buxton。Morgan Kaufmann、2006 年。ISBN 1-55860-711-0。
- Walmsley, Priscilla (2007). XQuery、第 1 版。O'Reilly Media。ISBN 978-0-596-00634-1。
- Walmsley, Priscilla (2015). XQuery、第 2 版。O'Reilly Media。ISBN 978-1-4919-1510-3。
- XQuery: XML クエリ言語。Michael Brundage。Addison-Wesley Professional、2004 年。ISBN 0-321-16581-0。
- エキスパートによる XQuery: W3C XML クエリ言語ガイド。Howard Katz (編)。Addison-Wesley、2004 年。ISBN 0-321-18060-7。
- XQuery FLWOR 式の紹介。Michael Kay博士(W3C XQuery 委員会)、2005 年。
実装
参照
参考文献
- ^ 「XQuery 3.1 勧告」 2017-03-21.
- ^ 「XQuery 3.1: XML クエリ言語」 2017-03-21.
- ^ 「XQuery と静的型付け」。
- ^ 「XML およびセマンティック ウェブ W3C 標準タイムライン」(PDF) . 2012-02-04.
- ^ 「XQuery 3.0 勧告」 2014-04-08.
- ^ 「XQuery 3.1 勧告」 2017-03-21.
- ^ W3C (2003-10-25). 「J.Robie による引用」.
{{cite web}}: CS1 maint: numeric names: authors list (link) - ^ Kilpeläinen, Pekka (2012). 「問題解決のための XQuery の使用」(PDF) .ソフトウェア: 実践と経験. 42 (12): 1433–1465. doi :10.1002/spe.1140. S2CID 15561027.
- ^ 「XQuery によるデータ取得」。2016 年 1 月 18 日閲覧。
- ^ Kay, Michael (2005 年 5 月)。「XSLT と XQuery の比較」。
- ^ Eisenberg, J. David (2005-03-09). 「XSLT と XQuery の比較」。
- ^ Smith, Michael (2001-02-23). 「XQuery、XSLT の「重複」が議論される」
- ^ 「XQuery 3.0 の要件」。
- ^ XML クエリ言語の使いやすさ。Joris Graaumans。SIKS 論文シリーズ No 2005-16、ISBN 90-393-4065-X
- ^ 「XQuery 更新機能」。
- ^ 「XQuery の XML 構文 (XQueryX)」。
- ^ Michael Kay. 「サクソン日記: 定数を折りたたまない方法」
- ^ XQuery および XPath 全文 1.0
- ^ XML クエリ (XQuery) 3.0
- ^ XQuery スクリプト拡張 1.0 の要件
- ^ XQuery 1.0 スクリプト拡張
- ^ EXPathコミュニティグループ
- ^ 包装システム
- ^ ファイルモジュール
- ^ バイナリモジュール
- ^ Webアプリケーション
- ^ 「ポータブル XQuery アプリケーションの標準」 。2013年12 月 12 日閲覧。
- ^ 「RESTXQ 1.0: XQuery 用の RESTful アノテーション」。
- 一部は書籍「XML Hacks」(O'Reilly Media)および「XQuery」(O'Reilly Media)から許可を得て借用しました。
- 以前のバージョンはフランス語版Wikipediaの記事に基づいています
外部リンク
- W3C XML クエリ (XQuery)
