突然思い出したので
忘れないうちに書いておきます
Xerces Xalan
今はなかなか見かけない
この2つのプロジェクトは
XMLを扱っていた人ならご存知でしょう
実装の中身を見ていませんが
XMLをDOMとして扱っておらず
逐次的に処理をする実装になっていると聞いたことがあります
DOMについて
公式での解説も何だかパッとしないので改めて説明します
DOMと言うのは、XMLのツリー構造を構造体などを利用してメモリやファイルなどに保存しておいて、高速にアクセスすると言う仕組みです
例えばHTMLはブラウザでツリー構造が扱えるようになっていて、そのためにDocument.getElenentByIdのようなアクセスが可能となっています
これに対してDOMでは無いパースとは、XMLを単なるテキストとして扱い
上から順にパースして該当項目を探すので
あまりパフォーマンスは良くありません
このようにXerces Xalanは逐次的にパースするので
XMLを一度DOMとしてメモリやファイルなどに展開する時間はゼロです
巨大なXMLを扱う場合にはそれをDOMとしてメモリやファイルに保存しないため、メモリやファイルの消費を抑えることが出来ると言う利点もあります
なぜ突然この二つを思い出したのかと言うと、、、
わたしが以前Goで作ったXML2Jsonの実装を見ていて
DOMでは無い方が良いかも知れないと思い始めていたからです
当時の実装は逐次的にXMLのパースを行うGoのライブラリを使用して、XMLのTokenを取得しながら自前のDOMを作り、そのDOMからJSONに変換すると言う実装でした
しかもその変換関数は再帰ルーチンとなっていました
どうも無駄だらけに見えてきました
やはり一度作ったプログラムは何度か作り直さないとダメです
わたしは天才ではありません
0 件のコメント:
コメントを投稿