32nd Diary

トップ | 最新 | 過去の日記 | もっと過去の日記

2018年
12月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
めーるあどれす
ruby -rbase64 -e'puts Base64.decode64 %q(dGFrYW5vMzJAZ21haWwuY29t)'



2018-12-02 (Sunday) [長年日記]

[XML][Web][JavaScript][Java] DOM の影に消えた SAX

みなさん、 getElementById してますか。高野です。

さて、いつも HTML や XML を扱うときって Document Object Model, DOM で扱ってるわけですが。むかし、対立的によく SAX と比較していたんですよね。

いや、今回のは微妙で。タイトルは「消えた」とか書いてますが SAX は普通に使われているところでは使われているんですけど、その存在を知らない人が多いので。SAX について書いておこうと思いましてね。

DOM

https://ja.wikipedia.org/wiki/Document_Object_Model

XMLを読み込むAPIであるSAXと異なり、XMLデータをツリー構造として扱う事ができる。ただし、通常の場合対象のXML文書を全て読み込んでからの扱いを前提とするため、動作速度が遅かったり、メモリーの使用量が大きくなるといった欠点もある。

いやだなぁ、もう SAX っていう言葉でてきちゃった。意外と認知度高いのかな。

SAX

https://ja.wikipedia.org/wiki/Simple_API_for_XML

XML文書を木構造として扱うDOMと異なり、一連のイベントとして表現するイベント駆動型のAPIである。したがって、アプリケーションソフトウェアが積極的にAPIにアクセスするDOMに対し、SAXではアプリケーションソフトウェアがイベントが来るのを待ち受ける受動的な動作が大部分を占める。

この説明、たぶんよく分かんなくね?

DOM と SAX

適当にふわっとしたことを言っておくと、言語処理系なんかの構造の違いに近いイメージの違いがあります。

何のこっちゃ。

DOM は木構造をメモリに保持するんですよね。言語処理系でいうと抽象構文木みたいなものを保持していると。なのでその木構造の大きさだけメモリが必要なんだよね。

それに対して SAX は言語処理系でいうと構文木を構築せずに評価していくインタプリタのような負荷に近い処理になってます。XML をトラバースしていって、要素に応じて何かイベントを発生させる、という処理なわけ。なので、 木構造は保持していない処理なんですよね。

ちゃんと理解したい

という場合は、きちんとした本を読むなり、ドキュメントを探して下さい。

ふわっとした説明なんで。今日は。

本日のPingbacks(全0件)