relational-style xml query @ sigmod-j 2008 dec

Post on 15-Jan-2015

20.772 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

http://www.xerial.org/

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

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

2

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

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

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

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

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

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

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

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

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

8

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

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!

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 種類の構造のゆらぎがある

(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から取り出す操作.

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

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構造をとる必要がある

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

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

FDを考慮したamoeba join

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

16

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から自動的に定まる

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

「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という構成も可能

Relation in XML

› AmoebaとFDで、構造が決まる

Relational-Style XML Query

› SQLを用いて、XMLからrelationを取り出せる

› 構造のゆらぎに強い

XMLデータの組み方に自由度が生まれる

Good-bye XPath!!

› 目的のXML構造は、パスで指定せずとも、テーブルスキーマとFDから自動的に決まる

20

技術的な詳細は論文の方に› Relational-Style XML Query. Taro L. Saito,

Shinichi Morishita. SIGMOD 2008.

RDBMSと同じ枠組みで実装できる› 問い合わせ代数・クエリの最適化など

データベースの統合にも活用できる

XMLデータのスキーマ変更が容易に› RDBMSのスキーマ拡張とほぼ同じ

Relationalデータに、XMLを使ったannotationを付加しやすくなる

…などなど

21

22

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

Think in Relational Style!!!

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

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

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

Relational Styleで

考えれば怖くない!!

実は「SQLでいける」

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

23

OR (Object-Relational) マッピング

› Object-XMLマッピングのサブセット

› プログラム言語のクラス定義から、スキーマ定義を抽出

Javaなどのリフレクション機能を用いると全自動

› オブジェクトデータをXMLや、RDBに出力

AmoebaとFDさえ満たしていれば、どのようなXML構造で出力してもOK

› XML・RDBデータを読み込んで、オブジェクトを生成

SAX, DOMでのプログラミングが一切不要になる

他の木構造データにも使える

› JSON, YAMLなども扱える

› CSVなどテーブル形式のデータでも構わない

24

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)

Xerial (エクセリアル) Project

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

› http://www.xerial.org/

Relational-Style XML Query

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

Apache License Version 2.0

› Javaによる実装

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

26

top related