(57)【特許請求の範囲】
【請求項１】
文書の構造情報を有する構造データ群と、当該構造情報に対応する値データを有する値データ群とを含む、圧縮された構造化文書を解析する構造化文書解析装置であって、
前記構造データ群を伸長して、前記構造情報を取得する構造取得手段と、
前記構造取得手段により取得された構造情報と、当該構造情報に対応する値データと、当該値データを有する値データ群の識別情報と、当該値データ群の伸長の有無を示す伸長有無情報と、当該値データ群の保存先と、を相互に関連付けて値データ群一覧表に登録する値データ群一覧表登録手段と、
前記構造取得手段により取得された構造情報と、当該構造情報に対応する値データの識別情報と、当該値データを有する値データ群の識別情報と、を相互に関連付けて構造情報一覧表に登録する構造情報一覧表登録手段と、
前記構造情報一覧表の情報を、前記構造化文書を処理するソフトウェアに通知する構造通知手段と、
前記ソフトウェアから、前記値データの識別情報と前記値データ群の識別情報とが指定されて、前記値データの要求があると、前記値データ群一覧表から、前記指定された値データ群の識別情報に関連付けられている、前記伸長有無情報及び前記値データ群の保存先を取得する値選択手段と、
前記値選択手段により取得された情報に基づいて、伸長されていない値データ群を伸長し、当該値データ群に含まれる値データの中から前記要求に一致する値データを取得する値取得手段と、
前記値取得手段により取得された値データを、前記ソフトウェアに通知する値通知手段と、を有することを特徴とする構造化文書解析装置。
【請求項２】
値データと、当該値データへの参照情報とが相互に関連付けて登録されたボキャブラリテーブルを記憶するボキャブラリテーブル記憶手段と、
前記値取得手段により、値データへの参照情報が取得されたか否かを判定する判定手段と、
前記値取得手段により、値データへの参照情報が取得された場合、前記ボキャブラリテーブル記憶手段により記憶されたボキャブラリテーブルを読み出すボキャブラリテーブル読み出し手段と、
前記ボキャブラリテーブル読み出し手段により読み出されたボキャブラリテーブルから、前記値取得手段により取得された参照情報に対応する値データを取得する第２の値取得手段と、を有し、
前記構造化文書の値データ群には、前記値データの代わりに、値データへの参照情報が含まれており、
前記値選択手段は、前記ソフトウェアから、前記値データ群の識別情報が指定されて、前記値データの参照情報の要求があると、前記値データ群一覧表から、前記指定された値データ群の識別情報に関連付けられている、前記伸長有無情報及び前記値データ群の保存先を取得し、
前記値取得手段は、前記値選択手段により取得された値データ群を伸長して、前記要求に一致する値データ又は前記要求に一致する値データへの参照情報を取得し、
前記値通知手段は、前記値取得手段により、値データへの参照情報が取得された場合には、前記第２の値取得手段により取得された値データを、前記ソフトウェアに通知することを特徴とする請求項１に記載の構造化文書解析装置。
【請求項３】
前記構造情報と、前記ボキャブラリテーブルの識別情報と、当該ボキャブラリテーブルに登録されている値データ群の識別情報である登録済値データ群識別情報とが相互に関連付けて登録されたボキャブラリテーブル一覧表を記憶するボキャブラリテーブル一覧表記憶手段と、
前記ボキャブラリテーブル読み出し手段により読み出されたボキャブラリテーブルに、前記値取得手段により取得された参照情報に対応する値データが登録されているか否かを判定する第２の判定手段と、
前記ボキャブラリテーブル読み出し手段により読み出されたボキャブラリテーブルに、前記値取得手段により取得された参照情報に対応する値データが登録されていない場合に、前記ボキャブラリテーブルに反映する値データ群を選択するボキャブラリテーブル化範囲選択手段と、
前記ボキャブラリテーブル化範囲選択手段により選択された値データ群を伸長した結果、値データが得られた場合、当該値データと、当該値データへの参照情報とを相互に関連付けて前記ボキャブラリテーブルに登録するボキャブラリテーブル更新手段と、を有し、
前記ボキャブラリテーブル読み出し手段は、前記値取得手段により、値データへの参照情報が取得された場合、前記値データ群一覧表に登録されている構造情報であって、前記要求において指定された値データ群の識別情報に対応する構造情報を、前記ボキャブラリテーブル一覧表に登録されている構造情報から選択し、選択した構造情報に対応するボキャブラリテーブルを、前記ボキャブラリテーブル一覧表から選択し、
前記ボキャブラリテーブル化範囲選択手段は、前記値データ群一覧表において前記ボキャブラリテーブル読み出し手段により選択された構造情報に対応づけられている値データ群の識別情報であって、前記ボキャブラリテーブル一覧表に登録されている登録済み値データ群識別情報とは異なる値データ群の識別情報に基づく値データ群を選択することを特徴とする請求項２に記載の構造化文書解析装置。
【請求項４】
前記ボキャブラリテーブルに登録されている値データが文字列であることを特徴とする請求項３に記載の構造化文書解析装置。
【請求項５】
前記構造化文書は、W3CのEXI圧縮形式の構造化文書であり、
前記登録済みデータ識別情報は、前記ボキャブラリテーブルに登録済みの値チャネルが属するブロック番号を含み、
前記ボキャブラリテーブル化範囲選択手段は、前記ソフトウェアに通知する値データを含む値チャネルのブロック番号と、前記登録済みデータ識別情報であるブロック番号とを比較した結果に基づいて、前記ボキャブラリテーブルに登録する値データを含む値チャネルを選択することを特徴とする請求項３又は４に記載の構造化文書解析装置。
【請求項６】
前記構造化文書は、W3CのEXI圧縮形式の構造化文書であり、
前記構造データ群は、構造チャネルであり、
前記値データ群は、値チャネルであることを特徴とする請求項１〜５の何れか１項に記載の構造化文書解析装置。
【請求項７】
前記構造化文書は、W3CのEXI圧縮形式の構造化文書であり、
前記構造情報は、イベントの情報であることを特徴とする請求項１〜６の何れか１項に記載の構造化文書解析装置。
【請求項８】
前記構造通知手段により通知される情報と、前記値通知手段により通知される値データが、XMLパーサであるSAX又はDOMのAPI（ApplicationProgramInterface）を用いて通知されることを特徴とする請求項１〜７の何れか１項に記載の構造化文書解析装置。
【請求項９】
文書の構造情報を有する構造データ群と、当該構造情報に対応する値データを有する値データ群とを含む、圧縮された構造化文書を解析するための工程を構造化文書解析装置により実行する構造化文書解析方法であって、
前記工程は、
前記構造データ群を伸長して、前記構造情報を取得する構造取得工程と、
前記構造取得工程により取得された構造情報と、当該構造情報に対応する値データと、当該値データを有する値データ群の識別情報と、当該値データ群の伸長の有無を示す伸長有無情報と、当該値データ群の保存先と、を相互に関連付けて値データ群一覧表に登録する値データ群一覧表登録工程と、
前記構造取得工程により取得された構造情報と、当該構造情報に対応する値データの識別情報と、当該値データを有する値データ群の識別情報と、を相互に関連付けて構造情報一覧表に登録する構造情報一覧表登録工程と、
前記構造情報一覧表の情報を、前記構造化文書を処理するソフトウェアに通知する構造通知工程と、
前記ソフトウェアから、前記値データの識別情報と前記値データ群の識別情報とが指定されて、前記値データの要求があると、前記値データ群一覧表から、前記指定された値データ群の識別情報に関連付けられている、前記伸長有無情報及び前記値データ群の保存先を取得する値選択工程と、
前記値選択工程により取得された情報に基づいて、伸長されていない値データ群を伸長し、当該値データ群に含まれる値データの中から前記要求に一致する値データを取得する値取得工程と、
前記値取得工程により取得された値データを、前記ソフトウェアに通知する値通知工程と、を有することを特徴とする構造化文書解析方法。
【請求項１０】
文書の構造情報を有する構造データ群と、当該構造情報に対応する値データを有する値データ群とを含む、圧縮された構造化文書を解析することをコンピュータに実行させるためのコンピュータプログラムであって、
前記構造データ群を伸長して、前記構造情報を取得する構造取得工程と、
前記構造取得工程により取得された構造情報と、当該構造情報に対応する値データと、当該値データを有する値データ群の識別情報と、当該値データ群の伸長の有無を示す伸長有無情報と、当該値データ群の保存先と、を相互に関連付けて値データ群一覧表に登録する値データ群一覧表登録工程と、
前記構造取得工程により取得された構造情報と、当該構造情報に対応する値データの識別情報と、当該値データを有する値データ群の識別情報と、を相互に関連付けて構造情報一覧表に登録する構造情報一覧表登録工程と、
前記構造情報一覧表の情報を、前記構造化文書を処理するソフトウェアに通知する構造通知工程と、
前記ソフトウェアから、前記値データの識別情報と前記値データ群の識別情報とが指定されて、前記値データの要求があると、前記値データ群一覧表から、前記指定された値データ群の識別情報に関連付けられている、前記伸長有無情報及び前記値データ群の保存先を取得する値選択工程と、
前記値選択工程により取得された情報に基づいて、伸長されていない値データ群を伸長し、当該値データ群に含まれる値データの中から前記要求に一致する値データを取得する値取得工程と、
前記値取得工程により取得された値データを、前記ソフトウェアに通知する値通知工程と、をコンピュータに実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化文書解析装置、構造化文書解析方法、及びコンピュータプログラムに関し、特に、構造化文書を解析するために用いて好適なものである。
【背景技術】
【０００２】
従来から、構造化文書を記述する言語として、標準化団体W3Cが仕様を策定しているXML（Extensible Markup Language）言語がある。XML言語により、要素、属性、名前空間等の文書の構成要素（ノード）を使って構造化された文書を記述することができた。
XML言語で記述された文書は、冗長な繰り返し文字列を含む場合が多いため、文字列をトークン化して構造化文書を圧縮する技術が考えられてきた（特許文献１を参照）。
さらに、XML言語で記述された文書は、テキスト形式であるが、同じ文書内容をバイナリ形式で表現して圧縮するバイナリXML技術と呼ばれる技術が考えられてきた。バイナリXML技術の代表的な形式として、ITU-Tで標準化されているFast Infoset（ITU-T X.891）形式（非特許文献１を参照）や、W3Cで仕様が策定中のEXI（Efficient XML Interchange）形式がある。
特に、EXI形式の仕様では、文字列のトークン化等により、圧縮した文書内のノードを、さらに構造定義と値とに分割し、それぞれ別のデータ群（チャネル）に集めてデフレート圧縮するEXI圧縮形式を定義している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１−６７３４８号公報
【非特許文献】
【０００４】
【非特許文献１】ITU-T Rec. X.891 | ISO/IEC 24824-1 (Fast Infoset)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
EXI圧縮形式のXML文書等、圧縮されたXML文書を解析する場合、文書解析モジュール（以下、XMLパーサと称する）は、解析を開始する際にデフレート圧縮された文書を全てデータ伸長する必要がある。しかしながら、CPUの速度やメモリの容量等のリソースが限られた小型機器上のXMLパーサにとっては、デフレート圧縮されたデータを伸長する処理は負荷が重い。
一方、XMLパーサを使用して、XML文書の情報を取得するアプリケーションプログラムは、XML文書全体の情報を、XML文書の解析開始時点に一度に必要としないことが多い。すなわち、小型機器上のXMLパーサは、XML文書等の圧縮された構造化文書の解析を開始するときに、アプリケーションプログラム等の装置利用者がまだ必要としていない部分まで、一度にデータ伸長処理という負荷の高い処理を行わなければならなかった。
本発明は、このような問題点に鑑みてなされたものであり、圧縮された構造化文書の解析を行う際の処理の負荷を低減することを目的とする。
ことを目的とする。
【課題を解決するための手段】
【０００６】
本発明の構造化文書解析装置は、文書の構造情報を有する構造データ群と、当該構造情報に対応する値データを有する値データ群とを含む、圧縮された構造化文書を解析する構造化文書解析装置であって、前記構造データ群を伸長して、前記構造情報を取得する構造取得手段と、前記構造取得手段により取得された構造情報と、当該構造情報に対応する値データと、当該値データを有する値データ群の識別情報と、当該値データ群の伸長の有無を示す伸長有無情報と、当該値データ群の保存先と、を相互に関連付けて値データ群一覧表に登録する値データ群一覧表登録手段と、前記構造取得手段により取得された構造情報と、当該構造情報に対応する値データの識別情報と、当該値データを有する値データ群の識別情報と、を相互に関連付けて構造情報一覧表に登録する構造情報一覧表登録手段と、前記構造情報一覧表の情報を、前記構造化文書を処理するソフトウェアに通知する構造通知手段と、前記ソフトウェアから、前記値データの識別情報と前記値データ群の識別情報とが指定されて、前記値データの要求があると、前記値データ群一覧表から、前記指定された値データ群の識別情報に関連付けられている、前記伸長有無情報及び前記値データ群の保存先を取得する値選択手段と、前記値選択手段により取得された情報に基づいて、伸長されていない値データ群を伸長し、当該値データ群に含まれる値データの中から前記要求に一致する値データを取得する値取得手段と、前記値取得手段により取得された値データを、前記ソフトウェアに通知する値通知手段と、を有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、圧縮された構造化文書を解析するに際し、構造化文書の全体を伸長するのではなく、当該構造化文書を必要とするソフトウェアからの要求に応じて値データに関わる情報を伸長する。したがって、圧縮された構造化文書の解析を行う際の処理の負荷を低減することができる。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係る構造化文書解析装置の構成を示す図である。
【図２】構造化文書の文書構成を示す図である。
【図３】値チャネル一覧表を示す図である。
【図４】イベント一覧表を示す図である。
【図５】文書解析処理の全体の流れを説明するフローチャートである。
【図６】図５のステップＳ２０５の詳細を説明するフローチャートである。
【図７】図５のステップＳ２１０の詳細を説明するフローチャートである。
【図８】第２の実施形態に係る構造化文書解析装置の構成を示す図である。
【図９】文字列テーブル一覧表を示す図である。
【図１０】文字列テーブルを示す図である。
【図１１】図５のステップＳ２１０の詳細を説明するフローチャートである。
【図１２】図１１のステップＳ９１２の詳細を説明するフローチャートである。
【発明を実施するための形態】
【０００９】
以下に、図面を参照しながら、本発明の実施形態について説明する。
（第１の実施形態）
まず、第１の実施形態について説明する。図１は、構造化文書解析装置の構成の一例を示すブロック図である。
【００１０】
図１において、構造化文書解析装置１００は、メモリ１１０と、ＣＰＵ１３０とを備える。記憶装置１４０は、ケーブルを通して構造化文書解析装置１００と相互に接続されている。尚、構造化文書解析装置１００は、パーソナルコンピュータ等により実現される。また、記憶装置１４０は、構造化文書解析装置１００の内部にあってもよい。
記憶装置１４０には、解析対象である圧縮された構造化文書１４１が格納されている。
メモリ１１０には、アプリケーションプログラム等、構造化文書１４１を処理するソフトウェア（以下の説明では必要に応じて装置利用者と称する）から、文書解析の要求を受け付ける文書解析要求受付部１１１が格納されている。
また、メモリ１１０には、構造化文書１４１からチャネルと呼ばれるデータ群を取得するチャネル取得部１１２が格納されている。尚、チャネルには、文書構造を定義するデータ単位（イベント）を文書の構造情報として集めた構造データ群である構造チャネルと、イベントが持つ値を集めた値データ群である値チャネルとの２種類がある。
【００１１】
また、メモリ１１０には、記憶装置１４０から構造化文書１４１を読み込む文書読込部１１３が格納されている。
また、メモリ１１０には、装置利用者にイベントを通知する構造通知部１１４が格納されている。構造通知部１１４の処理の例としては、以下の処理が考えられる。即ち、SAX（Simple API for XML）やDOM（Document Object Model）のような、XMLの構造を要求するXMLパーサのAPI（Application Program Interface）関数の呼び出しである。
また、メモリ１１０には、構造化文書１４１内の構造チャネルを解析する構造チャネル解析部１１５が格納されている。また、メモリ１１０には、構造チャネルに記述されたイベントを取得するイベント取得部１１６が格納されている。
【００１２】
また、メモリ１１０には、装置利用者から、イベントが持つ値の要求を受け付ける値要求受付部１１７が格納されている。また、メモリ１１０には、要求されたイベントが持つ値が格納された値チャネルを選択する値チャネル選択部１１８が格納されている。
また、メモリ１１０には、デフレート圧縮されたチャネルを伸長するデータ伸長部１１９が格納されている。また、メモリ１１０には、要求されたイベントが持つ値を、装置利用者に通知する値通知部１２０が格納されている。値通知部１２０の処理の例としては、SAXやDOMのような、属性値・要素内容を要求するXMLパーサのAPI関数の呼び出しが考えられる。
【００１３】
また、メモリ１１０には、値チャネルからイベントが持つ値を取得する値取得部１２１が格納されている。また、メモリ１１０には、構造化文書１４１から読み込まれたブロックと呼ばれるチャネルのグループの数を数えるブロックカウンタ１２２が格納されている。また、メモリ１１０には、構造化文書１４１から読み込まれた値チャネルの数を数える値チャネルカウンタ１２３が格納されている。
また、メモリ１１０には、値チャネルから読み込まれた値の数を数える値カウンタ１２４が格納されている。また、メモリ１１０には、読み込まれた構造化チャネルが登録されたイベント一覧表１２５が格納されている。また、メモリ１１０には、読み込まれた値チャネルが登録された値チャネル一覧表１２６が格納されている。
【００１４】
図２は、圧縮された構造化文書１４１の文書構成の一例を示す図である。具体的に図ででは、構造化文書１４１が、W3CのEXI圧縮形式の構造化文書である場合を例に挙げて示している。
図２（ａ）は、圧縮される前の構造化文書の一例を、XML形式で表現した図である。XML形式の文書は、要素(A，C)、属性(B，D)、要素内容(v3，v4)、属性値(v1，v2)等の文書構成単位で記述される。
図２（ｂ）は、図２（ａ）に示す構造化文書を、EXI形式で表現した図である。EXI形式では、XML文書の要素(A，C)、属性(B，D)、要素内容(v3，v4)、属性値(v1，v2)をイベントと値とで表現する。尚、イベントの種類としては、以下のようなものがある。
SE(e)：e要素開始
AT(a)：a属性
CH：要素内容
EE：要素終了
【００１５】
図２（ｃ）は、図２（ｂ）に示す構造化文書を、チャネル化されたEXI形式で表現した図である。EXI形式の構造化文書をEXI圧縮形式にする場合、イベントは、１つの構造チャネル、値は、イベント種類毎に複数の値チャネルとして並べ替えられる。尚、構造化文書の中身の並び替えは、ブロックと呼ばれるイベントと値の集合毎に行われる。EXI形式では、一つのブロックに含まれる「値」は、ブロックサイズとして構造化文書毎に定義することができる。
図２（ｄ）は、図２（ｃ）に示す構造化文書を、EXI圧縮形式で表現した図である。構造チャネルと値チャネルはデフレート圧縮され、それぞれ一つの圧縮チャネルとして保存される。尚、厳密には、EXI圧縮形式では、図２（ｃ）に示す構造化文書において、データサイズが短いチャネルがあった場合、それらをまとめて一つの圧縮チャネルとしてデフレート圧縮される場合がある。しかしながら、図２では、説明の簡易化のため、一つの圧縮チャネルに一つのチャネルが含まれている場合を示す。
【００１６】
図３は、値チャネル一覧表１２６の一例を示す図である。
図３において、値チャネル一覧表１２６は、値チャネルが何番目のブロックに含まれるかを示すブロック番号５０１の欄をもつ。また、値チャネル一覧表１２６は、値チャネルがブロックの何番目の値チャネルなのかを示すチャネル番号５０２の欄をもつ。また、値チャネル一覧表１２６は、値チャネルに含まれる値が、どのイベントに対応する値なのかを示すイベント５０３の欄をもつ。
【００１７】
また、値チャネル一覧表１２６は、値チャネル内にいくつの値を含むのかを示す値数５０４の欄をもつ。また、値チャネル一覧表１２６は、値チャネルがすでにデータ伸長されたかどうかを示すデータ伸長５０５の欄をもつ。図３に示す例では、TRUEの値が設定されていたときに、データ伸長がされていることを示す。一方、FALSEの値が設定されていたときには、データ伸長がされていないことを示す。
また、値チャネル一覧表１２６は、値チャネルが保存されている場所を示すチャネル保存先５０６の欄をもつ。図３に示す例では、値チャネルが保存されている場所として、ファイル名を示しているが、値チャネルが保存されている場所は、ファイルポインタ、メモリ上のアドレス、URL等、保存場所を特定することができる記述ならばどのような情報であっても構わない。
値チャネル一覧表１２６では、以上の欄の情報が相互に関連付けられて登録されている。
【００１８】
図４は、イベント一覧表１２５の一例を示す図である。
イベント一覧表１２５は、構造化文書１４１の構造チャネルに含まれるイベントを順番に並べたイベント６０１の欄をもつ。また、イベント一覧表１２５は、イベントが値をもつ場合、その値が含まれる値チャネルが、何番目のブロックに含まれるかを示すブロック番号６０２の欄をもつ。尚、EXI形式の構造化文書では、属性AT(x)（ただし、x：属性名）、要素内容CHのイベントが値をもつ。
また、イベント一覧表１２５は、イベントが値をもつ場合、その値が含まれる値チャネルが、ブロック内の何番目の値チャネルなのかを示すチャネル番号６０３の欄をもつ。また、イベント一覧表１２５は、イベントがもつ値が、値チャネルの何番目の値であるかを示す値番号６０４の欄をもつ。
イベント一覧表１２５では、以上の欄の情報が相互に関連付けられて登録されている。
【００１９】
次に、図５のフローチャートを参照しながら、構造化文書解析装置１００における文書解析処理の全体の流れの一例を説明する。
まず、文書解析要求受付部１１１が、圧縮された構造化文書１４１の解析要求を受け付けると（ステップＳ２０１）、文書読込部１１３は、構造化文書１４１を読み込む（ステップＳ２０２）。構造化文書１４１を読み込んだ文書読込部１１３は、ブロックカウンタ１２２の値を０に初期化する（ステップＳ２０３）。
ブロックカウンタ１２２の値が初期化された後、構造化文書１４１に含まれる全てのブロックについて、以下の処理（ステップＳ２０４〜Ｓ２１２）が行われる。
【００２０】
まず、チャネル取得部１１２は、構造化文書１４１から構造チャネルを取得し、ブロックカウンタ１２２に「１」を加算する（ステップＳ２０４）。尚、EXI形式の構造化文書では、各ブロックの最初のチャネルは、構造チャネルとなっている。
次に、構造チャネル解析処理により、ステップＳ２０５で取得された構造チャネルが解析される（ステップＳ２０５）。すると、ステップＳ２０５で取得された構造チャネルが属するブロックに含まれる値チャネルの数が、値チャネルカウンタ１２３に設定される。また、構造チャネル解析処理により、値チャネル一覧表１２６の、ブロック番号５０１、チャネル番号５０２、イベント５０３、及び値数５０４の欄が設定される。尚、構造チャネル解析処理の詳細については後述する。
【００２１】
その後、チャネル取得部１１２は、値チャネルカウンタ１２３に設定された値チャネルの数分、構造化文書１４１から、該当するチャネルを取得し、取得したチャネルを値チャネルとしてファイルに保存する（ステップＳ２０６）。
値チャネルを保存した後、チャネル取得部１１２は、値チャネル一覧表１２６の該当する行の、データ伸長５０５の欄にFALSEを、チャネル保存先５０６の欄にファイル名をそれぞれ設定する（ステップＳ２０７）。
その後、構造通知部１１４は、イベント一覧表１２５を参照し、その内容を装置利用者に通知する（ステップＳ２０８）。
次に、値要求受付部１１７は、ブロック番号、値チャネルのチャネル番号、及び値番号と共に、値の要求を受け付けたか否かを判定する（ステップＳ２０９）。この判定の結果、値の要求を受け付けた場合には、値取得処理が行われて、値取得部１２１が、要求のあった値を取得する（ステップＳ２１０）。値通知部１２０は、取得された値を装置利用者に通知する（ステップＳ２１１）。一方、値の要求を受け付けていない場合には、ステップＳ２１０、ステップＳ２１１の処理を省略してステップＳ２１２に進む。
そして、チャネル取得部１１２は、構造化文書１４１の最後まで処理を終えたか否かを判定する（ステップＳ２１２）。この判定の結果、構造化文書１４１の最後まで処理を終えていない場合には、ステップＳ２０４に戻り、次のブロックについての処理を行う。一方、構造化文書１４１の最後まで処理を終えた場合には、図５のフローチャートによる処理を終了する。
【００２２】
次に、図６のフローチャートを参照しながら、図５のステップＳ２０５の構造チャネル解析処理の詳細について説明する。
まず、構造チャネル解析部１１５は、データ伸長部１１９に、ステップＳ２０５で取得された構造チャネルの伸長を要求する（ステップＳ３０１）。すると、データ伸長部１１９は、構造チャネルのデータ伸長を行う（ステップＳ３０２）。
データ伸長が行われた後、構造チャネル解析部１１５は、値チャネルカウンタ１２３の値を０に初期化する（ステップＳ３０３）。そして、構造チャネルに含まれる全てのイベントについて、以下の処理（ステップＳ３０４〜Ｓ３１１）が行われる。
【００２３】
まず、イベント取得部１１６は、構造チャネル内のイベントを１つ取得する（ステップＳ３０４）。そして、イベント取得部１１６は、取得したイベントが値への参照をもつものであるか否かを判定する（ステップＳ３０５）。前述したように、EXI形式の構造化文書では、属性AT(x)（ただし、x：属性名）、要素内容CHのイベントが値をもつ。
この判定の結果、取得したイベントが値への参照をもつものである場合には、ステップＳ３０６の処理に移る。一方、取得したイベントが値への参照をもつものでない場合には、後述するステップＳ３１０の処理に移る。
【００２４】
取得したイベントが値への参照をもつものである場合、イベント取得部１１６は、値チャネル一覧表１２６を参照する。そして、イベント取得部１１６は、ブロックカウンタ１２２とブロック番号５０１の値が一致し、且つ、取得したイベントと値チャネル一覧表１２６のイベント５０３の値とが一致する行が、値チャネル一覧表１２６にあるか否かを判定する（ステップＳ３０６）。この判定の結果、一致する行があった場合には、後述するＳ３０９の処理に、一致する行がなかった場合には、ステップＳ３０７の処理に移る。
一致する行がなかった場合、構造チャネル解析部１１５は、値チャネルカウンタ１２３に「１」を加算する（ステップＳ３０７）。
【００２５】
その後、構造チャネル解析部１１５は、値チャネル一覧表１２６に、行を追加する。そして、構造チャネル解析部１１５は、追加した行において、ブロック番号５０１の欄にブロックカウンタ１２２の値を、チャネル番号５０２の欄に値チャネルカウンタ１２３の値を、イベント５０３の欄に取得したイベントを夫々設定する（ステップＳ３０８）。尚、構造チャネル解析部１１５は、追加した行の、値数５０４、データ伸長５０５、チャネル保存先５０６には、夫々初期値（例えば、０、FALSE、NULL）を設定する。
次に、構造チャネル解析部１１５は、値チャネル一覧表１２６の該当する行における値数５０４に「１」を加算する（ステップＳ３０９）。
【００２６】
さらに、構造チャネル解析部１１５は、イベント一覧表１２５に、ステップＳ３０４で取得したイベントに対応する行を追加する（ステップＳ３１０）。そして、構造チャネル解析部１１５は、追加した行のイベント６０１の欄に、取得したイベントを設定する。取得したイベントが値への参照をもつ場合、構造チャネル解析部１１５は、追加した行のブロック番号６０２の欄に、値チャネル一覧表１２６の該当する行におけるブロック番号５０１の値を設定する。また、構造チャネル解析部１１５は、追加した行のチャネル番号６０３の欄に、値チャネル一覧表１２６の該当する行におけるチャネル番号５０２の値を設定する。さらに、構造チャネル解析部１１５は、追加した行の値番号６０４の欄に、値チャネル一覧表１２６の該当する行におけるその時点での値数５０４を設定する。
【００２７】
そして、イベント取得部１１６は、構造チャネル内の全てのイベントについて処理を終了したか否かを判定する（ステップＳ３１１）。この判定の結果、構造チャネル内の全てのイベントについて処理を終了していない場合には、ステップＳ３０４に戻り、未取得のイベントについて処理を行う。一方、構造チャネル内の全てのイベントについて処理を終了した場合には、図６のフローチャートによる処理を終了する。
【００２８】
次に、図７のフローチャートを参照しながら、図５のステップＳ２１０の値取得処理の詳細について説明する。
まず、値要求受付部１１７は、値チャネル選択部１１８に、要求されたブロック番号、チャネル番号を指定し、値チャネルの選択を要求する（ステップＳ４０１）。
要求を受けた値チャネル選択部１１８は、値チャネル一覧表１２６を参照し、指定されたブロック番号、チャネル番号に一致する行を検索する。値チャネル選択部１１８は、検索した行のデータ伸長５０５の値と、チャネル保存先５０６の値を取得する（ステップＳ４０２）。
次に、値要求受付部１１７は、要求された値番号と、ステップＳ４０２で取得されたデータ伸長の有無の値及びチャネル保存先とを指定し、値取得部１２１にイベントの値の取得を要求する（ステップＳ４０３）。
【００２９】
次に、値取得部１２１は、取得したデータ伸長の有無の値を参照し、値チャネルのデータ伸長がまだ行われていないか否かを判定する（ステップＳ４０４）。この判定の結果、Ｓ４０５の処理に、値チャネルのデータ伸長が既に行われていた場合には、後述するステップＳ４０７の処理に移る。
一方、値チャネルのデータ伸長がまだ行われていない場合、値取得部１２１は、データ伸長部１１９に、値チャネルのデータ伸長を要求する（ステップＳ４０５）。データ伸長の要求を受けたデータ伸長部１１９は、値チャネルのデータ伸長を行った後、伸長した値チャネルをファイルに保存する。そして、データ伸長部１１９は、値チャネル一覧表１２６の、データ伸長５０５の欄にTRUEを、チャネル保存先５０６の欄に保存したファイル名をそれぞれ設定する（ステップＳ４０６）。
【００３０】
次に、値取得部１２１は、値カウンタ１２４の値を０に初期化する（ステップＳ４０７）。そして、要求された値チャネルの全ての値について以下の処理（ステップＳ４０８〜Ｓ４１０）が行われる。
まず、値取得部１２１は、値チャネルから値を１つ取得し、値カウンタ１２４に「１」を加算する（ステップＳ４０８）。
次に、値取得部１２１は、要求された値番号と、値カウンタ１２４の値とが一致したか否かを判定する（ステップＳ４０９）。この判定の結果、要求された値番号と、値カウンタ１２４の値とが一致しなかった場合には、ステップＳ４１０に移る。そして、ステップＳ４０８に戻り、未取得の値について処理を行う。
そして、要求された値番号と、値カウンタ１２４の値とが一致した場合、値取得部１２１は、値通知部１２０に取得した値を通知する（ステップＳ４１１）。そして、図７のフローチャートによる処理を終了する。
【００３１】
以上のように本実施形態では、構造化文書１４１における構造チャネルが圧縮されていた場合、当該構造チャネルを伸長する。そして、構造化文書１４１の構造情報（イベント）と、値を参照するための参照情報（ブロック番号、チャネル番号、値番号）とが含まれたイベント一覧表１２５を作成し、その内容をアプリケーションプログラムに通知する。その後、アプリケーションプログラムから値の要求があり、その値が伸長されていない場合には伸長し、値をアプリケーションプログラムに通知する。したがって、EXI圧縮形式等の、圧縮されたXML文書を解析する際、アプリケーションプログラムが必要とするデータの一部分だけを、必要な時点で伸長することができる。よって、圧縮されたXML文書を解析する際に、XML文書全体をデータ伸長するという負荷の高い処理が集中することがなくなる。また、アプリケーションプログラムが、XML文書の構造を把握しながら、必要とする値に関係する部分だけをデータ伸長することができるため、無駄なデータ伸長処理を行う必要がなくなる。これらにより、XML文書の解析処理が高速化し、使用するメモリやＣＰＵ等のリソース使用量を少なくすることができる。この効果は、特にリソースが少ないデジタルカメラ等の小型機器で、圧縮されたXML文書の解析処理を行う場合に有効である。
【００３２】
尚、本実施形態では、例えば、イベント６０１が構造情報の一例であり、ブロック番号６０２及びチャネル番号６０３が値データ群の識別情報の一例であり、値番号６０４が値データの識別情報の一例である。また、例えば、図５のステップＳ２０５（図６）の処理により構造解析手段の一例が実現され、ステップＳ２０８の処理により構造通知手段の一例が実現される。また、例えば、図５のステップＳ２１０の処理により値選択手段及び値取得手段が実現される（具体的に値選択手段は、例えば、図７のステップＳ４０２等の処理で実現され、値取得手段は、例えば、ステップＳ４０６、Ｓ４０８、Ｓ４０９等の処理で実現される）。また、例えば、図５のステップＳ２１１の処理により値通知手段の一例が実現される。
【００３３】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。第１の実施形態では、値取得部１２１が取得した値が、そのまま装置利用者（アプリケーションプログラム等）に通知可能な値である場合を例に挙げて説明した。
しかしながら、EXI圧縮形式の構造化文書では、イベントから参照される値が文字列型であった場合、文字列が値チャネルに含まれる代わりに、解析処理中に作成される文字列テーブルのインデックス番号が値チャネルに含まれている場合がある。そこで、本実施形態では、イベントから参照される値が、文字列テーブルのインデックス番号だった場合について説明する。このように本実施形態と第１の実施形態とは、値取得処理（図５のステップＳ２１０を参照）の一部が主として異なる。よって、本実施形態の説明において、第１の実施形態と同一の部分については、図１〜図７に付した符号と同一の符号を付す等して詳細な説明を省略する。
【００３４】
図８は、構造化文書解析装置の構成の一例を示すブロック図である。
図８において、構造化文書解析装置８００は、メモリ８１０と、ＣＰＵ１３０とを備える。記憶装置１４０には、解析対象である圧縮された構造化文書８４１が格納されている。メモリ８１０には、図１に示したメモリ１１０内の構成部に加えて以下の構成部が格納されている。
すなわち、メモリ８１０には、文字列テーブルを生成する文字列テーブル生成部８２７と、文字列テーブルを更新する文字列テーブル更新部８２８とが格納されている。また、メモリ８１０には、解析処理中に、文字列テーブルに登録する値チャネルの範囲を選択する文字列テーブル化範囲選択部８２９が格納されている。
【００３５】
また、メモリ８１０には、複数ある文字列テーブルから、一つの文字列テーブルを選択する文字列テーブル選択部８３０が格納されている。また、メモリ８１０には、文字列テーブルの一覧を登録する、文字列テーブル一覧表８３１が格納されている。また、メモリ８１０には、文字列の参照番号と文字列の対応を登録する文字列テーブル８３２が格納されている。
【００３６】
図９は、文字列テーブル一覧表８３１の一例を示す図である。
文字列テーブル一覧表８３１は、どのイベントから参照される値であるかを示すイベント１１０１の欄をもつ。尚、EXI形式の構造化文書では、文字列テーブルは、イベント毎に生成されるが、イベントで共通の文字列テーブルをもつ形式では、図９に示すように、文字列テーブルが複数の行を有する必要はない。
また、文字列テーブル一覧表８３１は、文字列テーブル８３２の名前を示す文字列テーブル名１１０２の欄をもつ。図９に示す例では、文字列テーブル名１１０２としてファイル名を使用しているが、文字列テーブル名１１０２は、ファイルポインタ、メモリ上のアドレス、URL等、保存場所を特定することができる記述ならばどのような情報であっても構わない。
【００３７】
また、文字列テーブル一覧表８３１は、文字列テーブル一覧表８３１が、どのブロックに属する値チャネルまでを読み込んで、文字列テーブル８３２に登録しているのかを示す読込済ブロック番号１１０３の欄をもつ。
文字列テーブル一覧表８３１では、以上の欄の情報が相互に関連付けられて登録されている。
尚、EXI形式の構造化文書では、厳密にはCH（要素内容）イベントに対する文字列テーブルは、文書全体にまたがって文字列を登録するグローバル文字列テーブルと、文書の一部に関係する文字列を登録するローカル文字列テーブルとがある。しかしながら、両テーブルとも、文字列型の値の取得に関する処理はほとんど同じであるため、ここでは、ローカル文字列テーブルの詳細な説明を省略する。
【００３８】
図１０は、文字列テーブル８３２の一例を示す図である。図１０に示す例では、図２に示した構造化文書の解析処理中に、CH（要素内容）のイベントに対して生成される文字列テーブルが記述されている。
文字列テーブル８３２は、文字列１２０２の欄に登録されている文字列への参照番号１２０１の欄をもつ。文字列テーブル８３２では、これらの欄の情報が相互に関連付けられて登録されている。
【００３９】
構造化文書解析装置８００における文書解析処理の全体の流れは、図５に示したものと同じであるので、その詳細な説明を省略する。
【００４０】
次に、図１１のフローチャートを参照しながら、図５のステップＳ２１０の値取得処理の詳細について説明する。
図１１において、ステップＳ９０１〜Ｓ９１０の処理は、それぞれ図７のステップＳ４０１〜Ｓ４１０の処理と同じであるため、それらの詳細な説明を省略する。
値取得部１２１は、取得した値が文字列の参照番号であるか否かを判定する（ステップＳ９１１）。この判定の結果、取得した値が文字列の参照番号でない場合には、第１の実施形態と同様に、値取得部１２１は、値通知部１２０に、取得した値を通知する（ステップＳ９１３）。一方、取得した値が文字列の参照番号だった場合には、文字列値取得処理（ステップＳ９１２）を行った後にステップＳ９１３に進む。
【００４１】
次に、図１２のフローチャートを参照しながら、図１１のステップＳ９１２の文字列値取得処理の詳細について説明する。
まず、値取得部１２１は、文字列テーブル選択部８３０に対し、イベントを示して対応する文字列テーブルを要求する（ステップＳ１００１）。尚、イベントは、例えば、値チャネル一覧表１２６における、ステップＳ９０１で要求された値チャネルに対応するイベント５０３の値から得られる。
要求を受けた文字列テーブル選択部８３０は、文字列テーブル一覧表８３１を参照し、イベント１１０１の欄の値と、示されたイベントとが一致する行を検索する（ステップＳ１００２）。
文字列テーブル選択部８３０は、イベント１１０１の欄の値と、示されたイベントとが一致する行の文字列テーブル名１１０２の欄を参照し、文字列テーブル名が登録されているか否かを判定する（ステップＳ１００３）。この判定の結果、文字列テーブル名が登録されている場合には、ステップＳ１００４の処理に、登録されていなかった場合には、ステップＳ１０１４の処理に移る。
【００４２】
文字列テーブル名が登録されていなかった場合、文字列テーブル選択部８３０は、文字列テーブル生成部８２７に、示されたイベントに対応する文字列テーブルの生成を要求する（ステップＳ１０１４）。要求を受け取った文字列テーブル生成部８２７は、空の文字列テーブルを生成し、文字列テーブル一覧表８３１に、示されたイベント名と、空の文字列テーブル名と、読込済ブロック番号としての初期値（＝０）とを登録する（ステップＳ１０１５）。そして、ステップＳ１００４の処理に移る。
そして、ステップＳ１００３で登録されていたと判定された文字列テーブル、又は、ステップＳ１０１５で作成された文字列テーブルから、該当する参照番号が見つかるまで、以下の処理（ステップＳ１００４〜Ｓ１０１３）が繰り返される。
【００４３】
まず、値取得部１２１は、文字列テーブル８３２を参照し、参照番号に該当する文字列を検索する（ステップＳ１００４）。
そして、値取得部１２１は、参照番号に該当する文字列が文字列テーブル８３２にあるか否かを判定する（ステップＳ１００５）。この判定の結果、該当する文字列があった場合、値取得部１２１は、その文字列を取得する（ステップＳ１０１６）。そして、図１２のフローチャートによる処理を終了する。
一方、該当する文字列がなかった場合、値取得部１２１は、文字列テーブル更新部８２８に、イベントに対応する文字列テーブルの更新を要求する（ステップＳ１００６）。
【００４４】
要求を受けた文字列テーブル更新部８２８は、文字列テーブル化範囲選択部８２９に、文字列テーブルに反映すべき値チャネルの選択を要求する（ステップＳ１００７）。要求を受けた文字列テーブル化範囲選択部８２９は、文字列テーブル一覧表８３１と、値チャネル一覧表１２６とを参照し、それらを比較した結果に基づいて、次に読み込む値チャネルを選択する（ステップＳ１００８）。選択対象としては、例えば、示されたイベントと同じイベントに対する値チャネルであり、且つ、読込済ブロック番号１１０３の次のブロック番号をもつブロックに属する値チャネルが考えられる。
次に、文字列テーブル化範囲選択部８２９は、値チャネル一覧表１２６を参照し、選択した値チャネルのチャネル保存先５０６の値を、文字列テーブル更新部８２８に通知する（ステップＳ１００９）。通知を受け取った文字列テーブル更新部８２８は、選択された値チャネルのデータ伸長をデータ伸長部１１９に要求する（ステップＳ１０１０）。
【００４５】
要求を受け取ったデータ伸長部１１９は、示された値チャネルのデータを伸長し、文字列テーブル更新部８２８に渡す（ステップＳ１０１１）。
次に、文字列テーブル更新部８２８は、値チャネルから順番に値を取得し、値が文字列型であり、且つ、実際の文字列が記述されていた場合に、文字列テーブル８３２に、新しい参照番号１２０１と文字列１２０２とを登録する（ステップＳ１０１２）。
その後、文字列テーブル更新部８２８は、文字列テーブル一覧表８３１の該当する読込済ブロック番号１１０３を、実際に読み込んだブロック番号に更新する（ステップＳ１０１３）。
以上のようにイベントから参照される値が、文字列テーブルのインデックス番号で合っても、第１の実施形態で説明したのと同様の効果を得ることができる。
【００４６】
尚、本実施形態では、例えば、文字列テーブル８３２がボキャブラリテーブルの一例であり、文字列テーブル一覧表８３１がボキャブラリテーブル一覧表の一例である。また、例えば、メモリ８１０がボキャブラリテーブル記憶手段、及びボキャブラリテーブル一覧表記憶手段の一例である。また、例えば、イベント１１０１が構造情報の一例であり、文字列テーブル名１１０２がボキャブラリテーブルの識別情報の一例であり、読込済ブロック番号１１０３が登録済データ識別情報の一例である。また、例えば、文字列テーブル８３２の文字列１２０２の欄に登録されている文字列が、値データの一例である。また、例えば、図１１のステップＳ９１１の処理により判定手段の一例が実現される。また、例えば、図１２のステップＳ１００２〜Ｓ１００４の処理によりボキャブラリテーブル読み出し手段の一例が実現され、ステップＳ１００５の処理により第２の判定手段の一例が実現される。また、例えば、ステップＳ１００８の処理によりボキャブラリテーブル化範囲選択手段の一例が実現され、ステップＳ１０１２の処理によりボキャブラリテーブル更新手段の一例が実現され、ステップＳ１０１６の処理により第２の値取得手段の一例が実現される。
【００４７】
尚、前述した実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００４８】
（その他の実施例）
本発明は、以下の処理を実行することによっても実現される。即ち、まず、以上の実施形態の機能を実現するソフトウェア（コンピュータプログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）が当該コンピュータプログラムを読み出して実行する。
【符号の説明】
【００４９】
１００、８００  構造化文書解析装置、１３０  ＣＰＵ、１１０、８１０  メモリ
【図１】
0005570202.tif 000002
【図２】
0005570202.tif 000003
【図３】
0005570202.tif 000004
【図４】
0005570202.tif 000005
【図５】
0005570202.tif 000006
【図６】
0005570202.tif 000007
【図７】
0005570202.tif 000008
【図８】
0005570202.tif 000009
【図９】
0005570202.tif 000010
【図１０】
0005570202.tif 000011
【図１１】
0005570202.tif 000012
【図１２】
0005570202.tif 000013