JavaScriptでFREDDYデータを読み込む

2008年8月18日(月)
横山 昌平

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プログラムから利用するかを説明する。

静岡大学
静岡大学情報学部助教。2006年東京都立大学大学院修了、博士(工学)。1996年から2008年まで東京ディズニーランド内ワールドバザール・コンフェクショナリー勤務、菓子類の販売に従事。産業技術総合研究所(前述と兼業)を経て2008年より現職。データベースとWebを基礎とした、データ通信手法や地理情報システム基盤の構築に興味を持つ。http://shohei.yokoyama.ac/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています