(57)【要約】  インデックス生成装置１００が、項目および値の組み合わせにより記述されたデータを入力し、データに含まれる項目および値それぞれについて、前記項目および値それぞれの出現位置に関するインデックス情報を生成することとしたので、例えばＸＢＲＬデータを項目と値とを組み合わせた検索条件で効率的に検索することが可能となる。
2018185921.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
項目および値の組み合わせにより記述されたデータを入力し、
前記データに含まれる項目および値それぞれについて、前記項目および値それぞれの出現位置に関するインデックス情報を生成する
処理を実行させるインデックス生成プログラム。
【請求項２】
前記生成する処理は、前記データに含まれる項目、属性および値それぞれについて、前記項目、属性および値それぞれの出現位置に関するインデックス情報を生成する
処理を実行させる請求項１に記載のインデックス生成プログラム。
【請求項３】
前記生成する処理は、インデックスの軸として項目、属性および値に関する軸、ファイルに含まれるブロックに関する軸およびブロック内の出現位置に関する軸を含むインデックス情報を生成する
処理を実行させる請求項２に記載のインデックス生成プログラム。
【請求項４】
前記生成する処理は、前記データを符号化する際に、前記データに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報を生成する
処理を実行させる請求項１に記載のインデックス生成プログラム。
【請求項５】
項目および値の組み合わせにより記述されたデータを入力する入力部と、
前記データに含まれる項目および値それぞれについて、前記項目および値それぞれの出現位置に関するインデックス情報を生成する生成部と、
を有することを特徴とするインデックス生成装置。
【請求項６】
コンピュータが、
項目および値の組み合わせにより記述されたデータを入力し、
前記データに含まれる項目および値それぞれについて、前記項目および値それぞれの出現位置に関するインデックス情報を生成する
各処理を実行するインデックス生成方法。
【請求項７】
コンピュータに、
項目および値の組み合わせにより記述されたデータに対する特定の項目および値を含む検索条件を受け付け、
前記データに含まれる項目および値それぞれについての前記項目および値それぞれの出現位置に関するインデックス情報を参照し、前記検索条件を検索する
処理を実行させる検索プログラム。
【請求項８】
前記検索する処理は、
圧縮された前記データを伸長し、
前記インデックス情報を参照し、前記検索条件に含まれる特定の項目および特定の値に対する出現位置を特定し、伸長データから、特定された出現位置に存在する部分データを検索する
処理を実行させる請求項７に記載の検索プログラム。
【請求項９】
前記検索する処理は、
前記データを符号化する際に生成された前記インデックス情報を参照し、前記検索条件に含まれる特定の項目および特定の値に対する出現位置を特定し、符号化データから、特定された出現位置に存在する部分データを検索し、検索した部分データを部分伸長する
処理を実行させる請求項７に記載の検索プログラム。
【請求項１０】
項目および値の組み合わせにより記述されたデータに対する特定の項目および値を含む検索条件を受け付ける受付部と、
前記データに含まれる項目および値それぞれについての前記項目および値それぞれの出現位置に関するインデックス情報を参照し、前記検索条件を検索する検索部と、
を有することを特徴とする検索装置。
【請求項１１】
コンピュータが、
項目および値の組み合わせにより記述されたデータに対する特定の項目および値を含む検索条件を受け付け、
前記データに含まれる項目および値それぞれについての前記項目および値それぞれの出現位置に関するインデックス情報を参照し、前記検索条件を検索する
各処理を実行する検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックス生成プログラムなどに関する。
【背景技術】
【０００２】
ＸＢＲＬ（eXtensible  Business  Reporting  Language）文書による財務情報の報告は、日本を含む世界各国で行われている。ＸＢＲＬとは、各種財務報告用の情報を作成、流通、利用できるように標準化されたＸＭＬベースの言語である。ＸＢＲＬ文書とは、例えば財務会計報告に関して、ＸＢＲＬで記述された構造化文書である。【０００３】
ＸＢＲＬで記述されたデータを検索する検索条件は、例えば、項目と値を組み合わせた形で規定される。【０００４】
構造化文書の検索における検索条件に含まれる、要素指定の構造化検索と要素内容における文字列検索とを行う技術が開示されている（例えば、特許文献１参照）。かかる技術では、構造化文書における各要素の位置関係を格納する手段と、各要素に出現する文字列の位置情報を格納する手段を備え、これらの２つの情報を要素の位置情報で連結または結合し１つの索引情報として処理する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−２６５７７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＸＢＲＬデータ等の構造化文書を項目と値とを組み合わせた検索条件で検索を行う場合には、演算量が問題となる。【０００７】
例えば、構造化文書の検索を行う従来の技術では、項目に相当する要素と値に相当する要素内容の位置を索引（インデックス）化している。ところが、かかる技術では、特定の要素と特定の要素内容とを組み合わせた検索条件で検索を行う場合には、以下の処理を行う。すなわち、かかる技術では、特定の要素を各要素の位置関係を用いて検索して、検索できた特定の要素について文字列個別に格納された各要素に出現する文字列の位置情報を用いて特定の要素内容を参照する。したがって、構造化文書を要素と要素内容とを組み合わせた検索条件で検索を行う場合には、演算量が問題となる。【０００８】
１つの側面では、構造化文書を項目と値とを組み合わせた検索条件で効率的に検索することを目的とする。
【課題を解決するための手段】
【０００９】
第１の案では、コンピュータに、項目および値の組み合わせにより記述されたデータを入力し、前記データに含まれる項目および値それぞれについて、前記項目および値それぞれの出現位置に関するインデックス情報を生成する、処理を実行させる。
【発明の効果】
【００１０】
一つの態様によれば、構造化文書を項目と値とを組み合わせた検索条件で効率的に検索することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係るインデックス生成装置の構成を示す機能ブロック図である。
【図２】図２は、実施例１に係るＸＢＲＬデータの一例を示す図である。
【図３】図３は、実施例１に係るブロックテーブルの一例を示す図である。
【図４】図４は、実施例１に係るインデックス情報の一例を示す図である。
【図５Ａ】図５Ａは、実施例１に係る上位インデックスのインデックス生成処理の流れの一例を示す図である。
【図５Ｂ】図５Ｂは、実施例１に係る下位インデックスのインデックス生成処理の流れの一例を示す図である。
【図６】図６は、実施例１に係る別の下位インデックスのインデックス生成処理の流れの一例を示す図である。
【図７】図７は、実施例１に係る別の下位インデックスのインデックス生成処理の流れの一例を示す図である。
【図８】図８は、下位インデックスのオフセットの割り振り方を説明する図である。
【図９】図９は、実施例１に係るインデックス生成処理のフローチャートの一例を示す図である。
【図１０】図１０は、実施例１に係る検索装置の構成を示す機能ブロック図である。
【図１１】図１１は、実施例１に係るオフセット検索処理の流れの一例を示す図である。
【図１２】図１２は、実施例１に係るオフセット検索処理の流れの一例を示す図である。
【図１３】図１３は、実施例１に係る検索対象抽出処理の流れの一例を示す図である。
【図１４】図１４は、実施例１に係る検索処理のフローチャートの一例を示す図である。
【図１５】図１５は、実施例１に係る検索フローの一例を示す図である。
【図１６】図１６は、実施例２に係るインデックス生成装置の機能構成を示すブロック図である。
【図１７】図１７は、実施例２に係る動的辞書の一例を示す図である。
【図１８】図１８は、実施例２に係るブロックテーブルの一例を示す図である。
【図１９Ａ】図１９Ａは、実施例２に係る上位インデックスのインデックス生成処理の流れの一例を示す図である。
【図１９Ｂ】図１９Ｂは、実施例２に係る下位インデックスのインデックス生成処理の流れの一例を示す図である。
【図２０Ａ】図２０Ａは、実施例２に係るインデックス生成処理のフローチャートの一例を示す図である。
【図２０Ｂ】図２０Ｂは、実施例２に係る符号化処理のフローチャートの一例を示す図である。
【図２１】図２１は、実施例２に係る検索装置の機能構成を示すブロック図である。
【図２２】図２２は、実施例２に係る検索対象伸長処理の流れの一例を示す図である。
【図２３】図２３は、実施例２に係る検索処理のフローチャートの一例を示す図である。
【図２４】図２４は、実施例２に係る検索フローの一例を示す図である。
【図２５】図２５は、インデックス生成装置および検索装置のハードウェア構成の一例を示す図である。
【図２６】図２６は、ＴＤｎｅｔを利用した検索フローの参考例を示す図である。
【図２７】図２７は、ＸＢＲＬデータの一例を示す図である。
【図２８】図２８は、検索処理の参考例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するインデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１３】
まず、企業ごとのＸＢＲＬ文書による財務情報を検索するＴＤｎｅｔ（Timely  Disclosure  network）というシステムがある。かかるＴＤｎｅｔでは、企業が提出するＸＢＲＬ文書による財務情報を投資家に開示し、開示した財務情報を投資家が検索することができる。ここで、ＴＤｎｅｔを利用した検索フローの参考例を、図２６を参照して説明する。図２６は、ＴＤｎｅｔを利用した検索フローの参考例を示す図である。【００１４】
図２６に示すように、企業は、ＴＤｎｅｔを利用して、財務情報のＸＢＲＬデータをＺｉｐにより圧縮したＺｉｐファイルを提出する（Ｓ９０１）。【００１５】
審査官は、Ｚｉｐファイルを解凍（伸長）し、伸長したＸＢＲＬデータをチェックする（Ｓ９０２）。審査官は、承認したＸＢＲＬデータのＺｉｐファイルをＴＤｎｅｔのＤＢ（DataBase）に格納し（Ｓ９０３）、当該ＸＢＲＬデータを開示する。ここでいう審査官とは、例えば、公的な監督機関であったり、証券取引所であったりする。【００１６】
投資家は、ＴＤｎｅｔを利用して、開示された企業のＸＢＲＬデータを検索するために、報告日の検索期間および検索対象の企業名を入力する（Ｓ９０４）。投資家は、ＴＤｎｅｔを利用して、検索対象のＸＢＲＬデータを決定する（Ｓ９０５）。投資家は、ＴＤｎｅｔを利用して、決定した検索対象のＸＢＲＬデータに対するＺｉｐファイルをローカルフォルダに保存する（Ｓ９０６）。そして、投資家は、保存したＺｉｐファイルを解凍（伸長）する（Ｓ９０７）。【００１７】
続いて、投資家は、伸長したＸＢＲＬデータを専用ツールに入力する（Ｓ９０８）。専用ツールは、入力されたＸＢＲＬデータを字句解析し、データモデルのツリーを構築する（Ｓ９０９）。そして、専用ツールは、要素と値のペアを、表示定義に従って、一覧表示する（Ｓ９１０）。【００１８】
そして、投資家は、検索対象である要素の検索ワードまたは検索対象である値の検索ワードを入力する（Ｓ９１１）。要素の検索ワードの一例として、勘定科目である「売上収益」が挙げられる。値の検索ワードの一例として、「社長」が挙げられる。すると、専用ツールは、データモデルのツリーを走査し、検索ワードと照合した結果を通知する（Ｓ９１２）。例えば、要素の検索ワードが「売上収益」である場合には、勘定科目「売上収益」に対する値が通知される。値の検索ワードが「社長」である場合には、「社長」を含む勘定科目の値が通知される。
【００１９】
ここで、ＸＢＲＬデータの一例を、図２７を参照して説明する。図２７は、ＸＢＲＬデータの一例を示す図である。【００２０】
図２７に示すように、１つのＸＢＲＬデータは、データ値と、データ値を補足する付加情報からなる。付加情報は、データ値を含む要素と関連付けられる、別の独立した要素で指定される情報である。付加情報は、名前がｃｏｎｔｅｘｔとｕｎｉｔである要素に複数定義されるが、ここでは、ｃｏｎｔｅｘｔを区別するためのコンテキスト名として、「ＣｕｒｒｅｎｔＱ１」、「ＰｒｉｏｒＱ１」が付与されている。ｕｎｉｔを区別するためのユニット名として、「ＪＰＹ」、「Ｐｕｒｅ」が付与されている。そして、データ値には、名前がＳａｌｅｓである要素に対して、付加情報を参照する属性としてコンテキスト名である「ＣｕｒｒｅｎｔＱ１」、ユニット名である「ＪＰＹ」が定義されている。そして、要素「Ｓａｌｅｓ」の値として「１００００」が定義されている。また、コンテキスト名である「ＣｕｒｒｅｎｔＱ１」に対応する付加情報には、報告日の日付を意味する、要素「ｐｅｒｉｏｄ」の配下にある要素「ｉｎｓｔａｎｔ」の値として「２０１６−０６−３０」が定義されている。【００２１】
ここで、投資家が検索対象である要素の検索ワードとして「２０１６」年度の「売上収益」を入力した場合の、検索処理の参考例を、図２８を参照して説明する。図２８は、検索処理の参考例を示す図である。なお、図２８では、専用ツールに入力されたＸＢＲＬデータについて、データモデルのツリーが構築されたとする。ツリーの中の＜ｃ＞の「ｃ」、＜ｐ＞の「ｐ」、＜ｉ＞の「ｉ」は、それぞれ「ｃｏｎｔｅｘｔ」、「ｐｅｒｉｏｄ」、「ｉｎｓｔａｎｔ」を省略したものである。また、ツリーの中の＜Ｓ＞の「Ｓ」、「ｃｒ＝」は、それぞれ「Ｓａｌｅｓ」、「ｃｏｎｔｅｘｔＲｅｆ＝」を省略したものである。また、ツリーの中の"Ｃｕｒ"、"Ｐｒｉ"は、それぞれ「ＣｕｒｒｅｎｔＱ１」、「ＰｒｉｏｒＱ１」を省略したものである。また、ツリーの中の「２０１６」、「２０１５」は、それぞれ「２０１６−０６−３０」、「２０１５−０６−３０」を省略したものである。【００２２】
図２８に示すように、「２０１６」年度の「売上収益」という検索ワードを受け取った専用ツールは、ツリーのトップ（ルート）から末端にかけて、「２０１６」を値に含む要素を探索する（Ｓ９２０）。そして、専用ツールは、探索した結果、親要素が「ｉｎｓｔａｎｔ」であることを確認し（Ｓ９２１）、祖先に遡って「ｃｏｎｔｅｘｔ」要素を探索する（Ｓ９２２）。そして、専用ツールは、祖先要素が「ｃｏｎｔｅｘｔ」要素であることを確認し、ｉｄ属性を探索する（Ｓ９２３）。探索された結果、ｉｄ属性値は、「ＣｕｒｒｅｎｔＱ１」であったとする。【００２３】
続いて、専用ツールは、ツリーのトップ（ルート）から末端にかけて、「ＣｕｒｒｅｎｔＱ１」を値に持つ「ｃｏｎｔｅｘｔＲｅｆ」属性を探索する（Ｓ９２４）。そして、専用ツールは、探索した結果、「ＣｕｒｒｅｎｔＱ１」が「ｃｏｎｔｅｘｔＲｅｆ」属性の値であることを確認し、「ｃｏｎｔｅｘｔＲｅｆ」属性が「売上収益」であることを示す「Ｓａｌｅｓ」要素の属性であることを確認する（Ｓ９２５）。そして、専用ツールは、「Ｓａｌｅｓ」要素の値として「１０００」を取得する（Ｓ９２６）。【００２４】
このようにして、参考例に係る検索処理は、ＸＢＲＬ固有の仕様により、データ値と付加情報が分離されているため、何回も、ＸＢＲＬデータのデータモデルのツリーの全データを走査しながら、検索ワードと照合するので、演算量の増大が見込まれ、効率的に検索することが難しい。【００２５】
［実施例１に係るインデックス生成装置の構成］
図１は、実施例１に係るインデックス生成装置の構成を示す機能ブロック図である。インデックス生成装置１００は、項目および値の組み合わせにより記述されたＸＢＲＬデータを入力し、入力したＸＢＲＬデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報１２２を生成する。【００２６】
ここでいうＸＢＲＬデータとは、圧縮データから伸長された、ＸＢＲＬで記述されたデータである。ＸＢＲＬとは、各種財務報告用の情報を作成、流通、利用できるように標準化されたＸＭＬベースの言語である。そして、圧縮データの一例として、Ｚｉｐ形式のデータが挙げられる。ＸＢＲＬデータの一例として、財務データが挙げられる。【００２７】
ここで、実施例１に係るＸＢＲＬデータの一例を、図２を参照して説明する。図２は、実施例１に係るＸＢＲＬデータの一例を示す図である。なお、図２で示すＸＢＲＬデータは、図２７で示したＸＢＲＬデータの内容と同じである。【００２８】
図２に示すように、ＸＢＲＬデータを、先頭より、付加情報およびデータ値を表す要素ごとにブロックで区切る。ここでは、３、４ブロックの要素が、図２７で示したデータ値を補足する付加情報１に対応する。６、７ブロックの要素が、図２７で示したデータ値を補足する付加情報２に対応する。９、１１ブロックの要素が、図２７で示したデータ値に対応する。なお、ＸＢＲＬデータ内の付加情報およびデータ値を表す各要素の開始タグとブロックとの関係は、後述するブロックテーブル１２１により定義される。【００２９】
図１に示すように、インデックス生成装置１００は、制御部１１０および記憶部１２０を有する。【００３０】
記憶部１２０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部１２０は、ブロックテーブル１２１およびインデックス情報１２２を有する。【００３１】
ブロックテーブル１２１は、ＸＢＲＬデータ内の付加情報およびデータ値を表す各要素の開始タグのアドレスと、ブロックの番号とを対応付けて記憶する。【００３２】
ここで、ブロックテーブル１２１の一例を、図３を参照して説明する。図３は、実施例１に係るブロックテーブルの一例を示す図である。図３に示すように、ブロックテーブル１２１は、ブロックＮｏ１２１ａとＸＢＲＬデータ内のアドレス１２１ｂとを対応付けて記憶する。ブロックＮｏ１２１ａは、ブロックの番号を示す。ＸＢＲＬデータ内のアドレス１２１ｂは、圧縮データから伸長されたＸＢＲＬデータに含まれるブロックの先頭アドレスを示す。一例として、ブロックＮｏ１２１ａが「１」である場合に、ＸＢＲＬデータ内のアドレス１２１ｂとして「０」を記憶している。ブロックＮｏ１２１ａが「２」である場合に、ＸＢＲＬデータ内のアドレス１２１ｂとして「Ａ０００ｈ」を記憶している。【００３３】
図１に戻って、インデックス情報１２２は、上位インデックスのインデックス情報１２２Ｕと下位インデックスのインデックス情報１２２Ｌを含む。上位インデックスのインデックス情報１２２Ｕとは、ＸＢＲＬデータ内の付加情報およびデータ値を表す各要素のブロック位置を表す情報である。すなわち、上位インデックスのインデックス情報１２２Ｕとは、ＸＢＲＬデータにおける付加情報およびデータ値の開始タグについて、ブロック位置ごとの存否をインデックス化したビットマップのことをいう。下位インデックスのインデックス情報１２２Ｌは、ブロックごとに存在する。所定のブロックの下位インデックスのインデックス情報１２２Ｌとは、ＸＢＲＬデータにおける付加情報およびデータ値を表す要素について、項目（開始タグ、属性、終了タグ）および値それぞれの出現位置を表す情報である。すなわち、下位インデックスのインデックス情報１２２Ｌとは、ＸＢＲＬデータに含まれる所定のブロックにおける項目（開始タグ、属性、終了タグ）および値について、オフセット（出現位置）ごとの存否をインデックス化したビットマップのことをいう。【００３４】
ここで、インデックス情報１２２の一例を、図４を参照して説明する。図４は、実施例１に係るインデックス情報の一例を示す図である。図４上図には、上位インデックスのインデックス情報１２２Ｕが表わされている。図４下図には、下位インデックスのインデックス情報１２２Ｌが表わされている。なお、図４上図のインデックス情報１２２は、図２で示したＸＢＲＬデータに対する上位インデックスのインデックス情報１２２Ｕである。図４下図のインデックス情報１２２は、図２で示したＸＢＲＬデータのうち３ブロック目の下位インデックスのインデックス情報１２２Ｌである。【００３５】
図４上図に示すように、上位インデックスのインデックス情報１２２ＵのＸ軸は、ブロックの番号を表し、Ｙ軸はタグ層のタグ名（要素名）を表す。かかるインデックス情報１２２Ｕは、それぞれの要素名について、ブロックに関するインデックスの束の情報である。各要素名について、出現するブロックの番号には、ＯＮすなわち２進数の「１」が設定される。一例として、＜ｘｒｂｌ＞は、ブロック番号の１番目の位置に「１」が設定されている。すなわち、＜ｘｒｂｌ＞要素は、１ブロック目に位置する。＜ｃｏｎｔｅｘｔ＞は、ブロック番号の３番目の位置に「１」が設定されている。すなわち、＜ｃｏｎｔｅｘｔ＞要素は、３ブロック目に位置する。【００３６】
図４下図に示すように、下位インデックスのインデックス情報１２２ＬのＸ軸は、ブロック単位のオフセット（出現位置）を表し、Ｙ軸はタグ層に含まれるタグ名と属性層に含まれる属性名とデータ値層に含まれる要素値と属性値を表す。また、インデックス情報１２２Ｌは、タグ層の領域と属性層の領域とデータ値層の領域を持つ。タグ層の領域のインデックス情報は、それぞれの開始タグと終了タグのタグ名について、ブロック内の出現位置に関するインデックスの束の情報である。属性層の領域のインデックス情報１２２は、それぞれの属性名について、ブロック内の出現位置に関するインデックスの束の情報である。データ値層の領域のインデックス情報１２２は、それぞれの要素値と属性値について、ブロック内の出現位置に関するインデックスの束の情報である。各タグ名、各属性名、各要素値および各属性値について、ブロック内に出現する出現位置には、ＯＮすなわち２進数の「１」が設定される。一例として、開始タグのタグ名が「＜ｃｏｎｔｅｘｔ＞」である場合に、ブロック内の１番目の出現位置に「１」が設定されている。属性名が「ｉｄ＝」である場合に、ブロック内の２番目の出現位置に「１」が設定されている。ｉｄｅｎｔｉｆｉｅｒ要素の値が「６７０２０」である場合に、ブロック内の８番目の出現位置に「１」が設定されている。【００３７】
図１に戻って、制御部１１０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部１１０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路の電子回路に対応する。または、制御部１１０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。制御部１１０は、伸長部１１１、字句解析部１１２およびインデックス生成部１１３を有する。なお、伸長部１１１は、入力部の一例である。軸解析部１１２およびインデックス生成部１１３は、生成部の一例である。【００３８】
伸長部１１１は、圧縮されたＸＢＲＬデータを入力し、伸長する。ここでいう圧縮されたＸＢＲＬデータは、例えば企業によって提出されたＸＢＲＬデータをＺｉｐ形式により圧縮されたものである。【００３９】
字句解析部１１２は、伸長部１１１によって伸長されたＸＢＲＬデータを字句解析する。ここでいう字句解析とは、ＸＢＲＬデータをマークアップと単語に分割することをいう。【００４０】
インデックス生成部１１３は、ＸＢＲＬデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報１２２を生成する。例えば、インデックス生成部１１３は、ＸＢＲＬデータの各ブロック先頭の開始タグのタグ名に対して、当該タグ名のブロックの出現位置にビットを立てる。すなわち、インデックス生成部１１３は、上位インデックスのインデックス情報１２２Ｕを生成する。そして、インデックス生成部１１３は、それぞれのブロックに対して、ブロックＮｏ１２１ａとＸＢＲＬデータ内のアドレス１２１ｂとを対応付けてブロックテーブル１２１に格納する。また、インデックス生成部１１３は、ＸＢＲＬデータのブロックごとに、ブロックに含まれる開始タグと終了タグのタグ名に対して、当該タグ名のブロック内の出現位置にビットを立てる。インデックス生成部１１３は、ＸＢＲＬデータのブロックごとに、ブロックに含まれる属性名に対して、当該属性名のブロック内の出現位置にビットを立てる。インデックス生成部１１３は、ＸＢＲＬデータのブロックごとに、ブロックに含まれる要素値と属性値に対して、当該値のブロック内の出現位置にビットを立てる。すなわち、インデックス生成部１１３は、下位インデックスのインデックス情報１２２Ｌを生成する。なお、下位インデックスのインデックス情報１２２Ｌを、検索時に、インデックス情報１２２Ｌ内のブロックが決定した後で、インデックス生成部１１３が、生成するようにしても良い。以降では、インデックス生成部１１３が、インデックス情報１２２を生成する際に、タグ層のタグ名等を登録する場合を説明する。【００４１】
［インデックス生成処理の流れ］
ここで、実施例１に係るインデックス生成処理の流れの一例を、図５Ａおよび図５Ｂを参照して説明する。【００４２】
図５Ａは、実施例１に係る上位インデックスのインデックス生成処理の流れの一例を示す図である。図５Ａに示すように、インデックス生成部１１３は、ＸＢＲＬデータの各ブロックの開始タグのタグ名に対して、当該タグ名のブロック出現位置にビットを立てる。ここでは、インデックス生成部１１３は、ＸＢＲＬデータからブロックを選択する。そして、インデックス生成部１１３は、選択したブロックの開始タグを検出し、検出した開始タグのタグ名をタグ層に登録する。そして、インデックス生成部１１３は、開始タグのタグ名に対して、当該タグ名のブロックの出現位置のビットを「１」（ＯＮ）に設定する。【００４３】
一例として、インデックス生成部１１３が、１ブロック目を選択した場合には、１ブロック目で検出された開始タグのタグ名「ｘｂｒｌ」をタグ層に登録する。そして、インデックス生成部１１３は、タグ名「ｘｂｒｌ」に対応するインデックス（ビットマップ）の、ブロックＮｏ「１」に対するビットに「１」を書き込む。【００４４】
一例として、インデックス生成部１１３は、３ブロック目を選択した場合には、３ブロック目で検出された開始タグのタグ名「＜ｃｏｎｔｅｘｔ＞」をタグ層に登録する。そして、インデックス生成部１１３は、タグ名「＜ｃｏｎｔｅｘｔ＞」に対応するインデックス（ビットマップ）の、ブロックＮｏ「３」に対するビットに「１」を書き込む。【００４５】
一例として、インデックス生成部１１３は、６ブロック目を選択した場合には、６ブロック目で検出された開始タグのタグ名「＜ｕｎｉｔ＞」をタグ層に登録する。そして、インデックス生成部１１３は、タグ名「＜ｕｎｉｔ＞」に対応するインデックス（ビットマップ）の、ブロックＮｏ「６」に対するビットに「１」を書き込む。【００４６】
一例として、インデックス生成部１１３は、９ブロック目を選択した場合には、９ブロック目で検出された開始タグのタグ名「＜Ｓａｌｅｓ＞」をタグ層に登録する。そして、インデックス生成部１１３は、タグ名「＜Ｓａｌｅｓ＞」に対応するインデックス（ビットマップ）の、ブロックＮｏ「９」に対するビットに「１」を書き込む。【００４７】
また、インデックス生成部１１３は、それぞれのブロックに対して、ブロックＮｏ１２１ａとＸＢＲＬデータ内のアドレス１２１ｂとを対応付けてブロックテーブル１２１に格納する。ここでは、インデックス生成部１１３は、ブロックＮｏ「１」とＸＢＲＬデータ内のアドレス「０」とを対応付けてブロックテーブル１２１に格納する。インデックス生成部１１３は、ブロックＮｏ「２」とＸＢＲＬデータ内のアドレス「Ａ０００ｈ」とを対応付けてブロックテーブル１２１に格納する。インデックス生成部１１３は、ブロックＮｏ「３」とＸＢＲＬデータ内のアドレス「Ａ１００ｈ」とを対応付けてブロックテーブル１２１に格納する。インデックス生成部１１３は、ブロックＮｏ「４」とＸＢＲＬデータ内のアドレス「Ａ２００ｈ」とを対応付けてブロックテーブル１２１に格納する。【００４８】
図５Ｂは、実施例１に係る下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、ＸＢＲＬデータ内の３ブロック目の下位インデックスの生成処理について説明する。この３ブロック目では、ｃｏｎｔｅｘｔ要素の下位インデックスが生成される。【００４９】
図５Ｂに示すように、３ブロック目について、インデックス生成部１１３は、開始タグを検出した場合には、開始タグのタグ名「＜ｃｏｎｔｅｘｔ＞」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部１１３は、開始タグのタグ名「＜ｃｏｎｔｅｘｔ＞」に対応するインデックス（ビットマップ）の、出現位置「１」に対するビットに「１」を書き込む。なお、インデックス生成部１１３は、タグ名を、以下のように検出すれば良い。すなわち、インデックス生成部１１３は、タグの開始記号「＜」を検出すると、開始記号の直後の単語をタグ名として検出すれば良い。【００５０】
インデックス生成部１１３は、属性名として「ｉｄ＝」を検出した場合には、属性名「ｉｄ＝」を属性層に登録する。そして、インデックス生成部１１３は、属性名「ｉｄ＝」に対応するインデックス（ビットマップ）の、出現位置「２」に対するビットに「１」を書き込む。なお、インデックス生成部１１３は、属性名を、以下のように検出すれば良い。すなわち、インデックス生成部１１３は、タグ名に後続する属性群であって「＝」を持つ属性の左辺を属性名として検出すれば良い。【００５１】
インデックス生成部１１３は、属性値として「ＣｕｒｒｅｎｔＱ１」を検出した場合には、属性値「ＣｕｒｒｅｎｔＱ１」をデータ値層に登録する。そして、インデックス生成部１１３は、属性値「ＣｕｒｒｅｎｔＱ１」に対応するインデックス（ビットマップ）の、出現位置「３」に対するビットに「１」を書き込む。なお、インデックス生成部１１３は、属性値を、以下のように検出すれば良い。すなわち、インデックス生成部１１３は、同じく「＝」を持つ属性の右辺を属性値として検出すれば良い。【００５２】
インデックス生成部１１３は、要素値として「６７０２０」を検出した場合には、要素値「６７０２０」をデータ値層に登録する。そして、インデックス生成部１１３は、要素値「６７０２０」に対応するインデックス（ビットマップ）の、出現位置「８」に対するビットに「１」を書き込む。なお、インデックス生成部１１３は、要素値を、以下のように検出すれば良い。すなわち、インデックス生成部１１３は、開始タグの終了記号「＞」と終了タグの開始記号「＜」との間のテキストを要素値として検出すれば良い。【００５３】
このようにして、インデックス生成部１１３は、３ブロック目に対して、開始タグのタグ名、属性名、属性値、要素値および終了タグのタグ名を順次検出し、下位インデックスを生成すれば良い。【００５４】
図６は、実施例１に係る別の下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、ＸＢＲＬデータ内の６ブロック目の下位インデックスの生成処理について説明する。この６ブロック目では、ｕｎｉｔ要素の下位インデックスが生成される。【００５５】
図６に示すように、６ブロック目について、インデックス生成部１１３は、開始タグを検出した場合には、開始タグのタグ名「＜ｕｎｉｔ＞」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部１１３は、開始タグのタグ名「＜ｕｎｉｔ＞」に対応するインデックス（ビットマップ）の、出現位置「１」に対するビットに「１」を書き込む。なお、インデックス生成部１１３によるタグ名の検出方法は、図５Ｂで説明した方法と同じであれば良い。【００５６】
インデックス生成部１１３は、属性名として「ｉｄ＝」を検出した場合には、属性名「ｉｄ＝」を属性層に登録する。そして、インデックス生成部１１３は、属性名「ｉｄ＝」に対応するインデックス（ビットマップ）の、出現位置「２」に対するビットに「１」を書き込む。なお、インデックス生成部１１３による属性名の検出方法は、図５Ｂで説明した方法と同じであれば良い。【００５７】
インデックス生成部１１３は、属性値として「ＪＰＹ」を検出した場合には、属性値「ＪＰＹ」をデータ値層に登録する。そして、インデックス生成部１１３は、属性値「ＪＰＹ」に対応するインデックス（ビットマップ）の、出現位置「３」に対するビットに「１」を書き込む。なお、インデックス生成部１１３による属性値の検出方法は、図５Ｂで説明した方法と同じであれば良い。【００５８】
インデックス生成部１１３は、開始タグを検出した場合には、タグのタグ名「＜ｍｅａｓｕｒｅ＞」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部１１３は、開始タグのタグ名「＜ｍｅａｓｕｒｅ＞」に対応するインデックス（ビットマップ）の、出現位置「４」に対するビットに「１」を書き込む。【００５９】
インデックス生成部１１３は、要素値として「ｉｓｏ４２１７：ＪＰＹ」を検出した場合には、要素値「ｉｓｏ４２１７：ＪＰＹ」をデータ値層に登録する。そして、インデックス生成部１１３は、要素値「ｉｓｏ４２１７：ＪＰＹ」に対応するインデックス（ビットマップ）の、出現位置「５」に対するビットに「１」を書き込む。なお、インデックス生成部１１３による要素値の検出方法は、図５Ｂで説明した方法と同じであれば良い。【００６０】
このようにして、インデックス生成部１１３は、６ブロック目に対して、開始タグのタグ名、属性名、属性値、要素値および終了タグのタグ名を順次検出し、下位インデックスを生成すれば良い。【００６１】
図７は、実施例１に係る別の下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、ＸＢＲＬデータ内の９ブロック目の下位インデックスの生成処理について説明する。この９ブロック目では、勘定科目の要素の下位インデックスが生成される。【００６２】
図７に示すように、９ブロック目について、インデックス生成部１１３は、開始タグを検出した場合には、開始タグのタグ名「＜Ｓａｌｅｓ＞」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部１１３は、タグ名「＜Ｓａｌｅｓ＞」に対応するインデックス（ビットマップ）の、出現位置「１」に対するビットに「１」を書き込む。【００６３】
インデックス生成部１１３は、属性名として「ｃｏｎｔｅｘｔＲｅｆ＝」を検出した場合には、属性名「ｃｏｎｔｅｘｔＲｅｆ＝」を属性層に登録する。そして、インデックス生成部１１３は、属性名「ｃｏｎｔｅｘｔＲｅｆ＝」に対応するインデックス（ビットマップ）の、出現位置「２」に対するビットに「１」を書き込む。【００６４】
インデックス生成部１１３は、属性値として「ＣｕｒｒｅｎｔＱ１」を検出した場合には、属性値「ＣｕｒｒｅｎｔＱ１」をデータ値層に登録する。そして、インデックス生成部１１３は、属性値「ＣｕｒｒｅｎｔＱ１」に対応するインデックス（ビットマップ）の、出現位置「３」に対するビットに「１」を書き込む。【００６５】
インデックス生成部１１３は、要素値として「１００００」を検出した場合には、要素値「１００００」をデータ値層に登録する。そして、インデックス生成部１１３は、要素値「１００００」に対応するインデックス（ビットマップ）の、出現位置「８」に対するビットに「１」を書き込む。【００６６】
このようにして、インデックス生成部１１３は、９ブロック目に対して、開始タグのタグ名、属性名、属性値、要素値および終了タグのタグ名を順次検出し、下位インデックスを生成すれば良い。【００６７】
［オフセットの割り振り方］
図８は、下位インデックスのオフセットの割り振り方を説明する図である。図８上図は、下位インデックスのオフセットを、開始タグの先頭位置、要素値の先頭位置および終了タグの先頭位置で割り振った場合である。開始タグの先頭位置は、「＜Ｓａｌｅｓ・・・＞」の「Ｓ」の位置である。要素値の先頭位置は、「１００００」の「１」の位置である。終了タグの先頭位置は、「＜／Ｓａｌｅｓ＞」の「Ｓ」の位置である。そして、開始タグの先頭位置、要素値の先頭位置および終了タグの先頭位置には、オフセットとしてそれぞれ「１」、「２」、「３」が割り振られている。【００６８】
図８上図に示すように、下位インデックスから、開始タグ中に属性名が有るか否かは特定できるが、属性名に対応する属性値は特定できない。ここでは、属性名として「ｃｏｎｔｅｘｔＲｅｆ＝」、「ｕｎｉｔＲｅｆ＝」および「ｄｅｃｉｍａｌｓ＝」がオフセット「１」に有ることは特定できる。ところが、属性名「ｃｏｎｔｅｘｔＲｅｆ＝」に対応する属性値が「ＣｕｒｒｅｎｔＱ１」、「ＪＰＹ」、「０」および「１００００」のいずれかであるのかが特定できない。同様に、属性名「ｕｎｉｔＲｅｆ＝」に対応する属性値が「ＣｕｒｒｅｎｔＱ１」、「ＪＰＹ」、「０」および「１００００」のいずれかであるのかが特定できない。属性名「ｄｅｃｉｍａｌｓ＝」に対応する属性値が「ＣｕｒｒｅｎｔＱ１」、「ＪＰＹ」、「０」および「１００００」のいずれかであるのかが特定できない。【００６９】
これに対して、図８下図は、下位インデックスのオフセットを、開始タグの先頭位置、属性名の先頭位置、属性値の先頭位置、要素値の先頭位置および終了タグの先頭位置で割り振った場合である。開始タグの先頭位置は、「＜Ｓａｌｅｓ」の「Ｓ」の位置である。属性値の先頭位置は、「ｃｏｎｔｅｘｔＲｅｆ＝」の「ｃ」の位置、「ｕｎｉｔＲｅｆ＝」の「ｕ」の位置、「ｄｅｃｉｍａｌｓ＝」の「ｄ」の位置である。属性値の先頭位置は、「ＣｕｒｒｅｎｔＱ１」の「Ｃ」の位置、「ＪＰＹ」の「Ｊ」の位置、「０」の「０」の位置、要素値の先頭位置は、「１００００」の「１」の位置である。終了タグの先頭位置は、「＜／Ｓａｌｅｓ＞」の「Ｓ」の位置である。そして、開始タグの先頭位置、属性名の先頭位置、属性値の先頭位置、要素値の先頭位置および終了タグの先頭位置には、それぞれオフセットが割り振られている。【００７０】
図８下図に示すように、下位インデックスから、開始タグ中に属性名が有るか否かを特定できるだけでなく、属性名に対応する属性値も特定できる。すなわち、属性名が位置するオフセットの右側のオフセットに位置するデータ値が、当該属性名に対応する属性値であることがわかる。ここでは、属性名「ｃｏｎｔｅｘｔＲｅｆ＝」に対応する属性値は、「ＣｕｒｒｅｎｔＱ１」である。属性名「ｕｎｉｔＲｅｆ＝」に対応する属性値は、「ＪＰＹ」であることがわかる。属性名「ｄｅｃｉｍａｌｓ＝」に対応する属性値は、「０」であることがわかる。また、終了タグが位置するオフセットの左側のオフセットに位置するデータ値が、当該要素名に対応する要素値であることがわかる。ここでは、要素名「Ｓａｌｅｓ」に対応する要素値は、「１００００」である。【００７１】
このように、図８下図で示したように、下位インデックスのオフセットは、開始タグ、属性名、属性値、要素値および終了タグで割り振られると良い。【００７２】
［インデックス生成処理のフローチャート］
図９は、実施例１に係るインデックス生成処理のフローチャートの一例を示す図である。なお、圧縮されたＸＢＲＬデータをＺｉｐファイルとして説明する。【００７３】
Ｚｉｐファイルを受け付けた伸長部１１１は、当該Ｚｉｐファイルを伸長する（ステップＳ１１）。字句解析部１１２は、伸長データを字句解析する（ステップＳ１２）。【００７４】
続いて、インデックス生成部１１３は、伸長データのブロックを選択する（ステップＳ１３）。インデックス生成部１１３は、選択したブロックの開始タグを検出する（ステップＳ１４）。そして、インデックス生成部１１３は、検出した開始タグのタグ名を上位インデックスのインデックス情報１２２Ｕのタグ層に登録する（ステップＳ１５）。インデックス生成部１１３は、上位インデックスのインデックス情報１２２Ｕにおいて、検出した開始タグに対する、選択したブロックのブロックＮｏのビットをＯＮに設定する（ステップＳ１６）。【００７５】
そして、インデックス生成部１１３は、伸長データ内のブロックの開始アドレスをブロックテーブル１２１に設定する（ステップＳ１７）。【００７６】
そして、インデックス生成部１１３は、伸長データの終点であるか否かを判定する（ステップＳ１８）。伸長データの終点でないと判定した場合には（ステップＳ１８；Ｎｏ）、インデックス生成部１１３は、次のブロックを選択すべく、ステップＳ１３に移行する。【００７７】
一方、伸長データの終点であると判定した場合には（ステップＳ１８；Ｙｅｓ）、インデックス生成部１１３は、伸長データのブロックを選択する（ステップＳ１９）。【００７８】
そして、インデックス生成部１１３は、開始タグのタグ名を、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌのタグ層に登録する（ステップＳ２０）。インデックス生成部１１３は、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌにおいて、開始タグのタグ名に対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ２１）。【００７９】
そして、インデックス生成部１１３は、選択したブロックについて、属性名を検出したか否かを判定する（ステップＳ２２）。属性名を検出したと判定した場合には（ステップＳ２２；Ｙｅｓ）、インデックス生成部１１３は、検出した属性名を、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌの属性層に登録する（ステップＳ２３）。そして、インデックス生成部１１３は、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌにおいて、検出した属性名に対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ２４）。【００８０】
そして、インデックス生成部１１３は、属性値を、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌのデータ値層に登録する（ステップＳ２５）。そして、インデックス生成部１１３は、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌにおいて、属性値に対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ２６）。そして、インデックス生成部１１３は、ステップＳ２７に移行する。【００８１】
一方、属性名を検出していないと判定した場合には（ステップＳ２２；Ｎｏ）、インデックス生成部１１３は、開始タグの終了記号を検出したか否かを判定する（ステップＳ２７）。開始タグの終了記号を検出していないと判定した場合には（ステップＳ２７；Ｎｏ）、インデックス生成部１１３は、次の属性名を検出すべく、ステップＳ２２に移行する。【００８２】
一方、開始タグの終了記号を検出したと判定した場合には（ステップＳ２７；Ｙｅｓ）、インデックス生成部１１３は、開始タグの開始記号を検出したか否かを判定する（ステップＳ２８）。開始タグの開始記号を検出したと判定した場合には（ステップＳ２８；Ｙｅｓ）、インデックス生成部１１３は、ステップＳ２０に移行する。【００８３】
一方、開始タグの開始記号を検出していないと判定した場合には（ステップＳ２８；Ｎｏ）、インデックス生成部１１３は、要素値を、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌのデータ値層に登録する（ステップＳ２９）。そして、インデックス生成部１１３は、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌにおいて、要素値に対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ３０）。【００８４】
そして、インデックス生成部１１３は、終了タグのタグ名を、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌのタグ層に登録する（ステップＳ３１）。インデックス生成部１１３は、選択したブロックに対する下位インデックスのインデックス情報１２２Ｌにおいて、終了タグのタグ名に対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ３２）。そして、インデックス生成部１１３は、終了タグの終了記号を検出する（ステップＳ３３）。【００８５】
そして、インデックス生成部１１３は、開始タグの開始記号を検出したか否かを判定する（ステップＳ３４）。開始タグの開始記号を検出したと判定した場合には（ステップＳ３４；Ｙｅｓ）、インデックス生成部１１３は、ステップＳ２０に移行する。【００８６】
一方、開始タグの開始記号を検出していないと判定した場合には（ステップＳ３４；Ｎｏ）、インデックス生成部１１３は、終了タグの開始記号を検出したか否かを判定する（ステップＳ３５）。終了タグの開始記号を検出したと判定した場合には（ステップＳ３５；Ｙｅｓ）、インデックス生成部１１３は、ステップＳ３１に移行する。【００８７】
一方、終了タグの開始記号を検出していないと判定した場合には（ステップＳ３５；Ｎｏ）、インデックス生成部１１３は、ブロックの終点を検出する（ステップＳ３６）。そして、インデックス生成部１１３は、伸長データの終点であるか否かを判定する（ステップＳ３７）。伸長データの終点でないと判定した場合には（ステップＳ３７；Ｎｏ）、インデックス生成部１１３は、次のブロックを選択すべく、ステップＳ１９に移行する。【００８８】
一方、伸長データの終点であると判定した場合には（ステップＳ３７；Ｙｅｓ）、インデックス生成部１１３は、インデックス生成処理を終了する。【００８９】
［実施例１に係る検索装置の構成］
図１０は、実施例１に係る検索装置の構成を示す機能ブロック図である。検索装置２００は、項目および値の組み合わせにより記述されたＸＢＲＬデータに対する特定の項目および値を含む検索条件を受け付け、インデックス情報１２２を参照し、受け付けた検索条件を検索する。【００９０】
図１０に示すように、検索装置２００は、制御部２１０および記憶部２２０を有する。【００９１】
記憶部２２０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部２２０は、ＸＢＲＬデータ（圧縮形式）２２１、ブロックテーブル１２１およびインデックス情報１２２を有する。なお、ブロックテーブル１２１およびインデックス情報１２２は、インデックス生成装置１００によって生成される情報であり、例えば、ネットワークを介して取得され、記憶部２２０に記憶される。【００９２】
ＸＢＲＬデータ（圧縮形式）２２１は、圧縮形式のＸＢＲＬデータである。例えば、ＸＢＲＬデータ（圧縮形式）２２１は、Ｚｉｐ形式により圧縮されたＸＢＲＬデータである。【００９３】
制御部２１０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部２１０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路の電子回路に対応する。または、制御部２１０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。制御部２１０は、検索クエリ解析部２１１、伸長部２１２、オフセット検索部２１３、ブロック読出部２１４および検索対象抽出部２１５を有する。なお、検索クエリ解析部２１１は、受付部の一例である。オフセット検索部２１３、ブロック読出部２１４および検索対象抽出部２１５は、検索部の一例である。【００９４】
検索クエリ解析部２１１は、検索クエリを入力し、入力した検索クエリを解析する。例えば、検索クエリ解析部２１１は、検索クエリを解析し、検索条件および検索対象を抽出する。検索条件には、要素名、タグ名、属性名並びに属性値または要素値を示すキーワードが挙げられる。検索対象には、値を検索したい属性名または要素名を示すキーワードが挙げられる。【００９５】
伸長部２１２は、ＸＢＲＬデータ（圧縮形式）２２１を入力し、入力したＸＢＲＬデータ（圧縮形式）２２１を伸長する。ここでいうＸＢＲＬデータ（圧縮形式）２２１は、例えば企業によって提出されたＸＢＲＬデータをＺｉｐ形式により圧縮されたものである。【００９６】
オフセット検索部２１３は、インデックス情報１２２を参照し、検索条件に合致する検索対象を検索する。例えば、オフセット検索部２１３は、上位インデックスのインデックス情報１２２Ｕを参照し、検索条件の要素名に対応するインデックス（ビットマップ）を抽出する。オフセット検索部２１３は、抽出したビットマップに「１」が設定されたブロックＮｏを取得する。オフセット検索部２１３は、検出したブロックＮｏに対応する下位インデックスのインデックス情報１２２Ｌを抽出する。オフセット検索部２１３は、抽出した下位インデックスのインデックス情報１２２Ｌを参照し、検索条件に合致する検索対象のオフセットを絞り込む。【００９７】
ブロック読出部２１４は、伸長されたＸＢＲＬデータから、取得されたブロックＮｏに対応するブロックを読み出す。例えば、ブロック読出部２１４は、ブロックテーブル１２１から、取得されたブロックＮｏに対応するＸＢＲＬデータ内のアドレス１２１ｂを取得する。ブロック読出部２１４は、伸長部２１２によって伸長されたＸＢＲＬデータから、取得したアドレスに対応付けられるブロックを読み出す。【００９８】
検索対象抽出部２１５は、対象のブロックから検索対象を抽出する。例えば、検索対象抽出部２１５は、ブロック読出部２１４によって読み出されたブロックから、オフセット検索部２１３によって絞り込まれたオフセットの検索対象を抽出する。【００９９】
［オフセット検索処理の流れ］
ここで、実施例１に係るオフセット検索処理の流れの一例を、図１１および図１２を参照して説明する。図１１および図１２は、実施例１に係るオフセット検索処理の流れの一例を示す図である。【０１００】
図１１では、検索クエリが、日付が“２０１６年”であるｃｏｎｔｅｘｔ要素のｉｄ属性値を検索する場合である。検索クエリ解析部２１１は、検索クエリを解析し、検索条件および検索対象を抽出する。ここでは、検索条件として、ｃｏｎｔｅｘｔ要素である「＜ｃｏｎｔｅｘｔ＞」、日付を示すｉｎｓｔａｎｔ要素である「＜ｉｎｓｔａｎｔ＞」、日付を示すインスタント要素の要素値である「２０１６」が抽出される。検索対象として、値を検索したいｉｄ属性名である「ｉｄ＝」が抽出される。【０１０１】
そして、オフセット検索部２１３は、上位インデックスのインデックス情報１２２Ｕを参照し、検索条件の要素名に対応するインデックス（ビットマップ）を抽出し、抽出したビットマップに「１」が設定されたブロックＮｏを取得する。ここでは、検索条件の要素名は、「＜ｃｏｎｔｅｘｔ＞」である。すると、オフセット検索部２１３は、上位インデックスのインデックス情報１２２Ｕを参照し、「＜ｃｏｎｔｅｘｔ＞」に対応するビットマップを抽出する。そして、オフセット検索部２１３は、抽出したビットマップに「１」が設定されたブロックＮｏとして「３」を取得する（ａ１）。【０１０２】
そして、オフセット検索部２１３は、検出したブロックＮｏ「３」に対応する下位インデックスのインデックス情報１２２Ｌを抽出する（ａ２）。【０１０３】
そして、オフセット検索部２１３は、抽出した下位インデックスのインデックス情報１２２Ｌを参照し、検索条件に合致する検索対象のオフセットを絞り込む。【０１０４】
ここでは、オフセット検索部２１３は、日付を示すｉｎｓｔａｎｔ要素である「＜ｉｎｓｔａｎｔ＞」の終了位置のオフセットを取得する。すなわち、オフセット検索部２１３は、ｉｎｓｔａｎｔ要素の終了タグ「＜／ｉｎｓｔａｎｔ＞」に対応するビットマップを抽出し、抽出したビットマップに「１」が設定されたオフセット「１４」を取得する（ａ３）。【０１０５】
そして、オフセット検索部２１３は、ｉｎｓｔａｎｔ要素の値を検索すべく、ｉｎｓｔａｎｔ要素の終了タグのオフセットの１つ前のオフセット「１３」に「１」が設定されたデータ値を取得する（ａ４、ａ５）。取得されたデータ値は、「２０１６−０６−３０」である。そして、オフセット検索部２１３は、取得されたデータ値「２０１６−０６−３０」が検索条件に含まれる日付を示すｉｎｓｔａｎｔ要素の要素値「２０１６」であることを確認する。【０１０６】
続いて、オフセット検索部２１３は、検索対象として抽出されたｉｄ属性名である「ｉｄ＝」の開始位置のオフセットを取得する。すなわち、オフセット検索部２１３は、「ｉｄ＝」に対応するビットマップを抽出し、抽出したビットマップに「１」が設定されたオフセット「２」を取得する（ａ６）。【０１０７】
そして、オフセット検索部２１３は、ｉｄ属性の値のオフセットを検索すべく、ｉｄ属性のオフセットの１つ後のオフセット「３」を検索する（ａ７、ａ８）。これにより、オフセット検索部２１３は、日付が“２０１６年”であるｃｏｎｔｅｘｔ要素のｉｄ属性値のオフセットとして「３」を検索することができる。【０１０８】
図１２では、検索クエリが、コンテキストが“ＣｕｒｒｅｎｔＱ１”であるＳａｌｅｓ要素の値を検索する場合である。検索クエリ解析部２１１は、検索クエリを解析し、検索条件および検索対象を抽出する。ここでは、検索条件として、Ｓａｌｅｓ要素である「＜Ｓａｌｅｓ＞」、コンテキストの属性である「ｃｏｎｔｅｘｔＲｅｆ＝」、コンテキストの属性値である「ＣｕｒｒｅｎｔＱ１」が抽出される。検索対象として、値を検索したいＳａｌｅｓ要素名である「＜Ｓａｌｅｓ＞」が抽出される。【０１０９】
そして、オフセット検索部２１３は、上位インデックスのインデックス情報１２２Ｕを参照し、検索条件の要素名に対応するインデックス（ビットマップ）を抽出し、抽出したビットマップに「１」が設定されたブロックＮｏを取得する。ここでは、検索条件の要素名は、「＜Ｓａｌｅｓ＞」である。すると、オフセット検索部２１３は、上位インデックスのインデックス情報１２２Ｕを参照し、「＜Ｓａｌｅｓ＞」に対応するビットマップを抽出し、抽出したビットマップに「１」が設定されたブロックＮｏとして「９」を取得する（ｂ１）。【０１１０】
そして、オフセット検索部２１３は、検出したブロックＮｏ「９」に対応する下位インデックスのインデックス情報１２２Ｌを抽出する（ｂ２）。【０１１１】
そして、オフセット検索部２１３は、抽出した下位インデックスのインデックス情報１２２Ｌを参照し、検索条件に合致する検索対象のオフセットを絞り込む。【０１１２】
ここでは、オフセット検索部２１３は、コンテキストの属性である「ｃｏｎｔｅｘｔＲｅｆ＝」のオフセットを取得する。すなわち、オフセット検索部２１３は、「ｃｏｎｔｅｘｔＲｅｆ」に対応するビットマップを抽出し、抽出したビットマップに「１」が設定されたオフセット「２」を取得する（ｂ３）。【０１１３】
そして、オフセット検索部２１３は、ｃｏｎｔｅｘｔＲｅｆ属性の値を検索すべく、ｃｏｎｔｅｘｔＲｅｆ属性のオフセットの１つ後のオフセット「３」に「１」が設定されたデータ値を取得する（ｂ４、ｂ５）。取得されたデータ値は、「ＣｕｒｒｅｎｔＱ１」である。そして、オフセット検索部２１３は、取得されたデータ値「ＣｕｒｒｅｎｔＱ１」が検索条件に含まれるコンテキストの属性値「ＣｕｒｒｅｎｔＱ１」であることを確認する。【０１１４】
続いて、オフセット検索部２１３は、検索対象として抽出されたＳａｌｅｓ要素である「＜Ｓａｌｅｓ＞」の終了位置のオフセットを取得する。すなわち、オフセット検索部２１３は、Ｓａｌｅｓ要素の終了タグ「＜／Ｓａｌｅｓ＞」に対応するビットマップを抽出し、抽出したビットマップに「１」が設定されたオフセット「９」を取得する（ｂ６）。【０１１５】
そして、オフセット検索部２１３は、Ｓａｌｅｓ要素の値を検索すべく、Ｓａｌｅｓ要素の終了タグのオフセットの１つ前のオフセット「８」を検索する（ｂ７、ｂ８）。これにより、オフセット検索部２１３は、コンテキストが“ＣｕｒｒｅｎｔＱ１”であるＳａｌｅｓ要素の値のオフセットとして「８」を検索することができる。【０１１６】
［検索対象抽出処理の流れ］
ここで、実施例１に係る検索対象抽出処理の流れの一例を、図１３を参照して説明する。図１３は、実施例１に係る検索対象抽出処理の流れの一例を示す図である。なお、オフセット検索部２１３が、ブロックＮｏとして「９」を取得し、オフセットとして「８」を検索した場合とする。【０１１７】
ブロック読出部２１４は、ブロックテーブル１２１から、取得されたブロックＮｏに対応するＸＢＲＬデータ内のアドレス１２１ｂを取得する（ｃ１）。ここでは、取得されたブロックＮｏ「９」に対応するＸＢＲＬデータ内のアドレス１２１ｂとして「Ａ７００ｈ」が取得される。【０１１８】
そして、ブロック読出部２１４は、伸長部２１２によって伸長されたＸＢＲＬデータから、取得したアドレス「Ａ７００ｈ」に対応付けられるブロックを読み出す（ｃ２）。【０１１９】
続いて、検索対象抽出部２１５は、ブロック読出部２１４によって読み出されたブロックから、検索されたオフセットの位置の検索対象を抽出する（ｃ３）。ここでは、検索対象抽出部２１５は、読み出されたブロックから、オフセットとして検索された「８」の位置にある検索対象として「１００００」を抽出する。そして、検索対象抽出部２１５は、抽出した「１００００」を検索結果として出力する。【０１２０】
［検索処理のフローチャート］
図１４は、実施例１に係る検索処理のフローチャートの一例を示す図である。なお、圧縮されたＸＢＲＬデータをＺｉｐファイルとして説明する。【０１２１】
検索クエリ解析部２１１は、検索クエリを受け付けたか否かを判定する（ステップＳ４１）。検索クエリを受け付けていないと判定した場合には（ステップＳ４１；Ｎｏ）、検索クエリ解析部２１１は、検索クエリを受け付けるまで、判定処理を繰り返す。【０１２２】
一方、検索クエリを受け付けたと判定した場合には（ステップＳ４１；Ｙｅｓ）、検索クエリ解析部２１１は、検索クエリを解析し、検索条件および検索対象を抽出する（ステップＳ４２）。【０１２３】
そして、伸長部２１２は、Ｚｉｐファイルを伸長する（ステップＳ４３）。【０１２４】
続いて、オフセット検索部２１３は、上位インデックスのインデックス情報１２２Ｕを参照し、検索条件の要素名に対応するブロックＮｏを取得する（ステップＳ４４）。そして、オフセット検索部２１３は、取得したブロックＮｏの下位インデックスのインデックス情報１２２Ｌを参照し、検索条件に合致する検索対象のオフセットを絞り込む（ステップＳ４５）。【０１２５】
続いて、ブロック読出部２１４は、伸長データから、取得ブロックＮｏに対応するブロックを読み出す（ステップＳ４６）。そして、検索対象抽出部２１５は、読み出したブロックから、絞り込んだオフセットの位置にある値を抽出する（ステップＳ４７）。そして、検索対象抽出部２１５は、抽出した値を検索結果として出力し、検索処理を終了する。【０１２６】
［実施例１に係る検索フローの一例］
図１５は、実施例１に係る検索フローの一例を示す図である。なお、図１５では、図２６で示した参考例の検索フローと比較するために、ＴＤｎｅｔを利用する場合を説明する。しかしながら、検索フローは、ＴＤｎｅｔを利用する場合に限定されるものではない。【０１２７】
図１５に示すように、企業は、ＴＤｎｅｔを利用して、財務情報のＸＢＲＬデータをＺｉｐにより圧縮したＺｉｐファイルを提出する（Ｓ１０１）。【０１２８】
審査官側では、審査官が、Ｚｉｐファイルを解凍（伸長）し、伸長したＸＢＲＬデータをチェックする（Ｓ１０２）。審査官が、承認したＸＢＲＬデータのＺｉｐファイルをＴＤｎｅｔのＤＢに格納し（Ｓ１０３）、当該ＸＢＲＬデータを開示する。ここでいう審査官とは、例えば、金融機関であったり、証券取引所であったりする。【０１２９】
そして、インデックス生成装置１００が、ＸＢＲＬデータを字句解析し、ブロックテーブル１２１とインデックス情報１２２とを生成し、ＴＤｎｅｔの内部メモリに格納する（Ｓ１０４）。なお、かかる処理は、例えば、字句解析部１１２およびインデックス生成部１１３に対応する。【０１３０】
クライアント（投資家）側では、投資家が、ＴＤｎｅｔを利用して、企業を検索し（Ｓ１０５）、調査対象の企業を決定する（Ｓ１０６）。投資家は、ＴＤｎｅｔを利用して、決定した企業のＸＢＲＬデータに対するＺｉｐファイルとブロックテーブル１２１とインデックス情報１２２とをローカルフォルダに保存する（Ｓ１０７）。【０１３１】
続いて、投資家は、Ｚｉｐファイルとブロックテーブル１２１とインデックス情報１２２とを検索装置２００の専用クライアントアプリに入力する（Ｓ１０８）。【０１３２】
さらに、投資家は、検索装置２００の専用クライアントアプリに、検索対象である要素の検索ワードまたは検索対象である値の検索ワードを入力する（Ｓ１０９）。すなわち、投資家は、検索装置２００に検索クエリを入力する。すると、専用クライアントアプリは、検索クエリを解析し、検索条件および検索対象を抽出する。なお、かかる処理は、例えば、検索クエリ解析部２１１に対応する。【０１３３】
そして、専用クライアントアプリは、インデックス情報１２２により検索条件に合致する検索対象のオフセットの位置を絞り込み、ブロックテーブル１２１を使って絞り込んだオフセットの位置をＸＢＲＬデータ上のオフセットの位置に変換する（Ｓ１１０）。そして、投資家は、保存したＺｉｐファイルを解凍（伸長）する（Ｓ１１１）。そして、専用クライアントアプリは、伸長したＸＢＲＬデータ上の、変換されたオフセットの位置の値を抽出して表示する（Ｓ１１２）。なお、かかる処理は、例えば、オフセット検索部２１３、伸長部２１２および検索対象抽出部２１５に対応する。【０１３４】
［実施例１の効果］
このようにして、上記実施例１では、インデックス生成装置１００が、項目および値の組み合わせにより記述されたＸＢＲＬデータを入力する。インデックス生成装置１００は、ＸＢＲＬデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報１２２を生成する。かかる構成によれば、インデックス生成装置１００は、インデックス情報１２２を用いることで、ＸＢＲＬデータについて、項目と値とを組み合わせた検索条件で効率的に検索対象を検索することが可能となる。すなわち、インデックス生成装置１００は、インデックス情報１２２を用いることで、ＸＢＲＬデータを走査しないで検索対象を絞り込むことができ、効率的に検索対象を検索できる。【０１３５】
また、上記実施例１では、検索装置２００が、項目および値の組み合わせにより記述されたＸＢＲＬデータに対する特定の項目および値を含む検索条件を受け付ける。検索装置２００は、ＸＢＲＬデータに含まれる項目および値それぞれについての項目および値それぞれの出現位置に関するインデックス情報１２２を参照し、検索条件を検索する。かかる構成によれば、検索装置２００は、インデックス情報１２２を用いることで、ＸＢＲＬデータの解析を改めて行うことなく、項目および値を指定した検索を行うことができる。
【実施例２】
【０１３６】
ところで、実施例１に係るインデックス生成装置１００は、ＸＢＲＬデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報１２２を生成すると説明した。しかしながら、インデックス生成装置１００は、これに限定されず、ＸＢＲＬデータを符号化する際に、ＸＢＲＬデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報１２２を生成しても良い。【０１３７】
そこで、実施例２に係るインデックス生成装置１００が、ＸＢＲＬデータを符号化する際に、ＸＢＲＬデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報１２２Ａを生成する場合を説明する。【０１３８】
［実施例２に係るインデックス生成装置の構成］
図１６は、実施例２に係るインデックス生成装置の機能構成を示すブロック図である。なお、図１に示すインデックス生成装置１００と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、インデックス生成部１１３をインデックス生成部１１３Ａに変更した点にある。また、実施例１と実施例２とが異なるところは、符号化部３１１を追加した点にある。また、実施例１と実施例２とが異なるところは、ブロックテーブル１２１およびインデックス情報１２２をそれぞれブロックテーブル１２１Ａおよびインデックス情報１２２Ａに変更した点にある。また、実施例１と実施例２とが異なるところは、静的辞書３２１および動的辞書３２２を追加した点にある。【０１３９】
静的辞書３２１とは、一般的な英語辞典、国語辞典や教科書などを基にして、様々な文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。静的辞書３２１には、それぞれの単語に対応する符号である静的コードがあらかじめ登録されている。これに対して、動的辞書３２２とは、静的辞書３２１に登録されていない単語と、動的に付された動的コード（符号）とを対応付けた辞書である。静的辞書３２１に登録されていない単語には、一例として、出現頻度の低い単語（低頻度単語）、タグ、数値、日付などがある。動的辞書３２２には、静的辞書３２１に登録されていない単語の出現順に、動的コードに対応付けられた単語がバッファ部に登録される。【０１４０】
ここで、動的辞書３２２の一例を、図１７を参照して説明する。図１７は、実施例２に係る動的辞書の一例を示す図である。図１７に示される動的辞書３２２は、バッファ部Ｄ１とアドレステーブルＤ２とを含む。バッファ部Ｄ１は、文字列を記憶する。アドレステーブルＤ２は、動的コードと、格納位置と、データ長とを対応付けて保持する。動的コードは、あらかじめ定められた固定長の符号であり、例えば圧縮符号である。そして、動的コードは、単語の文字列が登録された順に割り当てられる。ここでは、動的コードは、１６進数「Ａ」で始まる固定長２バイトのコードである。格納位置は、バッファ部Ｄ１に格納された文字列の位置を示す。データ長は、バッファ部Ｄ１に格納された文字列の長さ（バイト長）を示す。【０１４１】
一例として、属性値の文字列「ＣｕｒｒｅｎｔＱ１」に動的コードが割り当てられる場合について説明する。インデックス生成装置１００は、文字列「ＣｕｒｒｅｎｔＱ１」をバッファ部Ｄ１に格納する。インデックス生成装置１００は、文字列を格納した格納位置および格納したデータ長をアドレステーブルＤ２に登録する。ここでは、インデックス生成装置１００は、格納位置として「２１」、データ長として「１０」をアドレステーブルＤ２に登録する。そして、インデックス生成装置１００は、属性値の文字列「ＣｕｒｒｅｎｔＱ１」に動的コードとして「Ａ００３ｈ」を割り当てる。【０１４２】
ブロックテーブル１２１Ａは、ＸＢＲＬデータに含まれる各データに対する各符号について、ＸＢＲＬデータを符号化した符号化データ内のアドレスとブロックの番号とを対応付けて記憶する。【０１４３】
ここで、ブロックテーブル１２１Ａの一例を、図１８を参照して説明する。図１８は、実施例２に係るブロックテーブルの一例を示す図である。図１８に示すように、ブロックテーブル１２１Ａは、ブロックＮｏ１２１ａと符号化データ内のアドレス１２１ｃとを対応付けて記憶する。ブロックＮｏ１２１ａは、ブロックの番号を示す。符号化データ内のアドレス１２１ｃは、ＸＢＲＬデータを符号化した符号化データに含まれるブロックの先頭アドレスを示す。一例として、ブロックＮｏ１２１ａが「１」である場合に、符号化データ内のアドレス１２１ｃとして「０」を記憶している。ブロックＮｏ１２１ａが「２」である場合に、符号化データ内のアドレス１２１ｃとして「２０１」を記憶している。【０１４４】
図１６に戻って、符号化部３１１は、静的辞書３２１および動的辞書３２２に基づいて、ＸＢＲＬデータを字句解析した結果得られるタグ名、属性名およびデータ値を順次符号化対象として符号化する。【０１４５】
例えば、符号化部３１１は、ＸＢＲＬデータを字句解析した結果の各符号化対象を順次選択する。符号化部３１１は、選択された符号化対象が静的辞書３２１に登録されているか否かを判定する。符号化部３１１は、選択された符号化対象が静的辞書３２１に登録されている場合には、当該符号化対象を静的辞書３２１に登録されている静的コード（符号コード）に符号化する。【０１４６】
また、符号化部３１１は、選択された符号化対象が静的辞書３２１に登録されていない場合には、当該符号化対象を動的辞書３２２に基づいて符号化する。一例として、符号化部３１１は、符号化対象が動的辞書３２２のバッファ部Ｄ１に格納されているか否かを判定する。符号化部３１１は、符号化対象が動的辞書３２２のバッファ部Ｄ１に格納されていない場合には、当該符号化対象をバッファ部Ｄ１に格納するとともに、当該符号化対象を格納した格納位置およびデータ長をアドレステーブルＤ２に格納する。符号化部３１１は、符号化対象を、当該符号化対象に対応付けられた、アドレステーブルＤ２の動的コード（符号コード）に符号化する。また、符号化部３１１は、符号化対象が動的辞書３２２のバッファ部Ｄ１に格納されている場合には、当該符号化対象を、当該符号化対象に対応する動的コード（符号コード）に符号化する。【０１４７】
また、符号化部３１１は、符号コードを符号化データの記憶領域に書き込む。【０１４８】
インデックス生成部１１３Ａは、ＸＢＲＬデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報１２２Ａを生成する。例えば、インデックス生成部１１３Ａは、ＸＢＲＬデータの各ブロックの先頭の開始タグのタグ名に対して、当該タグ名に対する符号コードのブロック内の出現位置にビットを立てる。すなわち、インデックス生成部１１３Ａは、上位インデックスのインデックス情報１２２ＡＵを生成する。そして、インデックス生成部１１３Ａは、ＸＢＲＬデータのブロックごとに、ブロックに含まれる開始タグと終了タグのタグ名に対して、当該タグ名に対する符号コードのブロック内の出現位置にビットを立てる。インデックス生成部１１３Ａは、ＸＢＲＬデータのブロックごとに、ブロックに含まれる属性名に対して、当該属性名に対する符号コードのブロック内の出現位置にビットを立てる。インデックス生成部１１３Ａは、ＸＢＲＬデータのブロックごとに、ブロックに含まれる要素値と属性値に対して、当該値に対する符号コードのブロック内の出現位置にビットを立てる。すなわち、インデックス生成部１１３Ａは、下位インデックスのインデックス情報１２２ＡＬを生成する。そして、インデックス生成部１１３Ａは、それぞれのブロックに対して、ブロックＮｏと符号化データ内のアドレスとを対応付けてブロックテーブル１２１Ａに格納する。なお、下位インデックスのインデックス情報１２２ＡＬのタグ層のタグ名に対する符号コード、属性層の属性名に対する符号コードおよびデータ値層のデータ値に対する符号コードは、予め登録されるようにしても良い。あるいは、インデックス生成部１１３Ａが、符号化される、タグ名、属性名およびデータ値のそれぞれのインデックスを生成する際に、インデックス情報１２２ＡＬ内のタグ層、属性層およびデータ値層のそれぞれの領域に登録するようにしても良い。以降では、インデックス生成部１１３Ａが、インデックス情報１２２Ａを生成する際に、タグ層のタグ名等を登録する場合を説明する。【０１４９】
［インデックス生成処理の流れ］
ここで、実施例２に係るインデックス生成処理の流れの一例を、図１９Ａおよび図１９Ｂを参照して説明する。【０１５０】
図１９Ａは、実施例２に係る上位インデックスのインデックス生成処理の流れの一例を示す図である。図１９Ａに示すように、インデックス生成部１１３Ａは、ＸＢＲＬデータのブロックを選択する。ここでは、インデックス生成部１１３Ａは、ＸＢＲＬデータの３ブロック目を選択したとする。【０１５１】
すると、インデックス生成部１１３Ａは、選択したブロックの開始タグのタグ名を符号化部３１１に符号化させる。例えば、符号化部３１１は、タグ名が静的辞書３２１に登録されている（符号あり）場合には、タグ名を登録されている静的コードに符号化する。符号化部３１１は、タグ名が静的辞書３２１に登録されていない（符号なし）場合には、当該タグ名を動的辞書３２２に基づいて符号化する。例えば、符号化部３１１は、タグ名が動的辞書３２２のバッファ部Ｄ１に格納されていない場合には、当該タグ名をバッファ部Ｄ１に格納するとともに、当該タグ名を格納した格納位置およびデータ長をアドレステーブルＤ２に格納する。符号化部３１１は、格納したタグ名を、当該タグ名に対応付けられた、アドレステーブルＤ２の動的コードに符号化する。符号化部３１１は、タグ名が動的辞書３２２のバッファ部Ｄ１に格納されている場合には、当該タグ名を、当該タグ名に対応する動的コードに符号化する。【０１５２】
ここでは、開始タグのタグ名「＜ｃｏｎｔｅｘｔ＞」が静的辞書３２１に登録されているとする。すると、符号化部３１１は、タグ名「＜ｃｏｎｔｅｘｔ＞」を静的辞書３２１に登録されている静的コード「ｘｘｘ１ｈ」に符号化する。【０１５３】
そして、インデックス生成部１１３Ａは、符号化された符号コード「ｘｘｘ１ｈ」を符号化データのエリアに格納する。【０１５４】
そして、インデックス生成部１１３Ａは、ブロックの開始タグのタグ名に対して、当該タグ名に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部１１３Ａは、３ブロック目の開始タグのタグ名「＜ｃｏｎｔｅｘｔ＞」に対する符号コード「ｘｘｘ１ｈ」をタグ層に登録する。そして、インデックス生成部１１３Ａは、開始タグのタグ名に対して、当該タグ名に対する符号コードのブロックの出現位置のビットを「１」（ＯＮ）に設定する。【０１５５】
そして、インデックス生成部１１３Ａは、選択したブロックに対して、ブロックＮｏと符号化データ内のアドレスとを対応付けてブロックテーブル１２１Ａに格納する。ここでは、インデックス生成部１１３Ａは、ブロックＮｏ「３」と符号化データ内のアドレス「３５５」とを対応付けてブロックテーブル１２１Ａに格納する。【０１５６】
図１９Ｂは、実施例２に係る下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、ＸＢＲＬデータ内の３ブロック目の下位インデックスの生成処理について説明する。この３ブロック目では、ｃｏｎｔｅｘｔ要素の下位インデックスが生成される。【０１５７】
図１９Ｂに示すように、インデックス生成部１１３Ａは、タグを検出した場合には、タグのタグ名を符号化部３１１に符号化させる。ここでは、インデックス生成部１１３Ａは、タグを検出した場合には、タグのタグ名「＜ｃｏｎｔｅｘｔ＞」を符号化部３１１に符号化させる。タグ名「＜ｃｏｎｔｅｘｔ＞」は、動的コード「ｘｘｘ１ｈ」に符号化される。【０１５８】
そして、インデックス生成部１１３Ａは、符号化された符号コードを符号化データのエリアに格納する。なお、タグがブロックの開始タグである場合には、インデックス生成部１１３Ａは、開始タグに対する符号コードを符号化データのエリアに格納する処理を行わない。開始タグに対する符号コードは、既に上位インデックスの生成処理で符号化データのエリアに格納されているからである。【０１５９】
そして、インデックス生成部１１３Ａは、タグのタグ名に対して、当該タグ名に対する符号コードのブロック出現位置にビットを立てる。【０１６０】
インデックス生成部１１３Ａは、属性名を検出した場合には、属性名を符号化部３１１に符号化させる。ここでは、インデックス生成部１１３Ａは、属性名として「ｉｄ＝」を検出した場合には、属性名「ｉｄ＝」を符号化部３１１に符号化させる。属性名「ｉｄ＝」は、静的辞書３２１に登録されているので、静的コード「ｘｘ２０ｈ」に符号化される。【０１６１】
そして、インデックス生成部１１３Ａは、符号化された符号コードを符号化データのエリアに格納する。【０１６２】
そして、インデックス生成部１１３Ａは、属性名に対して、当該属性名に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部１１３Ａは、属性名「ｉｄ＝」に対する符号コード「ｘｘ２０ｈ」を属性層に登録する。そして、インデックス生成部１１３Ａは、属性名「ｉｄ＝」に対して、当該属性名に対する符号コード「ｘｘ２０ｈ」のブロックの出現位置のビットを「１」（ＯＮ）に設定する。【０１６３】
また、インデックス生成部１１３Ａは、属性値を検出した場合には、属性値を符号化部３１１に符号化させる。属性値「ＣｕｒｒｅｎｔＱ１」が、静的辞書３２１に登録されていないとする。そして、属性値「ＣｕｒｒｅｎｔＱ１」が、動的辞書３２２のバッファ部Ｄ１に格納されていないので、当該属性値を動的辞書３２２に登録し、アドレステーブルＤ２に基づいて、登録した属性値に対応する動的コードに符号化する。なお、符号化部３１１は、属性値「ＣｕｒｒｅｎｔＱ１」が動的辞書３２２に登録されている場合には、アドレステーブルＤ２に基づいて、当該属性値を対応する動的コードに符号化する。ここでは、属性値「ＣｕｒｒｅｎｔＱ１」は、動的コード「Ａ０００ｈ」に符号化される。【０１６４】
そして、インデックス生成部１１３Ａは、符号化された符号コードを符号化データのエリアに格納する。【０１６５】
そして、インデックス生成部１１３Ａは、属性値に対して、当該属性値に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部１１３Ａは、属性値「ＣｕｒｒｅｎｔＱ１」に対する符号コード「Ａ０００ｈ」をデータ値層に登録する。そして、インデックス生成部１１３Ａは、属性値「ＣｕｒｒｅｎｔＱ１」に対して、当該属性値に対する符号コード「Ａ０００ｈ」のブロックの出現位置のビットを「１」（ＯＮ）に設定する。【０１６６】
また、インデックス生成部１１３Ａは、要素値を検出した場合には、要素値を符号化部３１１に符号化させる。要素値「６７０２０」が、静的辞書３２１に登録されていないとする。そして、要素値「６７０２０」が、動的辞書３２２のバッファ部Ｄ１に格納されていないので、当該要素値を動的辞書３２２に登録し、アドレステーブルＤ２に基づいて、登録した要素値に対応する動的コードに符号化する。なお、符号化部３１１は、要素値「６７０２０」が動的辞書３２２に登録されている場合には、アドレステーブルＤ２に基づいて、当該要素値を対応する動的コードに符号化する。ここでは、要素値「６７０２０」は、動的コード「Ａ００２ｈ」に符号化される。【０１６７】
そして、インデックス生成部１１３Ａは、符号化された符号コードを符号化データのエリアに格納する。【０１６８】
そして、インデックス生成部１１３Ａは、要素値に対して、当該要素値に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部１１３Ａは、要素値「６７０２０」に対する符号コード「Ａ００２ｈ」をデータ値層に登録する。そして、インデックス生成部１１３Ａは、属性値「６７０２０」に対して、当該要素値に対する符号コード「Ａ００２ｈ」のブロックの出現位置のビットを「１」（ＯＮ）に設定する。【０１６９】
［インデックス生成処理のフローチャート］
図２０Ａは、実施例２に係るインデックス生成処理のフローチャートの一例を示す図である。なお、圧縮されたＸＢＲＬデータをＺｉｐファイルとして説明する。【０１７０】
Ｚｉｐファイルを受け付けた伸長部１１１は、当該Ｚｉｐファイルを伸長する（ステップＳ５１）。字句解析部１１２は、伸長データを字句解析する（ステップＳ５２）。【０１７１】
続いて、インデックス生成部１１３Ａは、伸長データのブロックを選択する（ステップＳ５３）。インデックス生成部１１３Ａは、選択したブロックの開始タグを検出する（ステップＳ５４）。そして、インデックス生成部１１３Ａは、検出した開始タグのタグ名を符号化する（ステップＳ５５）。なお、符号化処理のフローチャートは、後述する。【０１７２】
そして、インデックス生成部１１３Ａは、符号化された符号コードを上位インデックスのインデックス情報１２２ＡＵのタグ層に登録する（ステップＳ５６）。インデックス生成部１１３Ａは、上位インデックスのインデックス情報１２２ＡＵにおいて、検出した開始タグのタグ名の符号コードに対する、選択したブロックのブロックＮｏのビットをＯＮに設定する（ステップＳ５７）。【０１７３】
そして、インデックス生成部１１３Ａは、符号化データ内のブロックの開始アドレスをブロックテーブル１２１Ａに設定する（ステップＳ５８）。【０１７４】
そして、インデックス生成部１１３Ａは、選択したブロックについて、属性名を検出したか否かを判定する（ステップＳ５９）。属性名を検出したと判定した場合には（ステップＳ５９；Ｙｅｓ）、インデックス生成部１１３Ａは、検出した属性名を符号化する（ステップＳ６０）。なお、符号化処理のフローチャートは、後述する。【０１７５】
そして、インデックス生成部１１３Ａは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬの属性層に登録する（ステップＳ６１）。そして、インデックス生成部１１３Ａは、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬにおいて、検出した属性名の符号コードに対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ６２）。【０１７６】
そして、インデックス生成部１１３Ａは、属性値を符号化する（ステップＳ６３）。なお、符号化処理のフローチャートは、後述する。そして、インデックス生成部１１３Ａは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬのデータ値層に登録する（ステップＳ６４）。そして、インデックス生成部１１３Ａは、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬにおいて、属性値の符号コードに対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ６５）。そして、インデックス生成部１１３Ａは、ステップＳ６６に移行する。【０１７７】
一方、属性名を検出していないと判定した場合には（ステップＳ５９；Ｎｏ）、インデックス生成部１１３Ａは、開始タグの終了記号を検出したか否かを判定する（ステップＳ６６）。開始タグの終了記号を検出していないと判定した場合には（ステップＳ６６；Ｎｏ）、インデックス生成部１１３Ａは、次の属性名を検出すべく、ステップＳ５９に移行する。【０１７８】
一方、開始タグの終了記号を検出したと判定した場合には（ステップＳ６６；Ｙｅｓ）、インデックス生成部１１３Ａは、開始タグの開始記号を検出したか否かを判定する（ステップＳ６７）。開始タグの開始記号を検出したと判定した場合には（ステップＳ６７；Ｙｅｓ）、インデックス生成部１１３Ａは、ステップＳ５５に移行する。【０１７９】
一方、開始タグの開始記号を検出していないと判定した場合には（ステップＳ６７；Ｎｏ）、インデックス生成部１１３Ａは、要素値を符号化する（ステップＳ６８）。なお、符号化処理のフローチャートは、後述する。そして、インデックス生成部１１３Ａは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬのデータ値層に登録する（ステップＳ６９）。そして、インデックス生成部１１３Ａは、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬにおいて、要素値の符号コードに対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ７０）。【０１８０】
そして、インデックス生成部１１３Ａは、終了タグのタグ名を符号化する（ステップＳ７１）。なお、符号化処理のフローチャートは、後述する。そして、インデックス生成部１１３Ａは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬのタグ層に登録する（ステップＳ７２）。インデックス生成部１１３Ａは、選択したブロックに対する下位インデックスのインデックス情報１２２ＡＬにおいて、終了タグのタグ名の符号コードに対するブロック内のオフセットのビットをＯＮに設定する（ステップＳ７３）。そして、インデックス生成部１１３Ａは、終了タグの終了記号を検出する（ステップＳ７４）。【０１８１】
そして、インデックス生成部１１３Ａは、開始タグの開始記号を検出したか否かを判定する（ステップＳ７５）。開始タグの開始記号を検出したと判定した場合には（ステップＳ７５；Ｙｅｓ）、インデックス生成部１１３Ａは、ステップＳ５５に移行する。【０１８２】
一方、開始タグの開始記号を検出していないと判定した場合には（ステップＳ７５；Ｎｏ）、インデックス生成部１１３Ａは、終了タグの開始記号を検出したか否かを判定する（ステップＳ７６）。終了タグの開始記号を検出したと判定した場合には（ステップＳ７６；Ｙｅｓ）、インデックス生成部１１３Ａは、ステップＳ７１に移行する。【０１８３】
一方、終了タグの開始記号を検出していないと判定した場合には（ステップＳ７６；Ｎｏ）、インデックス生成部１１３Ａは、ブロックの終点を検出する（ステップＳ７７）。そして、インデックス生成部１１３Ａは、伸長データの終点であるか否かを判定する（ステップＳ７８）。伸長データの終点でないと判定した場合には（ステップＳ７８；Ｎｏ）、インデックス生成部１１３Ａは、次のブロックを選択すべく、ステップＳ５３に移行する。【０１８４】
一方、伸長データの終点であると判定した場合には（ステップＳ７８；Ｙｅｓ）、インデックス生成部１１３Ａは、インデックス生成処理を終了する。【０１８５】
図２０Ｂは、実施例２に係る符号化処理のフローチャートの一例を示す図である。【０１８６】
図２０Ｂに示すように、符号化部３１１は、符号化対象を受け取ると（ステップＳ８１）、静的辞書３２１に符号化対象が登録済みである否かを判定する（ステップＳ８２）。静的辞書３２１に符号化対象が登録済みであると判定した場合には（ステップＳ８２；Ｙｅｓ）、符号化部３１１は、静的辞書３２１に登録されている符号コードを符号化データに書き込む（ステップＳ８３）。そして、符号化部３１１は、ステップＳ８８に移行する。【０１８７】
一方、静的辞書３２１に符号化対象が登録済みでないと判定した場合には（ステップＳ８２；Ｎｏ）、符号化部３１１は、動的辞書３２２を参照する（ステップＳ８４）。そして、符号化部３１１は、動的辞書３２２に符号化対象が登録済みであるか否かを判定する（ステップＳ８５）。【０１８８】
動的辞書３２２に符号化対象が登録済みであると判定した場合には（ステップＳ８５；Ｙｅｓ）、符号化部３１１は、ステップＳ８７に移行する。【０１８９】
一方、動的辞書３２２に符号化対象が登録済みでないと判定した場合には（ステップＳ８５；Ｎｏ）、符号化部３１１は、符号化対象を動的辞書３２２に登録する（ステップＳ８６）。そして、符号化部３１１は、ステップＳ８７に移行する。【０１９０】
ステップＳ８７において、符号化部３１１は、動的辞書３２２に登録されている符号コードを符号化データに書き込む（ステップＳ８７）。そして、符号化部３１１は、ステップＳ８８に移行する。【０１９１】
ステップＳ８８において、符号化部３１１は、符号コードをインデックス生成処理に戻す（ステップＳ８８）。そして、符号化部３１１は、符号化処理を終了する。【０１９２】
［実施例２に係る検索装置の構成］
図２１は、実施例２に係る検索装置の機能構成を示すブロック図である。なお、図１０に示す検索装置２００と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、伸長部２１２を削除した点にある。また、実施例１と実施例２とが異なるところは、オフセット検索部２１３、ブロック読出部２１４および検索対象抽出部２１５を、それぞれオフセット検索部２１３Ａ、ブロック読出部２１４Ａおよび検索対象伸長部２１５Ａに変更した点にある。また、実施例１と実施例２とが異なる点は、ブロックテーブル１２１およびインデックス情報１２２をそれぞれブロックテーブル１２１Ａおよびインデックス情報１２２Ａに変更した点にある。そして、実施例１と実施例２とが異なる点は、静的辞書３２１および動的辞書３２２を追加した点にある。なお、ブロックテーブル１２１Ａ、インデックス情報１２２Ａは、動的辞書３２２は、実施例２に係るインデックス生成装置１００によって生成される情報であり、例えば、ネットワークを介して取得され、記憶部２２０に記憶される。【０１９３】
オフセット検索部２１３Ａは、インデックス情報１２２Ａを参照し、検索条件に合致する検索対象を検索する。例えば、オフセット検索部２１３Ａは、上位インデックスのインデックス情報１２２ＡＵを参照し、検索条件の要素名の符号コードに対応するインデックス（ビットマップ）を抽出する。オフセット検索部２１３Ａは、抽出したビットマップに「１」が設定されたブロックＮｏを取得する。オフセット検索部２１３Ａは、検出したブロックＮｏに対応する下位インデックスのインデックス情報１２２ＡＬを抽出する。オフセット検索部２１３Ａは、抽出した下位インデックスのインデックス情報１２２ＡＬを参照し、検索条件に合致する検索対象のオフセットを絞り込む。【０１９４】
ブロック読出部２１４Ａは、符号化データから、取得されたブロックＮｏに対応するブロックを読み出す。例えば、ブロック読出部２１４Ａは、ブロックテーブル１２１Ａを参照し、取得されたブロックＮｏに対応する符号化データ内のアドレス１２１ｃを取得する。ブロック読出部２１４Ａは、符号化データから、取得したアドレスに対応付けられるブロックを読み出す。【０１９５】
検索対象伸長部２１５Ａは、対象のブロックから検索対象を抽出し、抽出した検索対象を伸長する。例えば、検索対象伸長部２１５Ａは、ブロック読出部２１４Ａによって読み出されたブロックから、オフセット検索部２１３Ａによって絞り込まれたオフセットの検索対象を抽出する。そして、検索対象伸長部２１５Ａは、静的辞書３２１および動的辞書３２２に基づいて、抽出した検索対象を伸長する。【０１９６】
伸長処理の一例として、検索対象伸長部２１５Ａは、抽出した検索対象が動的コードであるか否かを判定する。検索対象伸長部２１５Ａは、抽出した検索対象が動的コードであると判定した場合には、動的辞書３２２を用いて当該検索対象を伸長する。すなわち、検索対象伸長部２１５Ａは、動的辞書３２２のアドレステーブルＤ２から検索対象と合致する動的コードを特定し、特定した動的コードに対応する格納位置およびデータ長を取得する。そして、検索対象伸長部２１５Ａは、バッファ部Ｄ１から、取得した格納位置およびデータ長を示す文字列を特定する。特定した文字列が、検索対象を伸長した検索結果である。【０１９７】
［検索対象伸長処理の流れ］
ここで、実施例２に係る検索対象伸長処理の流れの一例を、図２２を参照して説明する。図２２は、実施例２に係る検索対象伸長処理の流れの一例を示す図である。なお、オフセット検索部２１３Ａが、ブロックＮｏとして「９」を取得し、オフセットとして「８」を検索した場合とする。【０１９８】
ブロック読出部２１４Ａは、ブロックテーブル１２１Ａから、取得されたブロックＮｏに対応する符号化データ内のアドレス１２１ｃを取得する（ｄ１）。ここでは、取得されたブロックＮｏ「９」に対応する符号化データ内のアドレス１２１ｃとして「１２００」が取得される。【０１９９】
そして、ブロック読出部２１４Ａは、符号化データから、取得したアドレス「１２００」に対応付けられるブロックを読み出す（ｄ２）。【０２００】
続いて、検索対象伸長部２１５Ａは、ブロック読出部２１４Ａによって読み出されたブロックから、検索されたオフセットの検索対象を抽出する（ｄ３）。ここでは、検索対象伸長部２１５Ａは、読み出されたブロックから、オフセットとして検索された「８」の位置にある検索対象として符号コード「Ａ０８３ｈ」を抽出するとする。「Ａ０８３ｈ」は、動的辞書２２２において「１００００」に割り当てられているとする。すると、検索対象伸長部２１５Ａは、静的辞書３２１および動的辞書３２２に基づいて、抽出した符号コード「Ａ０８３ｈ」を伸長する。ここでは、符号コード「Ａ０８３ｈ」は、動的辞書３２２に登録されているので、検索対象伸長部２１５Ａは、動的辞書３２２に基づいて「Ａ０８３ｈ」を「１００００」に伸長する。そして、検索対象伸長部２１５Ａは、伸長した「１００００」を検索結果として出力する（ｄ４）。【０２０１】
［検索処理のフローチャート］
図２３は、実施例２に係る検索処理のフローチャートの一例を示す図である。【０２０２】
検索クエリ解析部２１１は、検索クエリを受け付けたか否かを判定する（ステップＳ９１）。検索クエリを受け付けていないと判定した場合には（ステップＳ９１；Ｎｏ）、検索クエリ解析部２１１は、検索クエリを受け付けるまで、判定処理を繰り返す。【０２０３】
一方、検索クエリを受け付けたと判定した場合には（ステップＳ９１；Ｙｅｓ）、検索クエリ解析部２１１は、検索クエリを解析し、検索条件および検索対象を抽出する（ステップＳ９２）。【０２０４】
続いて、オフセット検索部２１３Ａは、上位インデックスのインデックス情報１２２ＡＵを参照し、検索条件の要素名に対応するブロックＮｏを取得する（ステップＳ９３）。そして、オフセット検索部２１３Ａは、取得したブロックＮｏの下位インデックスのインデックス情報１２２ＡＬを参照し、検索条件に合致する検索対象のオフセットを絞り込む（ステップＳ９４）。【０２０５】
続いて、ブロック読出部２１４Ａは、符号化データから、取得ブロックＮｏに対応するブロックを読み出す（ステップＳ９５）。例えば、ブロック読出部２１４Ａは、ブロックテーブル１２１Ａを参照し、取得されたブロックＮｏに対応する符号化データ内のアドレス１２１ｃを取得し、取得した符号化データ内のアドレス１２１ｃに対応するブロックを、符号化データから読み出す。そして、検索対象伸長部２１５Ａは、読み出したブロックから、絞り込んだオフセットの位置にある符号コードを抽出する（ステップＳ９６）。【０２０６】
そして、検索対象伸長部２１５Ａは、静的辞書３２１および動的辞書３２２に基づいて、抽出した符号コードを伸長する（ステップＳ９７）。そして、検索対象伸長部２１５Ａは、伸長した値を検索結果として出力し、検索処理を終了する。【０２０７】
［実施例２に係る検索フローの一例］
図２４は、実施例２に係る検索フローの一例を示す図である。なお、図２４では、図２６で示した参考例の検索フローと比較するために、ＴＤｎｅｔを利用する場合を説明する。しかしながら、検索フローは、ＴＤｎｅｔを利用する場合に限定されるものではない。【０２０８】
図２４に示すように、企業は、ＴＤｎｅｔを利用して、財務情報のＸＢＲＬデータをＺｉｐにより圧縮したＺｉｐファイルを提出する（Ｓ２０１）。【０２０９】
審査官側では、審査官が、Ｚｉｐファイルを解凍（伸長）し、伸長したＸＢＲＬデータをチェックする（Ｓ２０２）。審査官が、承認したＸＢＲＬデータのＺｉｐファイルをＴＤｎｅｔのＤＢに格納し（Ｓ２０３）、当該ＸＢＲＬデータを開示する。ここでいう審査官とは、例えば、金融機関であったり、証券取引所であったりする。【０２１０】
そして、インデックス生成装置１００が、ＸＢＲＬデータを字句解析し、符号化データとブロックテーブル１２１Ａとインデックス情報１２２Ａとを生成し、ＴＤｎｅｔに格納する（Ｓ２０４）。なお、かかる処理は、例えば、字句解析部１１２、符号化部３１１およびインデックス生成部１１３Ａに対応する。【０２１１】
クライアント（投資家）側では、投資家が、ＴＤｎｅｔを利用して、企業を検索し（Ｓ２０５）、調査対象の企業を決定する（Ｓ２０６）。【０２１２】
続いて、投資家は、符号化データとブロックテーブル１２１Ａとインデックス情報１２２Ａとを検索装置２００の専用クライアントアプリに入力する（Ｓ２０７）。【０２１３】
さらに、投資家は、検索装置２００の専用クライアントアプリに、検索対象である要素の検索ワードまたは検索対象である値の検索ワードを入力する（Ｓ２０８）。すなわち、投資家は、検索装置２００に検索クエリを入力する。すると、専用クライアントアプリは、検索クエリを解析し、検索条件および検索対象を抽出する。なお、かかる処理は、例えば、検索クエリ解析部２１１に対応する。【０２１４】
そして、専用クライアントアプリは、インデックス情報１２２Ａにより検索条件に合致する検索対象のオフセットの位置を絞り込む（Ｓ２０９）。そして、専用クライアントアプリは、符号化データ上の、絞り込んだ位置の値を抽出し、抽出した値を伸長する（Ｓ２１０）。そして、専用クライアントアプリは、伸長した結果をクライアント側に通知する（Ｓ２１１）。なお、かかる処理は、例えば、オフセット検索部２１３Ａ、ブロック読出部２１４Ａおよび検索対象伸長部２１５Ａに対応する。【０２１５】
［実施例２の効果］
このようにして、上記実施例２によれば、インデックス生成装置１００は、ＸＢＲＬデータを符号化する際に、ＸＢＲＬデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報１２２Ａを生成する。かかる構成によれば、インデックス生成装置１００は、インデックス情報１２２Ａを用いることで、ＸＢＲＬデータについて、ＸＢＲＬデータを符号化したままで、項目と値とを組み合わせた検索条件で効率的に検索対象を検索することが可能となる。すなわち、インデックス生成装置１００は、インデックス情報１２２Ａを用いることで、符号化形式のまま検索対象を絞り込むことができるとともに、ＸＢＲＬデータを走査しないで検索対象を絞り込むことができる。【０２１６】
また、上記実施例２では、検索装置２００が、ＸＢＲＬデータを符号化する際に生成されたインデックス情報１２２Ａを参照し、検索条件に含まれる特定の項目および特定の値に対する出現位置を特定する。そして、検索装置２００は、符号化データから、特定された出現位置に存在する部分データを検索し、検索した部分データを部分伸長する。かかる構成によれば、検証装置２００は、符号化形式のままで検索対象を示す部分データを検索することができる。【０２１７】
［その他］
なお、実施例１、２では、インデックス情報１２２は、上位インデックスのインデックス情報１２２Ｕと下位インデックスのインデックス情報１２２Ｌとを含むと説明した。そして、上位インデックスのインデックス情報１２２ＵのＸ軸は、ブロックの番号を表し、Ｙ軸はタグ層のタグ名（要素名）を表す。下位インデックスのインデックス情報１２２ＬのＸ軸は、ブロック単位のオフセット（出現位置）を表し、Ｙ軸はタグ層に含まれるタグ名と属性層に含まれる属性名とデータ値層に含まれるデータ値とを表す。しかしながら、インデックス情報１２２は、これに限定されず、３次元で表わしても良い。すなわち、インデックス情報１２２は、Ｘ軸をブロックの番号、Ｙ軸をタグ層に含まれるタグ名と属性層に含まれる属性名とデータ値層に含まれるデータ値、Ｚ軸をブロック単位のオフセット（出現位置）で表わしても良い。【０２１８】
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、インデックス生成部１１３は、上位インデックスのインデックス情報１２２Ｕの生成処理と下位インデックスのインデックス情報１２２Ｌの生成処理とを分離しても良い。また、オフセット検索部２１３は、上位インデックスのインデックス情報１２２Ｕから該当する該当するブロックＮｏを取得する処理と、下位インデックスのインデックス情報１２２Ｌから該当するオフセットを絞り込む処理とを分散しても良い。また、記憶部１２０をインデックス生成装置１００の外部装置としてネットワーク経由で接続するようにしても良い。記憶部２２０を検索装置２００の外部装置としてネットワーク経由で接続するようにしても良い。【０２１９】
図２５は、インデックス生成装置および検索装置のハードウェア構成の一例を示す図である。図２５に示すように、インデックス生成装置１００および検索装置２００を含むコンピュータ５００は、各種演算処理を実行するＣＰＵ５０１と、ユーザからのデータ入力を受け付ける入力装置５０２と、モニタ５０３とを有する。また、コンピュータ５００は、記憶媒体からプログラムなどを読み取る媒体読取装置５０４と、他の装置と接続するためのインターフェース装置５０５と、他の装置と無線により接続するための無線通信装置５０６とを有する。また、コンピュータ５００は、各種情報を一時記憶するＲＡＭ（Random  Access  Memory）５０７と、ハードディスク装置５０８とを有する。また、各装置５０１〜５０８は、バス５０９に接続される。【０２２０】
ハードディスク装置５０８には、図１に示した制御部１１０と同様の機能を有するインデックス生成プログラム２０５ｂが記憶される。また、ハードディスク装置５０８には、インデックス生成プログラム２０５ｂを実現するための各種データが記憶される。各種データには、図１に示した記憶部１２０内のデータが含まれる。また、ハードディスク装置５０８には、図１０に示した制御部２１０と同様の機能を有する検索プログラム２０５ａが記憶される。また、ハードディスク装置５０８には、検索プログラム２０５ａを実現するための各種データが記憶される。各種データには、図１０に示した記憶部２２０内のデータが含まれる。【０２２１】
ＣＰＵ５０１は、ハードディスク装置５０８に記憶された各プログラムを読み出して、ＲＡＭ５０７に展開して実行することで、各種の処理を行う。これらのプログラムは、コンピュータ５００を図１および図１０に示した各機能部として機能させることができる。【０２２２】
なお、上記のインデックス生成プログラム２０５ｂおよび検索プログラム２０５ａは、必ずしもハードディスク装置５０８に記憶されている必要はない。例えば、コンピュータ５００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ５００が読み出して実行するようにしてもよい。コンピュータ５００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリなどの可搬型記録媒体、フラッシュメモリなどの半導体メモリ、ハードディスクドライブなどが対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）などに接続された装置にこれらプログラムを記憶させておき、コンピュータ５００がこれらプログラムを読み出して実行するようにしても良い。
【符号の説明】
【０２２３】
１００  インデックス生成装置
１１０  制御部
１１１  伸長部
１１２  字句解析部
１１３、１１３Ａ  インデックス生成部
１２０  記憶部
１２１、１２１Ａ  ブロックテーブル
１２２、１２２Ａ  インデックス情報
２００  検索装置
２１０  制御部
２１１  検索クエリ解析部
２１２  伸長部
２１３、２１３Ａ  オフセット検索部
２１４、２１４Ａ  ブロック読出部
２１５  検索対象抽出部
２１５Ａ  検索対象伸長部
２２０  記憶部
２２１  ＸＢＲＬデータ（圧縮形式）
３１１  符号化部
３２１  静的辞書
３２２  動的辞書
【図１】
2018185921.tif 000003
【図２】
2018185921.tif 000004
【図３】
2018185921.tif 000005
【図４】
2018185921.tif 000006
【図５Ａ】
2018185921.tif 000007
【図５Ｂ】
2018185921.tif 000008
【図６】
2018185921.tif 000009
【図７】
2018185921.tif 000010
【図８】
2018185921.tif 000011
【図９】
2018185921.tif 000012
【図１０】
2018185921.tif 000013
【図１１】
2018185921.tif 000014
【図１２】
2018185921.tif 000015
【図１３】
2018185921.tif 000016
【図１４】
2018185921.tif 000017
【図１５】
2018185921.tif 000018
【図１６】
2018185921.tif 000019
【図１７】
2018185921.tif 000020
【図１８】
2018185921.tif 000021
【図１９Ａ】
2018185921.tif 000022
【図１９Ｂ】
2018185921.tif 000023
【図２０Ａ】
2018185921.tif 000024
【図２０Ｂ】
2018185921.tif 000025
【図２１】
2018185921.tif 000026
【図２２】
2018185921.tif 000027
【図２３】
2018185921.tif 000028
【図２４】
2018185921.tif 000029
【図２５】
2018185921.tif 000030
【図２６】
2018185921.tif 000031
【図２７】
2018185921.tif 000032
【図２８】
2018185921.tif 000033
【国際調査報告】
2018185921.tif 000034
2018185921.tif 000035
2018185921.tif 000036
2018185921.tif 000037