PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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