以下に、本願の開示するインデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
まず、企業ごとのXBRL文書による財務情報を検索するTDnet(Timely Disclosure network)というシステムがある。かかるTDnetでは、企業が提出するXBRL文書による財務情報を投資家に開示し、開示した財務情報を投資家が検索することができる。ここで、TDnetを利用した検索フローの参考例を、図26を参照して説明する。図26は、TDnetを利用した検索フローの参考例を示す図である。
図26に示すように、企業は、TDnetを利用して、財務情報のXBRLデータをZipにより圧縮したZipファイルを提出する(S901)。
審査官は、Zipファイルを解凍(伸長)し、伸長したXBRLデータをチェックする(S902)。審査官は、承認したXBRLデータのZipファイルをTDnetのDB(DataBase)に格納し(S903)、当該XBRLデータを開示する。ここでいう審査官とは、例えば、公的な監督機関であったり、証券取引所であったりする。
投資家は、TDnetを利用して、開示された企業のXBRLデータを検索するために、報告日の検索期間および検索対象の企業名を入力する(S904)。投資家は、TDnetを利用して、検索対象のXBRLデータを決定する(S905)。投資家は、TDnetを利用して、決定した検索対象のXBRLデータに対するZipファイルをローカルフォルダに保存する(S906)。そして、投資家は、保存したZipファイルを解凍(伸長)する(S907)。
続いて、投資家は、伸長したXBRLデータを専用ツールに入力する(S908)。専用ツールは、入力されたXBRLデータを字句解析し、データモデルのツリーを構築する(S909)。そして、専用ツールは、要素と値のペアを、表示定義に従って、一覧表示する(S910)。
そして、投資家は、検索対象である要素の検索ワードまたは検索対象である値の検索ワードを入力する(S911)。要素の検索ワードの一例として、勘定科目である「売上収益」が挙げられる。値の検索ワードの一例として、「社長」が挙げられる。すると、専用ツールは、データモデルのツリーを走査し、検索ワードと照合した結果を通知する(S912)。例えば、要素の検索ワードが「売上収益」である場合には、勘定科目「売上収益」に対する値が通知される。値の検索ワードが「社長」である場合には、「社長」を含む勘定科目の値が通知される。
ここで、XBRLデータの一例を、図27を参照して説明する。図27は、XBRLデータの一例を示す図である。
図27に示すように、1つのXBRLデータは、データ値と、データ値を補足する付加情報からなる。付加情報は、データ値を含む要素と関連付けられる、別の独立した要素で指定される情報である。付加情報は、名前がcontextとunitである要素に複数定義されるが、ここでは、contextを区別するためのコンテキスト名として、「CurrentQ1」、「PriorQ1」が付与されている。unitを区別するためのユニット名として、「JPY」、「Pure」が付与されている。そして、データ値には、名前がSalesである要素に対して、付加情報を参照する属性としてコンテキスト名である「CurrentQ1」、ユニット名である「JPY」が定義されている。そして、要素「Sales」の値として「10000」が定義されている。また、コンテキスト名である「CurrentQ1」に対応する付加情報には、報告日の日付を意味する、要素「period」の配下にある要素「instant」の値として「2016−06−30」が定義されている。
ここで、投資家が検索対象である要素の検索ワードとして「2016」年度の「売上収益」を入力した場合の、検索処理の参考例を、図28を参照して説明する。図28は、検索処理の参考例を示す図である。なお、図28では、専用ツールに入力されたXBRLデータについて、データモデルのツリーが構築されたとする。ツリーの中の<c>の「c」、<p>の「p」、<i>の「i」は、それぞれ「context」、「period」、「instant」を省略したものである。また、ツリーの中の<S>の「S」、「cr=」は、それぞれ「Sales」、「contextRef=」を省略したものである。また、ツリーの中の"Cur"、"Pri"は、それぞれ「CurrentQ1」、「PriorQ1」を省略したものである。また、ツリーの中の「2016」、「2015」は、それぞれ「2016−06−30」、「2015−06−30」を省略したものである。
図28に示すように、「2016」年度の「売上収益」という検索ワードを受け取った専用ツールは、ツリーのトップ(ルート)から末端にかけて、「2016」を値に含む要素を探索する(S920)。そして、専用ツールは、探索した結果、親要素が「instant」であることを確認し(S921)、祖先に遡って「context」要素を探索する(S922)。そして、専用ツールは、祖先要素が「context」要素であることを確認し、id属性を探索する(S923)。探索された結果、id属性値は、「CurrentQ1」であったとする。
続いて、専用ツールは、ツリーのトップ(ルート)から末端にかけて、「CurrentQ1」を値に持つ「contextRef」属性を探索する(S924)。そして、専用ツールは、探索した結果、「CurrentQ1」が「contextRef」属性の値であることを確認し、「contextRef」属性が「売上収益」であることを示す「Sales」要素の属性であることを確認する(S925)。そして、専用ツールは、「Sales」要素の値として「1000」を取得する(S926)。
このようにして、参考例に係る検索処理は、XBRL固有の仕様により、データ値と付加情報が分離されているため、何回も、XBRLデータのデータモデルのツリーの全データを走査しながら、検索ワードと照合するので、演算量の増大が見込まれ、効率的に検索することが難しい。
[実施例1に係るインデックス生成装置の構成]
図1は、実施例1に係るインデックス生成装置の構成を示す機能ブロック図である。インデックス生成装置100は、項目および値の組み合わせにより記述されたXBRLデータを入力し、入力したXBRLデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報122を生成する。
ここでいうXBRLデータとは、圧縮データから伸長された、XBRLで記述されたデータである。XBRLとは、各種財務報告用の情報を作成、流通、利用できるように標準化されたXMLベースの言語である。そして、圧縮データの一例として、Zip形式のデータが挙げられる。XBRLデータの一例として、財務データが挙げられる。
ここで、実施例1に係るXBRLデータの一例を、図2を参照して説明する。図2は、実施例1に係るXBRLデータの一例を示す図である。なお、図2で示すXBRLデータは、図27で示したXBRLデータの内容と同じである。
図2に示すように、XBRLデータを、先頭より、付加情報およびデータ値を表す要素ごとにブロックで区切る。ここでは、3、4ブロックの要素が、図27で示したデータ値を補足する付加情報1に対応する。6、7ブロックの要素が、図27で示したデータ値を補足する付加情報2に対応する。9、11ブロックの要素が、図27で示したデータ値に対応する。なお、XBRLデータ内の付加情報およびデータ値を表す各要素の開始タグとブロックとの関係は、後述するブロックテーブル121により定義される。
図1に示すように、インデックス生成装置100は、制御部110および記憶部120を有する。
記憶部120は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部120は、ブロックテーブル121およびインデックス情報122を有する。
ブロックテーブル121は、XBRLデータ内の付加情報およびデータ値を表す各要素の開始タグのアドレスと、ブロックの番号とを対応付けて記憶する。
ここで、ブロックテーブル121の一例を、図3を参照して説明する。図3は、実施例1に係るブロックテーブルの一例を示す図である。図3に示すように、ブロックテーブル121は、ブロックNo121aとXBRLデータ内のアドレス121bとを対応付けて記憶する。ブロックNo121aは、ブロックの番号を示す。XBRLデータ内のアドレス121bは、圧縮データから伸長されたXBRLデータに含まれるブロックの先頭アドレスを示す。一例として、ブロックNo121aが「1」である場合に、XBRLデータ内のアドレス121bとして「0」を記憶している。ブロックNo121aが「2」である場合に、XBRLデータ内のアドレス121bとして「A000h」を記憶している。
図1に戻って、インデックス情報122は、上位インデックスのインデックス情報122Uと下位インデックスのインデックス情報122Lを含む。上位インデックスのインデックス情報122Uとは、XBRLデータ内の付加情報およびデータ値を表す各要素のブロック位置を表す情報である。すなわち、上位インデックスのインデックス情報122Uとは、XBRLデータにおける付加情報およびデータ値の開始タグについて、ブロック位置ごとの存否をインデックス化したビットマップのことをいう。下位インデックスのインデックス情報122Lは、ブロックごとに存在する。所定のブロックの下位インデックスのインデックス情報122Lとは、XBRLデータにおける付加情報およびデータ値を表す要素について、項目(開始タグ、属性、終了タグ)および値それぞれの出現位置を表す情報である。すなわち、下位インデックスのインデックス情報122Lとは、XBRLデータに含まれる所定のブロックにおける項目(開始タグ、属性、終了タグ)および値について、オフセット(出現位置)ごとの存否をインデックス化したビットマップのことをいう。
ここで、インデックス情報122の一例を、図4を参照して説明する。図4は、実施例1に係るインデックス情報の一例を示す図である。図4上図には、上位インデックスのインデックス情報122Uが表わされている。図4下図には、下位インデックスのインデックス情報122Lが表わされている。なお、図4上図のインデックス情報122は、図2で示したXBRLデータに対する上位インデックスのインデックス情報122Uである。図4下図のインデックス情報122は、図2で示したXBRLデータのうち3ブロック目の下位インデックスのインデックス情報122Lである。
図4上図に示すように、上位インデックスのインデックス情報122UのX軸は、ブロックの番号を表し、Y軸はタグ層のタグ名(要素名)を表す。かかるインデックス情報122Uは、それぞれの要素名について、ブロックに関するインデックスの束の情報である。各要素名について、出現するブロックの番号には、ONすなわち2進数の「1」が設定される。一例として、<xrbl>は、ブロック番号の1番目の位置に「1」が設定されている。すなわち、<xrbl>要素は、1ブロック目に位置する。<context>は、ブロック番号の3番目の位置に「1」が設定されている。すなわち、<context>要素は、3ブロック目に位置する。
図4下図に示すように、下位インデックスのインデックス情報122LのX軸は、ブロック単位のオフセット(出現位置)を表し、Y軸はタグ層に含まれるタグ名と属性層に含まれる属性名とデータ値層に含まれる要素値と属性値を表す。また、インデックス情報122Lは、タグ層の領域と属性層の領域とデータ値層の領域を持つ。タグ層の領域のインデックス情報は、それぞれの開始タグと終了タグのタグ名について、ブロック内の出現位置に関するインデックスの束の情報である。属性層の領域のインデックス情報122は、それぞれの属性名について、ブロック内の出現位置に関するインデックスの束の情報である。データ値層の領域のインデックス情報122は、それぞれの要素値と属性値について、ブロック内の出現位置に関するインデックスの束の情報である。各タグ名、各属性名、各要素値および各属性値について、ブロック内に出現する出現位置には、ONすなわち2進数の「1」が設定される。一例として、開始タグのタグ名が「<context>」である場合に、ブロック内の1番目の出現位置に「1」が設定されている。属性名が「id=」である場合に、ブロック内の2番目の出現位置に「1」が設定されている。identifier要素の値が「67020」である場合に、ブロック内の8番目の出現位置に「1」が設定されている。
図1に戻って、制御部110は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部110は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路の電子回路に対応する。または、制御部110は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。制御部110は、伸長部111、字句解析部112およびインデックス生成部113を有する。なお、伸長部111は、入力部の一例である。軸解析部112およびインデックス生成部113は、生成部の一例である。
伸長部111は、圧縮されたXBRLデータを入力し、伸長する。ここでいう圧縮されたXBRLデータは、例えば企業によって提出されたXBRLデータをZip形式により圧縮されたものである。
字句解析部112は、伸長部111によって伸長されたXBRLデータを字句解析する。ここでいう字句解析とは、XBRLデータをマークアップと単語に分割することをいう。
インデックス生成部113は、XBRLデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報122を生成する。例えば、インデックス生成部113は、XBRLデータの各ブロック先頭の開始タグのタグ名に対して、当該タグ名のブロックの出現位置にビットを立てる。すなわち、インデックス生成部113は、上位インデックスのインデックス情報122Uを生成する。そして、インデックス生成部113は、それぞれのブロックに対して、ブロックNo121aとXBRLデータ内のアドレス121bとを対応付けてブロックテーブル121に格納する。また、インデックス生成部113は、XBRLデータのブロックごとに、ブロックに含まれる開始タグと終了タグのタグ名に対して、当該タグ名のブロック内の出現位置にビットを立てる。インデックス生成部113は、XBRLデータのブロックごとに、ブロックに含まれる属性名に対して、当該属性名のブロック内の出現位置にビットを立てる。インデックス生成部113は、XBRLデータのブロックごとに、ブロックに含まれる要素値と属性値に対して、当該値のブロック内の出現位置にビットを立てる。すなわち、インデックス生成部113は、下位インデックスのインデックス情報122Lを生成する。なお、下位インデックスのインデックス情報122Lを、検索時に、インデックス情報122L内のブロックが決定した後で、インデックス生成部113が、生成するようにしても良い。以降では、インデックス生成部113が、インデックス情報122を生成する際に、タグ層のタグ名等を登録する場合を説明する。
[インデックス生成処理の流れ]
ここで、実施例1に係るインデックス生成処理の流れの一例を、図5Aおよび図5Bを参照して説明する。
図5Aは、実施例1に係る上位インデックスのインデックス生成処理の流れの一例を示す図である。図5Aに示すように、インデックス生成部113は、XBRLデータの各ブロックの開始タグのタグ名に対して、当該タグ名のブロック出現位置にビットを立てる。ここでは、インデックス生成部113は、XBRLデータからブロックを選択する。そして、インデックス生成部113は、選択したブロックの開始タグを検出し、検出した開始タグのタグ名をタグ層に登録する。そして、インデックス生成部113は、開始タグのタグ名に対して、当該タグ名のブロックの出現位置のビットを「1」(ON)に設定する。
一例として、インデックス生成部113が、1ブロック目を選択した場合には、1ブロック目で検出された開始タグのタグ名「xbrl」をタグ層に登録する。そして、インデックス生成部113は、タグ名「xbrl」に対応するインデックス(ビットマップ)の、ブロックNo「1」に対するビットに「1」を書き込む。
一例として、インデックス生成部113は、3ブロック目を選択した場合には、3ブロック目で検出された開始タグのタグ名「<context>」をタグ層に登録する。そして、インデックス生成部113は、タグ名「<context>」に対応するインデックス(ビットマップ)の、ブロックNo「3」に対するビットに「1」を書き込む。
一例として、インデックス生成部113は、6ブロック目を選択した場合には、6ブロック目で検出された開始タグのタグ名「<unit>」をタグ層に登録する。そして、インデックス生成部113は、タグ名「<unit>」に対応するインデックス(ビットマップ)の、ブロックNo「6」に対するビットに「1」を書き込む。
一例として、インデックス生成部113は、9ブロック目を選択した場合には、9ブロック目で検出された開始タグのタグ名「<Sales>」をタグ層に登録する。そして、インデックス生成部113は、タグ名「<Sales>」に対応するインデックス(ビットマップ)の、ブロックNo「9」に対するビットに「1」を書き込む。
また、インデックス生成部113は、それぞれのブロックに対して、ブロックNo121aとXBRLデータ内のアドレス121bとを対応付けてブロックテーブル121に格納する。ここでは、インデックス生成部113は、ブロックNo「1」とXBRLデータ内のアドレス「0」とを対応付けてブロックテーブル121に格納する。インデックス生成部113は、ブロックNo「2」とXBRLデータ内のアドレス「A000h」とを対応付けてブロックテーブル121に格納する。インデックス生成部113は、ブロックNo「3」とXBRLデータ内のアドレス「A100h」とを対応付けてブロックテーブル121に格納する。インデックス生成部113は、ブロックNo「4」とXBRLデータ内のアドレス「A200h」とを対応付けてブロックテーブル121に格納する。
図5Bは、実施例1に係る下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、XBRLデータ内の3ブロック目の下位インデックスの生成処理について説明する。この3ブロック目では、context要素の下位インデックスが生成される。
図5Bに示すように、3ブロック目について、インデックス生成部113は、開始タグを検出した場合には、開始タグのタグ名「<context>」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部113は、開始タグのタグ名「<context>」に対応するインデックス(ビットマップ)の、出現位置「1」に対するビットに「1」を書き込む。なお、インデックス生成部113は、タグ名を、以下のように検出すれば良い。すなわち、インデックス生成部113は、タグの開始記号「<」を検出すると、開始記号の直後の単語をタグ名として検出すれば良い。
インデックス生成部113は、属性名として「id=」を検出した場合には、属性名「id=」を属性層に登録する。そして、インデックス生成部113は、属性名「id=」に対応するインデックス(ビットマップ)の、出現位置「2」に対するビットに「1」を書き込む。なお、インデックス生成部113は、属性名を、以下のように検出すれば良い。すなわち、インデックス生成部113は、タグ名に後続する属性群であって「=」を持つ属性の左辺を属性名として検出すれば良い。
インデックス生成部113は、属性値として「CurrentQ1」を検出した場合には、属性値「CurrentQ1」をデータ値層に登録する。そして、インデックス生成部113は、属性値「CurrentQ1」に対応するインデックス(ビットマップ)の、出現位置「3」に対するビットに「1」を書き込む。なお、インデックス生成部113は、属性値を、以下のように検出すれば良い。すなわち、インデックス生成部113は、同じく「=」を持つ属性の右辺を属性値として検出すれば良い。
インデックス生成部113は、要素値として「67020」を検出した場合には、要素値「67020」をデータ値層に登録する。そして、インデックス生成部113は、要素値「67020」に対応するインデックス(ビットマップ)の、出現位置「8」に対するビットに「1」を書き込む。なお、インデックス生成部113は、要素値を、以下のように検出すれば良い。すなわち、インデックス生成部113は、開始タグの終了記号「>」と終了タグの開始記号「<」との間のテキストを要素値として検出すれば良い。
このようにして、インデックス生成部113は、3ブロック目に対して、開始タグのタグ名、属性名、属性値、要素値および終了タグのタグ名を順次検出し、下位インデックスを生成すれば良い。
図6は、実施例1に係る別の下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、XBRLデータ内の6ブロック目の下位インデックスの生成処理について説明する。この6ブロック目では、unit要素の下位インデックスが生成される。
図6に示すように、6ブロック目について、インデックス生成部113は、開始タグを検出した場合には、開始タグのタグ名「<unit>」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部113は、開始タグのタグ名「<unit>」に対応するインデックス(ビットマップ)の、出現位置「1」に対するビットに「1」を書き込む。なお、インデックス生成部113によるタグ名の検出方法は、図5Bで説明した方法と同じであれば良い。
インデックス生成部113は、属性名として「id=」を検出した場合には、属性名「id=」を属性層に登録する。そして、インデックス生成部113は、属性名「id=」に対応するインデックス(ビットマップ)の、出現位置「2」に対するビットに「1」を書き込む。なお、インデックス生成部113による属性名の検出方法は、図5Bで説明した方法と同じであれば良い。
インデックス生成部113は、属性値として「JPY」を検出した場合には、属性値「JPY」をデータ値層に登録する。そして、インデックス生成部113は、属性値「JPY」に対応するインデックス(ビットマップ)の、出現位置「3」に対するビットに「1」を書き込む。なお、インデックス生成部113による属性値の検出方法は、図5Bで説明した方法と同じであれば良い。
インデックス生成部113は、開始タグを検出した場合には、タグのタグ名「<measure>」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部113は、開始タグのタグ名「<measure>」に対応するインデックス(ビットマップ)の、出現位置「4」に対するビットに「1」を書き込む。
インデックス生成部113は、要素値として「iso4217:JPY」を検出した場合には、要素値「iso4217:JPY」をデータ値層に登録する。そして、インデックス生成部113は、要素値「iso4217:JPY」に対応するインデックス(ビットマップ)の、出現位置「5」に対するビットに「1」を書き込む。なお、インデックス生成部113による要素値の検出方法は、図5Bで説明した方法と同じであれば良い。
このようにして、インデックス生成部113は、6ブロック目に対して、開始タグのタグ名、属性名、属性値、要素値および終了タグのタグ名を順次検出し、下位インデックスを生成すれば良い。
図7は、実施例1に係る別の下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、XBRLデータ内の9ブロック目の下位インデックスの生成処理について説明する。この9ブロック目では、勘定科目の要素の下位インデックスが生成される。
図7に示すように、9ブロック目について、インデックス生成部113は、開始タグを検出した場合には、開始タグのタグ名「<Sales>」をタグ層に登録する。タグ名は、要素名を意味する。そして、インデックス生成部113は、タグ名「<Sales>」に対応するインデックス(ビットマップ)の、出現位置「1」に対するビットに「1」を書き込む。
インデックス生成部113は、属性名として「contextRef=」を検出した場合には、属性名「contextRef=」を属性層に登録する。そして、インデックス生成部113は、属性名「contextRef=」に対応するインデックス(ビットマップ)の、出現位置「2」に対するビットに「1」を書き込む。
インデックス生成部113は、属性値として「CurrentQ1」を検出した場合には、属性値「CurrentQ1」をデータ値層に登録する。そして、インデックス生成部113は、属性値「CurrentQ1」に対応するインデックス(ビットマップ)の、出現位置「3」に対するビットに「1」を書き込む。
インデックス生成部113は、要素値として「10000」を検出した場合には、要素値「10000」をデータ値層に登録する。そして、インデックス生成部113は、要素値「10000」に対応するインデックス(ビットマップ)の、出現位置「8」に対するビットに「1」を書き込む。
このようにして、インデックス生成部113は、9ブロック目に対して、開始タグのタグ名、属性名、属性値、要素値および終了タグのタグ名を順次検出し、下位インデックスを生成すれば良い。
[オフセットの割り振り方]
図8は、下位インデックスのオフセットの割り振り方を説明する図である。図8上図は、下位インデックスのオフセットを、開始タグの先頭位置、要素値の先頭位置および終了タグの先頭位置で割り振った場合である。開始タグの先頭位置は、「<Sales・・・>」の「S」の位置である。要素値の先頭位置は、「10000」の「1」の位置である。終了タグの先頭位置は、「</Sales>」の「S」の位置である。そして、開始タグの先頭位置、要素値の先頭位置および終了タグの先頭位置には、オフセットとしてそれぞれ「1」、「2」、「3」が割り振られている。
図8上図に示すように、下位インデックスから、開始タグ中に属性名が有るか否かは特定できるが、属性名に対応する属性値は特定できない。ここでは、属性名として「contextRef=」、「unitRef=」および「decimals=」がオフセット「1」に有ることは特定できる。ところが、属性名「contextRef=」に対応する属性値が「CurrentQ1」、「JPY」、「0」および「10000」のいずれかであるのかが特定できない。同様に、属性名「unitRef=」に対応する属性値が「CurrentQ1」、「JPY」、「0」および「10000」のいずれかであるのかが特定できない。属性名「decimals=」に対応する属性値が「CurrentQ1」、「JPY」、「0」および「10000」のいずれかであるのかが特定できない。
これに対して、図8下図は、下位インデックスのオフセットを、開始タグの先頭位置、属性名の先頭位置、属性値の先頭位置、要素値の先頭位置および終了タグの先頭位置で割り振った場合である。開始タグの先頭位置は、「<Sales」の「S」の位置である。属性値の先頭位置は、「contextRef=」の「c」の位置、「unitRef=」の「u」の位置、「decimals=」の「d」の位置である。属性値の先頭位置は、「CurrentQ1」の「C」の位置、「JPY」の「J」の位置、「0」の「0」の位置、要素値の先頭位置は、「10000」の「1」の位置である。終了タグの先頭位置は、「</Sales>」の「S」の位置である。そして、開始タグの先頭位置、属性名の先頭位置、属性値の先頭位置、要素値の先頭位置および終了タグの先頭位置には、それぞれオフセットが割り振られている。
図8下図に示すように、下位インデックスから、開始タグ中に属性名が有るか否かを特定できるだけでなく、属性名に対応する属性値も特定できる。すなわち、属性名が位置するオフセットの右側のオフセットに位置するデータ値が、当該属性名に対応する属性値であることがわかる。ここでは、属性名「contextRef=」に対応する属性値は、「CurrentQ1」である。属性名「unitRef=」に対応する属性値は、「JPY」であることがわかる。属性名「decimals=」に対応する属性値は、「0」であることがわかる。また、終了タグが位置するオフセットの左側のオフセットに位置するデータ値が、当該要素名に対応する要素値であることがわかる。ここでは、要素名「Sales」に対応する要素値は、「10000」である。
このように、図8下図で示したように、下位インデックスのオフセットは、開始タグ、属性名、属性値、要素値および終了タグで割り振られると良い。
[インデックス生成処理のフローチャート]
図9は、実施例1に係るインデックス生成処理のフローチャートの一例を示す図である。なお、圧縮されたXBRLデータをZipファイルとして説明する。
Zipファイルを受け付けた伸長部111は、当該Zipファイルを伸長する(ステップS11)。字句解析部112は、伸長データを字句解析する(ステップS12)。
続いて、インデックス生成部113は、伸長データのブロックを選択する(ステップS13)。インデックス生成部113は、選択したブロックの開始タグを検出する(ステップS14)。そして、インデックス生成部113は、検出した開始タグのタグ名を上位インデックスのインデックス情報122Uのタグ層に登録する(ステップS15)。インデックス生成部113は、上位インデックスのインデックス情報122Uにおいて、検出した開始タグに対する、選択したブロックのブロックNoのビットをONに設定する(ステップS16)。
そして、インデックス生成部113は、伸長データ内のブロックの開始アドレスをブロックテーブル121に設定する(ステップS17)。
そして、インデックス生成部113は、伸長データの終点であるか否かを判定する(ステップS18)。伸長データの終点でないと判定した場合には(ステップS18;No)、インデックス生成部113は、次のブロックを選択すべく、ステップS13に移行する。
一方、伸長データの終点であると判定した場合には(ステップS18;Yes)、インデックス生成部113は、伸長データのブロックを選択する(ステップS19)。
そして、インデックス生成部113は、開始タグのタグ名を、選択したブロックに対する下位インデックスのインデックス情報122Lのタグ層に登録する(ステップS20)。インデックス生成部113は、選択したブロックに対する下位インデックスのインデックス情報122Lにおいて、開始タグのタグ名に対するブロック内のオフセットのビットをONに設定する(ステップS21)。
そして、インデックス生成部113は、選択したブロックについて、属性名を検出したか否かを判定する(ステップS22)。属性名を検出したと判定した場合には(ステップS22;Yes)、インデックス生成部113は、検出した属性名を、選択したブロックに対する下位インデックスのインデックス情報122Lの属性層に登録する(ステップS23)。そして、インデックス生成部113は、選択したブロックに対する下位インデックスのインデックス情報122Lにおいて、検出した属性名に対するブロック内のオフセットのビットをONに設定する(ステップS24)。
そして、インデックス生成部113は、属性値を、選択したブロックに対する下位インデックスのインデックス情報122Lのデータ値層に登録する(ステップS25)。そして、インデックス生成部113は、選択したブロックに対する下位インデックスのインデックス情報122Lにおいて、属性値に対するブロック内のオフセットのビットをONに設定する(ステップS26)。そして、インデックス生成部113は、ステップS27に移行する。
一方、属性名を検出していないと判定した場合には(ステップS22;No)、インデックス生成部113は、開始タグの終了記号を検出したか否かを判定する(ステップS27)。開始タグの終了記号を検出していないと判定した場合には(ステップS27;No)、インデックス生成部113は、次の属性名を検出すべく、ステップS22に移行する。
一方、開始タグの終了記号を検出したと判定した場合には(ステップS27;Yes)、インデックス生成部113は、開始タグの開始記号を検出したか否かを判定する(ステップS28)。開始タグの開始記号を検出したと判定した場合には(ステップS28;Yes)、インデックス生成部113は、ステップS20に移行する。
一方、開始タグの開始記号を検出していないと判定した場合には(ステップS28;No)、インデックス生成部113は、要素値を、選択したブロックに対する下位インデックスのインデックス情報122Lのデータ値層に登録する(ステップS29)。そして、インデックス生成部113は、選択したブロックに対する下位インデックスのインデックス情報122Lにおいて、要素値に対するブロック内のオフセットのビットをONに設定する(ステップS30)。
そして、インデックス生成部113は、終了タグのタグ名を、選択したブロックに対する下位インデックスのインデックス情報122Lのタグ層に登録する(ステップS31)。インデックス生成部113は、選択したブロックに対する下位インデックスのインデックス情報122Lにおいて、終了タグのタグ名に対するブロック内のオフセットのビットをONに設定する(ステップS32)。そして、インデックス生成部113は、終了タグの終了記号を検出する(ステップS33)。
そして、インデックス生成部113は、開始タグの開始記号を検出したか否かを判定する(ステップS34)。開始タグの開始記号を検出したと判定した場合には(ステップS34;Yes)、インデックス生成部113は、ステップS20に移行する。
一方、開始タグの開始記号を検出していないと判定した場合には(ステップS34;No)、インデックス生成部113は、終了タグの開始記号を検出したか否かを判定する(ステップS35)。終了タグの開始記号を検出したと判定した場合には(ステップS35;Yes)、インデックス生成部113は、ステップS31に移行する。
一方、終了タグの開始記号を検出していないと判定した場合には(ステップS35;No)、インデックス生成部113は、ブロックの終点を検出する(ステップS36)。そして、インデックス生成部113は、伸長データの終点であるか否かを判定する(ステップS37)。伸長データの終点でないと判定した場合には(ステップS37;No)、インデックス生成部113は、次のブロックを選択すべく、ステップS19に移行する。
一方、伸長データの終点であると判定した場合には(ステップS37;Yes)、インデックス生成部113は、インデックス生成処理を終了する。
[実施例1に係る検索装置の構成]
図10は、実施例1に係る検索装置の構成を示す機能ブロック図である。検索装置200は、項目および値の組み合わせにより記述されたXBRLデータに対する特定の項目および値を含む検索条件を受け付け、インデックス情報122を参照し、受け付けた検索条件を検索する。
図10に示すように、検索装置200は、制御部210および記憶部220を有する。
記憶部220は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部220は、XBRLデータ(圧縮形式)221、ブロックテーブル121およびインデックス情報122を有する。なお、ブロックテーブル121およびインデックス情報122は、インデックス生成装置100によって生成される情報であり、例えば、ネットワークを介して取得され、記憶部220に記憶される。
XBRLデータ(圧縮形式)221は、圧縮形式のXBRLデータである。例えば、XBRLデータ(圧縮形式)221は、Zip形式により圧縮されたXBRLデータである。
制御部210は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部210は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路の電子回路に対応する。または、制御部210は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。制御部210は、検索クエリ解析部211、伸長部212、オフセット検索部213、ブロック読出部214および検索対象抽出部215を有する。なお、検索クエリ解析部211は、受付部の一例である。オフセット検索部213、ブロック読出部214および検索対象抽出部215は、検索部の一例である。
検索クエリ解析部211は、検索クエリを入力し、入力した検索クエリを解析する。例えば、検索クエリ解析部211は、検索クエリを解析し、検索条件および検索対象を抽出する。検索条件には、要素名、タグ名、属性名並びに属性値または要素値を示すキーワードが挙げられる。検索対象には、値を検索したい属性名または要素名を示すキーワードが挙げられる。
伸長部212は、XBRLデータ(圧縮形式)221を入力し、入力したXBRLデータ(圧縮形式)221を伸長する。ここでいうXBRLデータ(圧縮形式)221は、例えば企業によって提出されたXBRLデータをZip形式により圧縮されたものである。
オフセット検索部213は、インデックス情報122を参照し、検索条件に合致する検索対象を検索する。例えば、オフセット検索部213は、上位インデックスのインデックス情報122Uを参照し、検索条件の要素名に対応するインデックス(ビットマップ)を抽出する。オフセット検索部213は、抽出したビットマップに「1」が設定されたブロックNoを取得する。オフセット検索部213は、検出したブロックNoに対応する下位インデックスのインデックス情報122Lを抽出する。オフセット検索部213は、抽出した下位インデックスのインデックス情報122Lを参照し、検索条件に合致する検索対象のオフセットを絞り込む。
ブロック読出部214は、伸長されたXBRLデータから、取得されたブロックNoに対応するブロックを読み出す。例えば、ブロック読出部214は、ブロックテーブル121から、取得されたブロックNoに対応するXBRLデータ内のアドレス121bを取得する。ブロック読出部214は、伸長部212によって伸長されたXBRLデータから、取得したアドレスに対応付けられるブロックを読み出す。
検索対象抽出部215は、対象のブロックから検索対象を抽出する。例えば、検索対象抽出部215は、ブロック読出部214によって読み出されたブロックから、オフセット検索部213によって絞り込まれたオフセットの検索対象を抽出する。
[オフセット検索処理の流れ]
ここで、実施例1に係るオフセット検索処理の流れの一例を、図11および図12を参照して説明する。図11および図12は、実施例1に係るオフセット検索処理の流れの一例を示す図である。
図11では、検索クエリが、日付が“2016年”であるcontext要素のid属性値を検索する場合である。検索クエリ解析部211は、検索クエリを解析し、検索条件および検索対象を抽出する。ここでは、検索条件として、context要素である「<context>」、日付を示すinstant要素である「<instant>」、日付を示すインスタント要素の要素値である「2016」が抽出される。検索対象として、値を検索したいid属性名である「id=」が抽出される。
そして、オフセット検索部213は、上位インデックスのインデックス情報122Uを参照し、検索条件の要素名に対応するインデックス(ビットマップ)を抽出し、抽出したビットマップに「1」が設定されたブロックNoを取得する。ここでは、検索条件の要素名は、「<context>」である。すると、オフセット検索部213は、上位インデックスのインデックス情報122Uを参照し、「<context>」に対応するビットマップを抽出する。そして、オフセット検索部213は、抽出したビットマップに「1」が設定されたブロックNoとして「3」を取得する(a1)。
そして、オフセット検索部213は、検出したブロックNo「3」に対応する下位インデックスのインデックス情報122Lを抽出する(a2)。
そして、オフセット検索部213は、抽出した下位インデックスのインデックス情報122Lを参照し、検索条件に合致する検索対象のオフセットを絞り込む。
ここでは、オフセット検索部213は、日付を示すinstant要素である「<instant>」の終了位置のオフセットを取得する。すなわち、オフセット検索部213は、instant要素の終了タグ「</instant>」に対応するビットマップを抽出し、抽出したビットマップに「1」が設定されたオフセット「14」を取得する(a3)。
そして、オフセット検索部213は、instant要素の値を検索すべく、instant要素の終了タグのオフセットの1つ前のオフセット「13」に「1」が設定されたデータ値を取得する(a4、a5)。取得されたデータ値は、「2016−06−30」である。そして、オフセット検索部213は、取得されたデータ値「2016−06−30」が検索条件に含まれる日付を示すinstant要素の要素値「2016」であることを確認する。
続いて、オフセット検索部213は、検索対象として抽出されたid属性名である「id=」の開始位置のオフセットを取得する。すなわち、オフセット検索部213は、「id=」に対応するビットマップを抽出し、抽出したビットマップに「1」が設定されたオフセット「2」を取得する(a6)。
そして、オフセット検索部213は、id属性の値のオフセットを検索すべく、id属性のオフセットの1つ後のオフセット「3」を検索する(a7、a8)。これにより、オフセット検索部213は、日付が“2016年”であるcontext要素のid属性値のオフセットとして「3」を検索することができる。
図12では、検索クエリが、コンテキストが“CurrentQ1”であるSales要素の値を検索する場合である。検索クエリ解析部211は、検索クエリを解析し、検索条件および検索対象を抽出する。ここでは、検索条件として、Sales要素である「<Sales>」、コンテキストの属性である「contextRef=」、コンテキストの属性値である「CurrentQ1」が抽出される。検索対象として、値を検索したいSales要素名である「<Sales>」が抽出される。
そして、オフセット検索部213は、上位インデックスのインデックス情報122Uを参照し、検索条件の要素名に対応するインデックス(ビットマップ)を抽出し、抽出したビットマップに「1」が設定されたブロックNoを取得する。ここでは、検索条件の要素名は、「<Sales>」である。すると、オフセット検索部213は、上位インデックスのインデックス情報122Uを参照し、「<Sales>」に対応するビットマップを抽出し、抽出したビットマップに「1」が設定されたブロックNoとして「9」を取得する(b1)。
そして、オフセット検索部213は、検出したブロックNo「9」に対応する下位インデックスのインデックス情報122Lを抽出する(b2)。
そして、オフセット検索部213は、抽出した下位インデックスのインデックス情報122Lを参照し、検索条件に合致する検索対象のオフセットを絞り込む。
ここでは、オフセット検索部213は、コンテキストの属性である「contextRef=」のオフセットを取得する。すなわち、オフセット検索部213は、「contextRef」に対応するビットマップを抽出し、抽出したビットマップに「1」が設定されたオフセット「2」を取得する(b3)。
そして、オフセット検索部213は、contextRef属性の値を検索すべく、contextRef属性のオフセットの1つ後のオフセット「3」に「1」が設定されたデータ値を取得する(b4、b5)。取得されたデータ値は、「CurrentQ1」である。そして、オフセット検索部213は、取得されたデータ値「CurrentQ1」が検索条件に含まれるコンテキストの属性値「CurrentQ1」であることを確認する。
続いて、オフセット検索部213は、検索対象として抽出されたSales要素である「<Sales>」の終了位置のオフセットを取得する。すなわち、オフセット検索部213は、Sales要素の終了タグ「</Sales>」に対応するビットマップを抽出し、抽出したビットマップに「1」が設定されたオフセット「9」を取得する(b6)。
そして、オフセット検索部213は、Sales要素の値を検索すべく、Sales要素の終了タグのオフセットの1つ前のオフセット「8」を検索する(b7、b8)。これにより、オフセット検索部213は、コンテキストが“CurrentQ1”であるSales要素の値のオフセットとして「8」を検索することができる。
[検索対象抽出処理の流れ]
ここで、実施例1に係る検索対象抽出処理の流れの一例を、図13を参照して説明する。図13は、実施例1に係る検索対象抽出処理の流れの一例を示す図である。なお、オフセット検索部213が、ブロックNoとして「9」を取得し、オフセットとして「8」を検索した場合とする。
ブロック読出部214は、ブロックテーブル121から、取得されたブロックNoに対応するXBRLデータ内のアドレス121bを取得する(c1)。ここでは、取得されたブロックNo「9」に対応するXBRLデータ内のアドレス121bとして「A700h」が取得される。
そして、ブロック読出部214は、伸長部212によって伸長されたXBRLデータから、取得したアドレス「A700h」に対応付けられるブロックを読み出す(c2)。
続いて、検索対象抽出部215は、ブロック読出部214によって読み出されたブロックから、検索されたオフセットの位置の検索対象を抽出する(c3)。ここでは、検索対象抽出部215は、読み出されたブロックから、オフセットとして検索された「8」の位置にある検索対象として「10000」を抽出する。そして、検索対象抽出部215は、抽出した「10000」を検索結果として出力する。
[検索処理のフローチャート]
図14は、実施例1に係る検索処理のフローチャートの一例を示す図である。なお、圧縮されたXBRLデータをZipファイルとして説明する。
検索クエリ解析部211は、検索クエリを受け付けたか否かを判定する(ステップS41)。検索クエリを受け付けていないと判定した場合には(ステップS41;No)、検索クエリ解析部211は、検索クエリを受け付けるまで、判定処理を繰り返す。
一方、検索クエリを受け付けたと判定した場合には(ステップS41;Yes)、検索クエリ解析部211は、検索クエリを解析し、検索条件および検索対象を抽出する(ステップS42)。
そして、伸長部212は、Zipファイルを伸長する(ステップS43)。
続いて、オフセット検索部213は、上位インデックスのインデックス情報122Uを参照し、検索条件の要素名に対応するブロックNoを取得する(ステップS44)。そして、オフセット検索部213は、取得したブロックNoの下位インデックスのインデックス情報122Lを参照し、検索条件に合致する検索対象のオフセットを絞り込む(ステップS45)。
続いて、ブロック読出部214は、伸長データから、取得ブロックNoに対応するブロックを読み出す(ステップS46)。そして、検索対象抽出部215は、読み出したブロックから、絞り込んだオフセットの位置にある値を抽出する(ステップS47)。そして、検索対象抽出部215は、抽出した値を検索結果として出力し、検索処理を終了する。
[実施例1に係る検索フローの一例]
図15は、実施例1に係る検索フローの一例を示す図である。なお、図15では、図26で示した参考例の検索フローと比較するために、TDnetを利用する場合を説明する。しかしながら、検索フローは、TDnetを利用する場合に限定されるものではない。
図15に示すように、企業は、TDnetを利用して、財務情報のXBRLデータをZipにより圧縮したZipファイルを提出する(S101)。
審査官側では、審査官が、Zipファイルを解凍(伸長)し、伸長したXBRLデータをチェックする(S102)。審査官が、承認したXBRLデータのZipファイルをTDnetのDBに格納し(S103)、当該XBRLデータを開示する。ここでいう審査官とは、例えば、金融機関であったり、証券取引所であったりする。
そして、インデックス生成装置100が、XBRLデータを字句解析し、ブロックテーブル121とインデックス情報122とを生成し、TDnetの内部メモリに格納する(S104)。なお、かかる処理は、例えば、字句解析部112およびインデックス生成部113に対応する。
クライアント(投資家)側では、投資家が、TDnetを利用して、企業を検索し(S105)、調査対象の企業を決定する(S106)。投資家は、TDnetを利用して、決定した企業のXBRLデータに対するZipファイルとブロックテーブル121とインデックス情報122とをローカルフォルダに保存する(S107)。
続いて、投資家は、Zipファイルとブロックテーブル121とインデックス情報122とを検索装置200の専用クライアントアプリに入力する(S108)。
さらに、投資家は、検索装置200の専用クライアントアプリに、検索対象である要素の検索ワードまたは検索対象である値の検索ワードを入力する(S109)。すなわち、投資家は、検索装置200に検索クエリを入力する。すると、専用クライアントアプリは、検索クエリを解析し、検索条件および検索対象を抽出する。なお、かかる処理は、例えば、検索クエリ解析部211に対応する。
そして、専用クライアントアプリは、インデックス情報122により検索条件に合致する検索対象のオフセットの位置を絞り込み、ブロックテーブル121を使って絞り込んだオフセットの位置をXBRLデータ上のオフセットの位置に変換する(S110)。そして、投資家は、保存したZipファイルを解凍(伸長)する(S111)。そして、専用クライアントアプリは、伸長したXBRLデータ上の、変換されたオフセットの位置の値を抽出して表示する(S112)。なお、かかる処理は、例えば、オフセット検索部213、伸長部212および検索対象抽出部215に対応する。
[実施例1の効果]
このようにして、上記実施例1では、インデックス生成装置100が、項目および値の組み合わせにより記述されたXBRLデータを入力する。インデックス生成装置100は、XBRLデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報122を生成する。かかる構成によれば、インデックス生成装置100は、インデックス情報122を用いることで、XBRLデータについて、項目と値とを組み合わせた検索条件で効率的に検索対象を検索することが可能となる。すなわち、インデックス生成装置100は、インデックス情報122を用いることで、XBRLデータを走査しないで検索対象を絞り込むことができ、効率的に検索対象を検索できる。
また、上記実施例1では、検索装置200が、項目および値の組み合わせにより記述されたXBRLデータに対する特定の項目および値を含む検索条件を受け付ける。検索装置200は、XBRLデータに含まれる項目および値それぞれについての項目および値それぞれの出現位置に関するインデックス情報122を参照し、検索条件を検索する。かかる構成によれば、検索装置200は、インデックス情報122を用いることで、XBRLデータの解析を改めて行うことなく、項目および値を指定した検索を行うことができる。
ところで、実施例1に係るインデックス生成装置100は、XBRLデータに含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報122を生成すると説明した。しかしながら、インデックス生成装置100は、これに限定されず、XBRLデータを符号化する際に、XBRLデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報122を生成しても良い。
そこで、実施例2に係るインデックス生成装置100が、XBRLデータを符号化する際に、XBRLデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報122Aを生成する場合を説明する。
[実施例2に係るインデックス生成装置の構成]
図16は、実施例2に係るインデックス生成装置の機能構成を示すブロック図である。なお、図1に示すインデックス生成装置100と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例1と実施例2とが異なるところは、インデックス生成部113をインデックス生成部113Aに変更した点にある。また、実施例1と実施例2とが異なるところは、符号化部311を追加した点にある。また、実施例1と実施例2とが異なるところは、ブロックテーブル121およびインデックス情報122をそれぞれブロックテーブル121Aおよびインデックス情報122Aに変更した点にある。また、実施例1と実施例2とが異なるところは、静的辞書321および動的辞書322を追加した点にある。
静的辞書321とは、一般的な英語辞典、国語辞典や教科書などを基にして、様々な文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。静的辞書321には、それぞれの単語に対応する符号である静的コードがあらかじめ登録されている。これに対して、動的辞書322とは、静的辞書321に登録されていない単語と、動的に付された動的コード(符号)とを対応付けた辞書である。静的辞書321に登録されていない単語には、一例として、出現頻度の低い単語(低頻度単語)、タグ、数値、日付などがある。動的辞書322には、静的辞書321に登録されていない単語の出現順に、動的コードに対応付けられた単語がバッファ部に登録される。
ここで、動的辞書322の一例を、図17を参照して説明する。図17は、実施例2に係る動的辞書の一例を示す図である。図17に示される動的辞書322は、バッファ部D1とアドレステーブルD2とを含む。バッファ部D1は、文字列を記憶する。アドレステーブルD2は、動的コードと、格納位置と、データ長とを対応付けて保持する。動的コードは、あらかじめ定められた固定長の符号であり、例えば圧縮符号である。そして、動的コードは、単語の文字列が登録された順に割り当てられる。ここでは、動的コードは、16進数「A」で始まる固定長2バイトのコードである。格納位置は、バッファ部D1に格納された文字列の位置を示す。データ長は、バッファ部D1に格納された文字列の長さ(バイト長)を示す。
一例として、属性値の文字列「CurrentQ1」に動的コードが割り当てられる場合について説明する。インデックス生成装置100は、文字列「CurrentQ1」をバッファ部D1に格納する。インデックス生成装置100は、文字列を格納した格納位置および格納したデータ長をアドレステーブルD2に登録する。ここでは、インデックス生成装置100は、格納位置として「21」、データ長として「10」をアドレステーブルD2に登録する。そして、インデックス生成装置100は、属性値の文字列「CurrentQ1」に動的コードとして「A003h」を割り当てる。
ブロックテーブル121Aは、XBRLデータに含まれる各データに対する各符号について、XBRLデータを符号化した符号化データ内のアドレスとブロックの番号とを対応付けて記憶する。
ここで、ブロックテーブル121Aの一例を、図18を参照して説明する。図18は、実施例2に係るブロックテーブルの一例を示す図である。図18に示すように、ブロックテーブル121Aは、ブロックNo121aと符号化データ内のアドレス121cとを対応付けて記憶する。ブロックNo121aは、ブロックの番号を示す。符号化データ内のアドレス121cは、XBRLデータを符号化した符号化データに含まれるブロックの先頭アドレスを示す。一例として、ブロックNo121aが「1」である場合に、符号化データ内のアドレス121cとして「0」を記憶している。ブロックNo121aが「2」である場合に、符号化データ内のアドレス121cとして「201」を記憶している。
図16に戻って、符号化部311は、静的辞書321および動的辞書322に基づいて、XBRLデータを字句解析した結果得られるタグ名、属性名およびデータ値を順次符号化対象として符号化する。
例えば、符号化部311は、XBRLデータを字句解析した結果の各符号化対象を順次選択する。符号化部311は、選択された符号化対象が静的辞書321に登録されているか否かを判定する。符号化部311は、選択された符号化対象が静的辞書321に登録されている場合には、当該符号化対象を静的辞書321に登録されている静的コード(符号コード)に符号化する。
また、符号化部311は、選択された符号化対象が静的辞書321に登録されていない場合には、当該符号化対象を動的辞書322に基づいて符号化する。一例として、符号化部311は、符号化対象が動的辞書322のバッファ部D1に格納されているか否かを判定する。符号化部311は、符号化対象が動的辞書322のバッファ部D1に格納されていない場合には、当該符号化対象をバッファ部D1に格納するとともに、当該符号化対象を格納した格納位置およびデータ長をアドレステーブルD2に格納する。符号化部311は、符号化対象を、当該符号化対象に対応付けられた、アドレステーブルD2の動的コード(符号コード)に符号化する。また、符号化部311は、符号化対象が動的辞書322のバッファ部D1に格納されている場合には、当該符号化対象を、当該符号化対象に対応する動的コード(符号コード)に符号化する。
また、符号化部311は、符号コードを符号化データの記憶領域に書き込む。
インデックス生成部113Aは、XBRLデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報122Aを生成する。例えば、インデックス生成部113Aは、XBRLデータの各ブロックの先頭の開始タグのタグ名に対して、当該タグ名に対する符号コードのブロック内の出現位置にビットを立てる。すなわち、インデックス生成部113Aは、上位インデックスのインデックス情報122AUを生成する。そして、インデックス生成部113Aは、XBRLデータのブロックごとに、ブロックに含まれる開始タグと終了タグのタグ名に対して、当該タグ名に対する符号コードのブロック内の出現位置にビットを立てる。インデックス生成部113Aは、XBRLデータのブロックごとに、ブロックに含まれる属性名に対して、当該属性名に対する符号コードのブロック内の出現位置にビットを立てる。インデックス生成部113Aは、XBRLデータのブロックごとに、ブロックに含まれる要素値と属性値に対して、当該値に対する符号コードのブロック内の出現位置にビットを立てる。すなわち、インデックス生成部113Aは、下位インデックスのインデックス情報122ALを生成する。そして、インデックス生成部113Aは、それぞれのブロックに対して、ブロックNoと符号化データ内のアドレスとを対応付けてブロックテーブル121Aに格納する。なお、下位インデックスのインデックス情報122ALのタグ層のタグ名に対する符号コード、属性層の属性名に対する符号コードおよびデータ値層のデータ値に対する符号コードは、予め登録されるようにしても良い。あるいは、インデックス生成部113Aが、符号化される、タグ名、属性名およびデータ値のそれぞれのインデックスを生成する際に、インデックス情報122AL内のタグ層、属性層およびデータ値層のそれぞれの領域に登録するようにしても良い。以降では、インデックス生成部113Aが、インデックス情報122Aを生成する際に、タグ層のタグ名等を登録する場合を説明する。
[インデックス生成処理の流れ]
ここで、実施例2に係るインデックス生成処理の流れの一例を、図19Aおよび図19Bを参照して説明する。
図19Aは、実施例2に係る上位インデックスのインデックス生成処理の流れの一例を示す図である。図19Aに示すように、インデックス生成部113Aは、XBRLデータのブロックを選択する。ここでは、インデックス生成部113Aは、XBRLデータの3ブロック目を選択したとする。
すると、インデックス生成部113Aは、選択したブロックの開始タグのタグ名を符号化部311に符号化させる。例えば、符号化部311は、タグ名が静的辞書321に登録されている(符号あり)場合には、タグ名を登録されている静的コードに符号化する。符号化部311は、タグ名が静的辞書321に登録されていない(符号なし)場合には、当該タグ名を動的辞書322に基づいて符号化する。例えば、符号化部311は、タグ名が動的辞書322のバッファ部D1に格納されていない場合には、当該タグ名をバッファ部D1に格納するとともに、当該タグ名を格納した格納位置およびデータ長をアドレステーブルD2に格納する。符号化部311は、格納したタグ名を、当該タグ名に対応付けられた、アドレステーブルD2の動的コードに符号化する。符号化部311は、タグ名が動的辞書322のバッファ部D1に格納されている場合には、当該タグ名を、当該タグ名に対応する動的コードに符号化する。
ここでは、開始タグのタグ名「<context>」が静的辞書321に登録されているとする。すると、符号化部311は、タグ名「<context>」を静的辞書321に登録されている静的コード「xxx1h」に符号化する。
そして、インデックス生成部113Aは、符号化された符号コード「xxx1h」を符号化データのエリアに格納する。
そして、インデックス生成部113Aは、ブロックの開始タグのタグ名に対して、当該タグ名に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部113Aは、3ブロック目の開始タグのタグ名「<context>」に対する符号コード「xxx1h」をタグ層に登録する。そして、インデックス生成部113Aは、開始タグのタグ名に対して、当該タグ名に対する符号コードのブロックの出現位置のビットを「1」(ON)に設定する。
そして、インデックス生成部113Aは、選択したブロックに対して、ブロックNoと符号化データ内のアドレスとを対応付けてブロックテーブル121Aに格納する。ここでは、インデックス生成部113Aは、ブロックNo「3」と符号化データ内のアドレス「355」とを対応付けてブロックテーブル121Aに格納する。
図19Bは、実施例2に係る下位インデックスのインデックス生成処理の流れの一例を示す図である。ここでは、XBRLデータ内の3ブロック目の下位インデックスの生成処理について説明する。この3ブロック目では、context要素の下位インデックスが生成される。
図19Bに示すように、インデックス生成部113Aは、タグを検出した場合には、タグのタグ名を符号化部311に符号化させる。ここでは、インデックス生成部113Aは、タグを検出した場合には、タグのタグ名「<context>」を符号化部311に符号化させる。タグ名「<context>」は、動的コード「xxx1h」に符号化される。
そして、インデックス生成部113Aは、符号化された符号コードを符号化データのエリアに格納する。なお、タグがブロックの開始タグである場合には、インデックス生成部113Aは、開始タグに対する符号コードを符号化データのエリアに格納する処理を行わない。開始タグに対する符号コードは、既に上位インデックスの生成処理で符号化データのエリアに格納されているからである。
そして、インデックス生成部113Aは、タグのタグ名に対して、当該タグ名に対する符号コードのブロック出現位置にビットを立てる。
インデックス生成部113Aは、属性名を検出した場合には、属性名を符号化部311に符号化させる。ここでは、インデックス生成部113Aは、属性名として「id=」を検出した場合には、属性名「id=」を符号化部311に符号化させる。属性名「id=」は、静的辞書321に登録されているので、静的コード「xx20h」に符号化される。
そして、インデックス生成部113Aは、符号化された符号コードを符号化データのエリアに格納する。
そして、インデックス生成部113Aは、属性名に対して、当該属性名に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部113Aは、属性名「id=」に対する符号コード「xx20h」を属性層に登録する。そして、インデックス生成部113Aは、属性名「id=」に対して、当該属性名に対する符号コード「xx20h」のブロックの出現位置のビットを「1」(ON)に設定する。
また、インデックス生成部113Aは、属性値を検出した場合には、属性値を符号化部311に符号化させる。属性値「CurrentQ1」が、静的辞書321に登録されていないとする。そして、属性値「CurrentQ1」が、動的辞書322のバッファ部D1に格納されていないので、当該属性値を動的辞書322に登録し、アドレステーブルD2に基づいて、登録した属性値に対応する動的コードに符号化する。なお、符号化部311は、属性値「CurrentQ1」が動的辞書322に登録されている場合には、アドレステーブルD2に基づいて、当該属性値を対応する動的コードに符号化する。ここでは、属性値「CurrentQ1」は、動的コード「A000h」に符号化される。
そして、インデックス生成部113Aは、符号化された符号コードを符号化データのエリアに格納する。
そして、インデックス生成部113Aは、属性値に対して、当該属性値に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部113Aは、属性値「CurrentQ1」に対する符号コード「A000h」をデータ値層に登録する。そして、インデックス生成部113Aは、属性値「CurrentQ1」に対して、当該属性値に対する符号コード「A000h」のブロックの出現位置のビットを「1」(ON)に設定する。
また、インデックス生成部113Aは、要素値を検出した場合には、要素値を符号化部311に符号化させる。要素値「67020」が、静的辞書321に登録されていないとする。そして、要素値「67020」が、動的辞書322のバッファ部D1に格納されていないので、当該要素値を動的辞書322に登録し、アドレステーブルD2に基づいて、登録した要素値に対応する動的コードに符号化する。なお、符号化部311は、要素値「67020」が動的辞書322に登録されている場合には、アドレステーブルD2に基づいて、当該要素値を対応する動的コードに符号化する。ここでは、要素値「67020」は、動的コード「A002h」に符号化される。
そして、インデックス生成部113Aは、符号化された符号コードを符号化データのエリアに格納する。
そして、インデックス生成部113Aは、要素値に対して、当該要素値に対する符号コードのブロック出現位置にビットを立てる。ここでは、インデックス生成部113Aは、要素値「67020」に対する符号コード「A002h」をデータ値層に登録する。そして、インデックス生成部113Aは、属性値「67020」に対して、当該要素値に対する符号コード「A002h」のブロックの出現位置のビットを「1」(ON)に設定する。
[インデックス生成処理のフローチャート]
図20Aは、実施例2に係るインデックス生成処理のフローチャートの一例を示す図である。なお、圧縮されたXBRLデータをZipファイルとして説明する。
Zipファイルを受け付けた伸長部111は、当該Zipファイルを伸長する(ステップS51)。字句解析部112は、伸長データを字句解析する(ステップS52)。
続いて、インデックス生成部113Aは、伸長データのブロックを選択する(ステップS53)。インデックス生成部113Aは、選択したブロックの開始タグを検出する(ステップS54)。そして、インデックス生成部113Aは、検出した開始タグのタグ名を符号化する(ステップS55)。なお、符号化処理のフローチャートは、後述する。
そして、インデックス生成部113Aは、符号化された符号コードを上位インデックスのインデックス情報122AUのタグ層に登録する(ステップS56)。インデックス生成部113Aは、上位インデックスのインデックス情報122AUにおいて、検出した開始タグのタグ名の符号コードに対する、選択したブロックのブロックNoのビットをONに設定する(ステップS57)。
そして、インデックス生成部113Aは、符号化データ内のブロックの開始アドレスをブロックテーブル121Aに設定する(ステップS58)。
そして、インデックス生成部113Aは、選択したブロックについて、属性名を検出したか否かを判定する(ステップS59)。属性名を検出したと判定した場合には(ステップS59;Yes)、インデックス生成部113Aは、検出した属性名を符号化する(ステップS60)。なお、符号化処理のフローチャートは、後述する。
そして、インデックス生成部113Aは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報122ALの属性層に登録する(ステップS61)。そして、インデックス生成部113Aは、選択したブロックに対する下位インデックスのインデックス情報122ALにおいて、検出した属性名の符号コードに対するブロック内のオフセットのビットをONに設定する(ステップS62)。
そして、インデックス生成部113Aは、属性値を符号化する(ステップS63)。なお、符号化処理のフローチャートは、後述する。そして、インデックス生成部113Aは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報122ALのデータ値層に登録する(ステップS64)。そして、インデックス生成部113Aは、選択したブロックに対する下位インデックスのインデックス情報122ALにおいて、属性値の符号コードに対するブロック内のオフセットのビットをONに設定する(ステップS65)。そして、インデックス生成部113Aは、ステップS66に移行する。
一方、属性名を検出していないと判定した場合には(ステップS59;No)、インデックス生成部113Aは、開始タグの終了記号を検出したか否かを判定する(ステップS66)。開始タグの終了記号を検出していないと判定した場合には(ステップS66;No)、インデックス生成部113Aは、次の属性名を検出すべく、ステップS59に移行する。
一方、開始タグの終了記号を検出したと判定した場合には(ステップS66;Yes)、インデックス生成部113Aは、開始タグの開始記号を検出したか否かを判定する(ステップS67)。開始タグの開始記号を検出したと判定した場合には(ステップS67;Yes)、インデックス生成部113Aは、ステップS55に移行する。
一方、開始タグの開始記号を検出していないと判定した場合には(ステップS67;No)、インデックス生成部113Aは、要素値を符号化する(ステップS68)。なお、符号化処理のフローチャートは、後述する。そして、インデックス生成部113Aは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報122ALのデータ値層に登録する(ステップS69)。そして、インデックス生成部113Aは、選択したブロックに対する下位インデックスのインデックス情報122ALにおいて、要素値の符号コードに対するブロック内のオフセットのビットをONに設定する(ステップS70)。
そして、インデックス生成部113Aは、終了タグのタグ名を符号化する(ステップS71)。なお、符号化処理のフローチャートは、後述する。そして、インデックス生成部113Aは、符号化された符号コードを、選択したブロックに対する下位インデックスのインデックス情報122ALのタグ層に登録する(ステップS72)。インデックス生成部113Aは、選択したブロックに対する下位インデックスのインデックス情報122ALにおいて、終了タグのタグ名の符号コードに対するブロック内のオフセットのビットをONに設定する(ステップS73)。そして、インデックス生成部113Aは、終了タグの終了記号を検出する(ステップS74)。
そして、インデックス生成部113Aは、開始タグの開始記号を検出したか否かを判定する(ステップS75)。開始タグの開始記号を検出したと判定した場合には(ステップS75;Yes)、インデックス生成部113Aは、ステップS55に移行する。
一方、開始タグの開始記号を検出していないと判定した場合には(ステップS75;No)、インデックス生成部113Aは、終了タグの開始記号を検出したか否かを判定する(ステップS76)。終了タグの開始記号を検出したと判定した場合には(ステップS76;Yes)、インデックス生成部113Aは、ステップS71に移行する。
一方、終了タグの開始記号を検出していないと判定した場合には(ステップS76;No)、インデックス生成部113Aは、ブロックの終点を検出する(ステップS77)。そして、インデックス生成部113Aは、伸長データの終点であるか否かを判定する(ステップS78)。伸長データの終点でないと判定した場合には(ステップS78;No)、インデックス生成部113Aは、次のブロックを選択すべく、ステップS53に移行する。
一方、伸長データの終点であると判定した場合には(ステップS78;Yes)、インデックス生成部113Aは、インデックス生成処理を終了する。
図20Bは、実施例2に係る符号化処理のフローチャートの一例を示す図である。
図20Bに示すように、符号化部311は、符号化対象を受け取ると(ステップS81)、静的辞書321に符号化対象が登録済みである否かを判定する(ステップS82)。静的辞書321に符号化対象が登録済みであると判定した場合には(ステップS82;Yes)、符号化部311は、静的辞書321に登録されている符号コードを符号化データに書き込む(ステップS83)。そして、符号化部311は、ステップS88に移行する。
一方、静的辞書321に符号化対象が登録済みでないと判定した場合には(ステップS82;No)、符号化部311は、動的辞書322を参照する(ステップS84)。そして、符号化部311は、動的辞書322に符号化対象が登録済みであるか否かを判定する(ステップS85)。
動的辞書322に符号化対象が登録済みであると判定した場合には(ステップS85;Yes)、符号化部311は、ステップS87に移行する。
一方、動的辞書322に符号化対象が登録済みでないと判定した場合には(ステップS85;No)、符号化部311は、符号化対象を動的辞書322に登録する(ステップS86)。そして、符号化部311は、ステップS87に移行する。
ステップS87において、符号化部311は、動的辞書322に登録されている符号コードを符号化データに書き込む(ステップS87)。そして、符号化部311は、ステップS88に移行する。
ステップS88において、符号化部311は、符号コードをインデックス生成処理に戻す(ステップS88)。そして、符号化部311は、符号化処理を終了する。
[実施例2に係る検索装置の構成]
図21は、実施例2に係る検索装置の機能構成を示すブロック図である。なお、図10に示す検索装置200と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例1と実施例2とが異なるところは、伸長部212を削除した点にある。また、実施例1と実施例2とが異なるところは、オフセット検索部213、ブロック読出部214および検索対象抽出部215を、それぞれオフセット検索部213A、ブロック読出部214Aおよび検索対象伸長部215Aに変更した点にある。また、実施例1と実施例2とが異なる点は、ブロックテーブル121およびインデックス情報122をそれぞれブロックテーブル121Aおよびインデックス情報122Aに変更した点にある。そして、実施例1と実施例2とが異なる点は、静的辞書321および動的辞書322を追加した点にある。なお、ブロックテーブル121A、インデックス情報122Aは、動的辞書322は、実施例2に係るインデックス生成装置100によって生成される情報であり、例えば、ネットワークを介して取得され、記憶部220に記憶される。
オフセット検索部213Aは、インデックス情報122Aを参照し、検索条件に合致する検索対象を検索する。例えば、オフセット検索部213Aは、上位インデックスのインデックス情報122AUを参照し、検索条件の要素名の符号コードに対応するインデックス(ビットマップ)を抽出する。オフセット検索部213Aは、抽出したビットマップに「1」が設定されたブロックNoを取得する。オフセット検索部213Aは、検出したブロックNoに対応する下位インデックスのインデックス情報122ALを抽出する。オフセット検索部213Aは、抽出した下位インデックスのインデックス情報122ALを参照し、検索条件に合致する検索対象のオフセットを絞り込む。
ブロック読出部214Aは、符号化データから、取得されたブロックNoに対応するブロックを読み出す。例えば、ブロック読出部214Aは、ブロックテーブル121Aを参照し、取得されたブロックNoに対応する符号化データ内のアドレス121cを取得する。ブロック読出部214Aは、符号化データから、取得したアドレスに対応付けられるブロックを読み出す。
検索対象伸長部215Aは、対象のブロックから検索対象を抽出し、抽出した検索対象を伸長する。例えば、検索対象伸長部215Aは、ブロック読出部214Aによって読み出されたブロックから、オフセット検索部213Aによって絞り込まれたオフセットの検索対象を抽出する。そして、検索対象伸長部215Aは、静的辞書321および動的辞書322に基づいて、抽出した検索対象を伸長する。
伸長処理の一例として、検索対象伸長部215Aは、抽出した検索対象が動的コードであるか否かを判定する。検索対象伸長部215Aは、抽出した検索対象が動的コードであると判定した場合には、動的辞書322を用いて当該検索対象を伸長する。すなわち、検索対象伸長部215Aは、動的辞書322のアドレステーブルD2から検索対象と合致する動的コードを特定し、特定した動的コードに対応する格納位置およびデータ長を取得する。そして、検索対象伸長部215Aは、バッファ部D1から、取得した格納位置およびデータ長を示す文字列を特定する。特定した文字列が、検索対象を伸長した検索結果である。
[検索対象伸長処理の流れ]
ここで、実施例2に係る検索対象伸長処理の流れの一例を、図22を参照して説明する。図22は、実施例2に係る検索対象伸長処理の流れの一例を示す図である。なお、オフセット検索部213Aが、ブロックNoとして「9」を取得し、オフセットとして「8」を検索した場合とする。
ブロック読出部214Aは、ブロックテーブル121Aから、取得されたブロックNoに対応する符号化データ内のアドレス121cを取得する(d1)。ここでは、取得されたブロックNo「9」に対応する符号化データ内のアドレス121cとして「1200」が取得される。
そして、ブロック読出部214Aは、符号化データから、取得したアドレス「1200」に対応付けられるブロックを読み出す(d2)。
続いて、検索対象伸長部215Aは、ブロック読出部214Aによって読み出されたブロックから、検索されたオフセットの検索対象を抽出する(d3)。ここでは、検索対象伸長部215Aは、読み出されたブロックから、オフセットとして検索された「8」の位置にある検索対象として符号コード「A083h」を抽出するとする。「A083h」は、動的辞書222において「10000」に割り当てられているとする。すると、検索対象伸長部215Aは、静的辞書321および動的辞書322に基づいて、抽出した符号コード「A083h」を伸長する。ここでは、符号コード「A083h」は、動的辞書322に登録されているので、検索対象伸長部215Aは、動的辞書322に基づいて「A083h」を「10000」に伸長する。そして、検索対象伸長部215Aは、伸長した「10000」を検索結果として出力する(d4)。
[検索処理のフローチャート]
図23は、実施例2に係る検索処理のフローチャートの一例を示す図である。
検索クエリ解析部211は、検索クエリを受け付けたか否かを判定する(ステップS91)。検索クエリを受け付けていないと判定した場合には(ステップS91;No)、検索クエリ解析部211は、検索クエリを受け付けるまで、判定処理を繰り返す。
一方、検索クエリを受け付けたと判定した場合には(ステップS91;Yes)、検索クエリ解析部211は、検索クエリを解析し、検索条件および検索対象を抽出する(ステップS92)。
続いて、オフセット検索部213Aは、上位インデックスのインデックス情報122AUを参照し、検索条件の要素名に対応するブロックNoを取得する(ステップS93)。そして、オフセット検索部213Aは、取得したブロックNoの下位インデックスのインデックス情報122ALを参照し、検索条件に合致する検索対象のオフセットを絞り込む(ステップS94)。
続いて、ブロック読出部214Aは、符号化データから、取得ブロックNoに対応するブロックを読み出す(ステップS95)。例えば、ブロック読出部214Aは、ブロックテーブル121Aを参照し、取得されたブロックNoに対応する符号化データ内のアドレス121cを取得し、取得した符号化データ内のアドレス121cに対応するブロックを、符号化データから読み出す。そして、検索対象伸長部215Aは、読み出したブロックから、絞り込んだオフセットの位置にある符号コードを抽出する(ステップS96)。
そして、検索対象伸長部215Aは、静的辞書321および動的辞書322に基づいて、抽出した符号コードを伸長する(ステップS97)。そして、検索対象伸長部215Aは、伸長した値を検索結果として出力し、検索処理を終了する。
[実施例2に係る検索フローの一例]
図24は、実施例2に係る検索フローの一例を示す図である。なお、図24では、図26で示した参考例の検索フローと比較するために、TDnetを利用する場合を説明する。しかしながら、検索フローは、TDnetを利用する場合に限定されるものではない。
図24に示すように、企業は、TDnetを利用して、財務情報のXBRLデータをZipにより圧縮したZipファイルを提出する(S201)。
審査官側では、審査官が、Zipファイルを解凍(伸長)し、伸長したXBRLデータをチェックする(S202)。審査官が、承認したXBRLデータのZipファイルをTDnetのDBに格納し(S203)、当該XBRLデータを開示する。ここでいう審査官とは、例えば、金融機関であったり、証券取引所であったりする。
そして、インデックス生成装置100が、XBRLデータを字句解析し、符号化データとブロックテーブル121Aとインデックス情報122Aとを生成し、TDnetに格納する(S204)。なお、かかる処理は、例えば、字句解析部112、符号化部311およびインデックス生成部113Aに対応する。
クライアント(投資家)側では、投資家が、TDnetを利用して、企業を検索し(S205)、調査対象の企業を決定する(S206)。
続いて、投資家は、符号化データとブロックテーブル121Aとインデックス情報122Aとを検索装置200の専用クライアントアプリに入力する(S207)。
さらに、投資家は、検索装置200の専用クライアントアプリに、検索対象である要素の検索ワードまたは検索対象である値の検索ワードを入力する(S208)。すなわち、投資家は、検索装置200に検索クエリを入力する。すると、専用クライアントアプリは、検索クエリを解析し、検索条件および検索対象を抽出する。なお、かかる処理は、例えば、検索クエリ解析部211に対応する。
そして、専用クライアントアプリは、インデックス情報122Aにより検索条件に合致する検索対象のオフセットの位置を絞り込む(S209)。そして、専用クライアントアプリは、符号化データ上の、絞り込んだ位置の値を抽出し、抽出した値を伸長する(S210)。そして、専用クライアントアプリは、伸長した結果をクライアント側に通知する(S211)。なお、かかる処理は、例えば、オフセット検索部213A、ブロック読出部214Aおよび検索対象伸長部215Aに対応する。
[実施例2の効果]
このようにして、上記実施例2によれば、インデックス生成装置100は、XBRLデータを符号化する際に、XBRLデータに含まれる項目および値それぞれについて、符号化された項目および符号化された値それぞれの出現位置に関するインデックス情報122Aを生成する。かかる構成によれば、インデックス生成装置100は、インデックス情報122Aを用いることで、XBRLデータについて、XBRLデータを符号化したままで、項目と値とを組み合わせた検索条件で効率的に検索対象を検索することが可能となる。すなわち、インデックス生成装置100は、インデックス情報122Aを用いることで、符号化形式のまま検索対象を絞り込むことができるとともに、XBRLデータを走査しないで検索対象を絞り込むことができる。
また、上記実施例2では、検索装置200が、XBRLデータを符号化する際に生成されたインデックス情報122Aを参照し、検索条件に含まれる特定の項目および特定の値に対する出現位置を特定する。そして、検索装置200は、符号化データから、特定された出現位置に存在する部分データを検索し、検索した部分データを部分伸長する。かかる構成によれば、検証装置200は、符号化形式のままで検索対象を示す部分データを検索することができる。
[その他]
なお、実施例1、2では、インデックス情報122は、上位インデックスのインデックス情報122Uと下位インデックスのインデックス情報122Lとを含むと説明した。そして、上位インデックスのインデックス情報122UのX軸は、ブロックの番号を表し、Y軸はタグ層のタグ名(要素名)を表す。下位インデックスのインデックス情報122LのX軸は、ブロック単位のオフセット(出現位置)を表し、Y軸はタグ層に含まれるタグ名と属性層に含まれる属性名とデータ値層に含まれるデータ値とを表す。しかしながら、インデックス情報122は、これに限定されず、3次元で表わしても良い。すなわち、インデックス情報122は、X軸をブロックの番号、Y軸をタグ層に含まれるタグ名と属性層に含まれる属性名とデータ値層に含まれるデータ値、Z軸をブロック単位のオフセット(出現位置)で表わしても良い。
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、インデックス生成部113は、上位インデックスのインデックス情報122Uの生成処理と下位インデックスのインデックス情報122Lの生成処理とを分離しても良い。また、オフセット検索部213は、上位インデックスのインデックス情報122Uから該当する該当するブロックNoを取得する処理と、下位インデックスのインデックス情報122Lから該当するオフセットを絞り込む処理とを分散しても良い。また、記憶部120をインデックス生成装置100の外部装置としてネットワーク経由で接続するようにしても良い。記憶部220を検索装置200の外部装置としてネットワーク経由で接続するようにしても良い。
図25は、インデックス生成装置および検索装置のハードウェア構成の一例を示す図である。図25に示すように、インデックス生成装置100および検索装置200を含むコンピュータ500は、各種演算処理を実行するCPU501と、ユーザからのデータ入力を受け付ける入力装置502と、モニタ503とを有する。また、コンピュータ500は、記憶媒体からプログラムなどを読み取る媒体読取装置504と、他の装置と接続するためのインターフェース装置505と、他の装置と無線により接続するための無線通信装置506とを有する。また、コンピュータ500は、各種情報を一時記憶するRAM(Random Access Memory)507と、ハードディスク装置508とを有する。また、各装置501〜508は、バス509に接続される。
ハードディスク装置508には、図1に示した制御部110と同様の機能を有するインデックス生成プログラム205bが記憶される。また、ハードディスク装置508には、インデックス生成プログラム205bを実現するための各種データが記憶される。各種データには、図1に示した記憶部120内のデータが含まれる。また、ハードディスク装置508には、図10に示した制御部210と同様の機能を有する検索プログラム205aが記憶される。また、ハードディスク装置508には、検索プログラム205aを実現するための各種データが記憶される。各種データには、図10に示した記憶部220内のデータが含まれる。
CPU501は、ハードディスク装置508に記憶された各プログラムを読み出して、RAM507に展開して実行することで、各種の処理を行う。これらのプログラムは、コンピュータ500を図1および図10に示した各機能部として機能させることができる。
なお、上記のインデックス生成プログラム205bおよび検索プログラム205aは、必ずしもハードディスク装置508に記憶されている必要はない。例えば、コンピュータ500が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ500が読み出して実行するようにしてもよい。コンピュータ500が読み取り可能な記憶媒体は、例えば、CD−ROMやDVDディスク、USB(Universal Serial Bus)メモリなどの可搬型記録媒体、フラッシュメモリなどの半導体メモリ、ハードディスクドライブなどが対応する。また、公衆回線、インターネット、LAN(Local Area Network)などに接続された装置にこれらプログラムを記憶させておき、コンピュータ500がこれらプログラムを読み出して実行するようにしても良い。