JSR 225の最初のパブリックレビュー(source)草案であるXquery API for Javaが検討のために提示された。Oracleが主導のその仕様は、JavaでのXQueryの実装に対して、標準的なプログラミングアクセスを提供することが目的である。XQJは一般的なXQueryデータアクセスフレームワークで、XQueryの色々異なる実装に対して同じインターフェイスを提供する。
W3C XQuery(サイト・英語)はXML用のクエリー言語である。WikipediaではXQueryの機能を、「XML文書やリレーショナルデータベースやオフィス文書のようにXMLと見なすことが出来る他のデータソースからデータを取り出したり、操作したりする方法を提供することだ」と定義している。XQueryはXPathのシンタックスを使用して、XML文書の特定部分を指し示す(Addressing)ことが出来る。XQueryに求められている言語シンタックスの条件(source)の一つは、読み書きするのが楽なクエリー言語であることである。現時点でXQuery言語は、人が読みやすいシンタックスとXMLベースのシンタックスの両方を兼ね備えている。XQueryのXMLベースのシンタックスは、XQueryX 1.0で利用出来る。
仕様によると、Javaにおける基本的なXQJの書き方は以下のようになる。
...
// establish a connection to the XQuery engine
XQConnection conn = xqds.getConnection();
// create an expression object that is later used
// to execute an XQuery expression
XQExpression expr = conn.createExpression();
// the XQuery expression to be executed
String es = "for $n in fn:doc('catalog.xml')//item " +
"return fn:data($n/name)";
// execute the XQuery expression
XQResultSequence result = expr.executeQuery(es);
// process the result (sequence) iteratively
while (result.next()) {
// retrieve the current item of the sequence as a String
String str = result.getAtomicValue();
System.out.println("Product name: " + str);
}
// free all resources allocated for the result
result.close();
// free all resources allocated for the expression
expr.close();
// free all resources allocated for the connection
conn.close();
...
XQJの仕様がOracleのJim Meltonによって率いられている間、XQJのJCPエキスパートグループは、Jason Hunter(サイト・英語)、DataDirect(サイト・英語)、BEA Systems(サイト・英語)その他を含むメンバーを巻き込んでいる。またJCPの外にいる各製品のリーダーは、XQJの仕様に従い、アイデアを提供し、そして仕様に適合するように自分達の製品を改善している。Saxon(サイト・英語)を開発し、XPath 2.0 Programmer's Reference(source)の著者であるMichael Kay(ブログ・英語)は以下のような考えを述べている(source)。
それは約1年ぶりの新しいバージョンのリリースです。そしてその仕様は絶対秘密の条件の下で開発されています。従って秘密裏に何が行われているのかを見たいという興味が起こりました。私はあまり期待していませんでした。何故なら前の草案の私のコメントのほとんどが丁寧に拒絶されたからです。しかも私がそれらを提出した約8ヶ月後に、オープンな議論もなくです。案の定、彼らは小さい事の多くをきれいに片付けたが、全体の設計はあまり変わりませんでした。(互換性がないので、ほとんどのアプリケーションは微調整の必要があります。書き直しの必要はないけど、あちこちで修正が必要だということです。)
それは未だにクライアントサーバー、コネクション型モデルに断固として基づいており、アプリケーションはデータベースと異なるマシンの上で動いています。(それって80年代だよ!)... プリペアードエクスプレションは、スレッドセーフではありません。エクスプレションをコンパイルして、マルチスレッドで同時に実行することは出来ません。
いいところは何かあるんですか? 良いところはかなり沢山あります。XPathの値(19の基本データ型)は、Javaの等価なオブジェクトへ合理的にマッピングされています。それはJAXPよりも遥かによくマッピングされています。またこのバージョンは、全てのXPathタイプに関するJava側からの呼び出しに応えることが出来ます...
依然として私はXQueryの方がJAXPよりは良いと思っています。 ...
W3CのXQuery仕様と8つの関連した仕様(XSLT2.0(サイト・英語)及びXPath2.0(サイト・英語)を含む)は、2006年6月8日にW3Cへ提出された。提出した多くの仕様は2007年の1月23日に更新された。業界は、既に自身の製品にXQueryを入れ始めた。またJSR 170/Java コンテンツ リポジトリでさえ、XQueryを自身の標準クエリーメカニズムとして使用している。InfoQはXQuery仕様、XQJ仕様、及びそれらの実装の開発をこれからも追跡していく。
原文はこちらです:http://www.infoq.com/news/2007/07/xquery-review
(原文は2007年7月3日にリリースされました)