[CoveredCalc] なんちゃってDOM
CoveredCalc では、カバー定義と設定ファイルに XML を利用しています。
XML にすると汎用のパーサが使えたり、拡張がしやすかったりというメリットがあるからです。(と過去に自分が書いてます) 汎用の XML パーサには、SAX と DOM の 2 種類があります。SAX はタグなどが見つかるたびに順に通知されるイベント型。お手軽で簡単な解析に向いています。DOM は XML 文書を解析したあとツリー構造をそのままオブジェクトにマッピングして、文書内のどこでも参照できるような高機能なものです。さらに、そのツリーに変更を加えて、XML 文書として書き出すこともできます。(SAX は読み込みしかしない) 作り始めた当初は、そんなに複雑にするつもりはなかったので、SAX パーサでお手軽にやればいいかと思っていました。でも、作ってみると(特にカバー定義が)思ったより複雑になってしまいました。SAX パーサからのイベントハンドリングは妙に複雑です。 さらに設定をファイルに落とすときに XML 文書を自分で書き出さなくてはいけないので割と面倒です。 これはカバー定義と設定項目の拡張を妨げる原因になっています。やる気がなくなるんだもん。 このあたりで、SAX パーサをやめて DOM パーサに変更しようかと思いました。 現在使っている Expat を採用した背景には、BeOS で使えたことと、ライセンスが希望に合うことがあります。(と、これもまた過去に書いてます) 一方、DOM パーサとして有名なのは Xerces(C++ で利用するので Xerces C++)です(なお、Xerces は SAX パーサの機能も持っています)。最新バージョンは 2.6.0 のようですが、BeOS にも 2.4.0 がポーティングされているようです。ライセンスも Apache Software License 2.0 なので問題はないでしょう。 ただし、この BeOS ポートでは共有ライブラリ(.so)のバイナリしかありません。自分でビルドすればスタティックライブラリ(.a)も得られるんでしょうか。共有ライブラリでも構わない(むしろユーザからすればそっちの方がいい?)んですが、シンプルなファイル構成にしたいのと、ユーザの環境によってライブラリが異なっていると動きが変わったりするのを避けたいんです。 でも、そこまでしてフルスペックの DOM パーサがいるか?という気もしてきました。 当然、DOM パーサは処理も重いし、サイズも大きくなります。 Expat がうまく動いてくれていることはわかっているわけですから、解析にはこのまま SAX パーサを使うことにして、DOM ツリーの管理部分とツリーを XML に出力する部分だけを自力で作ればいいんじゃないかと。 別にフルスペック必要なわけではないので、自分が使うような機能だけを実装した「なんちゃってDOM」でいいんです。DOM の仕様を満たす必要なんか全然ありませんしね。 でも、これはそれなりに時間がかかりそうなので、他の機能を実装しながら、平行して進めようかなと思っています。パーサ自体は独立してるので、Subversion でブランチ切って作業してれば、最新ソースへのマージも楽かな~。
by hironytic
| 2005-02-01 01:02
| 構想
|
検索
カテゴリ
以前の記事
2009年 12月
2009年 11月 2009年 10月 2009年 09月 2009年 04月 2009年 01月 2008年 11月 2008年 09月 2008年 08月 2008年 07月 2008年 05月 2008年 03月 2008年 02月 2008年 01月 2007年 12月 2007年 11月 2007年 09月 2007年 06月 2007年 05月 2007年 04月 2007年 03月 2007年 02月 2007年 01月 2006年 12月 2006年 11月 2006年 10月 2006年 09月 2006年 05月 2006年 04月 2006年 03月 2006年 01月 2005年 12月 2005年 11月 2005年 10月 2005年 09月 2005年 08月 2005年 07月 2005年 06月 2005年 05月 2005年 04月 2005年 03月 2005年 02月 2005年 01月 2004年 12月 2004年 11月 2004年 10月 2004年 09月 2004年 08月 2004年 05月 2004年 04月 2004年 03月 最新のトラックバック
関連リンク
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||