標準化目前:注目のXML問い合わせ言語
XQuery
 〜前編

 

XQuery以前に提案された問い合わせ言語

XML-QL

 XML-QLは半構造型データを扱う問い合わせ言語として開発されました。XML-QLはXMLの特徴であるユーザー定義可能なタグや入れ子型要素を扱うことができる宣言的問い合わせ言語です。以下にXML-QLの例を示します。

WHERE <book>
        <publisher>オーム社</publisher>
        <author> $a </author>
      </book> IN "www.beacon-it.co.jp/xml-ql/book.xml"
CONSTRUCT <result> <author>$a</author> </result>

 この問い合わせではWHERE節で<book>を含んだ文書(www.beacon-it.co.jp/xml-ql/book.xml)に対して処理が行われることを宣言しています。また、<book>と<publisher>が親子関係を示しており、<publisher>オーム社</publisher>によりドキュメント<book>の子エレメントの<publisher>が「オーム社」とマッチすることを示し、<author>$a</author>でそのときの<author>のエレメントを「$a」にバインドすることを表します。そしてバインドされた$aはCONSTRUCT節で新しいXMLの文書を組み立てる際に使用することができます。これによりオーム社で出版したことのある執筆者の一覧を抽出することができます。

 XML-QLの特徴は、XML文書からデータを抽出し、変数へのバインドとCONSTRUCT節により、まったく新しいXML文書を組み立てることができる点にあります。また、2つ以上のXML文書をジョインすることも可能です。リレーショナル型のデータを扱っている人には、これはごく自然な考え方です。SQLでは従業員テーブル、部門テーブル、部門構成員テーブルから部門別平均年齢の表を作り出すことができます。XMLの問い合わせ言語でも同様の処理が要求されることがあります。後述のXQLと違い、XML-QLは従来のデータベースクエリに近い考え方にXMLの階層型の考えを加えたものであるといえるでしょう。

XQL

 XQL(XML Query Language)は1998年にW3C XSLワーキンググループにXSLの拡張として提出されました。XMLのデータモデルはリレーショナルのデータモデルとは違い、階層型のデータモデルであることはすでに説明しました。リレーショナルでは、テーブルと呼ばれる2次元の表でデータを表し、行とケタで個々のデータを参照することができます。XMLは階層型のデータモデルなので、そのパターンマッチの構文はリレーショナルのそれとはまったく違います。

 XQLはXSLのパターンマッチの構文を拡張して作られました 。XQLはまた、構文が短くて読みやすくシンプルであることをコンセプトにデザインされています。例えばbook/authorは<book>要素の子要素である<author>を見つけます。“/”(スラッシュ)は要素の親子関係を表します。“/”はまたルートエレメントを表す場合にも使います(例:/books/book/author)。“//”は要素内のどこにあってもマッチします。例えばbib//authorはbib要素の下の階層のどこかにあるauthor要素を探し出します。

 XQLは前述のXML-QLと違い、まったく新しい構造の文書を作ることはできません。しかし、XQLの結果はオリジナル文書(入力の文書)の順番、階層、同一性を守ります。XQLによってもたらされた結果は要素の集まりとして返されますが、入力のドキュメントと同じ順番で返され、データが繰り返されることはありません。故に、XML-QLのようにグルーピングが失われた結果が返されることはありません。

 このように、XQLはXSLを拡張して作られ、文書型の特徴(前述のカルテなど)を持ったXML文書を扱うことを得意とした問い合わせ言語です。XQLの多くの部分はXPath 1.0の中でも記述されており、XPathの標準化にも貢献しています。

XML問い合わせ言語として必要な機能

 このようにXQLとXML-QLはそれぞれ特徴を持っており、しかも両方の機能はXMLを扱ううえで非常に重要であることが分かります。W3CのXML Query Working Groupでは、XMLの問い合わせ言語として必要な項目を「XML Query Requirements」(ワーキングドラフト)として2000年6月10日に提出しています。

 また、XMLの問い合わせ言語として必要な機能を例も含めて表したものが、「XML Query Use Cases」(ワーキングドラフト)としてW3CのQueryワーキンググループから提出されています。XMLの問い合わせ言語の特徴が分かりやすく説明されているので、以下にその概要をまとめました。

1.Use Case “TREE”
XMLが持つ情報の中で最も重要なのが、階層の保持です。XMLは非常に柔軟にできています。要素は省略したり、要素とテキストを混在させたりすることができます。XMLの問い合わせ言語としては、問い合わせを発行した結果のXML文書にはオリジナルのXML文書が持っている階層の情報(親子関係やネストの情報)が保持される必要があります。

2.Use Case “SEQ”
伝統的なデータベースシステムにおいて、シーケンス(順番)は必要ありませんでしたが、構造化文書では大きな意味を持ちます。前述のカルテの例がそれに当たります。

3.Use Case “R”
XMLの問い合わせ言語として、リレーショナルデータベースで管理している情報にアクセスすることも重要になってきます。このUse Caseではリレーショナルデータへのアクセス(ジョインなど)について説明しています。

4.Use Case “SGML”
1992年のSGMLの会議で作成された問い合わせを、XMLに翻訳しています。文書から特定のパラグラフを抜き出したり、タイトルの一覧を作成したりといった文書型のデータに対しての問い合わせが記述されています。

5.Use Case “TEXT”
全文テキスト検索について記述されています。ワードをベースとした検索の例などもここに記述されています。

6.Use Case “NS”
名前空間について説明されています。問い合わせ言語において名前空間をどのように利用すべきか、例が示されています。

7.Use Case “PARTS”
再帰的なXMLの構造を持った文書について記述されています。フラットなデータ構造から、ツリー型の部品展開表の作成について例が示されています。

8.Use Case “REF”
参照(Reference)について記述されています。あるエレメントがほかのエレメントを参照している場合の問い合わせについて例が示されています。

9.Use Case “FNPARM”
関数の定義と呼び出しについて記述されています。エレメントのタイプについて関数のパラメータや戻り値にどのように影響するかも例が示されています。

 上記のすべてのケースがXQuery 1.0で実現されているわけではありませんが、XMLの特徴を見るには非常に重要であり、また、問い合わせ言語の実装の1つの指標となります。

QuiltとXQuery

 前述のXML-QLおよびXQLは、上に挙げた9つのUse Caseのすべてを機能的に備えることができるようなつくりにはなっていませんでした。そこで2000年3月、米IBMのDon Chamberlin、独ソフトウェア・エージーのJonathan Robie、仏国情報自動化研究所のDaniela Florescuの3人は、SQL、OQLと、XMLの問い合わせ言語の特徴を兼ね備えたXML問い合せ言語「Quilt」(キルト)を開発しました。現在のW3Cで議論されているXQueryはこのQuiltが基になってできています。

 次回は、いよいよXQueryについて解説します。

2/6

Index
注目のXML問合せ言語「XQuery」
  XML問い合わせ言語とデータモデル
・問い合せ言語の役割
・XML問い合わせ言語が求められる理由
・XML問い合わせ言語とデータモデル
・XMLの基本データモデルはツリー構造
XQuery以前に提案された問い合わせ言語
・XML-QL
・XQL
・XML問い合せ言語として必要な機能
・QuiltとXQuery
  2つの表現式、PathとFLWR
・表現式はシーケンスで表される
・Path表現式
・FLWR表現式
  FLWR表現式の詳細
・XQueryを試せるアプリケーション
・for句とlet句の違いは繰り返し
・Path表現式とFLWR表現式の違い
コラム:複数のXML文書をXMLデータベースでどう扱うか?
  SQLとXQueryはどう違う?
・リレーショナルモデルの演算とは
・XQueryの演算
  XQueryにおけるリレーショナルの演算
・リレーショナルモデルの演算とは
・XQueryの演算
・トランスフォーメーション
・次の課題は更新系の命令


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間