« モデリングやめて配置データを | メイン | XMLからの読込み »

2005年11月13日

Teaspire 開発日誌:: XMLパーサーの選定

    

Radium software developmentのここTinyXMLexpatParsifalが比較されている。
だいぶ古い記事だけど、TinyXMLは遅いのか。
expatはかなり早いらしい。

実在するライブラリ云々の前に、SAXかDOMかと言う問題もある。
一般的に言われることとしては……
SAXは高速でメモリ使用量が少ない。
DOMはランダムアクセスが可能。
がある。
だが、それだけではアプリケーションの設計には不十分だと言う。
C++によるXML開発技法の第8章のC++DAXとC++DOMの比較などで、設計の指針について記述がある。

今回はどうだろう?
今回予定しているのは、シーングラフの構造そのものを書き出したものの読み書きだ。
XMLのツリー構造がそのままシーングラフに対応している。
ランダムアクセスや複数回のアクセスは必要とするが、それはシーングラフに対してだ。
ほとんどの処理は独自構造(シーングラフ)に対して行われる。
では、XMLの構造へは何度もアクセスしないかと言うとそうではない。
同じシーングラフを何度も読み込むだろう。
もし、これをキャッシュしておくならDOMを使い、最初の1度だけパースしてしまえば後のアクセスは早くなる。
しかし、シーングラフに複製機能を持たせるのなら、シーングラフ自体をキャッシュすることも可能だ。この場合、意味的な解析も済んでいるのでDOMよりも高速だろう。

どうやら今回はSAXを使う方が適していそうだ。

では、実際に使用するライブラリはどうする?
上述のRadium software developmentで、expatはかなり高速だが大きいのが難点だとある。
そこで、1.95.6のDLLのサイズを見てみると140KBだ。
XMLからの読込みのためだけに使うのには大きいかもしれない。
だが、wxWigets 2.6.2ではXMLの読込みにexpatを使っているようだ。
srcを除くとexpatの1.95.6が入っている。
それならサイズを気にすることはなさそうだ。
wxWigetsでリソースファイルを使ったりするのならどの道入ってくる。
また、wxWigetsにはwxXMLDocumentというクラスがある。
これはexpatのDOMラッパーのようだ。
つまり、これを使えばDOMが使える。
ただし、ソースには注意書きがあり、将来インターフェイスが変更されるかもしれないから、このクラスをアプリケーションで使うとwxWigetsの将来のバージョンではコンパイル出来なくなるかもしれないそうだ。
ま、expatを直接使うのでそれはどちらでもいい。(expatが使われなくなったらここに書いているサイズ云々は意味なくなるけど)

と言うことで、expat 1.95.6を使うことにした。



投稿者 Takenori : 2005年11月13日 20:27




comments powered by Disqus
Total : Today : Yesterday : なかのひと