26
斉藤 太郎 (Taro L. Saito) 東京大学 20081220ACM SIGMOD 日本支部第40回大会 http://www.xerial.org/

Relational-Style XML Query @ SIGMOD-J 2008 Dec

Embed Size (px)

DESCRIPTION

Relational-Style XML Query(フラットなSQLを用いて、複雑な木構造を持ったXMLを検索する方法)ACM SIGMOD日本支部大会での発表スライド

Citation preview

Page 1: Relational-Style XML Query @ SIGMOD-J 2008 Dec

斉藤 太郎 (Taro L. Saito)東京大学

2008年12月20日ACM SIGMOD 日本支部第40回大会

http://www.xerial.org/

Page 2: Relational-Style XML Query @ SIGMOD-J 2008 Dec

はっきり言って、たいへんです。

› XMLを使うのにこんなに学ぶことがあるなんて

2

XMLのプロジェクトを始めることにした

我が社にとってXMLは重要だ。今までのテーブルと違って、まったく新しいデータ構造だからな

さあ みんなで SAX, DOM, XPATH, XQUERY, DTD, XML

SCHEMA, RELAX NGを勉強するんだ!

Page 3: Relational-Style XML Query @ SIGMOD-J 2008 Dec

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

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

テーブルから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

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

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

8

XPathは要らないんじゃない?

Page 9: Relational-Style XML Query @ SIGMOD-J 2008 Dec

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

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

(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

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

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

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

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

FDを考慮したamoeba join

› データサイズに比例した性能

16

Page 17: Relational-Style XML Query @ SIGMOD-J 2008 Dec

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

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

「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

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

技術的な詳細は論文の方に› 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

22

XML技術の深みにはまる前に…

Think in Relational Style!!!

XMLのプロジェクトを始めることにした

我が社にとってXMLは重要だ。でも、XMLと

いってもほとんどテーブルデータなんだ

Relational Styleで

考えれば怖くない!!

実は「SQLでいける」

よくよく見ると、XMLの中にテーブル構造(relationaldata)が埋め込まれている場合がほとんど

Page 23: Relational-Style XML Query @ SIGMOD-J 2008 Dec

23

Page 24: Relational-Style XML Query @ SIGMOD-J 2008 Dec

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

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

Xerial (エクセリアル) Project

› XML DBMSの実装、OR・OXマッピング関連のライブラリなど

› http://www.xerial.org/

Relational-Style XML Query

› 開発版をオープンソースで公開予定

Apache License Version 2.0

› Javaによる実装

MavenのCentral Repository経由で配布されます

26