XML Transformation Language Based On Monadic

XML Transformation Language
Based On
Monadic Second Order Logic
東京大学 情報理工学系研究科 コンピュータ科学専攻
細谷研究室 稲葉一浩
本研究の内容

XML変換言語 MTran の設計と実装
{visit x :: x in <A> :: Foo[
{visit y from x ::
y in <B> & all1 z:(y/z => z in <C>) ::
Bar[ {gather z :: y/z :: z} ]
}]}

MTran の特徴



MSO の論理式をXMLへのQuery言語として採用
MSO Query の表現力を活かす変換言語
MSO Query の効率的な評価アルゴリズム
Monadic Second Order Logic

MSO (単項二階論理)
要素そのものを指す一階変数に加え、
要素の集合を指す二階変数を導入した論理
 1950年代から研究されている
 近年、XML処理の理論的基礎として注目

XML処理におけるMSOの利点

強い表現力
1.
2.
3.
4.
全ての Regular Query を表現可能
再帰によらない宣言的な記述
自然な N-ary Query の記述
Queryと無関係な要素への言及が不要
⇒ これらの性質は、XML処理に有用
MSOの表現力1: Regularity

XHTMLの目次作成

『ある要素 x から、文書順で次の
<h1> 要素までの間にある <h2> 要素 y』
•
•
•
•
「xの後ろにある<h2>要素 y」
「xの後ろにある<h1>要素 z」
「zの前にある<h2>要素 y」
それぞれは既存言語(XPath等)
でも書けるが、組み合わせは不可能
x<y & y in <h2> &
all1 z:(x<z & z in <h1> => y<z)
<h1>
... <h2> ....
..... <h2> ..
.... <h3> ...
<h1>
... <h2> ....
.. <h3> .....
<h1>
MSOの表現力2: No-Recursion

LPath[1] Linguistic Queries

『ある構文解析のステップで、要素xの“直後”
にくるような要素y 』 S
VP
NP
PP
NP
N
“I”
V
Det Adj
NP
N Prep Det
“saw” “the” “old” “man” “with”
“a”
N
N
“dog” “today”
[1] Extending XPath to Support Linguistic Queries, Bird et al., PLAN-X 2005
MSOの表現力2: No-Recursion

LPath Linguistic Queries


XPathでは、表現できない
LPathでは、次のようなアルゴリズムでXPathを拡張
• xが最右の子なら、親に上る。最右の子でなければ
一個右の兄弟y’に移動。y’の最左の子孫を全て選択

MSOでは二階変数を使って、直接 『ある構文解析のス
テップで、要素xの“直後”にくるような要素y 』 と書ける
pred analysis_step(var2 A) =
all1 x:(x notin A  A//x | x//A);
pred follow_in(var2 A, var1 x, var1 y) =
x in A & y in A & all1 z:(z in A => x<z <=> y<=z);
ex2 A: (analysis_step(A) & follow_in(A,x,y))
MSOの表現力3: N-ary Query

N-ary Query

『共通の親をもつfoo, bar, buz要素の組』
• 自由変数が N 個のMSO論理式は、自然に、
N-tuple を探索するクエリとなる
ex1 p: (p/x:<foo> & p/y:<bar> & p/z:<buz>)
MSOの表現力4: Don’t Care

Regular Expression Patterns と比較して

『<foo>要素を子に持つ要素x』
• Patterns:
x as ~[Any, foo[Any], Any]
• MSO:
• “Any” のようなワイルドカードも不要
ex1 c: (x/c & c in <foo>)
変換言語 MTran の設計
MSO Queryによって
従来より自由度の高いノード抽出が可能になった
 その表現力を活かすXML変換記述言語は?

Query
加工・出力
MSO
???
変換言語の設計

MSO Query の特徴

No-Recursion
• 親子関係をたどるのではない宣言的なノード選択
• 変換でも明示的な再帰を不要に ⇒ “visit” テンプレート

N-ary Queries
• 「カレントノードと、そこから相対的な条件を満たす
ノード」以上に複雑な依存関係の記述
• ⇒ テンプレート・変数スコープのネスト
“visit” テンプレート
全ノードに適用

MTran:
{visit x :: x in <a> :: b[x]}

XSLT:
再帰適用を明示
<xsl:stylesheet ...>
<xsl:template match="a">
<b><a><xsl:apply-templates/></a></b>
</xsl:template>
<xsl:template match=“@*|node()">
<xsl:copy>
<xsl:apply-templates/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
テンプレートのネスト

MTran:
テンプレートのネスト
変数スコープのネスト
{visit x :: x in <div> ::
{visit y from x :: y in <selflink> ::
@href[{gather z :: x/z:@id :: z}]}}

XSLT:
フラットなテンプレート
明示的な引数渡し
<xsl:stylesheet ...>
<xsl:template match=“div">
<xsl:copy><xsl:apply-templates>
<xsl:with-param name=“x” select=“.”/>
</xsl:apply-templates></xsl:copy>
</xsl:template>
<xsl:template match=“selflink”>
<xsl:param name=“x”/><xsl:attribute ...>
<xsl:value-of select=“$x/@id”/>
...
MSO Queryの実装

標準的な実装方式
①
②
論理式をツリーオートマトンへ変換
ツリーオートマトンを使ってQueryを実行
論理式
ツリーオートマトン
入力 t
x in <a>
出力 s
MTranでの実装
論理式をツリーオートマトンに変換
①
•
MONA[2] を利用
•
•
最悪の計算量は超指数的だが、様々な最適化
によって実用的な処理時間を達成したシステム
XML変換への応用例でも実験・検証を行った
ツリーオートマトンを使って実行
②
•
遅延評価を用いた O(t+s) アルゴリズム
•
既存の最善のアルゴリズムは O(tN+s)
[2] http://www.brics.dk/mona/ N.Klarlund et al., 1999
Product
O(t+s) Queryアルゴリズム(概要)
&
Union
解の候補
q1→{(_,v4)(v5,_)(_,v5)(_,v2)(v2,_)(v2,v2)}
Product
q2→{(_,_)(v4,_)(v5,v5)(v2,v2)
...} v1
&
q3→{(v4,v4)(v5,v4)(v2,v5)(v5,v2)
...}
Union
解の候補
q1→{(_,v3)}
q2→{(v3,_)}
q3→{(v3,v3)}
解の候補
解の候補
q1→{(_,_)(_,v4)}
q1→{(v5,_) (_,v5)}
解の候補
v2
v3
q2→{(v4,_)}
q2→{(v5,v5)}
q1→{(_,v1)(v1,v5)(_,v4)(v4,v5)(v2,v1)
q3→{(v4,v4)}
q3→{(_,_)}
(v2,v2)(v3,_)(v3,v3)(v3,v5)(v3,_)
(v5,v4)(v1,v2)...}
q2→{(_,_)(v4,_)(v5,v5)(v2,v2)}
q3→{(v3,v3)(v1,_)(v4,v4)(v2,_)(_,v3)
v4
v5
(v2,v3)(v3,v2)(v5,v1)(v4,v2)...}
・途中の集合演算(Product, Union)を遅延処理
・ただし空集合の演算は毎回処理
関連研究 (XML変換言語)

fxgrep, fxt [Berlea et al. 2001]


“既知の最良アルゴリズム”でBinaryQueryを実
装
Arb [Koch 2003]

1-ary MSOと等価な言語をXML Queryに応用
XSLT 1.0 [Clark et al. 1999]
 XSLT 2.0 (draft) [Kay 2005]


一階論理のexist, forallを導入
まとめ

XML変換言語 MTranの設計と実装

MSOの論理式をQuery言語に採用
• 表現力

MSO Queryの表現力を活かす変換言語
• “visit” テンプレート
• テンプレートのネスト

MSO Queryの効率的な処理方式
• MONAを採用
• 遅延評価による O(t+s) アルゴリズムを開発
今後の課題

XML仕様への完全対応


静的型検査



名前空間、文字列処理
ツリーオートマトンに基づくXMLの型検査は既に広く利
用されている
“visit” テンプレートの型検査手法の研究
“move” 変換

XML文書中でノードを”移動”する変換のスマートな記述