計算機システム実験 K-11:
SAX (Simple API for XML) の利用

天笠俊之
2006年1月27日

概要

今回は,DOM とは異なるタイプの XML のための API である SAX (Simple API for XML) の利用方法を学ぶ.

SAX のあらまし

SAXは,XML-DEV メーリングリスト上における XML 開発者同士の議論から誕生した XML のための API であり,国際的な標準化団体による仕様ではないにも関わらず,事実上の標準として,多くの XML 処理系で用いられている.

SAX はイベント駆動型 API と呼ばれる.具体的には,SAX プロセッサは XML データを解析しながら,文書の開始,終了,要素の開始,終了などのイベントを生成し,イベントハンドラと呼ばれるコールバック関数を次々と呼び出す.これは,XML を木構造として扱う DOM とは対照的である.このため,木構造を辿るような複雑な処理や,データの変更は難しいが,処理に必要な主記憶量,実行速度の点で DOM より優れており,大規模な XML データを扱いたい場合や,データを逐次処理したい場合によく用いられる

準備

/home/lab/Denjo/amagasa/jikken/09 にサンプルファイルがあるので,各自自分のホームディレクトリにコピーした上で使用する.

実験では,Xerces に含まれる SAX2 パーサを用いるので,CLASSPATH の設定は前回同様で問題ない.

演習課題

  1. 配布資料を読み,SAX について理解する.
  2. サンプルプログラムを実行し,正しく動作することを確認する.

課題レポートの提出

SAX を用いて,以下のプログラムのどちらかを作成すること.時間のある人は,両方ともチャレンジして欲しい

課題 1: 簡易 XML 検索プログラム
指定した要素(または XPath 式)に対応する要素を入力 XML データから抜き出して表示するプログラム.
例:
% java SimpleSearch auction.xml //mail
<output>
<mail>
<from>Dominic Takano mailto:Takano@yahoo.com</from>
<to>Mechthild Renear mailto:Renear@acm.org</to>
<date>10/12/1999</date>
<text>
asses scruple learned crowns preventions half whisper logotype weapons doors fac
tious already pestilent sacks dram atwain girdles deserts flood park lest graves
...
テキスト値だけでなく,部分要素も表示できるように工夫すること.
なお,検索キーは要素名だけでも良いが,余裕があれば複雑な XPath 式を受け付けるようなプログラムにも挑戦して欲しい.
※提出物 を提出すること.
課題 2: XML→CVS 変換プログラム
XML ファイルを読み込んで CVS へ変換するプログラムを SAX で作成する.入力 XML データや CSV ファイルの形式は任意だが,ある程度複雑なデータであることが望ましい.前回までの CSV ファイル等を流用しても良い.
※提出物 を提出すること.

提出期限は 2/1(木).メールの作成には以下のテンプレートを利用すると良い.