(57)【要約】  データ解析装置において、解析対象のデータの中間データが、メモリ上のデータ展開領域に少しずつ展開される（Ｓ２０１）。展開された中間データの中から、解析可能な単位のデータブロックが取出され（Ｓ２０３）、データブロックがデータ解析される（Ｓ２０７）。解析可能な単位のデータブロックよりデータ展開領域のサイズが小さいときは、データ展開領域のサイズが拡張され（Ｓ２１７）、引続いてデータが展開される。【特許請求の範囲】
【請求項１】
解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開部（１０４）と、
前記中間データを解析するデータ解析部（１０６）とを備え、
前記データ展開部（１０４）は、前記解析対象データの一部ずつを利用して順次中間データを生成し、
前記データ解析部（１０６）は、前記生成された中間データを順次解析することを特徴とする、データ解析装置（１）。
【請求項２】
前記データ展開部（１０４）は、符合化された前記解析対象データを復号化して前記中間データを生成する、請求項１に記載のデータ解析装置（１）。
【請求項３】
前記符合化された前記解析対象データは、圧縮されたデータである、請求項２に記載のデータ解析装置（１）。
【請求項４】
前記データ展開部（１０４）は、記憶部上に大きさを指定して前記データ展開領域を確保し、前記データ展開領域の大きさに応じて、前記解析対象データの一部を復号化して前記中間データを生成する、請求項１に記載のデータ解析装置（１）。
【請求項５】
前記データ展開部（１０４）は、前記解析対象データのうちの展開が完了したデータ位置を記憶し、前記解析対象データのうちの前記記憶されたデータ位置から復号化して前記中間データを生成する、請求項４に記載のデータ解析装置（１）。
【請求項６】
前記データ展開部（１０４）は、前記データ展開領域の拡張の要否を判定し、必要であると判定しときに、前記データ展開領域を拡張する、請求項４に記載のデータ解析装置（１）。
【請求項７】
前記データ展開部（１０４）は、前記データ展開領域に隣接した領域を、他の領域よりも優先して、拡張する前記データ展開領域とする、請求項６に記載のデータ解析装置（１）。
【請求項８】
前記データ展開部（１０４）は、前記データ展開領域の後方に隣接した領域を、他の領域よりも優先して、拡張する前記データ展開領域とする、請求項６に記載のデータ解析装置（１）。
【請求項９】
前記中間データからデータブロックを抽出するデータブロック抽出部（１０５）をさらに備え、
前記データ解析部（１０６）は、前記データブロック抽出部（１０５）によって抽出されたデータブロックを解析することを特徴とする、請求項１に記載のデータ解析装置（１）。
【請求項１０】
前記データブロック抽出部（１０５）は、前記中間データのうち前記データブロックが抽出された残りのデータの位置を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１１】
前記データ展開部（１０４）は、前記記憶された残りのデータの位置に応じて、前記残りのデータを前記データ展開領域の先頭に移動させる、請求項１０に記載のデータ解析装置（１）。
【請求項１２】
前記データ展開部（１０４）は、前記データ展開領域の、前記残りのデータの後ろに、前記中間データに続く次の中間データを生成して展開する、請求項１０に記載のデータ解析装置（１）。
【請求項１３】
前記データブロック抽出部（１０５）は、前記記憶された残りのデータの開始位置から、前記データブロックの次のデータブロックを抽出する、請求項１０に記載のデータ解析装置（１）。
【請求項１４】
データブロック抽出部（１０５）は、前記データブロックの抽出状況を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１５】
データ解析部（１０６）は、前記記憶されたデータブロックの抽出状況に応じて、前記データブロックの解析方法を決定する、請求項１４に記載のデータ解析装置（１）。
【請求項１６】
データ解析部（１０６）は、前記データブロックの解析状況を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１７】
データブロック抽出部（１０５）は、前記記憶されたデータブロックの解析状況に応じて、前記データブロックの抽出方法を決定する、請求項１６に記載のデータ解析装置（１）。
【請求項１８】
前記解析対象データは、文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記中間データから前記文字コードを検出し、前記検出された文字コードを前記文字列データに変換し、前記変換された文字列データを前記データ展開領域に展開する、請求項１に記載のデータ解析装置（１）。
【請求項１９】
前記解析対象データは、固定長の文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記検出された文字コードの固定長を、最小単位として記憶部上に大きさを指定して前記データ展開領域を確保する、請求項１８に記載のデータ解析装置（１）。
【請求項２０】
前記解析対象データは、可変長の文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記検出された文字コードを、固定長の文字コードの文字列データに変換する、請求項１８に記載のデータ解析装置（１）。
【請求項２１】
前記データ展開部（１０４）によって変換される固定長の文字コードは、固定長のＵｎｉｃｏｄｅである、請求項２０に記載のデータ解析装置（１）。
【請求項２２】
解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開ステップと、
前記中間データを解析するデータ解析ステップとを備え、
前記データ展開ステップは、解析対象データの一部ずつを利用して順次中間データを生成し、
前記データ解析ステップは、前記生成された中間データを順次解析することを特徴とする、データ解析方法。
【請求項２３】
コンピュータにデータの解析を実行させるプログラムであって、
前記コンピュータに、
前記解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開ステップと、
前記中間データを解析するデータ解析ステップとを実行させ、
前記データ展開ステップは、解析対象データの一部ずつを利用して順次中間データを生成し、
前記データ解析ステップは、前記生成された中間データを順次解析することを特徴とする、データ解析プログラム。
【請求項２４】
請求項２３に記載のデータ解析プログラムを記録した、コンピュータ読取可能な記録媒体。
【請求項２５】
圧縮されたマークアップ言語で記述されたデータを処理するデータ解析装置（１）であって、
記憶部（１０３）を備え、
前記記憶部（１０３）は、バッファメモリとして利用される第１のバッファ（１０３Ａ）と第２のバッファ（１０３Ｂ）とを含み、
圧縮されたマークアップ言語で記述されたデータを、前記第１のバッファ（１０３Ａ）に展開するデータ展開部（１０４）と、
前記第１のバッファ（１０３Ａ）に展開されたデータからデータブロックを抽出する第１のデータ解析部（１０５）と、
前記第１のデータ解析部（１０５）が抽出したデータブロックから、抽象構文木を生成する、第２のデータ解析部（１０６）とを備え、
前記第１のデータ解析部（１０５）は、前記抽出したデータブロックを、前記第２のバッファ（１０３Ｂ）の連続する１つの記憶領域に格納し、
前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）または前記第２のバッファ（１０３Ｂ）に記憶されたデータを利用して、抽象構文木を生成することを特徴とする、データ解析装置（１）。
【請求項２６】
前記第２のデータ解析部（１０６）は、前記抽出されたデータブロックの前記第１のデータ解析部（１０５）による解析結果を利用して、抽象構文木を生成することを特徴とする、請求項２５のデータ解析装置（１）。
【請求項２７】
前記データ展開部（１０４）は、圧縮されたマークアップ言語で記述されたデータを、前記第１のバッファ（１０３Ａ）に、前記第１のバッファ（１０３Ａ）の容量以下の容量ごとに展開することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項２８】
前記第１のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータに対して、字句解析を行なうことにより、前記第１のバッファ（１０３Ａ）に展開されたデータからデータブロックを抽出することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項２９】
前記第１のデータ解析部（１０５）は、ＸＭＬ文法に従って、字句解析を行なうことを特徴とする、請求項２８に記載のデータ解析装置（１）。
【請求項３０】
前記第１のデータ解析部（１０６）は、前記第２のバッファ（１０３Ｂ）の容量を、ＸＭＬ文法に従って決定することを特徴とする、請求項２９に記載のデータ解析装置（１）。
【請求項３１】
前記第２のデータ解析部（１０６）は、ＳＶＧ文法に従って、データの解析を行なうことを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３２】
前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータを、前記第１のバッファ（１０３Ａ）に展開された状態で、解析することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３３】
前記第１のデータ解析部（１０５）は、文字解析に利用するスキーマ言語を変更するスキーマ言語変更部を含むことを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３４】
前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータを、意味的に解析することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３５】
前記第２のデータ解析部（１０６）は、前記第１のデータ解析部（１０５）に、前記第１のデータ解析部（１０５）の解析結果に基づいて、ブロックデータの抽出態様を変更させることを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３６】
前記第１のデータ解析部（１０６）は、前記或る時点で前記第１のバッファ（１０３Ａ）に展開されたデータの中の前記或るデータブロックの一部のデータの容量に基づいて、前記記憶部（１０３）において前記第２のバッファ（１０３Ｂ）を確保することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３７】
前記第１のデータ解析部（１０５）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部を前記第２のバッファ（１０３Ｂ）に格納することを特徴とする、請求項２５のデータ解析装置（１）。
【請求項３８】
前記第１のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部と前記第２のバッファ（１０３Ｂ）にある同じデータブロックの一部とを結合させて、前記第２のバッファ（１０３Ｂ）に格納することを特徴とする、請求項３７のデータ解析装置（１）。
【請求項３９】
前記第１のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部と前記第２のバッファ（１０３Ｂ）にある同じデータブロックの一部とを結合させて、第３のバッファ（１０３Ｃ）に格納することを特徴とする、請求項３７のデータ解析装置（１）。
【請求項４０】
前記第１のデータ解析部（１０６）は、前記或る時点で前記第１のバッファ（１０３Ａ）に展開されたデータの中の前記或るデータブロックの一部のデータの容量と、前記第２のバッファ（１０３Ｂ）の容量とに基づいて、前記記憶部において、第３のバッファ（１０３Ｃ）を確保することを特徴とする、請求項３９に記載のデータ解析装置（１）。
【請求項４１】
圧縮されたマークアップ言語で記述されたデータを処理する装置における、データ解析方法であって、
圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するステップと、
前記第１のバッファに展開されたデータからデータブロックを抽出するステップと、
前記抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納するステップと、
前記第１または第２のバッファのデータを利用して、抽出構文木を生成するステップとを備えることを特徴とする、データ解析方法。
【請求項４２】
圧縮されたマークアップ言語で記述されたデータを処理する装置に、データ解析させるための、データ解析プログラムであって、
コンピュータに、
圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するステップと、
前記第１のバッファに展開されたデータからデータブロックを抽出するステップと、
前記抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納するステップと、
前記第１または第２のバッファのデータを利用して、抽出構文木を生成するステップとを実行させることを特徴とする、データ解析プログラム。
【請求項４３】
請求項４２に記載のデータ解析プログラムを記録した、コンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はデータ解析装置、データ解析方法、データ解析プログラム、およびデータ解析プログラムを記録した記録媒体に関し、特に、データ解析時の、記憶装置の使用量を削減することができるデータ解析装置、データ解析方法、データ解析プログラム、およびデータ解析プログラムを記録した記録媒体に関する。
【背景技術】
【０００２】
近年、携帯電話などの携帯情報端末は高機能化かつ多機能化に向かっており、従来パーソナルコンピュータで扱っていたような複雑で大容量のデータを処理する能力が求められている。しかしながら、このようなデータを解析して処理しようとすると、携帯電話などの携帯情報端末に備えられた記憶装置の容量は不足する傾向にある。【０００３】
データ解析装置である従来の携帯電話などの携帯情報端末では、圧縮データをすべて展開できるだけのデータ展開領域を記憶部に用意して、そこに圧縮データのすべてを展開して解析する。つまり、展開後のデータサイズが１Ｋバイトであれば、１Ｋバイト分のデータ展開領域を記憶部に用意しなくてはならない。そのため、携帯情報端末において展開後のサイズの大きなデータが扱われる場合には、当該携帯情報端末の記憶装置の容量が不足する場合がある。【０００４】
なお、データサイズが明示された解析対象のデータの、データ構造の具体例としては、図１６や図１７に示されるデータ構造が挙げられる。つまり、解析対象のデータには、図１６に示すように、データブロック１１０２，１１０４，１１０６ごとのヘッダ１１０１，１１０３，１１０５を含むものがある。ヘッダ１１０１，１１０３，１１０５は、それぞれ、続くデータブロック１１０２，１１０４，１１０６のサイズ、または、展開後のサイズに関する情報を含むものがある。また、解析対象のデータには、図１７に示すように、データごとにヘッダ１２０１を含むものがある。ヘッダ１２０１は、続くすべてのデータブロック１２０２，１２０３，１２０４の長さ、または、展開後の長さに関する情報を含む。【０００５】
このような問題点を解決するために、たとえば特許文献１では、連続で大量のデータを伝送することを可能とするマルチメディアデータ・処理システムを開示している。上記システムは、データ・ストリーミングを制御し、実時間による連続的なストリーミングを提供する。
【特許文献１】特開平５−２６５７８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１に開示されているようなストリーミングで使用されるデータは、データのすべてを受信しなくても再生を開始できるように、データの中の解析が終わった部分が削除できるように、解析対象のデータブロックが完全に独立したデータ構造になっている。【０００７】
しかしながら、このような完全に独立したデータブロックを持たないデータ構造のデータを解析する場合、すべてのデータの解析を終えるまで解析対象のすべてのデータをまったく削除できないため、解析対象のデータ容量が大きいと、記憶領域がすぐに不足するようという問題があった。【０００８】
また、解析対象のデータが、完全に独立したデータブロックを持たないデータ構造を有するデータが圧縮または符号化されたものであった場合、上述のように、解析対象のデータをすべて解凍または復号化して解析を行なうために、解析対象のデータ容量に比して非常に大きなデータ展開領域を用意しなくてはならないという問題もあった。【０００９】
本発明は、上述の問題点を解決するためになされたものであって、上記のような解析対象のデータが記憶されている領域のうち解析が終了した部分を解放して作業領域として使用できるようにすることや、圧縮または符号化された解析対象のデータのデータ展開領域として展開後のデータ容量に比して少ない大きさで解析できるようにすることによって、データ解析時の記憶装置の使用量を削減することができるデータ解析装置、データ解析方法、データ解析プログラム、およびデータ解析プログラムを記録した記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の或る局面に従ったデータ解析装置は、解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開部と、中間データを解析するデータ解析部とを備え、データ展開部は、解析対象データの一部ずつを利用して順次中間データを生成し、データ解析部は、生成された中間データを順次解析することを特徴とする。【００１１】
本発明の或る局面によると、解析対象のデータが、データブロックの長さが明示されていないようなデータ構造のデータであった場合でも、解析対象のデータ、または該データが展開されて得られる中間データが記憶されている領域のうち、解析が終了した部分が解放されて作業領域として使用できる。そのため、解析対象のデータが、データブロックの長さが明示されていないデータ構造のデータを圧縮ないし符号化されたデータであっても、データ展開領域として展開後のデータ容量に比して少ない大きさで解析でき、データ解析時の記憶装置の使用量を削減することができる。【００１２】
また、本発明に従ったデータ解析装置では、データ展開部は、符合化された解析対象データを復号化して中間データを生成することが好ましい。【００１３】
また、本発明に従ったデータ解析装置では、符合化された解析対象データは、圧縮されたデータであることが好ましい。【００１４】
また、本発明に従ったデータ解析装置では、データ展開部は、記憶部上に大きさを指定してデータ展開領域を確保し、データ展開領域の大きさに応じて、解析対象データの一部を復号化して中間データを生成することが好ましい。【００１５】
また、本発明に従ったデータ解析装置では、データ展開部は、解析対象データのうちの展開が完了したデータ位置を記憶し、解析対象データのうちの記憶されたデータ位置から復号化して中間データを生成することが好ましい。【００１６】
また、本発明に従ったデータ解析装置では、データ展開部は、データ展開領域の拡張の要否を判定し、必要であると判定しときに、データ展開領域を拡張することが好ましい。【００１７】
また、本発明に従ったデータ解析装置では、データ展開部は、データ展開領域に隣接した領域を、他の領域よりも優先して、拡張するデータ展開領域とすることが好ましい。【００１８】
また、本発明に従ったデータ解析装置では、データ展開部は、データ展開領域の後方に隣接した領域を、他の領域よりも優先して、拡張するデータ展開領域とすることが好ましい。【００１９】
また、本発明に従ったデータ解析装置は、中間データからデータブロックを抽出するデータブロック抽出部をさらに備え、データ解析部は、データブロック抽出部によって抽出されたデータブロックを解析することが好ましい。【００２０】
また、本発明に従ったデータ解析装置では、データブロック抽出部は、中間データのうちデータブロックが抽出された残りのデータの位置を記憶することが好ましい。【００２１】
また、本発明に従ったデータ解析装置では、データ展開部は、記憶された残りのデータの位置に応じて、残りのデータをデータ展開領域の先頭に移動させることが好ましい。【００２２】
また、本発明に従ったデータ解析装置では、データ展開部は、データ展開領域の、残りのデータの後ろに、中間データに続く次の中間データを生成して展開することが好ましい。【００２３】
また、本発明に従ったデータ解析装置では、データブロック抽出部は、記憶された残りのデータの開始位置から、データブロックの次のデータブロックを抽出することが好ましい。【００２４】
また、本発明に従ったデータ解析装置では、データブロック抽出部は、データブロックの抽出状況を記憶することが好ましい。【００２５】
また、本発明に従ったデータ解析装置では、データ解析部は、記憶されたデータブロックの抽出状況に応じて、データブロックの解析方法を決定することが好ましい。【００２６】
また、本発明に従ったデータ解析装置では、データ解析部は、データブロックの解析状況を記憶することが好ましい。【００２７】
また、本発明に従ったデータ解析装置では、データブロック抽出部は、記憶されたデータブロックの解析状況に応じて、データブロックの抽出方法を決定することが好ましい。【００２８】
また、本発明に従ったデータ解析装置では、解析対象データは、文字コードの文字列データが符号化されたデータであって、データ展開部は、中間データから文字コードを検出し、検出された文字コードを文字列データに変換し、変換された文字列データをデータ展開領域に展開することが好ましい。【００２９】
また、本発明に従ったデータ解析装置では、解析対象データは、固定長の文字コードの文字列データが符号化されたデータであって、データ展開部は、検出された文字コードの固定長を、最小単位として記憶部上に大きさを指定してデータ展開領域を確保することが好ましい。【００３０】
また、本発明に従ったデータ解析装置では、解析対象データは、可変長の文字コードの文字列データが符号化されたデータであって、データ展開部は、検出された文字コードを、固定長の文字コードの文字列データに変換することが好ましい。【００３１】
また、本発明に従ったデータ解析装置では、データ展開部によって変換される固定長の文字コードは、固定長のＵｎｉｃｏｄｅであることが好ましい。【００３２】
本発明の或る局面に従ったデータ解析方法は、解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開ステップと、中間データを解析するデータ解析ステップとを備え、データ展開ステップは、解析対象データの一部ずつを利用して順次中間データを生成し、データ解析ステップは、生成された中間データを順次解析することを特徴とする。【００３３】
本発明の或る局面に従ったデータ解析プログラムは、コンピュータにデータの解析を実行させるプログラムであって、コンピュータに、解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開ステップと、中間データを解析するデータ解析ステップとを実行させ、データ展開ステップは、解析対象データの一部ずつを利用して順次中間データを生成し、データ解析ステップは、生成された中間データを順次解析することを特徴とする。【００３４】
本発明の或る局面に従ったコンピュータ読取可能な記録媒体は、上記したようなデータ解析プログラムを記録している。【００３５】
本発明の他の局面に従ったデータ解析装置は、圧縮されたマークアップ言語で記述されたデータを処理するデータ解析装置であって、記憶部を備え、記憶部は、バッファメモリとして利用される第１のバッファと第２のバッファとを含み、圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するデータ展開部と、第１のバッファに展開されたデータからデータブロックを抽出する第１のデータ解析部と、第１のデータ解析部が抽出したデータブロックから、抽象構文木を生成する、第２のデータ解析部とを備え、第１のデータ解析部は、抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納し、第２のデータ解析部は、第１のバッファまたは第２のバッファに記憶されたデータを利用して、抽象構文木を生成することを特徴とする。【００３６】
本発明の他の局面によると、一定容量の第１のバッファと、必要に応じて容量を変更され連続した１つの記憶領域からなる第２のバッファとが用いられて、データの解析が行なわれる。これにより、第１のバッファの容量を、従来と比較して小さいものとすることができる。また、第１のバッファにおいて容量的に入りきらなかったデータブロックが出てきたときにのみ、第２のバッファが利用されるため、記憶部の記憶領域を効率良く利用できる。【００３７】
また、本発明に従ったデータ解析装置では、第２のデータ解析部は、抽出されたデータブロックの第１のデータ解析部による解析結果を利用して、抽象構文木を生成することが好ましい。【００３８】
また、本発明に従ったデータ解析装置では、データ展開部は、圧縮されたマークアップ言語で記述されたデータを、第１のバッファに、第１のバッファの容量以下の容量ごとに展開することが好ましい。【００３９】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、第１のバッファに展開されたデータに対して、字句解析を行なうことにより、第１のバッファに展開されたデータからデータブロックを抽出することが好ましい。【００４０】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、ＸＭＬ文法に従って、字句解析を行なうことが好ましい。【００４１】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、第２のバッファの容量を、ＸＭＬ文法に従って決定することが好ましい。【００４２】
また、本発明に従ったデータ解析装置では、第２のデータ解析部は、ＳＶＧ文法に従って、データの解析を行なうことが好ましい。【００４３】
また、本発明に従ったデータ解析装置では、第２のデータ解析部は、第１のバッファに展開されたデータを、第１のバッファに展開された状態で、解析することが好ましい。【００４４】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、文字解析に利用するスキーマ言語を変更するスキーマ言語変更部を含むことが好ましい。【００４５】
また、本発明に従ったデータ解析装置では、第２のデータ解析部は、第１のバッファに展開されたデータを、意味的に解析することが好ましい。【００４６】
また、本発明に従ったデータ解析装置では、第２のデータ解析部は、第１のデータ解析部に、第１のデータ解析部の解析結果に基づいて、ブロックデータの抽出態様を変更させることが好ましい。【００４７】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、或る時点で第１のバッファに展開されたデータの中の或るデータブロックの一部のデータの容量に基づいて、記憶部において第２のバッファを確保することが好ましい。【００４８】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、第１のバッファにあるデータブロックの一部を第２のバッファに格納することが好ましい。【００４９】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、第１のバッファにあるデータブロックの一部と第２のバッファにある同じデータブロックの一部とを結合させて、第２のバッファに格納することが好ましい。【００５０】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、第１のバッファにあるデータブロックの一部と第２のバッファにある同じデータブロックの一部とを結合させて、第３のバッファに格納することが好ましい。【００５１】
また、本発明に従ったデータ解析装置では、第１のデータ解析部は、或る時点で第１のバッファに展開されたデータの中の或るデータブロックの一部のデータの容量と、第２のバッファの容量とに基づいて、記憶部において、第３のバッファを確保することが好ましい。【００５２】
本発明の他の局面に従ったデータ解析方法は、圧縮されたマークアップ言語で記述されたデータを処理する装置における、データ解析方法であって、圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するステップと、第１のバッファに展開されたデータからデータブロックを抽出するステップと、抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納するステップと、第１または第２のバッファのデータを利用して、抽出構文木を生成するステップとを備えることを特徴とする。【００５３】
本発明の他の局面に従ったデータ解析プログラムは、圧縮されたマークアップ言語で記述されたデータを処理する装置に、データ解析させるための、データ解析プログラムであって、コンピュータに、圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するステップと、第１のバッファに展開されたデータからデータブロックを抽出するステップと、抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納するステップと、第１または第２のバッファのデータを利用して、抽出構文木を生成するステップとを実行させることを特徴とする。【００５４】
本発明の他の局面に従ったコンピュータ読取可能な記録媒体は、上記したデータ解析プログラムを記録している。【００５５】
この発明の上記および他の目的、特徴、局面および利点は、添付の図面と関連して理解されるこの発明に関する次の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００５６】
【図１】本発明の第１の実施の形態にかかるデータ解析装置の構成の具体例を示す図である。
【図２】図１のデータ解析装置でのデータ解析処理を具体的に示すフローチャートである。
【図３】図１のデータ解析装置での解析対象データの中間データがＳＶＧ（Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ）言語で記述されたデータである場合の具体例を示す図である。
【図４】図１のデータブロック抽出部で生成されるステータス情報の具体例を示す図である。
【図５】図１の記憶部の中のデータ展開領域のデータ展開処理における状態の変化を示す図である。
【図６】図１のデータ解析部がデータ解析を実行する際に生成されたＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）ツリーの具体例を示す図である。
【図７】図１の記憶部においてデータ展開領域を確保する方法を説明する図である。
【図８】図１のデータブロック抽出部において実行されるデータブロックの抽出処理およびステータス情報の更新の内容を具体的に示すフローチャートである。
【図９】図１のデータブロック抽出部でのデータブロックの抽出処理およびステータス情報の更新の内容を具体的に示すフローチャートである。
【図１０】図１のデータ解析装置での解析対象データの中間データがＳＶＧ言語で記述されたデータである場合の、解析対象データの中間データの具体例を示す図である。
【図１１】図１のデータ解析装置での解析対象データの中間データがバイナリである場合の、解析対象データの中間データの具体例を示す図である。
【図１２】図１１のバイナリのデータ構造の具体例を示す図である。
【図１３】図１１のバイナリのデータ構造の具体例を示す図である。
【図１４】図１３のバイナリに関する、命令の種類とデータのバイト数との対応の具体例を示す図である。
【図１５】図１のデータ解析装置において実行されるデータ解析処理において、展開するとデータの形式が図１２に示されたようなバイナリとなるデータが展開される場合を説明する図である。
【図１６】データサイズが明示された解析対象のデータの、データ構造の一例を具体的に示す図である。
【図１７】データサイズが明示された解析対象のデータの、データ構造の他の例を具体的に示す図である。
【図１８】本発明の第２の実施の形態のデータ解析装置において実行されるデータ解析処理のフローチャートである。
【図１９】本発明の第２の実施の形態のデータ解析装置の展開用のバッファ領域における、展開されるデータと、それに含まれるデータブロックとの関係を示す図である。
【図２０】本発明の第２の実施の形態のデータ解析装置の結合用の連続バッファ領域における、データの記憶状態を模式的に示す図である。
【図２１】本発明の第２の実施の形態のデータ解析装置の結合用の連続バッファ領域における、データの記憶状態を模式的に示す図である。
【図２２】本発明の第２の実施の形態のデータ解析装置の結合用の連続バッファ領域における、データの記憶状態を模式的に示す図である。
【図２３】本発明の第２の実施の形態のデータ解析装置におけるデータ解析処理の全体的な内容を説明するための図である。
【図２４】図２３に示された記憶部の構成の変形例を示す図である。
【符号の説明】
【００５７】
１  データ解析装置、１０１  制御部、１０２  入力部、１０３  記憶部、１０３Ａ  展開用のバッファ領域、１０３Ｂ  結合用の連続バッファ領域、１０３Ｃ  連続バッファ領域、１０４  データ展開部、１０５  データブロック抽出部、１０６  データ解析部、１０７  出力部、１００１〜１００９  メモリ領域、１１０１，１１０３，１１０５，１２０１  ヘッダ、１１０２，１１０４，１１０６，１２０２〜１２０４  データブロック。
【発明を実施するための最良の形態】
【００５８】
以下に、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。【００５９】
［第１の実施の形態］
まず、図１を参照して、本発明の第１の実施の形態にかかるデータ解析装置の構成を具体的に説明する。【００６０】
データ解析装置１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等から構成され装置全体の制御を行なう制御部１０１と、他の装置と通信を行なってデータを受信したり、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの記録媒体に記録されているデータを読出したりしてデータを入力する入力部１０２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等から構成され、制御部１０１で実行されるプログラムや解析対象のデータ等を記憶する記憶部１０３と、入力部１０２を介して入力されるデータを記憶部１０３に展開するデータ展開部１０４と、記憶部１０３に展開されたデータの字句解析を行なうデータブロック抽出部１０５と、データブロック抽出部１０５における字句解析の結果に基づいて意味解析を行なうデータ解析部１０６と、ディスプレイなどの表示装置や、他の装置と通信を行なってデータを送信する送信部や、スピーカなどの音声出力装置などの出力部１０７とを含む。【００６１】
上記したデータ展開部１０４、データブロック抽出部１０５、および、データ解析部１０６は、専用の回路等のように、専用のハードウェアによって構成されても良いし、また、記憶装置または記録媒体に記録された情報の読み書きを行なう装置と、情報処理装置とを備えるようなデータ解析装置において、当該情報処理装置が上記の記憶装置または上記の記録媒体に記録された特定のプログラムを実行することにより、実現されるように、構成されても良い。また、データ展開部１０４は、入力部１０２を介して入力されたデータの他に、記憶部１０３等に記憶されたデータを、展開することもできる。【００６２】
入力部１０２は、解析対象のデータを入力し、入力したデータをデータ展開部１０４に渡す。【００６３】
なお、入力部１０２から入力される、本実施の形態にかかるデータ解析装置１が解析対象とするデータは、マークアップ言語でタグ付けされたＨＴＭＬ（Ｈｙｐｅｒｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）文書やＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）文書のようにいくつかのブロックを含んで構成されていて、それぞれのブロックが必ずしも完全に独立していないようなデータや、このようなデータをＧＺＩＰやＬＺＨなどの圧縮方法やＢａｓｅ６４などの符号化方法で変換されたデータである。【００６４】
データ展開部１０４は、記憶部１０３に、所定量のデータ展開領域を確保し、また、必要に応じて、そのデータ展開領域を拡張する。【００６５】
データ展開部１０４は、入力部１０２から入力された解析対象のデータの一部またはすべてを、記憶部１０３に確保されたデータ展開領域領域に解析可能に展開し、中間データを得る。このとき、入力されたデータが圧縮されていれば解凍して展開し、符号化されていれば復号化して展開する。また、圧縮や符号化などされていない生の（そのまま解析可能な）データであれば、そのまま複製して展開してもよい。【００６６】
そして、データブロック抽出部１０５において、展開されたデータである中間データから、解析しやすいデータの固まり（以下、このデータの固まりをデータブロックと称する）が抽出され、データ解析部１０６に渡される。また、データブロック抽出部１０５は、データブロック抽出部１０５におけるデータブロックの抽出状況を表わすステータス情報を生成し、記憶部１０３に格納する。データブロック抽出部１０５では、記憶部１０３に格納されたステータス情報を参照してデータブロックの抽出を進める。【００６７】
なお、本実施の形態にかかるデータ解析装置１では、入力部１０２から入力されたデータが、直接データ展開部１０４に渡されて、以降の解析処理が実行されてもよいし、また、一旦記憶部１０３に記憶されてからデータ展開部１０４に渡されて、以降の解析処理が実行されてもよい。【００６８】
また、記憶部１０３にすでに生のデータが記憶されている場合には、データ展開部１０４やデータブロック抽出部１０５での処理を実行することなく、そのまま、データ解析部１０６でデータ解析するようにしてもよいし、さらに、データブロック抽出部１０５によってデータブロックが抽出された後、データ解析部１０６による解析が済んだ部分については、記憶部１０３のうち、入力データの記憶領域の中の解析が済んだ部分に対応する領域を、順次解放するようにしてもよい。【００６９】
データ解析部１０６は、データブロック抽出部１０５から渡されたデータブロックを、記憶部１０３に記憶されるステータス情報を参照して解析し、その解析結果を出力部１０７に渡す。ここでの解析は、たとえば、中間データがＨＴＭＬ形式のデータである場合にはＤＯＭツリーを生成する、などが挙げられる。そして、出力部１０７は、データ解析部１０６から渡された解析結果を出力する。【００７０】
出力部１０７において出力されるデータ解析結果は、入力部１０２から入力された解析対象のデータがＸＭＬ文書やこれを圧縮または符号化したデータである場合では、文書の内容を木構造で表現するＤＯＭツリーとして構築したデータである。出力部１０７は、データ解析部１０６から渡された解析結果を一旦記憶部１０３へ記録してもよいし、直接外部へ出力してもよい。【００７１】
図２に基づいて、本実施の形態にかかるデータ解析装置１でのデータ解析処理を説明する。図２のフローチャートに示される処理は、制御部１０１が、記憶部１０３に記憶されているプログラムを読出し、そして、図１に示される各部を制御して実行することによって、実現される。【００７２】
図２を参照して、始めに、データ展開部１０４において、入力部１０２から入力された解析対象のデータの一部またはすべてが、記憶部１０３に確保されたデータ展開領域に展開される（Ｓ２０１）。なお、ステップＳ２０１において解析対象のデータの一部が展開される場合、データ展開部１０４に入力データの最初からどの程度の量を展開させるかは、用意されたデータ展開領域の大きさに依存して決定されてもよいし、データ展開後の容量がヘッダ情報などから取得できる場合は、その大きさに依存して決定されてもよいし、入力データ自体の容量に依存して決定されてもよい。また、入力データに依存せず、予め、データ展開領域の大きさが定められていてもよい。【００７３】
次に、データブロック抽出部１０５において、データ展開領域に展開されたデータから、解析に適した大きさのデータブロックが抽出される（Ｓ２０３）。この際、データブロック抽出部１０５によるデータブロックの抽出状況を表わすステータス情報が生成されて、記憶部１０３に記憶されるか、または、記憶部１０３に記憶されているステータス情報が更新される。そして、そのステータス情報を参照しながら、データブロック抽出部１０５は、ステップＳ２０３でのデータブロックの抽出を実行する。なお、ステップＳ２０３におけるデータブロックの抽出処理については、後に具体例を挙げて説明する。【００７４】
このとき、データブロック抽出部１０５は、展開済みデータのどの位置までデータブロックを抽出したかについて記憶部１０３に記憶しておくことが好ましい。そうすることで、次にステップＳ２０３の処理が繰返されるときに、（前回処理を行なった位置の）次の位置からデータブロックを抽出することができる。ステップＳ２０３で抽出されるデータブロックの解析に適した大きさとは、データ解析部１０６が解析する単位に依存して決定される。たとえば、解析対象のデータがＸＭＬ文書である場合は、データ解析部１０６が解析する単位としては、開始タグ、終了タグ、および空要素タグなどの、タグ、およびタグで囲まれた部分といった単位、さらに細かなブロックとして、タグ内に存在するタグ名、属性名、および属性値といった単位が該当する。なお、ステップＳ２０３では、データ解析部１０６において解析対象としないタグやタグ名などは無視するなどして読捨てて、解析を必要とするタグやタグ名などを対象としてデータブロックを抽出することが好ましい。【００７５】
次に、データブロック抽出部１０５によって、データブロックの抽出が成功したか否かが判断される（Ｓ２０５）。その結果、データブロックの抽出が成功したと判断された場合は（Ｓ２０５でＹＥＳ）、データ解析部１０６は、ステップＳ２０３で抽出されたデータブロックのデータを解析する（Ｓ２０７）。そして、再度ステップＳ２０３に処理が戻されて、ステップＳ２０３において、前回、ステップＳ２０３でデータブロックが抽出された位置以降の位置からデータブロックが抽出される。【００７６】
ステップＳ２０５での判断の結果、データブロックの抽出が失敗したと判断された場合は（ＳＤＯＭツリー２０５でＮＯ）、解析対象のデータのうち、未展開の部分があるか否かが判断される（Ｓ２０９）。ステップＳ２０５では、展開されたデータ自身が正しくないデータである場合に発生するエラーなど以外に、データブロックの抽出が展開済みデータの最後に至るまで実行されて完了したことや、解析対象のデータのうち未展開の部分があるためにデータブロックのデータが途中で切れていることが検出された場合に、データブロックの抽出が失敗したと判断される。なお、ステップＳ２０５で、データ自身が正しくないことが検出された場合には、ただちに処理を終了するようにしてもよい。【００７７】
ステップＳ２０９での判断の結果、解析対象のデータのうち未展開データがないと判断された場合（Ｓ２０９でＮＯ）、つまり、解析対象のデータの最後までデータブロックが抽出されてデータ解析が終了しているためにステップＳ２０５でデータブロックの抽出が失敗したと判断されている場合、本処理を終了する。【００７８】
ステップＳ２０９での判断の結果、解析対象のデータのうち未展開データがあると判断された場合は（Ｓ２０９でＹＥＳ）、未展開データがあるためにデータブロックのデータが途中で切れてステップＳ２０５でデータブロックの抽出が失敗したと判断されているので、さらにデータを展開して解析する必要がある。そこで、次に、データブロック抽出部１０５において、データ展開領域に破棄できないデータがあるか否かが判断される（Ｓ２１１）。【００７９】
ステップＳ２１１での判断の結果、破棄できないデータがデータ展開領域になければ（Ｓ２１１でＮＯ）、つまり、データ展開領域に展開されているすべてのデータが破棄できる場合には、データ展開部１０４によってデータ展開領域内のデータがすべて破棄されて処理がステップＳ２０１に戻り、ステップＳ２０１において、空になったデータ展開領域に、前回、ステップＳ２０１で展開された続きのデータが展開される。【００８０】
ステップＳ２１１での判断の結果、破棄できないデータがデータ展開領域にある場合（Ｓ２１１でＹＥＳ）、さらに、データブロック抽出部１０５において、データ展開領域に展開されているすべてのデータが破棄できないのか、一部のデータが破棄できないのかが判断される（Ｓ２１３）。ステップＳ２１３において、データ展開領域に展開されている一部のデータが破棄できないと判断される場合とは、データ展開領域に展開されたデータが途中で切れていてデータブロックとして抽出できなかった部分がある場合であって、その場合（Ｓ２１３でＮＯ）、データ展開部１０４によって、そのデータブロックとして抽出できなかった部分を残してそれ以外の部分が破棄され、残した部分の後ろに続きのデータが展開されることで、先程までデータが途中で切れていた部分についてもデータブロックとして抽出可能となる。そこで、この場合、データ展開部１０４によって、破棄できない部分がデータ展開領域の先頭へ移動される（Ｓ２１５）。これは、破棄できないデータの後ろにデータを展開するための前処理である。【００８１】
ステップＳ２１３において、データ展開領域に展開されているすべてのデータが破棄できないと判断される場合（Ｓ２１３でＹＥＳ）、現在のデータ展開領域の大きさではデータブロックに対して小さいと考えられるため、データ展開部１０４において、データ展開領域のサイズが拡大される（Ｓ２１７）。【００８２】
なお、ステップＳ２１３では、破棄できないデータがデータ展開領域のデータすべてであるか否かが判定されたが、破棄できないデータがデータ展開領域のサイズの８０％を超えた場合というような所定条件を満たすか否かが判定されてもよい。【００８３】
次に、データ展開部１０４において、ステップＳ２１３で破棄できないとされたデータの後ろに、前回展開したデータの続きのデータが展開される（Ｓ２１９）。ステップＳ２１９において、データ展開領域に連続してデータが展開されることで、データブロック抽出部１０５では一塊のデータブロックとして抽出することができ、データ解析部１０６に渡される。【００８４】
この後、処理はステップＳ２０３に戻され、上述の処理が繰返される。【００８５】
以降、解析対象のデータの具体例を挙げて、上述のデータ解析処理について具体的に説明する。【００８６】
本実施の形態にかかるデータ解析装置１において解析対象とされるデータが展開されて得られる中間データの具体例を図３に示す。この具体例での解析対象のデータは、図３に示される中間データが圧縮などの符合化されたものとする。なお、ここでは、解析対象とされるデータ、またはそのデータの中間データが、ＸＭＬ言語のサブセットであるＳＶＧ言語で記述されたものとして以下説明するが、実際は、このようないくつかのブロックを含んで構成されていて、それぞれのブロック必ずしも完全に独立していないような中間データや該中間データが符号化または圧縮されたデータであるものとする。たとえば、図３のようにテキストで記述されるデータだけでなく、このような中間データがＬＺＨやＧＺＩＰによって圧縮されたデータがデータ解析装置１に入力されてもよい。【００８７】
ここで、ＳＶＧ言語での記述における基本的な構文ルールについて説明する。【００８８】
ＳＶＧ言語で記述されるデータにおいて、開始タグは、文字「＜」と文字「＞」とで挟まれるタグ名で表現される。開始タグに属性が含まれる場合、タグ名と文字「＞」との間に、空白（スペース、タブ、または改行）、属性名、文字「＝」、および属性値の順番で、１つまたは複数の属性が記述される。なお、属性名と文字「＝」との間、および文字「＝」と属性値との間にも空白があってもよい。【００８９】
終了タグは、文字「＜／」と文字「＞」とで挟まれるタグ名で表現される。また、空タグは、文字「＜」と文字「／＞」とで挟まれるタグ名で表現される。空タグに属性が含まれる場合、タグ名と「／＞」との間に、開始タグと同様に記述される。【００９０】
なお、本具体例では、簡便のために、取扱われる中間データに、文字列「＜？」と文字列「？＞」で囲まれるＸＭＬ宣言文や、文字列「＜！ＤＯＣＴＹＰＥ」と文字「＞」で囲まれるＤＯＣＴＹＰＥ宣言や、文字列「＜！−−」と文字列「−−＞」で囲まれるコメント文や、文字列「＜！（ＣＤＡＴＡ［  ］」と文字列「］］＞」で囲まれるＣＤＡＴＡセクションなどのタグがないことを前提とするが、これらのタグを含む中間データを扱う場合であっても、ステータス情報に適切にその状況を表わすステータス情報を追加し、データブロック抽出部１０５およびデータ解析部１０６においてそのステータス情報に応じた処理とを可能とすることで対応できる。【００９１】
このようなデータが扱われる場合、データブロック抽出部１０５は、「タグ名」、「属性名・属性値」、および「内容（開始タグと終了タグとの間の文字）」を１つのデータブロックとして抽出するものとする。【００９２】
なお、データブロック抽出部１０５は、データブロックを抽出した際に生成する抽出状況を表わすステータス情報を記憶部１０３に記憶する。図４に、中間データが図３に示されるような解析対象のデータを解析する際に、データブロック抽出部１０５で生成されて記憶部１０３に記憶されるステータス情報の詳細の具体例を示す。図４に示されるように、データブロック抽出部１０５では、データブロックの抽出状況を表わすステータス情報として、たとえばＳｔａｔｕｓ１〜Ｓｔａｔｕｓ１２に表わされるようなステータス情報を生成して、記憶部１０３に記憶する。【００９３】
図４にその詳細が示されるようなステータス情報は、抽出したデータブロックと共にデータ解析部１０６に渡されてもよい。なお、ここで言うデータブロックの抽出状況とは、抽出されたデータブロックが、開始タグ名、終了タグ名、空タグ、内容、および属性名・属性値のいずれであるとか、データブロックの抽出に失敗した場合にどのようなデータブロックを抽出中であるとか、データブロックの開始位置をサーチ中であるなどの、データブロック抽出部１０５の状態を表わすものとする。【００９４】
また、この具体例においては、予め、データ展開領域として１０文字分の２０バイト（２バイト文字の場合１０文字で２０バイト必要）が用意されているものとする。なお、かかるデータ展開領域は、必要に応じて、５文字分の１０バイトずつ拡張されるものとする。【００９５】
データ展開部１０４においてデータ展開領域を拡張するときの拡張サイズは、データ解析装置ごとに固定のサイズであってもよいが、解析対象のデータサイズやその展開後や復号化後のデータサイズに応じて変更されてもよい。たとえば、解析対象データサイズの１０分の１と定められてもよいし、圧縮方法や符号化方法によってその割合が変更されてもよい。また、現在のデータ展開領域のサイズや状態、解析対象データのうちの未展開のデータのサイズなどに依存して決定されてもよい。たとえば、現在のデータ展開領域と同じ分だけ拡大するようにしてもよいし、未展開データのサイズの１０％だけ拡張するなどしてもよい。また、抽出されたデータブロックが「属性」である場合は、「タグ」の場合に比べて大きく拡張するなどしてもよい。【００９６】
最初に用意されるデータ展開領域のサイズも同様にして変更されてもよい。【００９７】
なお、展開後や復号化後のデータサイズについてはヘッダに記憶されている場合のみそれに応じて決定できるものであるが、本実施の形態にかかるデータ解析装置１は、展開後のデータサイズが不明な場合についても、予め定められたサイズや入力データサイズにより決定されるサイズのデータ展開領域を用意し、該領域に少しずつデータを展開していく。このため、本実施の形態にかかるデータ解析装置では、記憶部の記憶領域を有効に使用できる。【００９８】
ここで、図５を参照して、データが展開される際のデータ展開領域の状態の変化を説明する。【００９９】
図５には、状態（Ａ）として、上述のステップＳ２０１で、データ展開部１０４によって、記憶部１０３の中の予め用意されている１０文字分の２０バイトのデータ展開領域に、データの最初から１０文字分が展開された状態が示されている。【０１００】
このとき、ステップＳ２０３〜Ｓ２０７で、データブロック抽出部１０５は、最初の文字列「＜ｓｖｇ  」から文字列「ｓｖｇ」を開始タグ名のデータブロックとして抽出に成功すれば、データ解析部１０６に渡す。【０１０１】
データ解析部１０６は、データブロック抽出部１０５より渡されたデータブロック「ｓｖｇ」を開始タグ名としてその内容を解析して、ＤＯＭツリーにｓｖｇ要素のオブジェクトを追加する。データブロック抽出部１０５は、文字「＜」の次に来る文字列は開始タグ名で文字列「＜／」の次に来るのは終了タグ名であるとか、タグ名の後は文字「＞」または文字列「／＞」が出現するまでは「属性名・属性値」であるといったように、現在のどのような状況であるかを表わすステータス情報を生成して記憶部１０３に記憶し、管理する。そして、データブロック抽出部１０５は、ステータス情報を用いて抽出するデータブロックの種類を判定して、判定結果をデータ解析部１０６に伝える。【０１０２】
また、データブロック抽出部１０５からデータ解析部１０６に対して、抽出されたデータブロックと共に、または所定のタイミングで、記憶部１０３に記憶されたステータス情報が渡されてもよい。たとえば、図３の第２行の＜ｒｅｃｔ＞タグは内容を持たない空タグである。そこで、文字列「＜ｒｅｃｔ」が抽出されたときには、データブロック抽出部１０５から記憶部１０３を介してデータ解析部１０６に対して、抽出されたデータブロックが開始タグであるとのステータス情報が渡され、文字列「／＞」が抽出されたときにこのタグが空タグであることが判定される。この場合、データブロック抽出部１０５が文字列「／＞」をデータブロックとしてデータ解析部１０６に渡してデータ解析部１０６に空タグとして処理させてもよいし、データブロック抽出部１０５からデータ解析部１０６に対して、今までのデータブロックが空タグの内容であったというステータス情報が渡されてもよい。【０１０３】
また、データブロック抽出部１０５からデータ解析部１０６に対して、開始タグ名であるデータブロックが渡され、データ解析部１０６において解析された結果によって、データブロック抽出部１０５へフィードバックされて、データブロック抽出部１０５で管理されるステータス情報が変更されるようにしてもよい。たとえば、＜ｒｅｃｔ＞タグのときと＜ｔｅｘｔ＞タグのときとで、ステータス情報に基づいてデータブロック抽出部１０５における属性のデータブロックの抽出方法が変更されてもよい。【０１０４】
図５に状態（Ａ）として示されたように、データが展開されて、ブロック抽出部１０５からデータ解析部１０６に、開始タグ名であるデータブロックデータ「ｓｖｇ」が渡された後、ブロック抽出部１０５は、該開始タグ名に続く「属性名・属性値」のサーチ開始状態になる。上述のステップＳ２０３〜Ｓ２０７では、文字列「＜ｓｖｇ」に続く空白までサーチされているので、その次の文字は、文字「ｗ」となる。そこで、ブロック抽出部１０５は、「属性名・属性値」のサーチ中状態になる。もし、その次の文字として文字「／」や文字「＞」が出現した場合には、データ解析部１０６において、このｓｖｇ要素は、空タグや開始タグの終わりとして処理される。【０１０５】
さらに、ブロック抽出部１０５においてサーチが進められると、文字列「ｗｉｄｔｈ」の後ろでデータ展開領域が終了し、ブロック抽出部１０５が「属性名・属性値」サーチ中状態であってデータブロックの抽出が完了せずにデータ展開領域の最後に達してしまったので、ステップＳ２０５でデータブロックの抽出に失敗したと判断される（Ｓ２０５でＮＯ）。【０１０６】
さらに、まだ未展開のデータがあることが判断され、かつ、データ展開領域に、データ解析部１０６に渡していなくて破棄できない一部のデータである文字列「ｗｉｄｔｈ」があることが判断されるので（Ｓ２０９でＹＥＳ、かつＳ２１１でＹＥＳ、かつＳ２１３でＮＯ）、ステップＳ２１５において、図５に状態（Ｂ）として示されるように、展開されたデータである文字列「ｗｉｄｔｈ」が、データ展開領域の先頭に移動（コピー）される。さらに、ステップＳ２１９において、図５に状態（Ｃ）として示されるように、移動された文字列「ｗｉｄｔｈ」の後ろに続きのデータである文字列「＝“２４０」が展開される。【０１０７】
このように、ステップＳ２１９で解析対象のデータの途中から展開されるために、データ展開部１０４において、現在どこまで展開したかが記憶部１０３に記憶されることが好ましい。また、ステップＳ２１５で破棄できないデータを移動（コピー）するために、データブロック抽出部１０５において、破棄できないデータの先頭位置、または、データの先頭位置から現在サーチ中の場所までの長さをカウントして破棄するデータの位置と長さとが記憶部１０３に記憶されることが好ましい。さらに、ステップＳ２１５で破棄できないデータが移動（コピー）された後に、データブロック抽出部１０５において記憶部１０３に記憶された破棄できないデータの先頭位置、または、データの先頭位置から現在サーチ中の場所までの長さをカウントして破棄するデータの位置と長さとが、データ展開部１０４において更新されることが好ましい。【０１０８】
ブロック抽出部１０５においてサーチが進められると、文字列「ｗｉｄｔｈ＝“２４０」の後ろでデータ展開領域が終了し、ブロック抽出部１０５が「属性名・属性値」サーチ中状態であってデータブロックの抽出が完了せずにデータ展開領域の最後に達してしまったので、ステップＳ２０５でデータブロックの抽出に失敗したと判断される（Ｓ２０５でＮＯ）。【０１０９】
このとき、まだ未展開のデータがあることが判断され、かつ、データ展開領域のデータはすべて破棄できないことが判断されるので（Ｓ２０９〜Ｓ２１３でＹＥＳ）、ステップＳ２１７でデータ展開部１０４によって、図５に状態（Ｄ）として示されるように、データ展開領域が５文字分拡張される。そして、ステップＳ２１９でデータ展開部１０４によって、図５に状態（Ｅ）として示されるように、拡張されたデータ展開領域分のデータが展開され、再び、ステップＳ２０３〜Ｓ２０７でデータブロック抽出部１０５において抽出されたデータブロック「ｗｉｄｔｈ＝“２４０”」が、データ解析部１０６において「属性名＋属性値」として解析されて、ＤＯＭツリーに解析結果が反映される。以下、同様に、解析対象データのうち未展開のデータがなくなるまで、つまり解析対象データの最後まで、データブロックごとに順にデータが解析される。【０１１０】
このようにして、データ解析部１０６によって解析され、生成されたＤＯＭツリーの具体例を図６に示す。図６は、中間データが図３に示されるデータが解析された際に生成されるＤＯＭツリーの具体例を示している。【０１１１】
図６を参照して、ＤＯＭツリーには、ｓｖｇ要素（エレメント），ｒｅｃｔ要素，ｔｅｘｔ要素が含まれ、ｓｖｇ要素およびｒｅｃｔ要素、ｓｖｇ要素およびｔｅｘｔ要素は親子関係であることが表わされている。また、ｔｅｘｔ要素内にはコンテンツが存在することが表されている。さらに、各エレメントには、ｓｖｇ要素にはｗｉｄｔｈ属性，ｈｅｉｇｈｔ属性，ｖｉｅｗＢｏｘ属性、ｒｅｃｔ要素にはｗｉｄｔｈ属性，ｈｅｉｇｈｔ属性，ｓｔｙｌｅ属性、ｔｅｘｔ要素にはｘ属性，ｙ属性が存在することが表されている。出力部１０７は、データ解析装置１の出力するデータは、このようなエレメント同士とコンテンツとの親子関係や兄弟関係、それぞれの要素に含まれる属性とその属性値とを容易に取出すことができるデータを解析結果として出力する。【０１１２】
なお、ステップＳ２１７でデータ展開領域が拡張される条件は、上記では、ステップＳ２１３においてデータ展開領域に展開されているすべてのデータが破棄できないと判断される場合であるものとされたが、その他の条件として、たとえば、上述のように、ステップＳ２１３において、データ展開領域に展開済みのデータの８０％以上が破棄できないデータであると判断された場合としてもよい。さらに、現在抽出しているデータブロックの種類がタグ名なのか属性なのかなどによって、破棄できないデータが何％以上となったときにデータ展開領域が拡張されるかの条件が変更されてもよい。また、現在タグ名、属性、内容のいずれを抽出しているかによって、その条件が変更されるようにしてもよい。【０１１３】
なお、ステップＳ２１７でデータ展開部１０４によって、記憶部１０３の、現在のデータ展開領域とはまったく異なる領域に拡張されたデータ展開領域が用意されると、ステップＳ２１５で破棄できないデータを新たなデータ展開領域に移動（コピー）する際にその処理時間が長くなる。また、現在使用中のデータ展開領域を、破棄できないデータを新たなデータ展開領域コピーした後に解放するとしても、コピー処理中は、一時的に、記憶部１０３の使用量が倍増する。そのため、ステップＳ２１７でデータ展開領域が拡張される際には、現在のデータ展開領域の直後の領域が拡張されることが好ましい。【０１１４】
または、現在のデータ展開領域の直後の領域が拡張できない場合には、現在のデータ展開領域の直前の領域が拡張されることが好ましい。このようにすることで、コピー処理に記憶部１０３の所定領域が用いられるものの、現在のデータ展開領域とはまったく異なる領域に拡張されたデータ展開領域が用意される場合よりも記憶部１０３の使用量を低下させることができる。【０１１５】
ここで、図７を用いて、記憶部１０３においてデータ展開部１０４がデータ展開領域を確保する方法について詳しく説明する。図７において、ハッチングされたブロックは使用中であるメモリ領域を表わし、ハッチングされていないブロックは未使用であるメモリ領域を表わしている。【０１１６】
データブロック抽出部１０５でデータブロックを抽出する際や、データ解析部１０６でデータの解析する際には、通常、先頭のメモリ番地およびその長さ、または最後のメモリ番地が渡されるためデータ展開領域として、記憶部１０３において連続したメモリ領域が確保されなくてはならない。【０１１７】
いま、記憶部１０３上のメモリ領域１００６がデータ展開領域として確保されており、ステップＳ２１７においてさらに同じだけデータ展開領域を拡張する場合、データ展開部１０４によって、データ展開領域であるメモリ領域１００６に隣接する後ろのメモリ領域以降がサーチされる。データ展開領域であるメモリ領域１００６の後ろに隣接する未使用なメモリ領域がデータ展開領域拡張分だけ確保可能であるならば、ステップＳ２１７においてメモリ領域１００６の後ろ方向にデータ展開領域が拡張される。つまり、メモリ領域１００７がサーチされて未使用であればそのサイズがサーチされて、拡張するサイズと比べて足りていればメモリ領域１００７が拡張されたデータ展開領域として確保される。足りなければ、さらにメモリ領域１００８がサーチされて、同様に未使用でメモリ領域１００７のサイズとメモリ領域１００８のサイズとを加えて拡張に要するサイズに足りていれば、それらのメモリ領域が拡張されたデータ展開領域として確保される。このように、使用中のメモリ領域までのメモリサイズが順にサーチされ、拡張に要するサイズと比較される。【０１１８】
さらに、現在データ展開領域として確保されているメモリ領域の後ろ方向に、空いているメモリ領域が拡張に要するサイズだけ確保できない場合には、その前方向に、同様に、使用中のメモリ領域までのメモリサイズが順にサーチされ、拡張に要するサイズと比較される。たとえば、メモリ領域１００３がデータ展開領域として確保されており、ステップＳ２１７においてさらにデータ展開領域を拡張する場合、メモリ領域１００３の後ろのメモリ領域１００４は使用中であるので、メモリ領域１００２がサーチされて、拡張に要するサイズに足りていればメモリ領域１００２が拡張されたデータ展開領域として確保される。【０１１９】
また、データ展開領域として確保されているメモリ領域の前方向または後ろ方向の片側のメモリ領域では拡張に要するサイズに足りない場合、前方向および後方向の両空きメモリ領域を加えたサイズが拡張に要するサイズに足りていれば、その両方向のメモリ領域が拡張されたデータ展開領域として確保される。【０１２０】
このようにデータ展開領域を拡張する場合、連続するメモリ領域が拡張されたデータ展開領域として確保されることが好ましい。これは、上述のように、現在のデータ展開領域とはまったく異なる領域に拡張されたデータ展開領域が用意される場合よりも記憶部１０３の使用量を低下させることができるためである。つまり、現在のデータ展開領域のサイズが４００バイトであってさらに２００バイト分拡張しようとした場合、データ展開領域に隣接するメモリ領域へ拡張されると、現在のデータ展開領域のサイズと合わせて６００バイト分確保されれば足りるが、それ以外の場所に拡張されたデータ展開領域が確保された場合には、破棄できないデータが新たに確保されるメモリ領域にコピーされるまで、新たに確保される６００バイト分のメモリ領域と現在使用している４００バイト分のメモリ領域との合計１０００バイト分のメモリ領域が必要になる。【０１２１】
また、現在のデータ展開領域に展開されているすべてのデータが破棄できないデータである場合、データ展開領域の後ろにデータ展開領域を拡張して続きのデータを展開することで、破棄できないデータをデータ展開領域の先頭へシフトする処理が不要となる。もしも、データ展開領域の前方へデータ展開領域が拡張された場合や、まったく異なるメモリ領域に拡張されたデータ展開領域が確保された場合には、破棄できないデータを新たなデータ展開領域の先頭へコピーする処理が必要になるため、前者の場合よりも処理時間が長くなってしまう。【０１２２】
さらに、図８および図９を用いて、データブロック抽出部１０５による要素（エレメント）のタブ名であるデータブロックの抽出処理およびステータス情報の更新について具体的に説明する。【０１２３】
図８にフローチャートに示される処理は、ステータス情報が参照されて、現在のデータブロック抽出部１０５でのデータブロックの抽出状況が図４に示される「Ｓｔａｔｕｓ１」である場合にデータブロック抽出部１０５によって行なわれる処理で、エレメントの始まりである文字「＜」が抽出されるまで処理である。「Ｓｔａｔｕｓ１」で表わされる抽出状況は、上述のように、解析対象のデータ（またはその中間データ）がＸＭＬ宣言やＤＯＣＴＹＰＥ宣言やコメント文がないようなＳＶＧ文書の場合、最初に設定される抽出状況である。また、抽出状況が「Ｓｔａｔｕｓ７」「Ｓｔａｔｕｓ８」である場合の処理において、エレメントの内容（コンテンツ）のデータブロック抽出中に文字「＜」が出現した場合などに、ステータス情報が「Ｓｔａｔｕｓ１」に設定される。【０１２４】
図８を参照して、この場合、始め、データブロック抽出部１０５によって読取開始位置の文字が判別され、かかる文字が文字「＜」でも空白（スペース）でもない他の文字である場合には（Ｓ４０１でＮＯ、かつＳ４０３でＮＯ）、本処理を終了して抽出結果としてエラーが返される。【０１２５】
かかる文字がスペースである場合には次の文字が判別されて（Ｓ４０３でＹＥＳ，Ｓ４０５）、その文字が文字「＜」であると（Ｓ４０１でＹＥＳ）、さらに次の文字が判別される。そして、文字「＜」の次の文字が文字「／」でない場合には（Ｓ４０９でＮＯ）、その抽出状況が、開始タグ名のデータブロック開始位置と終了位置とを検出するための「Ｓｔａｔｕｓ２」へと移行され、ステータス情報が更新される。そして、該抽出状況でのデータブロックの抽出処理が続行される。【０１２６】
一方、文字「＜」の次の文字が文字「／」である場合には（Ｓ４０９でＹＥＳ）、その抽出状況が、終了タグ名のデータブロック開始位置と終了位置とを検出するための「Ｓｔａｔｕｓ１２」へと移行され、ステータス情報が更新される。そして、該抽出状況でのデータブロックの抽出処理が続行される。【０１２７】
なお、ステップＳ４０５やＳ４０７において、次の文字の判別が行なわれる場合にデータ展開領域に展開されたデータの終わりを超える場合には、割込み処理で本処理をメインルーチンである図２の処理に戻し、ステップＳ２０５において、データブロックの抽出が失敗したものと判断される。そして、ステップＳ２１１において、データ展開領域に破棄できないデータはない、つまりデータ展開領域に展開されているすべてのデータが破棄できると判断される。【０１２８】
上述のように、データブロック抽出部１０５でのデータブロックの抽出状況が「Ｓｔａｔｕｓ２」となったときに実行される処理を、図９を用いて説明する。【０１２９】
図９を参照して、始めに、タグ名の最初の位置（データブロックの開始位置）が記憶されて（Ｓ６０１）、続く文字がタグ名として用いられる文字である場合には、順にその文字が判別される（Ｓ６０３でＹＥＳ，Ｓ６０５）。そして、続く文字がタグ名として用いられる文字でなくなると（Ｓ６０３でＮＯ）、その位置がタグ名の最後の位置（データブロックの終了位置）として記憶される（Ｓ６０７）。【０１３０】
なお、その位置の文字が空白（スペース）である場合には（Ｓ６０９でＹＥＳ）、その抽出状況が、続いて属性名を検出するための「Ｓｔａｔｕｓ３」へと移行され、ステータス情報が更新される。そして、該抽出状況でのデータブロックの抽出処理が続行される。また、その位置の文字が文字「＞」である場合には（Ｓ６０９でＮＯ、かつＳ６１１でＹＥＳ）、その抽出状況が、続いてエレメントの内容（コンテンツ）を検出するための「Ｓｔａｔｕｓ７」へと移行され、ステータス情報が更新される。そして、該抽出状況でのデータブロックの抽出処理が続行される。また、その位置の文字が文字「／」である場合には（Ｓ６０９でＮＯ、Ｓ６１１でＮＯ、かつＳ６１３でＹＥＳ）、その抽出状況が、続いてタグの終了を検出するための「Ｓｔａｔｕｓ１１」へと移行され、ステータス情報が更新される。そして、該抽出状況でのデータブロックの抽出処理が続行される。また、その位置の文字がそれ以外である場合には（Ｓ６０９〜Ｓ６１３でＮＯ）、本処理を終了して抽出結果としてエラーが返される。【０１３１】
上述のように、そのステータス情報が更新されて、データブロック抽出部１０５での抽出状況が「Ｓｔａｔｕｓ２」から「Ｓｔａｔｕｓ３」、または「Ｓｔａｔｕｓ２」から「Ｓｔａｔｕｓ７」に変化したときには、データブロック抽出部１０５からデータ解析部１０６には、タグ名の最初の位置および最後の位置を示す情報、またはタグ名の長さを示す情報が渡されることが好ましい。このようにすることで、データ解析部１０６では、タグ名を含むデータブロックを解析が可能となる。【０１３２】
なお、ステップＳ６０５において、次の文字の判別を行なう場合にデータ展開領域に展開されたデータの終わりを超える場合には、割込み処理で本処理をメインルーチンである図２に示された処理に戻し、ステップＳ２０５において、データブロックの抽出が失敗したものと判断される。そして、ステップＳ２１１において、データ展開領域に破棄できないデータはない、つまりデータ展開領域に展開されているすべてのデータが破棄できると判断される。【０１３３】
このようにして、データブロック抽出部１０５では、ステータス情報がデータブロックの抽出状況に応じて刻々と更新されながら、そのステータス情報に基づいてデータ展開領域に展開された中間データからデータブロックの抽出処理が進められ、抽出されたデータブロックがデータ解析部１０６に渡される。また、データブロックと共に（またはデータブロックが渡されるタイミングとは異なったタイミングで）、データブロックに関する情報がデータブロック抽出部１０５からデータ解析部１０６に渡される。【０１３４】
なお、現在の抽出状況が「Ｓｔａｔｕｓ７」となって図３の第３行に存在するコンテンツ（「内容」）であるデータブロックの抽出を開始する場合、その内容には文字列が含まれるだけなので、抽出状況が「Ｓｔａｔｕｓ８」（「内容」のデータブロックを抽出中）である際の抽出処理では、データブロック抽出部１０５は、該内容の最後までを１つのデータブロックとして抽出せずに、１文字単位でデータブロックとして抽出してデータ解析部１０６に渡すようにしてもよい。また、抽出状況が「Ｓｔａｔｕｓ８」であるときの抽出処理において、次の文字の判別が行なわれる場合にデータ展開領域に展開されたデータの終わりを超えるとき、データブロック抽出部１０５ではその状態を維持して、データ解析部１０６にそれまでの「内容」のデータブロックを渡し、続きの中間データが展開されてからデータブロックの抽出を続行してデータ解析部１０６に先程渡したデータブロックの続きとして続いて抽出されたデータブロックを渡すようにしてもよい。【０１３５】
さらに、ＸＭＬ言語のサブセットであるＳＶＧ言語で記述された中間データの他の具体例として、データ解析装置１において図１０に示されるような中間データからデータブロックを抽出して解析を行なう場合について説明する。【０１３６】
図１０に示される中間データは、第２行〜第４行にｉｍａｇｅ要素が含まれて、そのｘｌｉｎｋ：ｈｒｅｆ属性にｂａｓｅ６４で符合化された画像データが属性値として記述されている。このような場合に、データ解析部１０６は、ｉｍａｇｅ要素のｘｌｉｎｋ：ｈｒｅｆ属性の属性名を解析すると、次に、データブロック抽出部１０５に対して、属性値のデータブロックをたとえば２０文字単位で渡すように指定するなど、データブロック抽出部１０５でのデータブロックの抽出方法、データブロックの渡し方などの挙動を変更できるようにしてもよい。符合化方法ｂａｓｅ６４は、符号化されたすべてのデータがそろわなくても変換を開始することが可能である符号化方法である。そのため、データ解析部１０６は、データブロックの先頭にある文字列「ｄａｔａ：；ｂａｓｅ６４，」を解析して画像データの符合化方法がｂａｓｅ６４であることが検出できると、このように小さなデータブロックの単位をデータブロック抽出部１０５から受取って解析を実行することが可能となる。【０１３７】
上述の具体例は、データ解析装置１において解析対照のデータが、文字コードの文字列データを符号化したデータであるときの例である。文字コードとしては、ＩＳＯ／ＩＥＣ  １０６４６−１として定められた国際文字集合であるＵＣＳ（Ｕｎｉｖｅｒｓａｌ  ｍｕｌｔｉ−ｏｃｔｅｔ  ｃｏｄｅｄ  Ｃｈａｒａｃｔｅｒ  Ｓｅｔ）−２やＵＣＳ−４、変換方法ＵＴＦ（ＵＣＳ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ  Ｆｏｒｍａｔ）−８で変換された文字コード、などがある。【０１３８】
ＵＣＳ−２およびＵＣＳ−４は、１文字がそれぞれ２バイトおよび４バイトの固定長のバイト列で表現される文字コードである。中間データがこのような固定長のバイト列で表現される文字コードからなるデータである場合、データ展開部１０４によって解析対象のデータが中間データに展開される際に、データ展開部１０４は、中間データから文字コードを検出し、検出した文字コードを所定の固定長のバイト列へ変換する。【０１３９】
一方、ＵＴＦ−８で変換された文字コードは、１文字が１〜６バイトの可変長なバイト列で表現される文字コードである。データブロック抽出部１０５およびデータ解析部１０６において、ＵＴＦ−８で変換された文字コードのような可変長な文字コードのままデータが扱われると、文字コードを１文字分読進めるだけでもバイト数が異なるため処理が困難になる。そこで、データ展開部１０４が解析対象のデータを中間データに展開する際に、中間データがそのような可変長の文字コードからなるデータである場合、データ展開部１０４は、中間データから文字コードを検出し、検出した文字コードを固定長のバイト列へ変換することが好ましい。【０１４０】
さらにこのとき、データ展開部１０４は、データ展開領域の大きさを、文字コードを変換するバイト列の固定長をデータ展開領域の最小単位として決定することが好ましい。また、データ展開部１０４は、解析対象のデータに未展開な部分があることによって、中間データに１文字のデータに満たない文字コードが含まれる場合、その１文字のデータに満たない文字コードをデータ展開領域の先頭に移動して、その後ろに解析対象のデータの続きを展開して、１文字のデータとしてこれらの文字コードを固定長のバイト列へ変換することが好ましい。また、１文字のデータを１つのデータブロックとしてもよい。この場合、データ解析装置は１文字単位でデータを解析して現在の解析状態を変更する。【０１４１】
上述の具体例では、図３や図１０に示されたような、中間データがＸＭＬ言語のサブセットであるＳＶＧ言語で記述されたデータである符号化されたデータが解析対象のデータとしたが、解析対象のデータは、中間データが図１１に示されるようなバイナリとなるものであってもよい。この場合であっても、本実施の形態にかかるデータ解析装置では、解析対象のデータがテキストデータである場合と同様にして解析処理を実行することができる。そこで、本実施の形態にかかるデータ解析装置で中間データが図１１に示されるようなバイナリであるデータを解析する場合について、以下に具体的に説明する。【０１４２】
ここで、具体的に、中間データであるバイナリは、図１２に示されるようなデータ構造である命令、または図１３および図１４に示されるようなデータ構造である命令であるとする。【０１４３】
図１２に示されるデータ構造である命令とは、最初の１バイトが命令で、この命令に付属するデータのバイト数が格納され、その後に付属するデータが続く。【０１４４】
図１３に示されるデータ構造である命令とは、最初の１バイトが命令で、その後にこの命令に付属するデータが続くが、図１４に示されるように、命令の種類によってデータのバイト数は予め定められている。たとえば、「０×１２」命令には５バイトのデータが必ず付属することが予め定められており、「０×２３」命令は６バイトのデータが必ず付属することが予め定められている。【０１４５】
まず、展開すると図１２の形式であるバイナリとなるデータを解析する場合について、図１５を用いて説明する。【０１４６】
図１５には、状態（Ａ）として、上述のステップＳ２０１で、データ展開部１０４によって、データの最初から５バイト分が展開された状態が示されている。【０１４７】
このとき、データの最初が「０×１２  ０×０４」であることから、データブロック抽出部１０５によって、この後に４バイトのデータが付属することが判断される。そこで、データブロック抽出部１０５は、現在データ展開領域に展開されている「０×１２  ０×０４」に続くデータが３バイトしかないので、ステップＳ２０３〜Ｓ２０７において、データ展開部１０４に対してさらにデータを展開するように要求する。【０１４８】
なお、現在データブロック抽出部１０５が抽出しようとしているデータブロックは、データの最初の１バイトからであるため、データ展開領域にある最初の１バイトから破棄できないデータであることが判断される（Ｓ２０９〜Ｓ２１３でＹＥＳ）。そこで、ステップＳ２１７において、図１５に状態（Ｂ）として示されるように、データ展開部１０４によって、データ展開領域が５バイト分拡張される。【０１４９】
ステップＳ２１９でデータ展開部１０４によって、図１５に状態（Ｃ）として示されるように、拡張されたデータ展開領域に、すでに展開されているデータの後ろに続きのデータが展開される。そして、ステップＳ２０５で、データブロック抽出部１０５は先頭から６バイトをデータブロックとして抽出に成功して、ステップＳ２０７でデータ解析部１０６に渡される。【０１５０】
次に、ステップＳ２０３でデータブロック抽出部１０５によって、７バイト目以降からデータブロックが抽出される。データの最初から７，８バイト目は「０×２３  ０×０５」であることから、データブロック抽出部１０５によって、この後に５バイトのデータが付属することが判断される。しかし、この後２バイトのみでデータが切れているため、データ展開領域にある７バイト目以降が破棄できないデータであることが判断される（Ｓ２０９でＹＥＳ、Ｓ２１１でＹＥＳ、かつＳ２１３でＮＯ）。そこで、ステップＳ２１５において、図１５に状態（Ｄ）として示されるように、７〜１０バイト目のデータがデータ展開領域の先頭に移動され、ステップＳ２１９において、図１５に状態（Ｅ）として示されるように、その後に続くデータが展開される。【０１５１】
ステップＳ２０３において、データブロック抽出部１０５は、データ展開領域の先頭から７バイトをデータブロックとして抽出し、ステップＳ２０７でデータ解析部１０６に渡される。ステップＳ２０７で、データ解析部１０６は、データブロック抽出部１０５から渡されたデータブロックとから命令と付属データとを解析して、その内容を出力データとして構築する。【０１５２】
次に、展開すると図１３および図１４の形式であるバイナリとなるデータを解析する場合について、図１５を用いて説明する。【０１５３】
同様に、図１５には、状態（Ａ）として、上述のステップＳ２０１で、データ展開部１０４によって、データの最初から５バイト分が展開された状態を示されている。状態（Ａ）では、データの最初が「０×１２」であることから、データブロック抽出部１０５によって、図１４に示される規則に基づいて、この後に５バイトのデータが付属することが判断される。そこで、データブロック抽出部１０５は、現在データ展開領域に展開されている「０×１２」に続くデータが４バイトしかないので、ステップＳ２０３〜Ｓ２０７において、データ展開部１０４に対してさらにデータを展開するように要求する。【０１５４】
なお、現在データブロック抽出部１０５が抽出しようとしているデータブロックは、データの最初の１バイトからであるため、データ展開領域にある最初の１バイトから破棄できないデータであることが判断される（Ｓ２０９〜Ｓ２１３でＹＥＳ）。そこで、ステップＳ２１７において、同様に、図１５に状態（Ｂ）として示されるように、データ展開領域が５バイト分拡張される。【０１５５】
ステップＳ２１９でデータ展開部１０４によって、図１５に状態（Ｃ）として示されるように、拡張されたデータ展開領域に、すでに展開されているデータの後ろに続きのデータが展開される。そして、ステップＳ２０５で、データブロック抽出部１０５は先頭から６バイトをデータブロックとして抽出に成功して、ステップＳ２０７でデータ解析部１０６に渡される。【０１５６】
次に、ステップＳ２０３でデータブロック抽出部１０５によって、７バイト目以降からデータブロックが抽出される。データの最初から７バイト目は「０×２３」であることから、図１４に示される規則に基づいて、この後に６バイトのデータが付属することが判断される。しかし、この後３バイトのみでデータが切れているため、データ展開領域にある７バイト目以降が破棄できないデータであることが判断される（Ｓ２０９でＹＥＳ、Ｓ２１１でＹＥＳ、かつＳ２１３でＮＯ）。そこで、ステップＳ２１５において、図１５に状態（Ｄ）に示されるように、７〜１０バイト目のデータがデータ展開領域の先頭に移動され、ステップＳ２１９において、図１５に状態（Ｅ）として示されるように、その後に続くデータが展開される。【０１５７】
ステップＳ２０３において、データブロック抽出部１０５は、データ展開領域の先頭から７バイトをデータブロックとして抽出し、ステップＳ２０７でデータ解析部１０６に渡される。【０１５８】
本実施の形態にかかるデータ解析装置１において主に図１５を参照して説明したデータ解析処理が実行されることで、解析対象のデータが、データブロックの長さが明示されていないようなデータ構造のデータであった場合でも、解析対象のデータ、または該データが展開されて得られる中間データが記憶されている領域のうち、解析が終了した部分が解放されて作業領域として使用できる。そのため、解析対象のデータが、データブロックの長さが明示されていないデータ構造のデータを圧縮ないし符号化されたデータであっても、データ展開領域として展開後のデータ容量に比して少ない大きさで解析でき、データ解析時の記憶装置の使用量を削減することができる。【０１５９】
［第２の実施の形態］
本実施の形態のデータ解析装置の基本的な構成は、第１の実施の形態において図１等を参照して説明したデータ解析装置の構成と同様のものとすることができる。したがって、以下、図１に記載のデータ解析装置１を、本実施の形態のデータ解析装置として説明する。【０１６０】
本実施の形態のデータ解析装置は、圧縮されたマークアップ言語のデータ（たとえば、圧縮されたＳＶＧデータ（ＳＶＧＺデータ））を展開し、そして、展開後のデータの内部データ構造を解析するための処理（データ解析処理）の態様に特徴を有する。【０１６１】
図１８は、本実施の形態のデータ解析装置において実行されるデータ解析処理のフローチャートである。以下、図１８を参照して、本実施の形態のデータ解析装置の動作を説明する。なお、図１８のフローチャートに示される処理は、たとえば、制御部１０１が記憶部１０３に記憶されているプログラムを読出して実行し、図１に示される各部を制御することにより、実現される。【０１６２】
本実施の形態におけるデータ解析処理では、まず、入力部１０２を介して入力されるＳＶＧＺデータが、データ展開部１０４によって、記憶部１０３内の連続するバッファとして確保されたデータ展開領域（後述する、図２３の展開用バッファ領域１０３Ａ）に展開される（Ｓ２００１）。なお、Ｓ２００１の処理では、データ展開部１０４は、上記した展開用のバッファ領域の大きさに応じた容量のＳＶＧＺデータを展開する。具体的には、たとえば、１０ＫバイトのＳＶＧＺデータをすべて展開すると１００ＫバイトのＳＶＧデータとなる場合、展開用のバッファ領域の容量が１００Ｋバイトと確保されていることを条件として、１０ＫバイトのＳＶＧＺデータを一度に展開する。同様の場合であって、展開用のバッファ領域の容量が５０Ｋバイトしか確保されていないときには、データ展開部１０４は、一度に展開するＳＶＧＺデータの容量を５Ｋバイトとする。【０１６３】
次に、データブロック抽出部１０５は、展開されたデータを字句解析し、ＸＭＬ文法に従って決定されるデータブロックを検出する（Ｓ２００３）。ＳＶＧ言語は、ＸＭＬ言語のサブセットであるので、ＸＭＬ文法に従っている。そして、Ｓ２００３における「ＸＭＬ文法に従ったデータブロックの検出」とは、１つ以上のスペース文字、キャリッジリターン（ｃａｒｒｉａｇｅ  ｒｅｔｕｒｎ）、ラインフィード（ｌｉｎｅ  ｆｅｅｄ）、タブで構成される「空白（ｗｈｉｔｅ  ｓｐａｃｅ）」またはマークアップ区切り記号（ｍａｒｋｕｐ  ｄｅｌｉｍｉｔｅｒ）の出現により、データブロックの始まりないし終わりを検出する方法を含む。また、さらに、等号や一重引用符、二重引用符の出現によってブロックの始まりまたは終わりを検出するようにしてもよい。【０１６４】
なお、Ｓ２００３における処理によって、データブロックの途中でデータ展開領域の最後まで字句解析が進んだ場合は、データブロック抽出部１０５は、フラグをセットする等して、そのデータブロックの最後がその時点で展開領域内には存在しないことを表す。そして、当該データブロックにおける続きのデータが、次回のＳ２００１での処理においてデータ展開部１０４によって展開用のバッファ領域に展開され、そして、次回のＳ２００３での処理において、データブロック抽出部１０５により、前回、展開用のバッファ領域の最後で途切れたデータブロックの終わり（最後尾）を構成するデータの有無が検出される。【０１６５】
また、データブロック抽出部１０５は、ＸＭＬ  ＳｃｈｅｍａやＲｅｌａｘなどの、スキーマ言語で記述された文法ルールに従ってデータブロックの解析を行なうように構成されてもよい。たとえば、要素Ａで囲まれる部分には２つの要素Ｂを含むことができるという制限があった場合、データ解析部１０６からの解析結果により要素Ａで囲まれる部分に存在する要素Ｂの数をフィードバックすることで３つ目の要素Ｂの属性名や属性値やコンテンツに関してはデータブロック抽出を行わないようにしてもよい。【０１６６】
また、データブロック抽出部１０５は、複数のスキーマ言語に従って、データブロックの解析を行なうことができ、データブロックの種類やユーザの設定等に基づいて、データブロックの解析に利用するスキーマ言語を変更することもできる。【０１６７】
そして、データブロック抽出部１０５は、データブロックの種類をデータ解析部１０６に通知する（Ｓ２００４）。例えば、検出したデータブロックの内容が開始タグ名や属性名であるなどＸＭＬ解析で得られる情報を通知する。この場合の通知として実際になされる処理としては、具体的には、たとえば、データ解析部１０６における意味解析のための処理の開始の起因となるフラグをセットすること等が挙げられる。また、ここでの通知では、第１の実施の形態において図４を用いて説明したように、ステータス情報が利用される。【０１６８】
次に、データブロック抽出部１０５は、抽出したデータブロックが最初から最後まで、上記した展開用のバッファ領域にあるかを制御部１０１に通知する（Ｓ２００５）。【０１６９】
そして、データ解析部１０６は、Ｓ２００５で検出したデータブロックの最初から最後まで展開用のバッファ領域にある場合、当該展開領域上のデータブロックについて、データの意味解析を行なう（Ｓ２００７）。なお、Ｓ２００７の意味解析により、たとえば、データブロックに対して、ＳＶＧとしての意味解析がなされることにより、ＤＯＭツリーの生成と現在の解析状態の遷移とが行なわれる。【０１７０】
次に、Ｓ２００７でのデータ解析結果を元に、データ解析部１０６は、データブロック抽出部１０５による次のデータブロックの検出の際のデータブロックの種類や単位（大きさ）を決定する（Ｓ２００８）。たとえば、コメントはデータブロックとして抽出しないとすれば、コメントの開始である「＜！−−」が出現した場合はコメントの終了である「−−＞」が出現するまで、データを読み捨てるということは可能である。逆に、コメントをデータブロックとして抽出する場合は、「＜！−−」と「−−＞」で囲まれる文字列を１つのデータブロックとしてもよいが、１文字単位でデータブロックとして扱ってもよい。【０１７１】
Ｓ２００８でのデータブロックの種類や単位の処理では、例えば、コメントの開始である「＜！−−」が出現した場合は、コメントの終了である「−−＞」というデータブロックを検出するまでは、データは読み捨てられる。また、ｔｅｘｔの開始タグと終了タグに囲まれた内容は、テキスト情報として表示されるべき文字が入っているので、１文字単位を、データブロックとすることが望ましい。なお、前回のデータブロック抽出部１０５におけるデータ解析の結果が、ｉｍａｇｅ要素のｘｌｉｎｋ：ｈｒｅｆという属性名を含む場合には、解析の対象となったデータブロックには、当該属性名に対応した属性値の開始である「“」と終わりを表す「”」との間に、属性値として、ファイル名の場合とｂａｓｅ６４などでエンコードされたデータがテキストとして埋め込まれている場合とがある。このような場合には、データ解析部１０６は、ファイル名かデータのどちらのデータであるかを判定するのに十分な大きさだけのデータを対象として意味解析を行なう。具体的には、まず、例えば１００バイト分だけを意味解析し、ｂａｓｅ６４でエンコードされている場合にのみ、１文字単位で解析してデコードするようにしてもよい。【０１７２】
次に、データブロック抽出部１０５が、データブロックを検出するために展開用のバッファ領域の最後まで字句解析をしたかを調べ（Ｓ２００９）、まだ最後まで字句解析をしていない場合は、Ｓ２００３に処理が戻される。一方、最後まで字句解析がなされていた場合には、入力部１０２から入力されたデーたの中で未展開のデータがあるかが調べられ（Ｓ２０１７）、未展開のデータがあれば、Ｓ２００１に処理が戻される。未展開のデータが無ければ、データ解析処理が終了する。【０１７３】
一方、Ｓ２００５で、検出したデータブロックの一部のみが展開用のバッファ領域に存在するとされた場合には、データブロック抽出部１０５は、現在展開用のバッファ領域に展開されているデータを、結合用の連続バッファ領域（後述する、図２３の結合用の連続バッファ領域１０３Ｂ）へコピーする（Ｓ２０１１）。なお、結合用の連続バッファ領域とは、記憶部１０３内に定義された記憶領域であって、上記した展開用のバッファ領域とは別に定義される、連続した、記憶領域である。【０１７４】
前記記憶された残りのデータの開始位置から、前記データブロックの次のデータブロックを抽出する結合用の連続バッファ領域の容量は、たとえば、データブロック抽出部１０５の文字解析の態様に応じて、決定される。つまり、たとえば、データブロック抽出部１０５がＸＭＬ文法に従って文字解析を行なっている場合には、ＸＭＬ文法に従って、決定される。たとえば、ＸＭＬ文法では、「＜ｔｅｘｔ  」「＜ｔｅｘｔ＞」「＜ｔｅｘｔ／＞」というように、要素名は、必ず、「＜」の直後から空白（改行も含む）か「＞」「／」が出現するという決まり事があり、これらが出現するまでを要素名というように決まっている。結合用の連続バッファ領域の容量は、データブロックが要素名の場合は５０バイト、属性名の場合は１００バイトというようにあらかじめ決めておいてもよいし、足りなくなれば、随時、必要な大きさだけ、結合用の連続バッファ領域の容量を増やすようにしてもよい。【０１７５】
なお、検出したデータブロックの一部のみが展開用のバッファ領域にある場合とは、データブロックが、展開用のバッファ領域の最初部分で途切れている状態（状態１）か、最後の部分で途切れている状態（状態２）か、または、最初と最後の両方で途切れている状態（状態３）にある場合である。【０１７６】
状態２の場合、つまり、展開用のバッファ領域において、データブロックの最初の部分が存在しても最後の部分が途切れている場合は、データブロック抽出部１０５は、そのデータブロックのうち、展開用のバッファ領域に存在する部分を、結合用の連続バッファ領域へコピーするだけでよい。【０１７７】
状態３の場合、つまり、データブロックの最初で途切れている場合と最後で途切れている場合は、途切れた部分より前に存在するデータが、それまでの処理で既に結合用の連続バッファ領域にコピーされているので、データブロック抽出部１０５は、当該すでにコピーされているデータの後ろに現在展開用のバッファ領域にあるデータをコピーすることにより、途切れた部分同士を接合させる。【０１７８】
なお、データブロック抽出部１０５は、結合用の連続バッファ領域について、その容量が、上記のようにデータを接合させるのに足りるか否かを判断し、小さいと判断した場合、十分な大きさの結合用の連続バッファ領域を、図２４に連続バッファ領域１０３Ｃとして示すように、記憶部１０３内で別途確保するよう構成されてもよい。この場合、データブロック抽出部１０５は、当該新たに確保した結合用の連続バッファ領域１０３Ｃで、データを接合させる。この場合の、新たに確保された連続バッファ領域１０３Ｃにより、本発明の第３のバッファが構成される。【０１７９】
また、Ｓ２０１１におけるデータのコピーは、Ｓ２００３において、データブロック抽出部１０５によってデータブロックの終わりまたは展開用のバッファ領域の終わりが検出されたときに、ブロック単位で行なわれてもよいし、１文字単位や１バイト単位のように、さらに小さな単位で、データブロックの終わりが検出できるまで逐次行なわれてもよい。【０１８０】
そして、Ｓ２０１１の処理の後、データブロック抽出部１０５は、データブロックの最初から最後までのデータが、結合用の連続バッファ領域に存在するか否かを調べ（Ｓ２０１３）、データブロックの一部しか存在しなければＳ２００９に処理を進める。一方、全てが存在すれば、データ解析部１０６が、結合用の連続バッファ領域に存在するデータブロックを、意味解析し（Ｓ２０１５）、処理をＳ２００８に進める。【０１８１】
なお、結合用の連続バッファ領域にデータブロックの一部のデータしか存在しないと判断された場合、Ｓ２００９に処理が進められてデータブロックの検出が展開用のバッファ領域の最後まで行なわれているため、Ｓ２００９からＳ２０１７に処理が進められた際には、必ず、未展開データが存在すると判断されるはずである。このことから、データ解析装置では、結合用の連続バッファ領域にデータブロックの一部のデータしか存在しないと判断されたとき（Ｓ２０１３でＮＯ判断時）に、Ｓ２０１７で未展開データが存在しないと判断された場合（Ｓ２０１７でＮＯ判断時）には、エラー処理がなされる。エラー処理とは、たとえば、データの解析に関する処理が停止され、エラーが発生した旨の報知等がなされる処理を言う。【０１８２】
図１９を用いて、展開用のバッファ領域における、展開されるデータと、それに含まれるデータブロックとの関係を説明する。【０１８３】
図１９では、展開用のバッファ領域が、領域２１０４，２１０５，２１０６，２１０７として示されている。これらは、それぞれ異なるバッファ領域に展開されてもよいが、それぞれ異なるタイミングで展開用のバッファ領域とされた同じ記憶領域に展開してもよい。つまり、たとえば、領域２１０４においてデータが展開され、当該領域２１０４に展開されたデータに対する解析等の処理が終わった後、次に、同じ領域にデータが展開された場合、当該同じ領域が、領域２１０５とされる。また、領域２１０６についても、たとえば、領域２１０５と同じ領域であって、領域２１０５とされた領域にデータが上書きされた場合、上書きされた後の同じ領域が領域２１０６とされる。また、領域２１０７についても、たとえば、領域２１０６と同じ領域であって、領域２１０６とされた領域にデータが上書きされた場合、上書きされた後の同じ領域が領域２１０７とされる。【０１８４】
また、図１９では、展開されたデータ２１００は、データブロック２１０１，２１０２，２１０３という３つのデータブロックを含むものとする。各データブロックを構成するデータは、便宜上、それぞれ異なる種類のハッチングを施されている。そして、図１９は、データ２１００が、上記したＳ２００１において、１回目のＳ２００１で領域２１０４に展開され、２回目のＳ２００１で領域２１０５に展開され、３回目のＳ２００１で領域２１０６に展開され、そして、４回目のＳ２００１で領域２１０７に展開されることを示している。【０１８５】
図１９を参照して、１回目のＳ２００１では、展開用のバッファ領域である領域２１０４に、データブロック２１０１の全部と、データブロック２１０２の一部分が展開されている。領域２１０４には、データブロック２１０２の先頭部分が含まれている。【０１８６】
２回目のＳ２００１では、展開用のバッファ領域である領域２１０５に、データブロック２１０２の一部分が展開されている。なお、領域２１０５には、データブロック２１０２の中間部分が含まれる。【０１８７】
３回目のＳ２００１では、展開用のバッファ領域である領域２１０６に、データブロック２１０２の終端部分とデータブロック２１０３の前半部分が展開されている。【０１８８】
そして、４回目のＳ２００１では、展開用のバッファ領域である領域２１０７に、データブロック２１０３の後半部分が展開されている。【０１８９】
データブロック２１０１は、一回の展開処理によって、展開用のバッファ領域に、その最初から最後のデータが展開されている。このため、データブロック２１０１については、Ｓ２００５の処理の後、Ｓ２００７、Ｓ２００８、Ｓ２００９というように処理が進められる。なお、領域２１０４（展開用のバッファ領域）において、データブロック２１０１の最後まで字句解析が行なわれたとしても、領域２１０４の最後までは字句解析が行なわれたことにはならないので、処理は、Ｓ２００３に戻される。【０１９０】
データブロック２１０２については、領域２１０４として示されるように、１回目のデータの展開によっては、データブロックの先頭部しか展開されていない。このことから、データブロック２１０２については、Ｓ２００５からＳ２０１１に処理が進められ、そして、領域２１０４に展開されたその一部分が、結合用の連続バッファ領域にコピーされる。【０１９１】
図２０〜図２２は、結合用の連続バッファ領域におけるデータの記憶状態を模式的に示す図である。図２０〜図２２では、それぞれ、結合用の連続バッファ領域が、領域２３００として示され、また、領域２３００，２３０１，２３０２において、データブロック２１０２の一部または全部をコピーされた部分が、ハッチングを施されて示されている。なお、図２０〜図２２では、少なくともその時点で確保されているバッファ領域が、実線で表現されている。また、領域２３００，２３０１，２３０２はバッファ領域の位置や容量が同じであっても良いし、それぞれ位置や容量の異なる別々のバッファ領域であっても良い。【０１９２】
展開用のバッファ領域である領域２１０４に、その先頭部のみを展開されたデータブロック２１０２は、Ｓ２０１１の処理により、当該先頭部を、図２０に示されるように、結合用の連続バッファ領域にコピーされる。なお、データブロック２１０１の全部のデータについてのＳ２００７における解析と、データブロック２１０２の領域２１０４に展開された部分のデータについてのＳ２０１１における領域２３００へのコピーとが終わると、領域２１０４は、領域２１０５として、データを上書きされても良い。なお、領域２１０５は、記憶部１０３内の、領域２１０４とされた領域とは異なる領域に定義されることも可能である。ただし、同じ記憶部１０３がデータ解析結果のＤＯＭツリーの構築やデータ解析にも使用される場合、記憶部１０３内で連続するバッファを確保することが難しくなる場合もあると考えられるため、データ展開部１０４は、入力部１０２を介して入力されるすべてのデータの解析が終わるまで、記憶部１０３内の同じ連続バッファを展開用のバッファ領域として使用することが望ましい。【０１９３】
そして、展開用のバッファ領域である領域２１０５に、その一部を展開されたデータブロック２１０２は、再度実行されるＳ２０１１の処理により、領域２１０５に展開された部分のデータを、図２１に示されるように、領域２３００にコピーされる。このとき、領域２３００では、先にコピーされていた、データブロック２１０２の先頭部のデータと、領域２１０５に展開された部分とが、接合される。【０１９４】
そして、展開用のバッファ領域である領域２１０６に、その後端部を展開されたデータブロック２１０２は、再度実行されるＳ２０１１の処理により、領域２１０６に展開された部分のデータを、図２２に示されるように、領域２３００にコピーされる。このとき、領域２３００では、先にコピーされていた、データブロック２１０２の先頭部および中間部のデータと、領域２１０６に展開された後端部とが、接合される。【０１９５】
以上説明した本実施の形態では、データブロック抽出部１０５は、Ｓ２００４で、データ解析部１０６に、データブロックの種類等を通知する。【０１９６】
なお、ここでの通知のための処理として、データブロック抽出部１０５は、データブロックに対して、ＸＭＬ文法に従って、開始タグ、終了タグ、空タグや属性名、属性値、コンテンツ（タグに挟まれる内容）、コメントなどを字句解析により検出することができる。そして、データブロック抽出部１０５は、字句解析の結果として、要素名、属性名、属性値であるというデータブロックの種類とデータブロックを、データ解析部１０６に通知する。【０１９７】
例えば、
＜ｔｅｘｔ      ｘｍｌ：ｓｐａｃｅ＝″ｐｒｅｓｅｒｖｅ″    ｘ    ＝  ”  １０  ”  ＞  ａ＜ｔｓｐａｎ  ｔｅｘｔ−ｄｅｃｏｒａｔｉｏｎ＝″ｕｎｄｅｒｌｉｎｅ″＞  ｂ＜／ｔｓｐａｎ＞  ｃ      ｄｅｆ  ＜／ｔｅｘｔ＞
という、「ｔｅｘｔの開始」タグから「ｔｅｘｔの終了」タグまでのデータブロックについての通知のための処理では、データブロック抽出部１０５は、要素名である「ｔｅｘｔ」、属性名である「ｘ」、ｘの属性値である「１０」、コンテンツの「ａｂｃ（空白）（空白）（空白）ｄｅｆ」の検出が可能であり、そして、データ解析部１０６に対して、検出したデータブロックが要素であるのか属性値であるのかなどの情報を伝えることができる。【０１９８】
データ解析部１０６は、データブロック抽出部１０５が字句解析によって検出したデータブロックの内容を意味解析することにより、その意味解析の結果として、データブロック抽出部１０５に、字句解析の結果としてデータ解析部１０６に通知されるデータブロックの単位であって、意味解析に適したデータブロックの単位を、通知することができる。【０１９９】
例えば、データ解析部１０６が、要素名「ｔｅｘｔ」の意味を解析し、コンテンツの中身は文字列が入るので１文字単位で意味解析が可能であることをデータブロック抽出部１０５に通知する。なお、「ｘｍｌ：ｓｐａｃｅ」という属性の属性値は「ｐｒｅｓｅｒｖｅ」か「ｄｅｆａｕｌｔ」のいずれかであって、属性値が「ｐｒｅｓｅｒｖｅ」である場合は、コンテンツ内の空白を維持するという意味で、上記の例に適用すると、ａｂｃとｄｅｆの間に３つの空白があると解釈される。一方、属性値が「ｄｅｆａｕｌｔ」である場合は、コンテンツ内の連続する空白は１つと解釈される。このように、属性が「ｘｍｌ：ｓｐａｃｅ」である場合等のように、属性値として持ちうるものが必ず有限の種類である場合は、データブロック抽出部１０５によって１つのデータブロックであると判断されるデータの大きさが、変更されてもよい。【０２００】
また、例えば、下記のようにデータが、ファイル名を表すデータであるのか、画像を表すデータであってｂａｓｅ６４でエンコードされる等の処理を施されたデータであるのかを判定できるのは、データブロック抽出部１０５ではなく、データ解析部１０６である。【０２０１】
なお、そのようなデータの一例を、以下に示す。【０２０２】
ファイル名の場合：
＜ｉｍａｇｅ  ｘｌｉｎｋ：ｈｒｅｆ＝”ｆｉｌｅｎａｍｅ．ｊｐｅｇ”  ｘ＝”１０”    ｙ＝”２０”  ｗｉｄｔｈ＝”１００”    ｈｅｉｇｈｔ  ＝”２００”  ／＞
ｂａｓｅ６４でエンコードされたデータの場合：
＜ｉｍａｇｅ  ｘｌｉｎｋ：ｈｒｅｆ＝”ｄａｔａ：ｉｍａｇｅ／ｊｐｅｇ；ｂａｓｅ６４，／９ｊ／４ＡＡＱＳｋＺＪＲｇＡＢＡＱＥＡＹＡＢｇＡＡＤ／
＜＜中略＞＞
ｒｋＦＲ／Ｕ０ＵＤＰ／／Ｚ”  ｘ＝”１０”    ｙ＝”２０”  ｗｉｄｔｈ＝”１００”    ｈｅｉｇｈｔ  ＝”２００”  ／＞
データ解析部１０６は、要素名「ｉｍａｇｅ」とその属性名「ｘｌｉｎｋ：ｈｒｅｆ」から、属性値がファイル名であるかどうかを判定する。このため、データ解析部１０６は、データブロック抽出部１０５に対して、最初の数十から数百バイトを渡すように（一度に、結合用の連続バッファ領域に保存するように）、情報の通知を行なう。そして、データ解析部１０６が解析の対象としているデータ中に、上記のｂａｓｅ６４でエンコードされたデータに含まれるような「ｄａｔａ：ｉｍａｇｅ／ｊｐｅｇ；ｂａｓｅ６４，」という部分が出現することにより、解析の対象となっているデータを、ｂａｓｅ６４でエンコードされたデータであると判定し、その後の属性値が１文字単位で意味解析をすることができることを、データブロック抽出部１０５に通知する。このような通知に基づいて、データブロック抽出部１０５は、抽出するデータブロックの大きさを変更する。【０２０３】
図２３に、以上説明した本発明の第２の実施の形態のデータ解析装置におけるデータ解析の内容を全体的に説明するための図を示す。図２３では、記憶部１０３において、上述した展開用バッファ領域１０３Ａと結合用の連続バッファ領域１０３Ｂが定義されている状態が示されている。【０２０４】
図２３を参照して、本実施の形態のデータ解析処理では、入力部１０２を介して入力されるＳＶＧＺデータが、データ展開部１０４によって、展開用のバッファ領域１０３Ａの大きさに応じた容量ごとに、当該展開用のバッファ領域１０３ＡにＳＶＧデータにされて展開される。そして、展開されたデータに対して、データブロック抽出部１０５は、ＸＭＬ文法に従って字句解析を行ない、その結果を、データ解析部１０６に通知する。データ解析部１０６は、このような通知に応じて、順次、展開用のバッファ領域１０３Ａに展開されたＳＶＧデータに基づいたＤＯＭツリーを生成する。なお、字句解析の際、データブロック抽出部１０５は、展開用のバッファ領域１０３Ａに展開されたデータブロックがデータブロックの途中で途切れている場合には、当該途切れている部分を、結合用の連続バッファ領域１０３Ｂにコピーする。このような作業が順次行なわれていくことにより、結合用の連続バッファ領域１０３Ｂで、途切れたデータブロックが結合されて、データ解析部１０６によって、ＤＯＭツリーの生成に利用される。【０２０５】
本実施の形態では、一定容量の展開用のバッファ領域１０３Ａと、必要に応じて容量を変更される連続したバッファである結合用の連続バッファ領域１０３Ｂとが利用されることにより、データの解析が可能となる。なお、データの展開は、データブロックが抽出されるごとに、当該データブロックがステータス情報と関連付けられてデータ解析部１０６に通知されるため、入力部１０２から入力されるデータの全量が一度に展開されなくとも、順次、行なうことができる。これにより、展開用のバッファ領域１０３Ａの容量を、従来と比較して小さいものとすることができる。また、展開用のバッファ領域１０３Ａにおいて容量的に入りきらなかったデータブロックが出てきたときにのみ、結合用の連続バッファ領域１０３Ｂが利用されるため、記憶部１０３の記憶領域を効率良く利用できる。【０２０６】
なお、本実施の形態において生成されるＤＯＭツリーは、ＳＶＧデータについての抽象構文木の一例であって、本発明における抽象構文木は、これに限定されない。【０２０７】
以上説明した第１および第２の実施の形態では、データ解析装置において実行されるデータ解析方法を、プログラムとして提供することもできる。このようなプログラムは、コンピュータに付属するフレキシブルディスク、ＣＤ−ＲＯＭ、ＲＯＭ、ＲＡＭおよびメモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできるし、コンピュータに内蔵するハードディスクなどの記録媒体において記録させて、当該プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、当該プログラムを提供することもできる。【０２０８】
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。【０２０９】
この発明を詳細に説明し示してきたが、これは例示のためのみであって、限定ととってはならず、発明の精神と範囲は添付の請求の範囲によってのみ限定されることが明らかに理解されるであろう。
【図１】
2005101210.tif 000002
【図２】
2005101210.tif 000003
【図３】
2005101210.tif 000004
【図４】
2005101210.tif 000005
【図５】
2005101210.tif 000006
【図６】
2005101210.tif 000007
【図７】
2005101210.tif 000008
【図８】
2005101210.tif 000009
【図９】
2005101210.tif 000010
【図１０】
2005101210.tif 000011
【図１１】
2005101210.tif 000012
【図１２】
2005101210.tif 000013
【図１３】
2005101210.tif 000014
【図１４】
2005101210.tif 000015
【図１５】
2005101210.tif 000016
【図１６】
2005101210.tif 000017
【図１７】
2005101210.tif 000018
【図１８】
2005101210.tif 000019
【図１９】
2005101210.tif 000020
【図２０】
2005101210.tif 000021
【図２１】
2005101210.tif 000022
【図２２】
2005101210.tif 000023
【図２３】
2005101210.tif 000024
【図２４】
2005101210.tif 000025
【手続補正書】
【提出日】平成17年8月2日(2005.8.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【書類名】請求の範囲
【請求項１】  解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開部（１０４）と、
前記中間データを解析するデータ解析部（１０６）とを備え、
前記データ展開部（１０４）は、前記解析対象データの一部ずつを利用して中間データを生成し、
前記データ解析部（１０６）は、前記生成された中間データを解析することを特徴とする、データ解析装置（１）。
【請求項２】  前記データ展開部（１０４）は、符合化された前記解析対象データを復号化して前記中間データを生成する、請求項１に記載のデータ解析装置（１）。
【請求項３】  前記符合化された前記解析対象データは、圧縮されたデータである、請求項２に記載のデータ解析装置（１）。
【請求項４】  前記データ展開部（１０４）は、記憶部上に大きさを指定して前記データ展開領域を確保し、前記データ展開領域の大きさに応じて、前記解析対象データの一部を復号化して前記中間データを生成する、請求項１に記載のデータ解析装置（１）。
【請求項５】  前記データ展開部（１０４）は、前記解析対象データのうちの展開が完了したデータ位置を記憶し、前記解析対象データのうちの前記記憶されたデータ位置から復号化して前記中間データを生成する、請求項４に記載のデータ解析装置（１）。
【請求項６】  前記データ展開部（１０４）は、前記データ展開領域の拡張の要否を判定し、必要であると判定しときに、前記データ展開領域を拡張する、請求項４に記載のデータ解析装置（１）。
【請求項７】  前記データ展開部（１０４）は、前記データ展開領域に隣接した領域を、他の領域よりも優先して、拡張する前記データ展開領域とする、請求項６に記載のデータ解析装置（１）。
【請求項８】  前記データ展開部（１０４）は、前記データ展開領域の後方に隣接した領域を、他の領域よりも優先して、拡張する前記データ展開領域とする、請求項６に記載のデータ解析装置（１）。
【請求項９】  前記中間データからデータブロックを抽出するデータブロック抽出部（１０５）をさらに備え、
前記データ解析部（１０６）は、前記データブロック抽出部（１０５）によって抽出されたデータブロックを解析することを特徴とする、請求項１に記載のデータ解析装置（１）。
【請求項１０】  前記データブロック抽出部（１０５）は、前記中間データのうち前記データブロックが抽出された残りのデータの位置を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１１】  前記データ展開部（１０４）は、前記記憶された残りのデータの位置に応じて、前記残りのデータを前記データ展開領域の先頭に移動させる、請求項１０に記載のデータ解析装置（１）。
【請求項１２】  前記データ展開部（１０４）は、前記データ展開領域の、前記残りのデータの後ろに、前記中間データに続く次の中間データを生成して展開する、請求項１０に記載のデータ解析装置（１）。
【請求項１３】  前記データブロック抽出部（１０５）は、前記記憶された残りのデータの開始位置から、前記データブロックの次のデータブロックを抽出する、請求項１０に記載のデータ解析装置（１）。
【請求項１４】  データブロック抽出部（１０５）は、前記データブロックの抽出状況を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１５】  データ解析部（１０６）は、前記記憶されたデータブロックの抽出状況に応じて、前記データブロックの解析方法を決定する、請求項１４に記載のデータ解析装置（１）。
【請求項１６】  データ解析部（１０６）は、前記データブロックの解析状況を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１７】  データブロック抽出部（１０５）は、前記記憶されたデータブロックの解析状況に応じて、前記データブロックの抽出方法を決定する、請求項１６に記載のデータ解析装置（１）。
【請求項１８】  解析対象データは、文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記中間データから前記文字コードを検出し、前記検出された文字コードを前記文字列データに変換し、前記変換された文字列データを前記データ展開領域に展開する、請求項１に記載のデータ解析装置（１）。
【請求項１９】  前記解析対象データは、固定長の文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記検出された文字コードの固定長を、最小単位として記憶部上に大きさを指定して前記データ展開領域を確保する、請求項１８に記載のデータ解析装置（１）。
【請求項２０】  前記解析対象データは、可変長の文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記検出された文字コードを、固定長の文字コードの文字列データに変換する、請求項１８に記載のデータ解析装置（１）。
【請求項２１】  前記データ展開部（１０４）によって変換される固定長の文字コードは、固定長のＵｎｉｃｏｄｅである、請求項２０に記載のデータ解析装置（１）。
【請求項２２】  解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開ステップと、
前記中間データを解析するデータ解析ステップとを備え、
前記データ展開ステップは、解析対象データの一部ずつを利用して中間データを生成し、
前記データ解析ステップは、前記生成された中間データを解析することを特徴とする、データ解析方法。
【請求項２３】  コンピュータにデータの解析を実行させるプログラムであって、
前記コンピュータに、
前記解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開ステップと、
前記中間データを解析するデータ解析ステップとを実行させ、
前記データ展開ステップは、解析対象データの一部ずつを利用して中間データを生成し、
前記データ解析ステップは、前記生成された中間データを解析することを特徴とする、データ解析プログラム。
【請求項２４】  請求項２３に記載のデータ解析プログラムを記録した、コンピュータ読取可能な記録媒体。
【請求項２５】  圧縮されたマークアップ言語で記述されたデータを処理するデータ解析装置（１）であって、
記憶部（１０３）を備え、
前記記憶部（１０３）は、バッファメモリとして利用される第１のバッファ（１０３Ａ）と第２のバッファ（１０３Ｂ）とを含み、
圧縮されたマークアップ言語で記述されたデータを、前記第１のバッファ（１０３Ａ）に展開するデータ展開部（１０４）と、
前記第１のバッファ（１０３Ａ）に展開されたデータからデータブロックを抽出する第１のデータ解析部（１０５）と、
前記第１のデータ解析部（１０５）が抽出したデータブロックから、抽象構文木を生成する、第２のデータ解析部（１０６）とを備え、
前記第１のデータ解析部（１０５）は、前記抽出したデータブロックを、前記第２のバッファ（１０３Ｂ）の連続する１つの記憶領域に格納し、
前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）または前記第２のバッファ（１０３Ｂ）に記憶されたデータを利用して、抽象構文木を生成することを特徴とする、データ解析装置（１）。
【請求項２６】  前記第２のデータ解析部（１０６）は、前記抽出されたデータブロックの前記第１のデータ解析部（１０５）による解析結果を利用して、抽象構文木を生成することを特徴とする、請求項２５のデータ解析装置（１）。
【請求項２７】  前記データ展開部（１０４）は、圧縮されたマークアップ言語で記述されたデータを、前記第１のバッファ（１０３Ａ）に、前記第１のバッファ（１０３Ａ）の容量以下の容量ごとに展開することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項２８】  前記第１のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータに対して、字句解析を行なうことにより、前記第１のバッファ（１０３Ａ）に展開されたデータからデータブロックを抽出することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項２９】  前記第１のデータ解析部（１０５）は、ＸＭＬ文法に従って、字句解析を行なうことを特徴とする、請求項２８に記載のデータ解析装置（１）。
【請求項３０】  前記第１のデータ解析部（１０６）は、前記第２のバッファ（１０３Ｂ）の容量を、ＸＭＬ文法に従って決定することを特徴とする、請求項２９に記載のデータ解析装置（１）。
【請求項３１】  前記第２のデータ解析部（１０６）は、ＳＶＧ文法に従って、データの解析を行なうことを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３２】  前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータを、前記第１のバッファ（１０３Ａ）に展開された状態で、解析することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３３】  前記第１のデータ解析部（１０５）は、文字解析に利用するスキーマ言語を変更するスキーマ言語変更部を含むことを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３４】  前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータを、意味的に解析することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３５】  前記第２のデータ解析部（１０６）は、前記第１のデータ解析部（１０５）に、前記第１のデータ解析部（１０５）の解析結果に基づいて、ブロックデータの抽出態様を変更させることを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３６】  前記第１のデータ解析部（１０６）は、前記或る時点で前記第１のバッファ（１０３Ａ）に展開されたデータの中の前記或るデータブロックの一部のデータの容量に基づいて、前記記憶部（１０３）において前記第２のバッファ（１０３Ｂ）を確保することを特徴とする、請求項２５に記載のデータ解析装置（１）。
【請求項３７】  前記第１のデータ解析部（１０５）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部を前記第２のバッファ（１０３Ｂ）に格納することを特徴とする、請求項２５のデータ解析装置（１）。
【請求項３８】  前記第１のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部と前記第２のバッファ（１０３Ｂ）にある同じデータブロックの一部とを結合させて、前記第２のバッファ（１０３Ｂ）に格納することを特徴とする、請求項３７のデータ解析装置（１）。
【請求項３９】  前記第１のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部と前記第２のバッファ（１０３Ｂ）にある同じデータブロックの一部とを結合させて、第３のバッファ（１０３Ｃ）に格納することを特徴とする、請求項３７のデータ解析装置（１）。
【請求項４０】  前記第１のデータ解析部（１０６）は、前記或る時点で前記第１のバッファ（１０３Ａ）に展開されたデータの中の前記或るデータブロックの一部のデータの容量と、前記第２のバッファ（１０３Ｂ）の容量とに基づいて、前記記憶部において、第３のバッファ（１０３Ｃ）を確保することを特徴とする、請求項３９に記載のデータ解析装置（１）。
【請求項４１】  圧縮されたマークアップ言語で記述されたデータを処理する装置における、データ解析方法であって、
圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するステップと、
前記第１のバッファに展開されたデータからデータブロックを抽出するステップと、
前記抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納するステップと、
前記第１または第２のバッファのデータを利用して、抽出構文木を生成するステップとを備えることを特徴とする、データ解析方法。
【請求項４２】  圧縮されたマークアップ言語で記述されたデータを処理する装置に、データ解析させるための、データ解析プログラムであって、
コンピュータに、
圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するステップと、
前記第１のバッファに展開されたデータからデータブロックを抽出するステップと、
前記抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納するステップと、
前記第１または第２のバッファのデータを利用して、抽出構文木を生成するステップとを実行させることを特徴とする、データ解析プログラム。
【請求項４３】  請求項４２に記載のデータ解析プログラムを記録した、コンピュータ読取可能な記録媒体。
４８
【手続補正書】
【提出日】平成18年9月1日(2006.9.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開部（１０４）と、
前記中間データを解析するデータ解析部（１０６）とを備え、
前記データ展開部（１０４）は、前記解析対象データの一部ずつを利用して中間データを生成し、
前記データ解析部（１０６）は、前記生成された中間データを解析することを特徴とする、データ解析装置（１）。
【請求項２】
前記データ展開部（１０４）は、符合化された前記解析対象データを復号化して前記中間データを生成する、請求項１に記載のデータ解析装置（１）。
【請求項３】
前記符合化された前記解析対象データは、圧縮されたデータである、請求項２に記載のデータ解析装置（１）。
【請求項４】
前記データ展開部（１０４）は、記憶部上に大きさを指定して前記データ展開領域を確保し、前記データ展開領域の大きさに応じて、前記解析対象データの一部を復号化して前記中間データを生成する、請求項１に記載のデータ解析装置（１）。
【請求項５】
前記データ展開部（１０４）は、前記解析対象データのうちの展開が完了したデータ位置を記憶し、前記解析対象データのうちの前記記憶されたデータ位置から復号化して前記中間データを生成する、請求項４に記載のデータ解析装置（１）。
【請求項６】
前記データ展開部（１０４）は、前記データ展開領域の拡張の要否を判定し、必要であると判定しときに、前記データ展開領域を拡張する、請求項４に記載のデータ解析装置（１）。
【請求項７】
前記データ展開部（１０４）は、前記データ展開領域に隣接した領域を、他の領域よりも優先して、拡張する前記データ展開領域とする、請求項６に記載のデータ解析装置（１）。
【請求項８】
前記データ展開部（１０４）は、前記データ展開領域の後方に隣接した領域を、他の領域よりも優先して、拡張する前記データ展開領域とする、請求項６に記載のデータ解析装置（１）。
【請求項９】
前記中間データからデータブロックを抽出するデータブロック抽出部（１０５）をさらに備え、
前記データ解析部（１０６）は、前記データブロック抽出部（１０５）によって抽出されたデータブロックを解析することを特徴とする、請求項１に記載のデータ解析装置（１）。
【請求項１０】
前記データブロック抽出部（１０５）は、前記中間データのうち前記データブロックが抽出された残りのデータの位置を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１１】
前記データ展開部（１０４）は、前記記憶された残りのデータの位置に応じて、前記残りのデータを前記データ展開領域の先頭に移動させる、請求項１０に記載のデータ解析装置（１）。
【請求項１２】
前記データ展開部（１０４）は、前記データ展開領域の、前記残りのデータの後ろに、前記中間データに続く次の中間データを生成して展開する、請求項１０に記載のデータ解析装置（１）。
【請求項１３】
前記データブロック抽出部（１０５）は、前記記憶された残りのデータの開始位置から、前記データブロックの次のデータブロックを抽出する、請求項１０に記載のデータ解析装置（１）。
【請求項１４】
前記データブロック抽出部（１０５）は、前記データブロックの抽出状況を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１５】
前記データ解析部（１０６）は、前記記憶されたデータブロックの抽出状況に応じて、前記データブロックの解析方法を決定する、請求項１４に記載のデータ解析装置（１）。
【請求項１６】
前記データ解析部（１０６）は、前記データブロックの解析状況を記憶する、請求項９に記載のデータ解析装置（１）。
【請求項１７】
前記データブロック抽出部（１０５）は、前記記憶されたデータブロックの解析状況に応じて、前記データブロックの抽出方法を決定する、請求項１６に記載のデータ解析装置（１）。
【請求項１８】
前記解析対象データは、文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記中間データから前記文字コードを検出し、前記検出された文字コードを前記文字列データに変換し、前記変換された文字列データを前記データ展開領域に展開する、請求項１に記載のデータ解析装置（１）。
【請求項１９】
前記解析対象データは、固定長の文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記検出された文字コードの固定長を、最小単位として記憶部上に大きさを指定して前記データ展開領域を確保する、請求項１８に記載のデータ解析装置（１）。
【請求項２０】
前記解析対象データは、可変長の文字コードの文字列データが符号化されたデータであって、
前記データ展開部（１０４）は、前記検出された文字コードを、固定長の文字コードの文字列データに変換する、請求項１８に記載のデータ解析装置（１）。
【請求項２１】
前記データ展開部（１０４）によって変換される固定長の文字コードは、固定長のＵｎｉｃｏｄｅである、請求項２０に記載のデータ解析装置（１）。
【請求項２２】
コンピュータにデータの解析を実行させるプログラムであって、
前記コンピュータに、
所定の記憶部上に大きさを指定してデータ展開領域を確保するステップと、
前記解析対象データの中間データを生成して、前記確保されたデータ展開領域に展開するデータ展開ステップと、
前記中間データを解析するデータ解析ステップとを実行させ、
前記データ展開ステップは、解析対象データの一部ずつを利用して中間データを生成し、
前記データ解析ステップは、前記生成された中間データを解析することを特徴とする、データ解析プログラム。
【請求項２３】
圧縮されたマークアップ言語で記述されたデータを処理するデータ解析装置（１）であって、
記憶部（１０３）を備え、
前記記憶部（１０３）は、バッファメモリとして利用される第１のバッファ（１０３Ａ）と第２のバッファ（１０３Ｂ）とを含み、
圧縮されたマークアップ言語で記述されたデータを、前記第１のバッファ（１０３Ａ）に展開するデータ展開部（１０４）と、
前記第１のバッファ（１０３Ａ）に展開されたデータからデータブロックを抽出する第１のデータ解析部（１０５）と、
前記第１のデータ解析部（１０５）が抽出したデータブロックから、抽象構文木を生成する、第２のデータ解析部（１０６）とを備え、
前記第１のデータ解析部（１０５）は、前記抽出したデータブロックを、前記第２のバッファ（１０３Ｂ）の連続する１つの記憶領域に格納し、
前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）または前記第２のバッファ（１０３Ｂ）に記憶されたデータを利用して、抽象構文木を生成することを特徴とする、データ解析装置（１）。
【請求項２４】
前記第２のデータ解析部（１０６）は、前記抽出されたデータブロックの前記第１のデータ解析部（１０５）による解析結果を利用して、抽象構文木を生成することを特徴とする、請求項２３のデータ解析装置（１）。
【請求項２５】
前記データ展開部（１０４）は、圧縮されたマークアップ言語で記述されたデータを、前記第１のバッファ（１０３Ａ）に、前記第１のバッファ（１０３Ａ）の容量以下の容量ごとに展開することを特徴とする、請求項２３に記載のデータ解析装置（１）。
【請求項２６】
前記第１のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータに対して、字句解析を行なうことにより、前記第１のバッファ（１０３Ａ）に展開されたデータからデータブロックを抽出することを特徴とする、請求項２３に記載のデータ解析装置（１）。
【請求項２７】
前記第１のデータ解析部（１０５）は、ＸＭＬ文法に従って、字句解析を行なうことを特徴とする、請求項２６に記載のデータ解析装置（１）。
【請求項２８】
前記第１のデータ解析部（１０５）は、前記第２のバッファ（１０３Ｂ）の容量を、ＸＭＬ文法に従って決定することを特徴とする、請求項２７に記載のデータ解析装置（１）。
【請求項２９】
前記第２のデータ解析部（１０６）は、ＳＶＧ文法に従って、データの解析を行なうことを特徴とする、請求項２３〜請求項２８のいずれかに記載のデータ解析装置（１）。
【請求項３０】
前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータを、前記第１のバッファ（１０３Ａ）に展開された状態で、解析することを特徴とする、請求項２３〜請求項２９のいずれかに記載のデータ解析装置（１）。
【請求項３１】
前記第１のデータ解析部（１０５）は、文字解析に利用するスキーマ言語を変更するスキーマ言語変更部を含むことを特徴とする、請求項２３〜請求項３０のいずれかに記載のデータ解析装置（１）。
【請求項３２】
前記第２のデータ解析部（１０６）は、前記第１のバッファ（１０３Ａ）に展開されたデータを、意味的に解析することを特徴とする、請求項２３〜請求項３１のいずれかに記載のデータ解析装置（１）。
【請求項３３】
前記第２のデータ解析部（１０６）は、前記第１のデータ解析部（１０５）に、前記第１のデータ解析部（１０５）の解析結果に基づいて、ブロックデータの抽出態様を変更させることを特徴とする、請求項２３〜請求項３２のいずれかに記載のデータ解析装置（１）。
【請求項３４】
前記第１のデータ解析部（１０６）は、前記或る時点で前記第１のバッファ（１０３Ａ）に展開されたデータの中の前記或るデータブロックの一部のデータの容量に基づいて、前記記憶部（１０３）において前記第２のバッファ（１０３Ｂ）を確保することを特徴とする、請求項２３〜請求項３３のいずれかに記載のデータ解析装置（１）。
【請求項３５】
前記第１のデータ解析部（１０５）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部を前記第２のバッファ（１０３Ｂ）に格納することを特徴とする、請求項２５のデータ解析装置（１）。
【請求項３６】
前記第１のデータ解析部（１０５）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部と前記第２のバッファ（１０３Ｂ）にある同じデータブロックの一部とを結合させて、前記第２のバッファ（１０３Ｂ）に格納することを特徴とする、請求項３５のデータ解析装置（１）。
【請求項３７】
前記第１のデータ解析部（１０５）は、前記第１のバッファ（１０３Ａ）にあるデータブロックの一部と前記第２のバッファ（１０３Ｂ）にある同じデータブロックの一部とを結合させて、第３のバッファ（１０３Ｃ）に格納することを特徴とする、請求項３５のデータ解析装置（１）。
【請求項３８】
前記第１のデータ解析部（１０５）は、前記或る時点で前記第１のバッファ（１０３Ａ）に展開されたデータの中の前記或るデータブロックの一部のデータの容量と、前記第２のバッファ（１０３Ｂ）の容量とに基づいて、前記記憶部において、第３のバッファ（１０３Ｃ）を確保することを特徴とする、請求項３５に記載のデータ解析装置（１）。
【請求項３９】
圧縮されたマークアップ言語で記述されたデータを処理する装置に、データ解析させるための、データ解析プログラムであって、
コンピュータに、
圧縮されたマークアップ言語で記述されたデータを、第１のバッファに展開するステップと、
前記第１のバッファに展開されたデータからデータブロックを抽出するステップと、
前記抽出したデータブロックを、第２のバッファの連続する１つの記憶領域に格納するステップと、
前記第１または第２のバッファのデータを利用して、抽出構文木を生成するステップとを実行させることを特徴とする、データ解析プログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
本発明の或る局面に従ったデータ解析装置は、解析対象データの中間データを生成して、所定のデータ展開領域に展開するデータ展開部と、中間データを解析するデータ解析部とを備え、データ展開部は、解析対象データの一部ずつを利用して中間データを生成し、データ解析部は、生成された中間データを解析することを特徴とする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】削除
【補正の内容】
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００３３
【補正方法】変更
【補正の内容】
【００３３】
本発明の或る局面に従ったデータ解析プログラムは、コンピュータにデータの解析を実行させるプログラムであって、コンピュータに、所定の記憶部上に大きさを指定してデータ展開領域を確保するステップと、解析対象データの中間データを生成して、確保されたデータ展開領域に展開するデータ展開ステップと、中間データを解析するデータ解析ステップとを実行させ、データ展開ステップは、解析対象データの一部ずつを利用して中間データを生成し、データ解析ステップは、生成された中間データを解析することを特徴とする。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００５２
【補正方法】削除
【補正の内容】
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】削除
【補正の内容】
【国際調査報告】
2005101210.tif 000026
2005101210.tif 000027