Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring...

8
づく XQuery せ学 システム †† †† ††† 大学 システム 305–8573 つく 1–1–1 †† 大学 330–8570 さいたま 307 ††† 大学 305–8573 つく 1–1–1 E-mail: [email protected], ††{amori,l99086}@sic.shibaura-it.ac.jp, †††[email protected] あらまし XML ,一 に,ユーザ テキストエディタ いて せを する.XLearner く異 るアプローチ XML あり,ユーザ づき XQuery を学 する. RDB り, データ ある XML を対 した い. XLearner プロトタイプシステム について する. キーワード XMLXQuery,学 システム, プロトタイプ Implementation of a Prototype System to Learn XQuery Queries Based on Example Operations Akira MATSUMOTO , Atsuyuki MORISHIMA †† , Akiyoshi NAKAMIZO †† , and Hiroyuki KITAGAWA ††† Doctoral Program in Sys. and Info. Eng., Univ. of Tsukuba, Tsukuba, Ibaraki, 305–8573 Japan †† Dept. of Info. Sci. and Eng., Shibaura Inst. of Tech., Saitama-City, Saitama, 330–8570 Japan ††† Institute of Info. Sci. and Elec., Univ. of Tsukuba, Tsukuba, Ibaraki, 305–8573 Japan E-mail: [email protected], ††{amori,l99086}@sic.shibaura-it.ac.jp, †††[email protected] Abstract Existing XML query languages are textual or graphical languages in which we can specify queries for XML manipulation. XLearner, a different kind of manipulation framework for XML, learns XQuery queries based on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data, in contrast to relational databases whose data structure is completely regular. The paper focuses on the implementation of a prototype system of XLearner. Key words XML, XQuery, learning systems, prototype implementation 1. はじめに これま XML を対 した 多く 案されてきた [4].これら に,ユーザ テキストエ ディタ いて せを する. これ く異 るアプローチ XML ある XLearner っている.XLearner ,サンプル XML に対するユーザ から,XQuery せを学 るシステム ある. XLearner プロトタイプシステ について る. XLearner プロトタイプシステム にあたって 2 意した.第 1 に,ユーザ XLearner ンタラクション らす うこ ある.第 2 に, XQuery におけるコスト うこ ある. ,まず XLearner し, にプロトタイ プシステム について する. 2. XLearner まず XLearner する. 1(a) DTD れる XML データに対する せを学 させたい する.こ データ における リスト している. book す.category book する す.各 book するか book ある category に,category つこ す.こ ,学 DEWS2003 8-A-01

Transcript of Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring...

Page 1: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

例示操作に基づくXQuery問合せ学習システムの実装

松本 明† 森嶋 厚行†† 中溝 昌佳†† 北川 博之†††

† 筑波大学 システム情報工学研究科 〒 305–8573 茨城県つくば市天王台 1–1–1†† 芝浦工業大学 工学部情報工学科 〒 330–8570 埼玉県さいたま市深作 307††† 筑波大学 電子・情報工学系 〒 305–8573 茨城県つくば市天王台 1–1–1

E-mail: †[email protected], ††{amori,l99086}@sic.shibaura-it.ac.jp,†††[email protected]

あらまし 既存の XML問合せ言語や操作系では,一般に,ユーザはテキストエディタや視覚的操作系を用いて問合

せを記述する.XLearnerは全く異なるアプローチの XML操作系であり,ユーザの例示操作に基づき XQuery問合せ

を学習する.完全に規則的な構造を持つ RDBとは異なり,半構造データの一種であるXMLを対象とした問合せの学

習は自明ではない.本稿では特に XLearnerプロトタイプシステムの実装について説明する.

キーワード XML,XQuery,学習システム, プロトタイプ実装

Implementation of a Prototype System to Learn XQuery Queries Based

on Example Operations

Akira MATSUMOTO†, Atsuyuki MORISHIMA††, Akiyoshi NAKAMIZO††, and Hiroyuki

KITAGAWA†††

† Doctoral Program in Sys. and Info. Eng., Univ. of Tsukuba, Tsukuba, Ibaraki, 305–8573 Japan†† Dept. of Info. Sci. and Eng., Shibaura Inst. of Tech., Saitama-City, Saitama, 330–8570 Japan

††† Institute of Info. Sci. and Elec., Univ. of Tsukuba, Tsukuba, Ibaraki, 305–8573 JapanE-mail: †[email protected], ††{amori,l99086}@sic.shibaura-it.ac.jp,

†††[email protected]

Abstract Existing XML query languages are textual or graphical languages in which we can specify queries for

XML manipulation. XLearner, a different kind of manipulation framework for XML, learns XQuery queries based

on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind

of semistructured data, in contrast to relational databases whose data structure is completely regular. The paper

focuses on the implementation of a prototype system of XLearner.

Key words XML, XQuery, learning systems, prototype implementation

1. は じ め に

これまでに XMLを対象とした問合せ言語や操作系が数多く

提案されてきた [4].これらでは一般に,ユーザはテキストエ

ディタや視覚的操作系を用いて問合せを記述する.我々はこれ

らとは全く異なるアプローチの XML操作系である XLearner

の研究開発を行なっている.XLearner は,サンプルの XML

要素に対するユーザの例示操作から,XQuery問合せを学習す

るシステムである.本稿では,XLearnerプロトタイプシステ

ムの実装について述べる.

XLearner プロトタイプシステムの開発にあたっては次の 2

点に留意した.第 1 に,ユーザと XLearner の間で必要なイ

ンタラクション数を減らす工夫を行なうことである.第 2 に,

XQueryの学習処理におけるコストの削減を行なうことである.

本稿では,まず XLearnerの概要を説明し,次にプロトタイ

プシステムの実装について記述する.

2. XLearnerまず XLearnerの利用例を説明する.図 1(a)の DTDで表さ

れる XMLデータに対する問合せを学習させたいとする.この

データは,本屋における本のリストと分野情報を表している.

bookは本を表す.categoryは bookが属する分野を表す.各

bookがどの分野に属するかは,bookの子要素である category

属性に,category要素への参照を持つことで表す.この時,学

DEWS2003 8-A-01

Page 2: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

result

category

cname name

*

*1

categories

category

@id name

*

1

booklist

book

@category title

*

1

bookstore1 1

11

(a) (b)

図 1 DTD

<result>{for $c in /bookstore/categories/categoryreturn <category> <cname>{$c/name}</cname>{ for $b in /bookstore/booklist/book where $b/@category = $c/@id return <name>{$b/title}</name> }</category>}</result>

図 2 XQuery 問合せ (document 関数と text 関数は省略)

XML

<result><category><cname> </cname><name> </name></category></result>

. . .

Template

...

<book @category="1"> <title> XMLBook </title></book>. . . <category><name> Computer </name>

Drag&Drop

XQuery

XQuery

<result><category><cname> Comtuter</cname><name> XMLBook</name></category><category>...</category></result>

XQuery

Template

<!ELEMENT result(category*)>

<!ELEMENT category (cname,name*)>

DTD

(1)

(2)

(3)(4)

(5)

図 3 XLearner による問合せ学習の流れ

<result>

<category>

<cname> </cname>

<name> </name>

</category>

</result>

XML. . .

<booklist><book category="1"><title>XMLBook</title></book> . . .</booklist><categories><category id="1"><name>Computer</name></category><category id="2"><name>Literature</name></category></categories>. . .

(a) (b)

図 4 XML ブラウザとテンプレート

習させたい XQuery問合せの例を図 2に示す.これは,各分野

毎に,分野の名前と本の名前を返す問合せである.

次にXLearnerの使い方を説明する (図 3).まず,結果として

欲しい XMLデータの DTD(図 1(b))をテンプレート生成器に

入力する.次に,ユーザは操作対象となる XML文書の中から,

いくつか要素もしくは値(XML ノードと総称する)を選び,

それらをテンプレートにドラッグアンドドロップ(以下 D&D)

し,欲しい XML問合せ結果の一部分を示す.テンプレートに

D&Dされた XMLノードを例示ノードと呼ぶ.

与えられた XML 問合せ結果の一部分を手がかりに,学習

エンジンは,ユーザが意図する問合せを学習するための質問

をユーザに対して行う.このように,システムが能動的に質問

を行ないながら学習を行なう枠組みを能動学習 [2] という.最

後に,システムは XQuery問合せを出力し,XQuery処理系に

渡す.

最初にあげた問合せ例の学習過程は次のようになる.まず,結

果の DTDをテンプレートに入力すると,XLearnerは図 4(b)

のテンプレートを表示する.ユーザはXMLブラウザ中のXML

の要素をいくつか選び,D&Dし,図 4のようにテンプレート

を埋める.矢印は D&D操作を表している.

N1:- return <result>N1.1</result>

N1.1:- for $c in /bookstore/categories/category return <category>N1.1.1 N1.1.2</category>N1.1.1:- for $cn in $c/name return <cname>$cn</cname>N1.1.2:- for $b in /bookstore/booklist/book, $n in $b/name

where some $bc in $b/@category satisfies (some $ci in $c/@id satisfies $bc=$ci) return <name>$n</name>

N1

N1.1

N1.1.1 N1.1.2

1

*

*

図 5 XQ-Tree 表現

次に XLearnerは,ユーザの意図した XQuery問合せを求め

るために,ユーザに対して質問を行なう.これらは,各例示

ノード eの extent(以下 EXTe)を決定するための質問である.

EXTe は,例示ノード eが与えられた文脈 (以下 contexte)に

おいて eが代表しているノードの集合である.ここで contexte

とは,EXTe より前に extentが決定された例示ノードの集合

である.例えば,“Computer”,“XMLBook”の順に extentが

決まるとすると,contextComputer は空であり,contextXMLBook は

{Computer}である.その結果,EXTComputerは全ての分野の名

前の値の集合となり,EXTXMLBook は,その文脈における,book

の集合 (すなわち,コンピュータ分野の本の集合)となる.

XLearnerが行なう質問には,Membership Query(MQ)

と Equivalence Query(EQ) がある.MQ では,XLearner

がある XML ノードを選び,そのノードが EXTe に含まれる

かどうかをユーザに質問する.画面上では,対象ノードの上で

「Yes」「No」のポップアップメニューが表示されるので,ユー

ザはそのノードが EXTe に含まれる場合は「Yes」を,含まれ

ない場合は「No」を選ぶ.EQは,XLearnerが生成した仮説

extent(以下, ˆEXTe) に関して, ˆEXTe = EXTe が成立する

かを質問する.画面上で, ˆEXTe であるノード群がハイライ

ト表示されるので,ユーザは, ˆEXTe = EXTe ならば「OK」

ボタンを,間違っている場合,反例を与える.反例には正の反

例 (∈ EXTe − ˆEXTe)と負の反例 (∈ ˆEXTe −EXTe)がある.

反例のノードの上で右クリックし,そのノードが正の反例なら

ば「Yes」を,負の反例ならば「No」を選ぶ.

3. XQ-Treeとテンプレート

3. 1 XQ-Tree

内部的には,XLearnerは XQuery問合せを直接学習するの

ではなく,XLearnerにおける XQuery問合せの内部表現であ

る XQ-Treeの学習を行う.XQ-Treeの各ノード nは Ni:-q(n)

の形式をしている.ここで,Ni はノード識別子であり,q(n)

は,問合せ断片(flwr 式 ([for exprf [where exprw]] return

exprr,ここで [. . .]は省略可)である.図 5は,図 2の問合せ

を表す XQ-Treeである.

XQuery問合せQが与えられた時,それに対応するXQ-Tree

tは次の手順で計算される:(1)let式を除去し,変数をそれに割

り当てられた式で置き換える. (2)全てのXMLノードを返す式

(例えば,$c/name)を,等価な flwr式(for $cn in $c/name

return $cn)に書き換える.これにより入れ子の flwr式がで

きる.(3) 以上で作成した flwr 式間の入れ子関係を木構造で

表す.

t 中のあるノード n に対して,cqt(n) を n の完全問合せと

呼ぶ.cqt(n) は qt(n) と {qt(m)|m ∈ dependst(n)} 中の問

Page 3: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

N1 <result>

N1.1 <category>

N1.1.1 <cname> N1.1.2 <name>

1

図 6 テンプレート

合せ断片から構成される.ここで,dependst(n) は,t にお

いて n が依存する可能性があるノードの集合である.完全

問合せ q(n) と {q(m)|m ∈ dependst(n)} 中の問合せ断片に関数 compose(q(m), q(m′)) を繰り返し適用することで求め

られる.ここで,compose(q(m), q(m′)) は q(m) 中で m′ を

参照するノード識別子を q(m′) で置き換えた問合せ断片を

返す関数である.例えば,図 5 の XQ-Tree を t1 とすると,

cqt1(N1.1.1) = compose(q(N1), compose(q(N1.1), q(N1.1.1)))

=“return (for $c in /bookstore/categories/category

return (for $cn in $c/name return $cn))”=“for $c in

/site/categories/category, $cn in $c/name return $cn”

である.このように,通常 cqt(n)は “for expr′f , exprf where

expr′w ∧ exprw return v” と記述することができる.ここで,

expr′f と expr′w は {q(n)|n ∈ depends(n)} 中に含まれる式である.

XQ-Tree中において,問合せ断片は let節を持たないため,

変数 vは常に for節または,some式によって定義される.vが

“for v in p” または “some v in p” で定義される時,“v in

p”を exprt(v)で表す.

3. 2 テンプレート

2 章で述べたように,XLearner は与えられた DTD に基づ

き,テンプレートを生成する.図 6 は図 1(b)の DTDから生

成されるテンプレートである.

テンプレートは木構造をしており,ノードは DTDの各要素

型に対して生成される.ある 2つのノードについて,DTD中の

対応する要素タイプが親子関係を持つならば,その 2ノードは

その間に辺を持つ.例えば,要素定義が A=(B,C)の時,ノー

ド nA は子ノードとして nB と nC を持ち,nA-nB 間,nA-nC

間に辺を持つ.

もし,あるノードとその親ノードが 1対 1の関係ならば,そ

れらをつないでいる辺は ‘1’でラベル付けされる.このラベル

は問合せの学習の際に利用する.

簡単のために以下の説明では,各ノードは ‘1’でラベル付け

された辺でつながった子供は最大一つしか持たず,かつ,ルー

トから葉へのいかなるパスでも ‘1’でラベル付けされた辺は連

続しては存在しないものとする (図 6のテンプレートはこの制

約を満たす).

4. 問合せ学習機構の概要

4. 1 問合せの学習

問合せの学習は,2つのステップから成る.

(ステップ 1)XQ-Tree スケルトンの作成: テンプレートと

D&Dで得られた例示ノードから,学習結果の XQ-Treeの基と

なる XQ-Treeスケルトンを生成する.図 7は図 1(b)の DTD

N1:- return <result>

N1.1:-return <category>N1.1.1 N1.1.2</>

N1.1.1:-return <cname>$cn</> N1.1.2:- return <name>$n</>

1

図 7 XQ-Tree スケルトン

と図 4の操作によって生成された XQ-Treeスケルトンである.

各ノード nは,q(n) = “return <elem>expr</>”の形式をし

ている.ここで,elem はタグ名であり,expr は子ノードへ

の参照を持つ.さらに,例示ノード e がドロップされた場所

が XQ-Treeノード nに対応する場所であったならば,q(n)の

exprは eに対応する変数名 ve を持つ(この例では$cnと$n).

(ステップ 2)各問合せ断片の学習: XQ-Tree スケルトンを走

査しながら,例示要素 eをドロップされた XQ-Treeノード ne

のそれぞれに対して,各問合せ断片 q(ne) = for exprf where

exprw return exprr の学習をしていく.実際に XLearner が

学習可能なクラスでは,これらの形式は限定されている.詳細

は 5章で説明する.特に,exprr は XQ-Treeスケルトンで与え

られた式そのものに限定されているので,実際に学習するのは,

exprf と exprw である.XQ-Tree の走査にあたっては,n の

前に必ず depends(n)中のノードの走査が行われるようにする.

4. 2 contextと extent

q(ne) の学習について述べる前に,2 章でふれた context と

extentを定義する.

context:contexte は,例示ノード e が与えられた時の文脈

を表している.これは,既に問合せの学習が行われたノード

にドロップされた例示ノードの集合として与えられる.例示

ノード eの contextを次のように定義する.まず,assignment

を (v, o) の組の集合とする.ここで,v は変数であり,o は

XML ノードである.この時,contexte は次のように記述で

きる.{(vei , ei)|nei ∈ depends(ne)} ここで ei はドロップさ

れた例示ノードである.例えば,“Computer”,“XMLBook”

の順に学習が行われるとすると,contextComputer = {}である.contextXMLBook={(vComputer,“Computer”)} であり,分野がコンピュータであるという文脈である.

extent:例示ノード e の extent EXTe は,例示ノード e が

与えられた文脈 (contexte) において e が代表しているノー

ドの集合を表している.EXTe の contexte を,contexte =

{(ve1 , e1), . . . , (vem , em)}とすると,extent EXTe は,cq(ne)

と contexte を用いて次のように定義される.EXTe = {|for expr′f , exprf where expr′w ∧ exprw∧ (ve1 is e1) ∧. . . ∧ (vem is em) return ve|}. ここで {|expr|} は expr の

問合せ結果に含まれる XML ノードの集合である.例えば,

contextComputer={}であるので,EXTComputerは全ての分野の集

合を表しており,contextXMLBook={(vComputer,“Computer”)} であるので,EXTXMLBook は分野がコンピュータであるという文脈

における book要素の集合(すなわち,コンピュータ分野に属

する全ての本の名前)を表している.

4. 3 学習の流れ

各問合せ断片 q(ne)の学習の基本的な流れは次のようになる.

Page 4: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

(1)XLearnerはEXTeを学習するためにMQを発行する.そし

てユーザからの答えと,{q(n)|n ∈ depends(ne)},contexte に

基づき,仮説 extent ˆEXTeを生成する. ˆEXTeは次のように表

される. ˆEXTe = {|for expr′f , ˆexprf where expr′w∧ ˆexprw∧(ve1 is e1), . . . , (vem is em) return ve|}. これは ˆexprf と

ˆexprwがそれぞれ,exprf と exprwの仮説である以外は,EXTe

と同等である.(2)XLearnerは EQを発行し, ˆEXTe = EXTe

であるか質問する.(3)もし, ˆEXTe = EXTe であれば終了す

る.このときの,学習結果は q(ne)=“for ˆexprf where ˆexprw

return ve”となる.そうでない場合には (1)に戻る.ただし,

ˆexprf と ˆexprw は, ˆEXTe |= EXTe を示す反例により修正さ

れる.

5. XQ-Treeの学習アルゴリズム

5. 1 準 備

Expr∗t (v)は v を計算するために必要なパス式の集合であり,

次のように定義する.

( 1) exprt(v) ∈ Expr∗t (v).

( 2) もし変数 w が存在し,“x in w/q”∈ Expr∗t (v) なら

ば,exprt(w) ∈ Expr∗t (v).

例えば,Expr∗t1($cn) = {“$c in /bookstore/categories/

category/”, “$cn in $c/name”}である.Expr∗t (v) 中の全ての式を連結したものを expr∗t (v) で表

す.例えば,expr∗t1($cn)=“$cn in /bookstore/categories/

category/name”である.

associated(v) を Expr∗(v) 中に現れる変数の集合とす

る.また,for 節で v を定義するノードを nv としたとき,

associatable(v) を nv の祖先ノード(nv 自身を含む)に現れ

る変数の集合とする.XQueryの変数のスコープから次の 2点

が保証される.(1)associated(v)⊂=associatable(v)である.(2)

もし,v′ /∈ associatable(v)ならば,q(nv)は v′ と v の関係を

特定できない.

5. 2 学習可能なクラス

ま ず 1-Learnable(ne) を 定 義 す る .直 感 的 に は ,

1-Learnable(ne) は q(ne) が,{q(n)|n ∈ depends(ne)} とcontexteが与えられたときに学習可能なある特定の形式を where

節の条件に持つ時に成立する.具体的には,1-Learnbale(n)

は,q(n) = “for v in p where exprw return v” が次の条件

を満たすときに成立する.

(1) expr∗(v) のパス式は document 関数から始まるパス正規

表現である.

(2) exprwは∧

v′∈(associatable(v)−associated(v))RS({v, v′})の

形式である.

ここで RS({v1, v2}) は True もしくは RS′({v1, v2}) である.RS′({v1, v2})は v1と v2の関係を表す次の式のいずれかである.

(Rel1) data(v1) = data(v2)

(Rel2) some w in v1/cp satisfies RS′({w, v2})(Rel3) some w in document()/cp satisfies RS′({v1, w})∧RS′({w, v2})ここで cpは child軸だけからなるパス式 (a/b/cなど)である.

1. XQTree learnXQTree(XQTree t) { 2. for each node n in t { // C^1(n) 3. // 4. if (n.VarInReturn()) { 5. n.query = learnQuery1(n); 6. } else { 7. if there exists C^1(n) { 8. collapse(n, C^1(n)); 9. n.query = learnQuery1(n);10. } else do nothing;11. }12. }13.}

図 8 XQT1∗+の学習アルゴリズム

この定義は where 節の条件が n で定義された変数 v と

v′ ∈ (associatable(n)− associated(n))との結合の関係でなけ

ればならないことを示している.2つの変数は間接的な関係を

持つことも可能である.(Rel2)と (Rel3)は w を用いた間接的

な関係のパターンである.ここで wを RS′({v1, v2})のリレーノードと呼ぶ.図 13は 2つのリレーノードを用いた$bと$cの

間の間接的な関連を表している.“some $bc in $b/@category

satisfies (some $ci in $c/@id satisfies ($bc=$ci))” で

ある.

次に 1-Learnable′(ne)を定義する.まず,nが ‘1’でラベル

付けされた辺でつながった子ノードを持つとき C1(n) と表現

する.また,collapse(n, n′)はノードを表し,その問合せ断片

q(collapse(n, n′))は関数 compose(q(n), q(n′))によって得られ

る問合せ断片となる.すると 1-Learnable′(ne) は次の2つの

条件を満たすときに成立する.

(A1) C1(ne) exists

⇒ 1-Learnable(collapse(ne, C1(ne)))

(A2) C1(ne) does not exist

⇒ q(ne) =return “nの子ノードのノード識別子”

XQ-Tree t中の全てのノード nが 1-Learnable(n)もしくは

1-Learnable′(n)を満たす XQ-Treeをクラス XQT1∗+と呼ぶ

ことにする.

5. 3 XQT1 +の学習アルゴリズム

XQT1∗+に属する問合せの学習アルゴリズムを図 8に示す.

図中の learnQuery1(n)は XQT1∗+の学習アルゴリズムを実

装している関数である.このアルゴリズムは,C1(n)のノード

を優先した重み付き深さ優先探索で XQ-Treeスケルトンの走

査を行いながら,learnQuery1(n)を用いて各問合せ断片を学

習する.

5. 3. 1 learnQuery1(n)

図 8 中の learnQuery1(n)(5 行目) は 1-Learnable(n) が成

立するときの q(n) を学習する関数である.説明に入る前に,

XLearnerにおける問合せ断片の標準形について説明する.次

のように求めることができる.まず各 exprf を expr∗(v)で置

き換える.expr∗(v)は,1-Learnable(n)の定義によって doc-

umentのルートから始まることが保証されている.次に,変数

間のパス共有条件を指定するために,expr∗(v)を拡張した表現

を用いる.具体的な例を挙げると,qt1(N1.1.1)は次のように

記述される.for $cn in /bookstore{$i1}/categories{$i2}/category{$i3}/name where {$i3 is $c} return $cn.こ

こ で “/bookstore{$i1}/categories{$i2}/category{$i3}

Page 5: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

LearnQuery1(ne)

P-Learner C-LearnerIHTe

p

c

for ve in pwhere creturn ve

^

^

^

^

MQ

EQ

図 9 q(ne) の学習のデータの流れ

/name”は,“$i1 in /bookstore, $i2 in $i1/categories,

$i3 in $i2/category,$cn in $i3/name” の省略形である.

この表現により,$cnはdocumentのルートから始まる expr∗(v)

で定義され,同じ category要素を共有しているという$cnと

$cの間のパス共有条件は条件$i3 is $cで指定される.一方,

図 5の本来の記述法では,パス共有条件は $iで始まるバイン

ディング式のパス表現 “$cn in $c/name”によって指定されて

いる.これにより,q(ne)は “for ve in p where c return ve”

の形式であり,pは documentのルートから始まるパス表現で

あると考えることができる.

我々は,where節の条件 cを述語の集合とし,cを cに含ま

れる述語の連言と見なす.もし,c⊃=c′ ならば,{|for v in p

where c return v|}は {|for v in p where c′ return v|} に含まれるという意味で,cは c′ より厳しいと呼ぶことにする.

learnQuery1(n) の概要:learnQuery1(n) では,q(ne) は

where 節に条件 c を持ち depends(ne) |= φ である.EXTe =

{|for expr′f , ve in p where expr′r ∧ c ∧ (ve1 is e1), . . . ,

(vem is em) return ve|}と表すことができる.EXTeが与えられたとき,PATHeを {|for ve in p return

ve|}とする.XQT1では,PATHeとEXTeの間にミスマッチが

生じる (図 11(a)).EXTeとPATHeの間にはEXTe⊂=PATHe

が常に成り立つ.q(ne)を学習するためには PATHe と EXTe

の両方が必要である.

図 9は learnQuery1(ne)と関連するモジュールとのデータ

の流れを示している.これにより q(ne) = for ve in p where

c return ve を計算する.P-Learnerは pを計算するための学

習アルゴリズムを実装している.また,ユーザとのやりとりを

IHTe(Interaction Histry Table)に記録する.IHTe は EXTe

を学習するために用いる.C-Learnerは cを計算する.

5. 3. 2 P-Learner

XML要素のパスを文字列と見なすと,パス正規表現を学習

することは,本質的にはパスの集合が表す言語を受理する有限

オートマトンを求めることに対応する.ある言語が与えられた

時,それを受理する最小の有限オートマトンを見つけることは

NP完全 [5]である.一方,能動学習を利用したAngluinのオー

トマトン導出アルゴリズム [1]を利用すれば,多項式時間で発見

することが可能である.XLearnerでは,Angluin のオートマ

トン導出アルゴリズムを利用して EXTe に関する MQと EQ

からパス式の学習を行う [6].

図 10は/bookstore/booklist/bookに対応するオートマト

ンの導出過程を表している.

5. 3. 3 Interaction Histry Table

IHTe(Node, Ans, P, C)は,XLearnerの質問とそれに対す

反例:

all

(a)

<bookstore><booklist><boook>

(b)

book

(c)

bookstore

booklist

book

(d)

otherall

allall

other

other

all allbookstore

booklist

book

(e)

other

other

other

other

all

all

<book><bookstore><booklist><boook>

仮説オートマトン:

図 10 オートマトン導出過程

PATH

EXTM#1

M#2

図 11 PATHe と EXTe のミスマッチ

るユーザの答えを記録するリレーションである.IHTe 中の各

タプル t に XLearner の質問に対するユーザの答え一つが記

録されている.属性 Node には XML ノードが格納されてい

る.属性 Ans には XLearner の質問に対する答えが格納され

ている.例えば,XMLノード mが MQとして質問されたと

き,その答えが Y であるとする.このとき,t.Node = m で

あり,t.Ans = Y である.IHTe には答えに対する理由も記録

する.もし,パス表現 pが t.Nodeを受理しないという理由で

t.Ans = N ならば,t.P = N となる.もし,t.Nodeが条件 c

を満たさないという理由で t.Ans = N ならば,t.C = N とな

る.もし,t.Ans = Y であれば,t.P と t.C のどちらも Y であ

る.IHTe はドロップされた例示ノード eが正の例であるとい

う記録 (e, Y, Y, Y )を常に含んでいる.

5. 3. 4 Extentの学習におけるミスマッチの問題

あるタグの並びを sとすると,P-Learnerは tags(path(m)) =

sであるようなXMLノードmを選び,ユーザにm ∈ PATHe

であるか質問する.ここで path(e) は XML インスタンスの

ルートから eまでの XMLノードの並びであり,tags(ep)は ep

にマッチするタグの並びである.P-Learnerはm ∈ EXTeであ

るかを質問するMQを発行していないが,ユーザはm ∈ EXTe

かどうかを質問されていると考えている.そのため,ユーザの

答えと P-Learner が p を学習するために必要としている答え

にはミスマッチが生じる図 11(a).ユーザの答えが Y の時に

は,m ∈ EXTe ⇒ m ∈ PATHe であるため問題ない.しか

し,もしユーザの答えが N であった場合には次の 2つの可能

性がある.

(Case M#1) m /∈ PATHe である.

(Case M#2) m ∈ PATHeであるが,c∧ (ve1 is e1)∧ . . .∧(vem is em)が間違っている.

ユーザの答えとして N が与えられたとき,XLearnerは 2つ

の Caseのうちどちらであるのか区別することができない.そ

こで,アルゴリズムはまず最初に Case M#1 であると仮定す

る.よって,答えが N の時にはタプル t = (m, N, N, null)が

IHTe に挿入される.ここで t.C = nullは,cに対しては何も

与えないことを意味する.仮定が間違っていることを発見した

時にはそのタプルを訂正し,その場所からやり直す [6].

Page 6: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

A = {1, ..., k}while (true) {

Let c = ∧i∈Axi.

Make an EQ with c.

If the answer of the EQ is “OK” (i.e., c = c) {halt

} else {let y1, . . . , yk be the counterexample.

A = A ∩ {i|yi = true}}

}

図 12 k 変数単調単項式を EQ により学習するアルゴリズム

5. 3. 5 C-Learner

C-Learnerはそれまでに与えられた例示ノードの集合に無矛

盾な最も厳しい条件 cを出力する.条件 cは述語の連言である

ので,cを k変数の単調単項式 x1 ∧ . . .∧ xk と見なすことがで

きる.ここで c中の各述語は単項式中の各変数に対応する.k

変数の単調単項式の学習を,最大 k回の EQで学習するアルゴ

リズムが存在する.図 12に k 変数の単調単項式を EQにより

学習するアルゴリズムを示す.

このアルゴリズムの各変数に述語を対応させることにより,条

件の学習を行う.assignment a0を contexte ∪{(ve, e)}とする.C-Learnerは,ドロップされた例示ノード eと contexteの間に

成立する全ての述語の集合を計算することによって述語の候補

の集合を計算する.1-Learnable(n)に含まれる述語は全て候補

として導出される.この述語の集合 (cond(contexte, (ve, e))で

表す)を最初の推測とする.これはC-Learnerが出力できる最も

厳しい条件となる.通常,cond(contexte, (ve, e))は a0 におい

てのみ成立する不必要な述語を含んでいる.そこで C-Learner

は反例を用いてそのような述語を除去する.

C-Learnerは cを計算するために contexte と IHTe を用い

ている.各 assignment ai ∈ {contexte ∪ {(ve, t.Node)}|t ∈σAns=Y (IHTe)} は EXTe に対する正の例示ノードが受理さ

れる状態を表す.我々は反例として各状態で成立する述語の

集合を用いる.形式的には,各 t ∈ σAns=Y (IHTe)に対して,

cond(contexte, (ve, t.Node))が反例となる.この時,アルゴリ

ズムは正の例が与えられた全ての状態で無矛盾な最も厳しい条

件を出力する.

cond(contexte, (ve, ei)) の計算: cond(contexte, (ve, ei)) の計

算は XML グラフ (図 13) を用いて行う.XML グラフは,

XQuery and XPath data model [11] 等と同様に,XML イン

スタンスの構造を木構造で表したものである.加えて,我々の

XML グラフでは,v-equality 辺を持つ.これは,同じ値を持

つ XMLノード間に存在する辺である.

このアルゴリズムは 3つのステップから成る.(1)XMLにお

いて,ei∪contexteに含まれる任意の 2ノード間のパスを全て求

める.図 13は,ei=XMLBook,contextXMLBook={Computer}の例を表している.(2)各パスにおけるリレーノードのインス

タンスを発見する.パス p上のリレーノードのインスタンスと

は,p上において他のノードと v-equality辺でつながっている

ノードである.(3)各パスに関して成立する全ての述語を数え

上げる.

categories

Computer

name

category

1

@id

XMLBook

title

book

1

@category

booklist

bookstore

Potter

title

book

2

@category

$b $c

$ci$bc

図 13 XML グラフ

図 14 プロトタイプシステムのアーキテクチャ

6. プロトタイプシステムの実装

本プロトタイプシステムの実装には Java(Java2 SDK 1.4)を

用いた.GUI部の実装には Swingおよび Drag and Drop API

を利用した.システム構成図を図 14に示す.プロトタイプシ

ステムは制御部を中心に GUI部と学習エンジン部によって構

成される.XLearnerは,能動学習を行なうため,学習エンジ

ンが能動的に動く必要がある.したがって,GUI部と学習エン

ジン部はそれぞれ別スレッドで動作する.

現段階のシステムには次の制約がある.まず,XMLブラウザ

からテンプレートに D&D可能なものは,末端の XMLノード

に限定される.また,再帰的定義を持つDTDは,結果のXML

が従う DTDとして受け付けることができない.

GUI部: Browserは,XMLブラウザを実装したモジュールで

ある.操作対象の XMLを表示する役割や,MQ,EQの質問

をユーザに示し,質問に対するユーザの答えを受け取る役割を

果たす.Template は,テンプレートを実装したモジュールで

ある.テンプレートを表示し,ユーザの D&D操作によって例

示ノードを受け取る.BrowserMgrは XMLブラウザを管理す

る. Browserに対して,MQ,EQの表示の指示を行い,答えを

GUIMgrに渡す.TemplateMgrはテンプレートを管理する.問

合せ結果が従うべきDTDからテンプレートを生成し Tempalte

に表示させたり,D&D された例示ノードの情報を GUIMgr に

渡したりする.GUIMgrは GUI全体を管理する.TemplateMgr

や BrowserMgrの生成を行い,制御部とのデータのやりとりを

行う.また,D&Dされた例示ノードとテンプレートに基づき,

XQ-Treeスケルトンを作成する役割を果たす.

学習エンジン部: 学習エンジン部の役割は,GUIMgrより作成さ

れた XQ-Treeスケルトンを走査しながら,各ノードの問合せ

断片を学習することである.学習エンジン部は大きくわけて,

XLearnerEngine,P-Learner,C-Learner,IHTの 4つで構成

される.XLearnerEngine は,図 8 の XQ-Tree スケルトンを

Page 7: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

図 15 P-Learner の詳細

図 16 C-Learner の詳細

走査するアルゴリズムを実装している.各ノードの問合せ断片

の学習は,P-Learnerと C-Learnerが行う.

P-Learner は,Angluin のオートマトン導出アルゴリズム

を実装したモジュールであり,for 節のパス式 p を学習する.

図 15 に P-Learner の詳細について示す.P-Learner は有限

オートマトン学習部,インタラクション削減部,MQ対象ノー

ド選択部,パス正規表現変換部から構成されている.まず,

XLearnerEngineから例示ノード eが有限オートマトン学習部

に渡される.有限オートマトン学習部では eを基に仮説オート

マトンを学習する.その際にMQを生成する.詳細は後で説明

するが,ユーザに質問せずに棄却できるMQが存在する.質問

すべきかどうかの判断はインタラクション削減部で行う.ユー

ザに質問すべき MQ はユーザに質問するのだが,MQ の対象

となる XMLノードは一般に複数あるため,MQ対象ノード選

択部において,どの XMLノードをMQとして質問するのが効

率的か決定する.そしてその XMLノードをMQとしてユーザ

に質問する.生成した仮説オートマトンはパス正規表現変換部

に渡され,パス式 pを EQとして XLearnerEngineに返す.反

例 ceが与えられた際には,有限オートマトン学習部はその ce

を基に再びオートマトンの学習を行う.

C-Learner は where 節の条件 c の学習を担当する.これは

XMLグラフにおける例示ノード間のパスで成立する述語を数

え上げることにより行われる.C-Learnerは例示ノード eと,

その仮説パス式 pと,contexte と IHTe を受け取り,5. 3. 5節

で述べた cond関数を用いて,各 assignment ai の条件集合を

求め,それらに全て成立している条件を出力する.C-Learner

の詳細を図 16に示す.

cond関数はまず最初に,2ノード間のパス導出部において,

XML グラフを用いて 2 ノード間のパスを全て求める.次に,

各パスに対して,リレーノードのインスタンスを求め,変数名

をつける.そして,リレーノードのインスタンスのパス式,リ

レーノードのインスタンスと例示ノードの各ノードに成立す

るパス共有条件,同じ値を持つノード間の値の結合条件を条件

集合として全て導出する.各パス間のパス共有条件も求める.

これらはそれぞれ,インスタンスのパス生成部,パス共有条件

導出部,値の結合条件導出部,パス間のパス共有条件導出部で

行う.

各 cond関数で導出された条件集合のうち,不必要な条件は

Relax関数を用いて除去される.Relax関数は 2種類の条件集

合を与えると,両方に成立する条件のみを返す関数である.そ

の結果として得られた条件集合が cとなる.

XLearnerEngineから渡された仮説パス式 pと,学習した c

より eq′ を生成する.生成された eq′ は実際に XQuery処理系

で実行させることで,その結果に含まれる XML ノードの集

合を ˆEXT としている.XLearnerでは XQuery処理系として

IPSI-XQ [9]を用いている. ˆEXT は XLearnerEngineに渡し,

Browserでハイライト表示することでユーザに示す.ˆEXT 中に含まれる XMLノードの集合をハイライト表示す

る際,XLearnerはどの XMLノードをハイライト表示すべき

なのか一意に決定できない.理由は,XQueryでは全てのノー

ドにデフォルトで付く IDという概念がないからである.そこ

で,XMLノードに対して一意に IDを付加する必要がある.本

プロトタイプシステムでは内部的に各XMLノードに対して ID

を明示的に付加しておくことで,XMLノードを一意に決定し,

ハイライト表示を可能にしている.

IHTは Interaction Histry Tableを実装したモジュールであ

り,XLearnerの質問とそれに対するユーザの答えの情報を記

録する.

6. 1 処理の流れ

処理の流れは次のようになる.システムを立ち上げると,

Browser が操作対象となる XML データを表示する.ユー

ザが,問合せ結果が従うべき DTD をシステムに与えると,

TemplateMgrがテンプレートを作成し,Templateに表示させ

る.この状態で,システムはユーザのD&D操作を待つ.ユーザ

は Browserに表示されているXMLノードを TemplateにD&D

し,Templateを埋める.D&D操作が完了したら.GUIMgrが

XQ-Treeスケルトンを作成する.XLearnerEngineはXQ-Tree

スケルトンを受け取り,学習を始める.各問合せ断片の学習で

行なわれるユーザとのインタラクション (MQ や EQ) の結果

は,P-Learnerおよび C-Learner,IHTに渡される.システム

がMQや EQを行なう際には,学習エンジンが Browserにそ

の質問を表示させるよう指示する.

図 17はプロトタイプシステムの実行画面を示している.左

側が XMLブラウザ,右側がテンプレートである.

6. 2 実装における問題と我々のアプローチ

XLearnerのナイーブな実装には,次のような問題点がある.

(1)学習に必要なインタラクション数の問題: n, k, mをそれぞ

れ,学習する有限オートマトンの状態数,アルファベットの数

(すなわちタグの種類の数),反例の最大のサイズ (XMLインス

タンスにおけるルートノードから XMLノードへの長さ)とす

Page 8: Implementation of a Prototype System to Learn …...on operations of sample XML elements. Inferring queries for XML is a non-trivial task, because XML is a kind of semistructured data,

図 17 プロトタイプシステムの実行画面

る.このとき,インタラクションの数は O(kmn2)である.す

なわち,簡単な有限オートマトンの学習でさえ,数百回のイン

タラクションが必要な可能性がある.

XLearnerは,次に示す 2つのルールでMQを削減する [6].

R1. DTDに矛盾するタグの並びのMQに対し自動的に「No」

を与える.

R2. 例示ノード e が与えらたときに eのパス path(e)の末端

のタグが t1だとする.この時,タグの並びの末端が t1でない

MQに対し自動的に「No」を与える.これは,パターンマッチ

ングにおいて,末端のタグが重要であるというヒューリスティ

クスに基づいている.

さらに本プロトタイプシステムでは,次のルールを組み込む.

R3. MQ対象となる XMLノードの候補が複数ある場合は,そ

れらのうち,XMLグラフ上で例示ノード eに最も近いノード

を優先して MQ を行なう.これは,e に近いノードは EXTe

に含まれる (すなわち「Yes」が返される)可能性が高いという

ヒューリスティクスに基づく.XLearner の学習アルゴリズム

は,MQに対して「Yes」が返された時はバックトラックを起

こさないという性質がある [6]ため,インタラクション数を減

らす効果がある.

これらのルールにより,例えば,例示ノード “Computer”の

パス式を求める際に実際には 309回質問される MQ が,一度

も聞かれることなく求めることができる.

(2)exprw の学習コストの問題: 2つの問題がある.第 1に,全

ての v-equality辺を保持しておくには多くの余分な記憶容量が

必要となる.第 2に,例示ノード間の全てのパスを数え上げる

ことは探索コストが高い.本プロトタイプシステムはヒューリ

スティックスと既存技術を応用し,これらに対処する.

v-equality辺の問題. v-equality辺は問合せに含まれる結合条

件を導出するために利用されるが,実際に結合条件に用いられ

る値の組合せは限られている.例えば,Xmark [8]とXML Use

Case [10]では,27の等結合のうち 3つは明示的な idref-id参

照である.残りは要素の値を用いているが,これらはすべて外

部キーの役割を果たす値である.このような値に対してはイン

デックスが存在することが一般的であると考えられる.本プロ

トタイプシステムではこのようなインデックスの存在を仮定し,

これを利用して (論理的な)XMLグラフの探索を行なう.特別

に v-equality辺を表すためのデータを持つことはしない.

パスの計算コスト.一般的な XQuery問合せにおいては,結合

に利用する XMLノード間の (XMLグラフにおける)距離はそ

れほど長くない.例えば, Xmark [8]と XML Use Cases [10]

における最大の長さは 12であるため,XMLノード間のパスを

計算するためには,それぞれの XMLノードから 6個ずつ探索

すればよい.それに加え,Graph Schemas [3]のようなグラフ

構造のメタデータを利用し,探索空間をあらかじめ制限する.

(3)EQ処理を行なう際のパフォーマンスの問題.XLearnerは

EQを質問するために,仮説 extent ˆEXT を計算する必要があ

る.そのために処理時間が長くなってしまうという問題がある.

しかし,Browser中に一度に表示できる XMLデータの範囲は

限定されるので, ˆEXT の計算を XMLデータ全体に対して行

うのではなく,Browserで見えている範囲のデータに対しての

み行なえば,処理時間の短縮が期待できる.これは,[7]と同様

の手法である.ただし今回のプロトタイプシステムでは実装は

行わず,XMLデータ全体に対して行っている.

7. ま と め

本稿では,XQuery問合せの学習システム XLearnerの概要

および,プロトタイプシステムの実装について述べた.今後の

課題としては,ユーザビリティーの検証が挙げられる.

謝 辞

本研究の一部は,日本学術振興会科学研究費基盤研究

(B)(12480067)による.

文 献[1] D. Angluin. Learning regular sets from queries and coun-

terexamples. Information and Conputation, 75(2):87-106,

1987

[2] D. Angluin. Computational Learning Theory: Survey and

Selected Bibliography. Proc. 24th Annual ACM Symposium

on Theory of Computing, pp. 351-369, 1992.

[3] P. Buneman, S. Davidson, M. Fernandez, and D. Su-

ciu. Adding structure to unstructured data. Proc. ICDT,

pp.336-350, 1997.

[4] M. Fernandez, J. Simeon and P. Wadler. XML Query Lan-

guages: Experiences and Exemplars. http://www.w3.org/

1999/09/ql/docs/xquery.html.

[5] E.M. Gold. Complexity of automaton identification from

given data. Information and Control 37:302-320, 1978

[6] A. Morishima, A. Matsumoto, H. Kitagawa. XLearner: A

System to Learn XML Queries through Examples (submit-

ted).

[7] A. Morishima, T. Mouri, H. Kitagawa. An Exampled-Based

Web-Site Cnstruction Tool anad Its Implementation. Infor-

mation Systems and Databases, pp.136-141, 2002

[8] A. Schmidt, F. Waas, M. Kersten, D. Florescu, M. Carey,

I. Manolescu, and R. Busse. Why And How To Benchmark

XML Databases. SIGMOD Record, 30(3):27–32, 2001.

[9] IPSI-XQ - The XQuery Demonstrator http://ipsi.fhg.de/oasys/

projects/ipsi-xq/download e.html

[10] XML Query Use Cases. http://www.w3.org/TR/xmlquery-

use-cases.

[11] W3C. XQuery 1.0 and XPath 2.0 Data Model. http://

www.w3.org/TR/query-datamodel/.