第 6 章 議論 58
6.4 XML プログラミングインターフェースの現状
6.4.1 最適化器の実装言語の選択
我々の考えるXCC-XML上での最適化器の実装は,DOMとXPathを用いたものであ る.まず,XMLをパーサで読み込み,DOMツリーを構築する.これをXPathを用いて 検索し,特定の条件にマッチする要素を列挙し,処理する.そして,その結果は,元の DOMツリーに反映され,再びXCC-XML文書として出力される.我々は,この実装を高 級言語で行なうことで,最適化器の生産性向上を試みた.
我々は最適化実装の予備実験で,Python言語を実装言語として選択した.C,C++,
Perl,Ruby,Javaなど,XMLを処理できる言語は数多く存在する.この中でPythonを 選択したのは,インタープリタ型言語の持つ利点を活かせることが主な理由である.この 他にPythonを選択した理由として,Python用に提供されているXML関連ライブラリの 充実が挙げられる.
各種プログラミング言語に対してXML文書を取り扱うためのライブラリが提供されて いる.その中でも,XMLを処理するために用いられる言語としては,Javaが一般的であ る.Javaはコンパイラ型言語であるため,我々の考える生産性向上のための実装言語とし ては適当でない.しかし,XML処理を考えた場合,最も有力な言語である.我々は,最 適化器の実装言語を決定するにあたって,JavaとPythonにおけるXMLプログラミング インターフェースについて調査を行ない,比較検討した.
6.4.2 Xalan/Xerces における DOM 実装
Javaで利用可能なXMLパーサ,XSLTプロセッサの主要なものとして,Sun Microsys-temsによるJAXP(Java API for XML Processing)と,Apache Software Foundationによ るXerces/Xalanがある.JAXPは,Sunが配布するJava の実装であるJ2SEに標準で含 まれる.Xerces/Xalanは,独立したクラスライブラリとして配布される.JAXPは,J2SE のバージョンによって仕様が異なるため,javaのバージョン間の差によらず,共通のイン ストール手順が使えるXerces/Xalanを評価対象とした.
XalanはXSLTプロセッサであり,XercesはXMLパーサである.XalanはXercesを内 部的に利用している.Xalanに含まれるXPathプロセッサは,DOMツリー上で動作する.
このDOMツリーは読み取り専用で,その実体はDTM(Document Table Model)と呼ば れるデータモデルによって実現されている.図6.6にDTMの概要を示す.
node 1 node 2
node 3 node 4 node 5
node 6
parent -1
1 2 1 1 5
next-sib -1
4 -1
5 -1 -1
prev-sib -1 -1 -1 2 4 -1
first-child 2 3 -1 -1 6 -1
start / / / / / /
end / / / / / / 1
2 3 4 5 6
図 6.6: DTM
DTMでは,XMLの1つ1つの構文要素は,それぞれ固有のIDで識別される.DTM は,全ての構文要素のXMLファイル上での開始位置,終了位置,親要素のID,前後の
兄弟要素のID,最初の子要素のIDを収めた表をつくる.DTMの表は,DOMツリーの ノードを表の項目とすることで,DOMツリーの各ノードごとに,オブジェクトを生成し た場合より,メモリ消費を削減している.しかし,XML文書上の位置を記録しているた め,文書の更新を行なった際には,再構築が必要になる.
我々の予備実験における最適化器の実装では,DOMツリーに対する検索と読み出しだ けでなく,検索結果に基づいてDOMツリーの更新を行なうため,DTMをベースにした Xalanの実装は,我々の要求を満たさない.
しかし,DTMは,XSLTのためのデータモデルとしては,妥当なものだと考える.そ れは,XSLTプロセッサの実装が,DOMツリーに対する読み出しと,その結果に基づい て,新たにDOMツリーを構築する方法で行なわれているからである.このような実装 を行なった場合,DOMは読み取り専用にした方が効率が良い.また,XPathもDOMツ リーを更新するものではないため,DTMベースで十分実現可能である.
6.4.3 PyXML/4Suite における DOM 実装
我々が予備実験において,実装言語として使用したPythonは,標準でDOMインター フェースの実装を提供する.また,これとは別に,より高機能なXML処理機能を提供す るPyXMLが存在する.PyXMLは,Pythonが標準で提供する基本的なXMLの読み込 みだけでなく,SAXとSAX2インターフェースの実装や,XML文書の出力機能などを提 供する.これに対して,4Suiteは,Pythonで実装されたXMLとRDFを処理のためのプ ラットフォームである.我々の行なった予備実験では,4Suiteの提供するXPathプロセッ サを使用した.
PyXMLと4Suiteを使う利点は,4SuiteのXPathプロセッサが,PyXMLの構築した DOMツリーで動作することにある.4SuiteもDOMの実装を提供しているが,4Suiteの XPathプロセッサは,特定のDOM実装に依存しない.このため,Xalan の場合のよう な,読み取り専用の特殊な実装と異なり,XPathで検索したあとで,DOMツリーを自由 に操作できる.
Pythonを実装言語とする利点は,DOMとXPathの関係だけではない.Pythonの対 話型シェルを使えば,XML文書の読み込みとDOMツリーの構築,DOMツリーの操作,
XPath式の評価とその結果を逐一確認しながら行える.
PyXML,4Suite共に,十分に安定した実装を提供している.PyXMLは,Pythonの次 のリリースで,標準で提供される予定である.また,4Suiteは,既に運用実績のあるソフ トウエアである.