Diary/2007/3/16

出典: Fukudat.com

< Diary | 2007 | 3

Don Chamberlin's Talk at IBM Yamato Lab

2003-Don_Chamberlin.gif

Almaden Research LaboratoryDr. Don ChamberlinIBM大和研究所を訪問.

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 恐るべし.