JavaScriptでFREDDYデータを読み込む
FREDDYの利用方法
「第2回:JSONPとFREDDY(http://www.thinkit.co.jp/article/116/2/)」で、FREDDYのデータフォーマットについて説明した。今回は、実際にJavaScriptからFREDDYデータを読み込む手法、およびその裏でFREDDYのライブラリが行っている、WebサーバーとWebブラウザ間の通信手法を解説する。
FREDDYのプロトタイプ実装やマニュアルはFREDDYのWebサイト(http://freddy.yokoyama.ac/)で公開している。ここにあるxml2freddy.php(http://freddy.yokoyama.ac/index.php/Docs/xml2freddy.php/Usage)というツールを使えば、任意のXML文書をFREDDYフォーマットへ変換し、またそのデータをFREDDYで読み込むWebアプリケーションの自動生成ができる。このツールはこちら(http://www.thinkit.co.jp//images/article/116/3/11631.zip)からもダウンロードできる(11631.zip/7.80 KB)。
また、今回の連載に合わせて、XMark(XMLの有名なベンチマークプロジェクト)(http://monetdb.cwi.nl/xml/)が公開するXMLデータ生成ツールで作成した10MBのXML文書をFREDDYに変換し、それを読み込み、要素名と属性名の統計情報を表示するWebアプリケーション(図1)を作成した。こちら(http://freddy.yokoyama.ac/examples/thinkit.html)をクリックするとWebアプリケーションの画面が開くので、表示された画面から「[Start]」をクリックすればFREDDYデータの読み込みが開始される。
このWebアプリケーションは、クロスドメイン制約も無く、100%Pure JavaScriptなので、HTMLファイルとしてダウンロードして、ローカル環境で、実行することもできる。このWebアプリケーションもこちらhttp://www.thinkit.co.jp//images/article/116/3/11632.zip)からダウンロードできる(11632.zip/2.41 KB)。
なお、xml2freddy.phpではXMLからFREDDYへの変換だけでなく、実装例としてこのサンプルWebアプリケーションの自動生成まで行うことができる。
xml2freddy.phpの使い方
xml2freddy.phpはphpスクリプトではあるが、コマンドラインから実行して使用する。引数無しで実行すれば、Usageが表示される。例えばinput.xmlをFREDDYフォーマットに変換する時は以下のコマンドを実行する。
$ php xml2freddy.php -I ./documents/input.xml -N 5000 -F output -P ~/public_html/ -U http://yokoyama.ac/~shohei/ -D myData -HOLDINGS -EXAMPLE
-IオプションにはFREDDYへ変換するXMLファイルのパスを設定する。-Nオプションは、FREDDYデータを分割する際に基準となるイベント数を設定でき、この例では5000イベントごとに別のファイル(Page)として保存している。-Fオプションは各Pageのファイル名のプレフィクスであり、この例ではoutput_{pageID}.jsという一連のファイルが生成される。
-Pオプションと-Uオプションはデータを出力するベースディレクトリのパスとその対応するURLである。さらに、-Dオプションを指定すれば、ベースディレクトリに新しいディレクトリを作成し、その中に出力ファイルが格納される。
-HOLDINGSフラグを設定すると、総イベント数などFREDDYフォーマットのプロパティを含んだヘッダファイルを生成する。このプロパティには総イベント数などが含まれ、これを事前に読み込めば、利用者はFREDDYデータ読み込みの進ちょくを把握することができるようになる。さらにこれらのデータを読み込むWebアプリケーションの実装例を生成するには-EXAMPLEフラグを指定する。図1(上)は実装例として生成されたWebアプリケーションのスクリーンショットである。
変換が成功すると図1(下)のような出力を得る。ここには、変換にかかった時間や、生成された実装例のURLが表示されている。
このほかxml2freddy.phpにはさまざまなオプションが用意されている。例えば、-VOLUMEフラグを設定すると、出力として複数のPageをまとめたVolumeと呼ぶファイルを生成する。
FREDDYは、データを細分化して保存するため、非常に大きなデータの場合、ファイル数が膨大になる可能性がある。これはPageごとに含まれるイベント数を増やすことで抑制できるが、クライアントであるWebブラウザが消費するメモリ量はPageに含まれるイベントの数に比例するため、やみくもに増やすわけにもいかない。
そこでサーバー上では、複数のPageをまとめて1つのファイル(Volume)に保存し、通信時に動的に切り出してPageごとに送信することを可能としている。さらに同時に-FRONTENDフラグを設定することにより、VolumeからPageを切り出すPHPプログラムも自動生成できる。クライアントのコードは、parse関数に渡すURLが、このPHPプログラムのURLになるだけで、実装の変更は必要としない。
さて、次のページでは、Webサーバーから届いたFREDDYデータをどのようにJavaScriptプログラムから利用するかを説明する。