Relational-Style XML Query @ SIGMOD-J 2008 Dec.
-
Upload
taro-l-saito -
Category
Technology
-
view
20.772 -
download
1
description
Transcript of Relational-Style XML Query @ SIGMOD-J 2008 Dec.
![Page 1: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/1.jpg)
斉藤 太郎 (Taro L. Saito)東京大学
2008年12月20日ACM SIGMOD 日本支部第40回大会
http://www.xerial.org/
![Page 2: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/2.jpg)
はっきり言って、たいへんです。
› XMLを使うのにこんなに学ぶことがあるなんて
2
XMLのプロジェクトを始めることにした
我が社にとってXMLは重要だ。今までのテーブルと違って、まったく新しいデータ構造だからな
さあ みんなで SAX, DOM, XPATH, XQUERY, DTD, XML
SCHEMA, RELAX NGを勉強するんだ!
![Page 3: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/3.jpg)
XMLのいいところ
› テキスト(簡単に扱える)
› XMLの方が直観的なデータ構造に近い
Company Employee Office
1 e1 NY
1 e2 NY
3XML Data
Relational Data
(テーブルデータ)
<Company value=“1”>
<Emp value=“e1”>
<Office>NY</Office>
</Emp>
<Emp value=“e2”>
<Office>NY</Office>
</Emp>
</Company>
Co
Emp Emp
Office Office
e1 e2
NY NY
![Page 4: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/4.jpg)
XMLに変換されたテーブルデータを取り出したい
例題:テーブルの一行 (Co, Emp, Office) をXML
から取り出す
› 例えば、XPath(経路を指定して検索する方法)では/Co/Emp/Office と書く
4
Co Emp Office
1 e1 NY
1 e2 NY
XML Data
Relational Data
Co
Emp Emp
Office Office
e1 e2
NY NY
![Page 5: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/5.jpg)
テーブルからXMLへの変換の仕方は、一通りではない
5
Relational Data
Co Emp Office
1 e1 NY
1 e2 NY
Co
Emp Emp
Office Office
e1 e2
NY NY
Office
Co Emp Emp
NY
e1 e2
Office
Emp Emp
Co
e1 e2
NY
![Page 6: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/6.jpg)
XML構造全体を把握していないと、構造のゆらぎのため、正しい経路を指定できない› データベース設計者と利用者の意思疎通が必要
不可欠
6
/Office[Co]/Emp/Co/Emp[Office]/Co/Office/Emp
[X] : 枝分かれ
Office
Co Emp Emp
NY
e1 e2
Co
Emp Emp
Office Office
e1 e2
NY NY
Office
Emp Emp
Co
e1 e2
NY
![Page 7: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/7.jpg)
Office
Emp Emp
Co
e1 e2
NY
Co
Emp Emp
Office Office
e1 e2
NY NY
Office
Co Emp Emp
NY
e1 e2
Co Emp Office
1 e1 NY
1 e2 NY
鍵となる考え方
› Relation(行データ)は、XMLに埋め込まれているだけ
7
Relational Data
![Page 8: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/8.jpg)
8
XPathは要らないんじゃない?
![Page 9: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/9.jpg)
Office
Co Emp Emp
NY
e1 e2
Co
Emp Emp
Office Office
e1 e2
NY NY
Office
Emp Emp
Co
e1 e2
NY
Co Emp Office
1 e1 NY
1 e2 NY
XMLからrelation(テーブル)を取り出す手法› 検索にはSQL文を使う
SELECT Co, Emp, Office from (XML Data)
9
Result
設計者がどんなXML構造を使っていても、SQL文は影響を受けない
Input XML Data
SQL over XML!
![Page 10: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/10.jpg)
SQL文 SELECT A, B, C をXMLの構造を検索する問い合わせに変換する
› (A, B, C)のXML表現では、様々な構造のゆらぎが生じ得る
10
B
A C
A
B
C
CA
B C A B
B
C
A
…..
一般に、N個のノードには NN-1 種類の構造のゆらぎがある
![Page 11: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/11.jpg)
(A, B, C) が amoeba (アメーバ)構造 A, B, Cのうち、どれか一つが他の親ノード(祖先も含む)になっている
11
B
A C
A
B
C
CA
B C A B
B
C
A
…..
Amoeba joinは、すべてのamoeba構造をXMLから取り出す操作.
![Page 12: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/12.jpg)
Amoebaではあるが、relation(行データ)にはならない構造がある
› なぜ、下図のamoebaがrelationにならないのか?
それは、XMLの構造の中に、functional
dependencies (FD) が暗黙に想定されているから
12
Office
Emp
Company
Emp
Office
Emp EmpER-diagram (Data Model)
company
office
employee
1
M
1
N
![Page 13: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/13.jpg)
13
Office
Emp
Company
Emp
Office
Emp EmpER-diagram (Data Model)
amoebaに
なっていない!
FD: X -> Y (ノードXからユニークな(たった1つの)ノードYが見つけられる)
› employee-> office (各employee は特定のofficeに所属している)
› office -> company (各office は、ある会社に属している)
company
office
employee
1
M
1
N
Relation in XML では、個々のFDが、それぞれamoeba構造をとる必要がある
![Page 14: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/14.jpg)
company に、M 個所のoffice、またそれぞれのoffice
にN人のemployeeがいるとすると…
(company, office, employee) の組み合わせの数:
› M = 100, N = 5 のとき 100 x (100 x 5) = 50,000
一方、正しい組み合わせの数は M * N = 500
14
Office
Emp Emp
Company
Emp
Office
Emp Emp Emp
Office
Emp Emp Emp
company
office
employee
1
M
1
N
![Page 15: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/15.jpg)
15
Office
Emp Emp
Company
Emp
Office
Emp Emp Emp
Office
Emp Emp Emp
FD: Emp -> Office, Office -> Company
ボトムアップにamoebaを組み立てていく
1. Amoeba Join (Employee, Office)
2. Amoeba Join (Office, Company)
FDを考慮すると、関係のない構造をはじくことができる
company
office
employee
1
M
1
N
![Page 16: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/16.jpg)
FDを考慮したamoeba join
› データサイズに比例した性能
16
![Page 17: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/17.jpg)
SQLからXMLクエリへ自動変換› SELECT Co, Office, Emp
FD: Emp -> Office, Office -> Co
Office
Co Emp
Co
Office
Emp
Emp
Co Office
Office
Emp
Co
…..Co
Office Emp
17
XMLクエリは、Relation(テーブル構造)とFDから自動的に定まる
![Page 18: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/18.jpg)
1対多 (one-to-many) と1対1 (one-to-one)
› 例:FD、 Emp -> Office は、以下のような関係に対応:
個々のemployeeは、あるofficeに属している
逆に考えて、officeには、複数の employeeがいる (1対多)
1対1、1対多の関係(FD)を見つけるには、
› XMLデータ中から親子関係にある組の出現頻度を数える
› あるいは、ERダイアグラム・UML(データモデル)から直接抽出
18
Office
Emp
Company
Emp
Office
Emp Emp
company
office
employee
1
M
1
N
![Page 19: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/19.jpg)
「XMLは木構造」という発想から抜け出す› XML := Relation + Annotation
ステップ› 1. XMLデータからRelation(行データ)を見つける
› 2. 1対多のFDを見つける
› 3. SQLで問い合わせ文を書く SELECT Co, Emp, Office
19
company
employee
employeeoffice
office
c1
NY
NY
e2
e1
absent
annotation
備考:
アノテーションをクエリに含めることもできる
一部はXMLのまま、その他はrelationという構成も可能
![Page 20: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/20.jpg)
Relation in XML
› AmoebaとFDで、構造が決まる
Relational-Style XML Query
› SQLを用いて、XMLからrelationを取り出せる
› 構造のゆらぎに強い
XMLデータの組み方に自由度が生まれる
Good-bye XPath!!
› 目的のXML構造は、パスで指定せずとも、テーブルスキーマとFDから自動的に決まる
20
![Page 21: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/21.jpg)
技術的な詳細は論文の方に› Relational-Style XML Query. Taro L. Saito,
Shinichi Morishita. SIGMOD 2008.
RDBMSと同じ枠組みで実装できる› 問い合わせ代数・クエリの最適化など
データベースの統合にも活用できる
XMLデータのスキーマ変更が容易に› RDBMSのスキーマ拡張とほぼ同じ
Relationalデータに、XMLを使ったannotationを付加しやすくなる
…などなど
21
![Page 22: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/22.jpg)
22
XML技術の深みにはまる前に…
Think in Relational Style!!!
XMLのプロジェクトを始めることにした
我が社にとってXMLは重要だ。でも、XMLと
いってもほとんどテーブルデータなんだ
Relational Styleで
考えれば怖くない!!
実は「SQLでいける」
よくよく見ると、XMLの中にテーブル構造(relationaldata)が埋め込まれている場合がほとんど
![Page 23: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/23.jpg)
23
![Page 24: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/24.jpg)
OR (Object-Relational) マッピング
› Object-XMLマッピングのサブセット
› プログラム言語のクラス定義から、スキーマ定義を抽出
Javaなどのリフレクション機能を用いると全自動
› オブジェクトデータをXMLや、RDBに出力
AmoebaとFDさえ満たしていれば、どのようなXML構造で出力してもOK
› XML・RDBデータを読み込んで、オブジェクトを生成
SAX, DOMでのプログラミングが一切不要になる
他の木構造データにも使える
› JSON, YAMLなども扱える
› CSVなどテーブル形式のデータでも構わない
24
![Page 25: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/25.jpg)
Class定義からrelation & FDを抽出
› Relation: (id, start, end , name)
› FD: gene -> id, start, end, name
› XML からList<Gene>を取りだす
25
<data>
<gene id=“1”>
<start>100</start>
<end>3000</end>
<name>A</name>
</gene>
<gene id=“2”>
<start>3500</start>
<end>7000</end>
</gene>
</data>
class Gene {private int id;private int start;private int end;private String name;
public Gene(){}
public void setId(int id) { this.id = id; }public void setName(String name) { this.name = name; }// followed by other setters ….
}
Class Definition (Java)
![Page 26: Relational-Style XML Query @ SIGMOD-J 2008 Dec.](https://reader033.fdocuments.net/reader033/viewer/2022042813/54b74bec4a7959ef448b462f/html5/thumbnails/26.jpg)
Xerial (エクセリアル) Project
› XML DBMSの実装、OR・OXマッピング関連のライブラリなど
› http://www.xerial.org/
Relational-Style XML Query
› 開発版をオープンソースで公開予定
Apache License Version 2.0
› Javaによる実装
MavenのCentral Repository経由で配布されます
26