Diary/2007/3/16
出典: Fukudat.com
Don Chamberlin's Talk at IBM Yamato Lab

Almaden Research Laboratory の Dr. Don Chamberlin がIBM大和研究所を訪問.
Dr. Chamberlin はIBM Fellow, ACM Fellow, IEEE Fellow で,SQL の設計者の一人であり,長年問い合わせ言語の研究・標準化に従事している.最近はW3CにおいてXQueryというXML文書に対する問い合わせ言語の定義に従事している.今年2007年1月23日に XQuery 1.0 のrecommendationが出されたばかりである.
今回,IBM大和のオーディトリアムで,XQueryの標準化について講演してくれた. 講演の概要というか見出しは以下の通り.
- XMLの起源とデータベースの起源
- データと文書の融合
- XML問い合わせ言語の誕生の経緯
- XQuery言語設計の原則
- 既存言語 XPath のおかしいところ
- 上手くやれた事,上手くやれなかった事
- XQueryのこれから
XQuery は2階建ての言語で,既存の言語であるXPathをベース(1階部分)に使用している. この構造は XSLT という言語も同様である. ちょうどXQuery 1.0 の策定と平行して,XSLT 次のバージョン(1.1)の策定も行われたそうである.
後で例を挙げるが,XPathにはおかしなところがたくさんあって,新しい言語をデザインしたいXQueryの側は,そのおかしなところを直したいのだが,XSLTの側は現在の仕様との互換性を重視したいので,さまざまな葛藤があったようだ.妥協の産物として,XPath 2.0では互換モードというのが用意されているらしい.
面白かったのは,XPath のおかしいところ(問題点)で,たとえば
person[bonus=100] person[bonus+0=100]
1行目は,person の下に値が 100 である bonus が1つでもある person のリストが返る. 2行目は何が返るか.数値に 0 を足しても何も起こらないから1行目と同じだと思うかもしれない. しかし,実際はそうではない. bonus はリストを返すので,リストに算術演算を施すと最初の要素が使われる.最初の bonus 要素に対して 0 を足し,その結果と100を比較するため,結果として2行目は,person の下の最初の bonus が 100 であるような person が返ることになる.
つづいて,次の例はどうだろう.
person[shoesize] person[shoesize+0]
最初の行は shoesize 要素が存在する person のリストが返る. 2行目はどうだろう.先ほどと同様,shoesize の最初の要素に対して 0 が足される.その結果は数値である.[n] は n番目の要素の意味だから,最初の靴のサイズ (shoesize) が 26 だったら,26番目の person が返されることとなる.
これはよく知られたことかもしれないが,比較にも問題がある.
"4"= "4.0" は偽 (文字列として比較される) "4">="4.0" は真 (数値として比較される) "4"<="4.0" は真(数値として比較される)
(A=B) と (A<=B かつ A>=B) は,XPath においては同値ではないのだ.
また,次の2つの XML文書片は,XPath においては等しくなる("=" が真を返す).
<book> <author>Mark Twein</author> <title>Huckleberry Finn</title> </book>
<book> <title>Mark Twein</title> <author>Huckleberry Finn</author> </book>
"=" は文字列要素を連結してその値を比較してしまうからである.
XPath 恐るべし.
