標準化目前:注目のXML問い合わせ言語
XQuery 〜後編
戌亥稔
ビーコンIT
2002/4/24
SQLとXQueryはどう違う? |
リレーショナルデータベースは和、共通、差、射影、選択、直積、結合、割算の8つの集合演算から成り立っています。ここではその中からXQueryにかかわる選択、射影、直積、結合の4つの演算について説明します。
■リレーショナルモデルの演算とは
まずリレーショナルモデル(ここではSQL)における演算の説明をしておきましょう。リレーショナルモデルに詳しい方は、次のXQueryの演算のところまで読み飛ばしていただいて構いません。
図1 主なリレーショナルモデルの演算(クリックで拡大します) |
(1) 射影(Projection)
テーブルから必要なカラムだけを取り出すことを射影(Projection)と呼びます。SQLでは「SELECT [カラム名1],[カラム名2] … FROM テーブル名」のように、SELECT文中のカラム名のリストで表すことができます。
(2) 選択(Selection又はRestriction)
テーブルから必要なレコードだけを抜き出すことを選択(SelectionまたはRestriction)と呼びます。SQLでは「SELECT * FROM … WHERE [条件式]」の、WHERE節以降に記述する条件式により決定されます。図1の右上では「SELECT * FROM Membertable WHERE Start >="2002/2/1"」の実行結果を示しています。
(3) 直積(Cartesian Product)
図1の下の部分のように、2つの表から、あり得るすべての組み合わせを作ることを直積(Cartesian Product)と呼びます。SQLでは「SELECT * FROM ProjectTable, Member Table」と、FROM節に2つ以上のテーブルを記述することで直積を作れます。直積はまた、同じテーブル名から作ることも可能です(例:SELECT * FROM MemberTable, MemberTable)。
(4) 結合(Join)
2つ(もしくはそれ以上)の表から関連する情報を使って1つの表を作成することです。結合(Join)は図2のように直積と選択の2つのオペレーションの組み合わせで行います。SQLにおいては「SELECT * FROM ProjectTable, MemberTable WHERE ProjectTable.Pcode = MemberTable.Pcode」と、FROM節とWHERE節の組み合わせで作成することが可能です。
図2 リレーショナルモデルによる結合を示した |
■XQueryの演算
XQueryの演算についてはW3Cの「XQuery 1.0 Formal Semantics」で定義されています。ただし、現時点ではXQuery 1.0: An XML Query LanguageとXQuery 1.0 Formal Semanticsは完全には整合性が取られていないので、最新の情報として「XQuery 1.0 Formal Semantics 」を参照してください。
(1) 射影(Projection)
リレーショナルと同様に射影が定義されています。XQueryにおける射影とは、Path表現式により実装されています。例えば次の問い合わせは、projects.xmlから、メンバーに関する情報だけを射影することができます。リレーショナルの場合はカラム名のリストという形で、1項目ずつ指定をしますが、XQueryの場合はノードリストで指定をします。故にXMLの階層構造に対して、指定されたノード以下(forest:フォレスト)の木構造を、射影として作成します。
document("data\projects.xml")//member |
1つのエレメントを射影したい場合は末端のエレメント名を指定しなければなりません。
document("data\projects.xml")//member/name |
(2) 選択(Selection)
XQueryにおける選択は、Path表現式のフィルタ機能またはFLWR表現式のwhere句によって行われます。Projects.xmlに対して2002年2月1日以降に始まったプロジェクトを選択したい場合、Path表現式の場合は次のように記述できます。
for $p in document("data\projects.xml")//project[@start>="2002/02/01"] |
一方、FLWR表現式のwhere句で選択をする場合は、次のようになります。
for $p in document("data\projects.xml")//project |
どちらの問い合わせも同様の結果をもたらします。
(3) 繰り返し(Iteration)
リレーショナルの場合は1つの項目の中に複数の値を持つことを許しません。一方XML文書では要素の繰り返しを持つことができるため、XQueryには繰返し(Iteration)という操作が存在します。次のように、繰り返しはfor句で表すことができます。
for $pn in document("data\projects.xml")//project/name |
この操作はある意味、XML文書を細かく分解することを目的としているように思われます。これにより、ある繰り返しを持つある要素の中の、子要素が繰り返しを持つ場合についても、for句をネストして処理することができます。
for $p in document("data\projects.xml")//project, |
<?xml version="1.0"?> |
5/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の演算 ・トランスフォーメーション ・次の課題は更新系の命令 |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|