| 開発者 | Javaコミュニティプロセス |
|---|---|
| 安定版リリース | 1.0 / 2009年6月24日 |
| タイプ | データアクセスAPI |
| Webサイト | JSR 225: Java 用 XQuery API |

XQuery API for Java ( XQJ ) は、 W3C XQuery 1.0 仕様の共通Java APIを指します。
XQJ API を使用すると、Java プログラマーは、ベンダー ロックインを軽減または排除しながら、XMLデータ ソース ( XML データベースなど)に対してXQuery を実行できます。
XQJ API は、Java 開発者に XQuery データ モデルへのインターフェイスを提供します。[1]その設計は、クライアント/サーバー感覚のJDBC APIに似ており、サーバーベースのXML データベースに適していますが、クライアント側のXQueryプロセッサには適していません。ただし、「接続」部分は API 全体のごく一部です。XQJ API のユーザーは、Java値をXQuery式にバインドして、コード インジェクション攻撃を防ぐことができます。[2]また、複数のXQuery式をアトミック トランザクションの一部として実行することもできます。
歴史と実装
XQuery API for Javaは、Java Community ProcessでJSR 225として開発されました。Oracle 、[3] [4] [5] [6] IBM、[5] [6] BEA Systems、[7] Software AG、[8] Intel、Nokia、DataDirectなどの大手技術支援者がいました。[4]
XQuery API for Java仕様のバージョン1.0は、JavaDocs、リファレンス実装、および実装ベンダーが準拠しなければならない TCK(テクノロジー互換性キット)とともに、2009年6月24日にリリースされました[9] 。
XQJクラスはJavaパッケージに含まれています javax.xml.xquery
たとえば、関数、配列、マップなどのデータ モデルへの追加に Java バインディングを提供することにより、XQuery 3.0 または 3.1 をサポートする XQJ のバージョンを作成する (目に見える) アクティビティはありません。
機能性
XQJ では、複数の実装が存在し、同じアプリケーションで使用できます。
XQJ接続はXQuery式の作成と実行をサポートします。式は更新[10]が可能で、全文検索[11]も含まれる場合があります。XQJは次のいずれかのクラスを使用してXQuery式を表します。
XQExpression– 式は毎回 XQuery プロセッサに送信されます。XQPreparedExpression– 式はキャッシュされ、実行パスが事前に決定されるため、効率的に複数回実行できます。
XQuery式は、XQJではインターフェースを介して表現されるXDM [1]項目の結果シーケンスを返しますXQResultSequence。プログラマーは、を使用して結果シーケンス内のXQResultSequence個々のXDM [1]項目を調べることができます。シーケンス内の各項目には、ノード型( など)や、、またはなどのXDMアトミック型など、XDM [1]型情報が関連付けられています。XQJのXDM型情報は、インターフェースを介して取得できます。
element()document-node()xs:stringxs:integerxs:dateTimeXQItemType
アトミックXQuery項目は、やなどのメソッドを介してJavaプリミティブに簡単にキャストできます。また、XQuery項目とシーケンスは、 DOM、SAX、StAX、および汎用 IOおよびクラスにシリアル化できます。
XQItemAccessorgetByte()getFloat() Node ContentHandler XMLStreamReaderReaderInputStream
例
基本的な例
次の例は、 XML データベースへの接続を作成し、XQuery式を送信し、結果をJavaで処理する方法を示しています。すべての結果が処理されると、接続が閉じられ、それに関連付けられているすべてのリソースが解放されます。
// XML データベースへの新しい接続を作成します
XQConnection conn = vendorDataSource . getConnection ( "myUser" , "myPassword" );
XQExpression expr = conn.createExpression ( ) ; // 再利用可能なXQuery式オブジェクトを作成する
XQResultSequence result = expr . executeQuery ( "for $n in fn:collection('catalog')//item " + "return fn:data($n/name)" ); // XQuery 式を実行します
// 結果シーケンスを反復的に処理します
while ( result . next ()) { // シーケンス内の現在の項目を出力しますSystem . out . println ( "製品名: " + result . getItemAsString ( null )); }
// 接続によって作成されたすべてのリソースを解放します
。conn . close ();
外部変数に値をバインドする
次の例は、Java値をXQuery式の外部変数にバインドする方法を示しています。接続がconnすでに存在していると仮定します。
XQExpression expr = conn.createExpression ( ) ;
// 実行される XQuery 式
String es = "declare variable $x as xs:integer external;" + " for $n in fn:collection('catalog')//item" + " where $n/price <= $x" + " return fn:data($n/name)" ;
// 値 (21) を QName x
exprを使用して外部変数にバインドします。bindInt ( new QName ( "x" ), 21 , null );
// XQuery 式を実行し
ますXQResultSequence result = expr.executeQuery ( es ) ;
// 結果(シーケンス)を反復的に処理します
while ( result . next ()) { // 結果を処理します... }
デフォルトのデータ型マッピング
JavaとXQuery のデータ型間のマッピングは非常に柔軟ですが、XQJ 1.0 仕様には、ユーザーがデータ型を指定しない場合にデータ型をマッピングするデフォルトのマッピング ルールがあります。これらのマッピング ルールは、JAXBのマッピング ルールと非常によく似ています。
次の表は、 XQuery式でJava値を外部変数にバインドする場合のデフォルトのマッピング ルールを示しています。
既知の実装
ネイティブ XML データベース
以下は、XQuery API for Java 実装があることがわかっているネイティブ XML データベースのリストです。
リレーショナルデータベース
DataDirect は、 XQueryコードをSQLにオンザフライで変換し、 SQL 結果セットをXQJ でさらに処理できる形式に変換することで、リレーショナル データベース用のXQJアダプターを提供します。次に、既知の実装をいくつか示します。
- Oracle DB (XDB ではありません)
- IBM DB2 について
- マイクロソフトSQLサーバー
- シベース
- インフォミックス
- マイグレーション
- PostgreSQL
非データベース実装
以下は、XQuery API for Java インターフェイス (通常は、ファイルストア内の XML から解析され、DOM または同様のツリーとしてメモリに保持されているドキュメントに対するクエリを許可) を提供する非データベースXQueryプロセッサの一覧です。
- Saxon XSLT および XQuery プロセッサ
- ゾルバ[18]
- MXクエリ
- Oracle XQueryプロセッサ[19]
ライセンス
この仕様には、「Copyright © 2003, 2006 - 2009 Oracle. All rights reserved.」と記載されています。
仕様には、「仕様ライセンス」と「リファレンス実装ライセンス」という 2 つの個別のライセンスが含まれています。
仕様ライセンスでは、著作権表示を保持することを条件に、仕様の自由なコピーが許可されます。また、仕様全体を完全に実装し、インターフェイスを変更または拡張せず、互換性テストに合格することを条件に、仕様の実装を作成して配布するライセンスも付与されます。
この条項はいくつかの論争を引き起こしました。第一に、公開された仕様を実装するためにライセンスが必要であることは広く受け入れられていません(つまり、ライセンスがない場合、著作権法はこれを禁止します)。[20] [21]第二に、ライセンスは、拡張と変更を禁止しているため、オープンソースライセンス(オープンソースの定義を参照)としての基準を満たしていません。これにより、一部のオープンソース愛好家は、XQJ実装が本当にオープンソースであると考えられるかどうかに疑問を呈しています。
リファレンス実装のライセンスは、かなり従来的な BSD スタイルのオープンソース ライセンスです。
参考文献
- ^ abcd XQuery 1.0 および XPath 2.0 データ モデル (XDM)
- ^ Java変数のバインド
- ^ XML クエリ: コンテキスト内の XQuery、 XPath、SQL/XML - Jim Melton および Stephen Buxton。ISBN 978-1558607118
- ^ ab XQJ - XQuery Java API が完成、Marc Van Cappellen、Zhen Hua Liu、Jim Melton、Maxim Orgiyan 2012 年 7 月 28 日にWayback Machineにアーカイブ
- ^ ab IBM と Oracle が XQuery API for Java (XQJ) Java 仕様要求を提出。
- ^ ab XQuery API for Java (XQJ) の早期レビュー - Andrew Eisenberg、IBM、Jim Melton、Oracle 2012 年 7 月 28 日アーカイブ、Wayback Machineより
- ^ BEA ストリーミング XQuery プロセッサ
- ^ Tamino ネイティブ XML データベースの XQJ インターフェース 2013 年 5 月 30 日にWayback Machineにアーカイブ
- ^ JSR-000225 Java 用 XQuery API (最終リリース)
- ^ XQuery 更新機能
- ^ XQuery 全文
- ^ MarkLogic XQJ API
- ^ 存在する XQJ API
- ^ BaseX XQJ API
- ^ セドナ XQJ API
- ^ Oracle XML DB の XQJ サポート
- ^ Software AG - CentraSite XQJ インターフェースの操作
- ^ Zorba 2.5 は待望の XQJ バインディングを搭載して出荷されます (2012 年 6 月 14 日)
- ^ Oracle XML Developer's Kit (XDK) は、Java アプリケーションで使用するためのスタンドアロンの XQuery 1.0 プロセッサを提供します。
- ^ 「オープンスタンダード」(PDF) 。 2023年9月7日閲覧。
- ^ 「Groklaw - Oracle v. Google - API仕様に関する著作権問題を理解する」www.groklaw.net。2012年5月5日時点のオリジナルよりアーカイブ。
外部リンク
- XQJ の Javadoc
- XQJ チュートリアル
- Java から XQuery への橋渡し、Charles Foster。XML Prague 2012 (Prezi プレゼンテーション)
- XQuery の Java 統合、Hans-Jürgen Rennau。バリセージ 2010
- XQJ を使用した Orbeon Forms
- Spring Integration XQuery サポート
- XQS: Scala 用の XQuery (XQJ の上に構築)
- IntelliJ XQuery サポート プラグイン
