SAX(1) SAXってなに?

2005年11月20日(日)更新


SAXってなに?

たけち: DOMって覚えてるよね。

さらら: えっ、えぇ。まあね。(^ ^;

たけち: DOMは、XMLドキュメントをアプリケーションで処理しやすいように、XMLパーサ(プロセッサ)が提供してくれるAPI(Application Inteface)だよね。APIは、Application Program Interfaceの略で、アプリケーションが情報を利用(参照・生成など)をするためのインターフェイスのことだね。

さらら: あっ、そう。そうだったわね。

たけち: そのAPIとして、DOMのほかにもうひとつ、SAX(Simple API for XML)っていうのがあるんだ。

さらら

さらら: SAX?

たけち: SAXは、Simple API for XMLの略なんだけど、その名の通り、XMLのための単純な(Simple) APIのことなんだ。

さらら: へぇ〜。それもやっぱり、W3Cで決めたものなの?

たけち: DOMはW3Cが中心となって策定したものなんだけど、、SAXはDavid Megginsonという人を中心にXML-DEV Mail Listを通じて作ったAPIなんだ。

さらら: へぇ、すごいわねぇ〜。個人が中心で、しかもメールでやり取りして決めるなんて。

たけち: それぞれのサイトは次をみるといいよ。SAXについてはSAXプロジェクトのサイトを参考にさせてもらうね。

さらら: あっ、はい。

  
David Megginsonさまのサイト
   
http://www.megginson.com/
  
XML-DEV Mail Listのサイト
   
http://www.xml.org/xml/xmldev.shtml
  
SAXプロジェクトのサイト
   
http://www.saxproject.org/
  


SAXの特徴

さらら: で、そのSAXってDOMとどう違うの?

たけち: そうだね。じゃぁ、DOMについても復習してみようね。

たけち

DOMの特徴

  1. 読み込んだXMLドキュメントを木構造としてメモリ上に生成するので、木構造をたどって各要素を参照できる。
  2. XMLドキュメントの読み込みをし、木構造の生成が完了してから、アプリケーションがDOMを使うことができる。
  3. XMLドキュメントの内容の参照だけでなく内容の更新、ノードの追加、削除などの処理ができる。

たけち: 一方、SAXは、XMLドキュメントを読み込みながら、アプリケーションに読み込んだXMLドキュメントの要素や内容について、知らせてくれるAPIなんだ。

SAXの特徴

  1. XMLドキュメントを読み込ながら、XMLドキュメントの要素が検出される順にイベントとしてアプリケーションに通知する。
  2. XMLドキュメントの要素を逆にたどったりすることができない。

SAXの概要

さらら: う〜ん。なんとなく違いはわかるけど、そのイベントってどんな風なものなの?

たけち: そっか。。。じゃあ、大まかなところだけだけど、SAXがどんなものか、もう少し具体的にみてみようか。

さらら: ええ。

たけち: SAXに対応したXMLパーサは、XMLドキュメントを先頭の行から読み込み、タグや内容となるテキストを見つける都度、イベントとしてアプリケーションに知らせるんだけど、ドキュメントの内容についての主なイベントには次のようなものがあるんだ。

たけち

  1. startDocument: ドキュメントの開始
  2. endDocument: ドキュメントの終了
  3. startElement: 要素の開始
  4. endElement: 要素の終了
  5. characters: 要素内容の文字列

たけち: 図にSAXインターフェイスを通じてアプリケーションにイベントが知らされる様子を概念的だけど、載せておくね。

SAXインターフェイスの概要

さらら: XMLデータを読み込んで、要素なんかが見つかるたびに、アプリケーションに教えてくれるってわけね。そっか。。。あっ。でも、DOMとSAXの違いはなんとなく分かったけど、どんな風に使い分けたらいいの?

たけち: そうだねぇ〜。絶対こうだ、って言えないけど。。。アプリケーションの目的や扱うXMLデータの大きさにもよると思うけど、だいたいは次のような区別をするといいんじゃないかなぁ。

さらら

 
※DOMに適したケース
  
いろいろな要素を何度も参照したり、要素を更新したりする必要がある処理
  • (例) 対話的にXMLデータの要素を選択的に表示する処理を行う
  • (例) 複数のXMLデータから別のXMLデータを生成する処理を行う
             
※SAXに適したケース
  
要素を順番に参照すれば良い処理
  • (例) XMLドキュメントからの要素やテキストの検索を行い、要素名と内容の一部を表示する
  •    
  • (例) XMLドキュメント中の要素の順にテキストを取り出して他のデータに移し変えたり、埋め込んだりする処理を行う

さらら: そうかぁ〜。あっちこっちたどりながら処理するのにはDOMがいいのね。で、ひとつずつ順に要素を見てゆけば処理ができちゃうときなんかは、SAXがいいってことなのね。

たけち: そうだね。

さらら: でも、実際にSAXを使うってどうしたらいいの?

たけち: うん。これから具体的にSAXを使ってみようと思うんだけど、それにはSAXを扱うためのJava環境の用意をしなくちゃ、ね。

さらら: えっ? それって、SAXを使ったプログラムを作るってこと?

たけち: そう。

さらら: う〜ん。でも大丈夫かしら。私でもわかるかなぁ〜。

たけち: ひとつひとつ、少しずつやってゆくから心配しないで。じゃ、次からは、SAXを扱うためのJava環境の用意をしようね。

さらら: うっ、うん。頑張る。

→ まずは、SAXを使う準備-1です。 (^ ^;

さらら