以下に、本願の開示する検証プログラム、検証装置、検証方法、インデックス生成プログラム、インデックス生成装置およびインデックス生成方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[実施例1に係るインデックス生成装置の構成]
図1は、実施例1に係るインデックス生成装置の構成を示す機能ブロック図である。インデックス生成装置100は、入力データ300を入力し、入力データ300に含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報を生成する。この生成されたインデックス情報を用いて、後述する検証装置200は、入力される後述する検証ルール310から得られる抽出条件に合致するXBRLデータを抽出する。
ここでいう「XBRLデータ」とは、XBRLで記述されたデータである。XBRLとは、各種財務報告用の情報を作成、流通、利用できるように標準化されたXMLベースの言語である。XBRLデータの一例として、財務データが挙げられる。XBRLデータはデータ値と、データ値を補足する付加情報とからなる。付加情報のことをアスペクトという場合がある。付加情報は、データ値を含む要素と関連付けられる、別の独立した要素で指定される情報であり、プロパティの項目名とプロパティの項目値とを1組とした複数のプロパティの情報から構成される。なお、実施例では、XBRLデータを単にデータという場合があったり、データ値という場合があったりする。また、実施例では、XBRLデータのデータ値に関連付けられる付加情報を含む要素である「コンテキスト(Context)」を主に説明する。
図2は、XBRLデータの一例を示す図である。図2に示すように、1つのXBRLデータは、データ値と、データ値を補足する付加情報からなる。付加情報は、名前がcontextとunitである要素に複数定義されるが、ここでは、それぞれを区別するための識別子として、「context_1」、「JPY」が付与されている。データ値を補足する付加情報として、「context_1」に対応する付加情報と、「JPY」に対応する付加情報が定義されている。そして、例えば、「context_1」に対応する付加情報には、プロパティの項目名として「dim:A1」、プロパティの項目値として「A:x1」を1組とするプロパティの情報が定義されている。プロパティの項目名として「dim:B1」、プロパティの項目値として「B:x1」を1組とするプロパティの情報が定義されている。プロパティの項目名として「dim:C1」、プロパティの項目値として「C:x2」を1組とするプロパティの情報が定義されている。
図1に示すように、インデックス生成装置100は、制御部110および記憶部120を有する。
記憶部120は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部120は、プロパティ定義情報121、インデックス情報122およびコンテキスト位置情報123を有する。
プロパティ定義情報121は、プロパティの項目名およびプロパティの項目値を定義する。なお、プロパティの項目名を「プロパティ名」という場合がある。プロパティの項目値を「プロパティ値」という場合がある。
ここで、プロパティ定義情報121の一例を、図3を参照して説明する。図3は、プロパティ定義情報の一例を示す図である。図3に示すように、プロパティ定義情報121には、プロパティ種の定義およびプロパティ値の定義が含まれる。プロパティ種とは、プロパティの項目に対応する。プロパティ値とは、プロパティの項目値に対応する。各プロパティ種は、値として該当するプロパティ値と対応付けられる。プロパティ定義情報121には、入力データ300に出現する可能性のあるプロパティ種およびプロパティ値が定義される。例えば、XBRLの付加情報には、「Dimension」と呼ばれるカテゴリに属するプロパティ種があり、ユーザが予め任意に定義できる。プロパティ種が「Dimension」である場合のプロパティ項目およびプロパティ値が定義されている。一例として、プロパティ項目が「dim:A1」である場合に、値として該当するプロパティ値が「m:m1」、「m:m2」・・・「m:m8」であることが示されている。
図1に戻って、インデックス情報122は、入力データ300に含まれるプロパティの項目名およびプロパティの項目値それぞれについて、プロパティの項目名およびプロパティの項目値それぞれの出現位置を表す情報である。すなわち、インデックス情報122とは、入力データ300に含まれるプロパティの項目名およびプロパティの項目値について、それぞれ、オフセット(出現位置)ごとの存否をインデックス化したビットマップのことをいう。
ここで、インデックス情報122の一例を、図4を参照して説明する。図4は、実施例1に係るインデックス情報の一例を示す図である。図4に示すように、インデックス情報122のX軸はコンテキストごとの出現位置を表し、Y軸はプロパティ名とプロパティ値とを表す。また、インデックス情報122は、プロパティ名のインデックス情報の領域と、プロパティ値のインデックス情報の領域を持つ。プロパティ名のインデックス情報は、それぞれのプロパティの項目名について、コンテキスト(Context)内の出現位置に関するインデックスの束の情報である。また、プロパティ値のインデックス情報は、それぞれのプロパティの項目値について、コンテキスト(Context)内の出現位置に関するインデックスの束の情報である。各プロパティ名および各プロパティ値について、コンテキスト内に出現する出現位置には、ONすなわち2進数の「1」が設定される。一例として、プロパティ名が「P1」である場合に、Context1内の1番目の出現位置に「1」が設定されている。プロパティ値が「Val1」である場合に、Context1内の2番目の出現位置に「1」が設定されている。
図1に戻って、コンテキスト位置情報123は、コンテキスト(Context)に関連付けられるXBRLデータの情報である。
ここで、コンテキスト位置情報123の一例を、図5を参照して説明する。図5は、実施例1に係るコンテキスト位置情報の一例を示す図である。図5に示すように、コンテキスト位置情報123は、コンテキスト(Context)ごとに、各コンテキストが関連付けられるXBRLデータを対応付ける情報である。ここでいう各XBRLデータは、図2で示した各データ値に対応する。一例として、コンテキストが「Context1」である場合に、このコンテキストが関連付けられるXBRLデータとして「データ3、データ10、データ18」が設定されている。すなわち、「Context1」は、「データ3」に関連付けられる。「Context1」は、「データ10」に関連付けられる。「Context1」は、「データ18」に関連付けられる。
図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は、入力データ300を入力し、入力した入力データ300に含まれるXBRLデータファイルから当該XBRLデータファイルに含まれるコンテキストを順次選択する。
コンテキスト解析部112は、コンテキスト選択部111によって選択されたコンテキストを解析する。例えば、コンテキスト解析部112は、コンテキスト選択部111によって選択されたコンテキストを字句解析する。コンテキスト解析部112は、字句解析した結果、プロパティの項目名およびプロパティの項目値の組を出現順に一時領域に保持する。
インデックス情報生成部113は、入力データ300に含まれるプロパティの項目名およびプロパティの項目値それぞれについて、プロパティの項目名およびプロパティの項目値それぞれの出現位置に関するインデックス情報122を生成する。例えば、インデックス情報生成部113は、コンテキスト解析部112によって解析されたコンテキストについて、一時領域に保持された組ごとに、以下の生成処理を行う。すなわち、インデックス情報生成部113は、各組に含まれるプロパティの項目名に対して、当該プロパティの項目名の出現位置にビットを立てる。インデックス情報生成部113は、各組に含まれるプロパティの項目値に対して、当該プロパティの項目値の出現位置にビットを立てる。インデックス情報生成部113は、選択されたコンテキストと、対象のXBRLデータとを対応付けてコンテキスト位置情報123に設定する。インデックス情報生成部113は、コンテキスト解析部112によって解析された全てのコンテキストについて、インデックス情報生成処理を行うことで、インデックス情報122を生成する。なお、インデックス情報122のコンテキスト名、プロパティ名およびプロパティ値は、予め設定されるようにしても良い。あるいは、インデックス情報生成部113が、前処理として、プロパティ定義情報121を参照して、インデックス情報122のプロパティ名およびプロパティ値を設定しても良い。
これにより、インデックス情報生成部113は、プロパティの項目名およびプロパティ値それぞれの出現位置に関するインデックスを生成することで、プロパティの項目名およびプロパティ値の組み合わせのインデックスを生成する場合と比べて、インデックス情報122のサイズ爆発を抑制できる。また、インデックス情報生成部113は、プロパティの項目名およびプロパティ値それぞれの出現位置に関するインデックスを生成することで、仮に入力データ300に新たなプロパティ値が有ったとしても、インデックス情報122のプロパティ値の領域に1行追加するだけで、インデックス情報122を更新することができる。インデックス情報生成部113は、プロパティの項目名およびプロパティ値それぞれの出現位置に関するインデックスを生成することで、仮に入力データ300に新たなプロパティの項目名が有ったとしても、インデックス情報122のプロパティの項目名の領域に1行追加するだけで、インデックス情報122を更新することができる。
[インデックス生成処理の一例]
ここで、インデックス生成処理の一例を、図6を参照して説明する。図6は、実施例1に係るインデックス生成処理の一例を示す図である。
図6に示すように、入力データ300には、複数のXBRLデータファイルが含まれる。各XBRLデータファイルには、複数のコンテキスト(Context)が含まれる。コンテキスト選択部111は、入力データ300に含まれるXBRLデータファイルから当該XBRLデータファイルに含まれるコンテキストを順次選択する。ここでは、コンテキスト選択部111は、コンテキストとして「Context1」を選択したとする。
すると、コンテキスト解析部112は、コンテキストとして選択された「Context1」を字句解析する。一例として、コンテキスト解析部112は、特定の要素(xbrldi:explicitMember)の行に含まれるプロパティの項目名およびプロパティの項目値の組を検知する。ここでは、符号r1で示される行には、プロパティの項目名として「dim:B1」、プロパティの項目値として「m:m2」の組が検知される。また、符号r2で示される行には、プロパティの項目名として「dim:A1」、プロパティの項目値として「m:m1」の組が検知される。符号r3で示される行には、プロパティの項目名として「dim:C1」、プロパティの項目値として「m:m3」の組が検知される。
そして、コンテキスト解析部112は、プロパティの項目名およびプロパティの項目値の組を出現順に一時領域に保持する。ここでは、コンテキスト解析部112は、符号r1で示される行で検知した組の出現順に応じて、1番目の一時領域に「dim:B1」、2番目の一時領域に「m:m2」を保持する。コンテキスト解析部112は、符号r2で示される行で検知した組の出現順に応じて、3番目の一時領域に「dim:A1」、4番目の一時領域に「m:m1」を保持する。コンテキスト解析部112は、符号r3で示される行で検知した組の出現順に応じて、5番目の一時領域に「dim:C1」、6番目の一時領域に「m:m3」を保持する。
そして、インデックス情報生成部113は、「Context1」について、一時領域に保持された組に含まれるプロパティの項目名に対して、当該プロパティの項目名の出現位置にビットを立てる。インデックス情報生成部113は、「Context1」について、一時領域に保持された組に含まれるプロパティの項目値に対して、当該プロパティの項目値の出現位置にビットを立てる。ここでは、インデックス情報生成部113は、プロパティの項目名「dim:B1」に対して、1番目の出現位置にビット「1」を設定する(e1)。インデックス情報生成部113は、プロパティの項目値「m:m2」に対して、2番目の出現位置にビット「1」を設定する(e2)。インデックス情報生成部113は、プロパティの項目名「dim:A1」に対して、3番目の出現位置にビット「1」を設定する(e3)。インデックス情報生成部113は、プロパティの項目値「m:m1」に対して、4番目の出現位置にビット「1」を設定する(e4)。インデックス情報生成部113は、プロパティの項目名「dim:C1」に対して、5番目の出現位置にビット「1」を設定する(e5)。インデックス情報生成部113は、プロパティの項目値「m:m3」に対して、6番目の出現位置にビット「1」を設定する(e6)。
[インデックス情報の具体例]
ここで、Context1以外のContext10とContext100のインデックス生成処理が行われた後のインデックス情報122の具体例を、図7に表す。図7は、実施例1に係るインデックス情報の具体例を示す図である。
図7に示すように、Context1、Context10およびContext100が定義されている。Context1についてのインデックス生成処理が行われた後のインデックス情報122は、符号E1の範囲内に示される。各プロパティの項目名、各プロパティの項目値に対するビットの設定位置は、図6で説明したとおりであるので、その説明を省略する。
Context10についてのインデックス生成処理が行われた後のインデックス情報122は、符号E2の範囲内に示される。すなわち、プロパティの項目名「dim:C1」に対して、Context10の1番目の出現位置にビット「1」が設定される(e7)。プロパティの項目名「m:m1」に対して、Context10の2番目の出現位置にビット「1」が設定される(e8)。プロパティの項目名「dim:A1」に対して、Context10の3番目の出現位置にビット「1」が設定される(e9)。プロパティの項目名「m:m1」に対して、Context10の4番目の出現位置にビット「1」が設定される(e10)。
Context100についてのインデックス生成処理が行われた後のインデックス情報122は、符号E3の範囲内に示される。すなわち、プロパティの項目名「dim:A1」に対して、Context100の1番目の出現位置にビット「1」が設定される(e11)。プロパティの項目名「m:m3」に対して、Context100の2番目の出現位置にビット「1」が設定される(e12)。プロパティの項目名「dim:B1」に対して、Context100の3番目の出現位置にビット「1」が設定される(e13)。プロパティの項目名「m:m3」に対して、Context100の4番目の出現位置にビット「1」が設定される(e14)。プロパティの項目名「dim:C1」に対して、Context100の5番目の出現位置にビット「1」が設定される(e15)。プロパティの項目名「m:m1」に対して、Context100の6番目の出現位置にビット「1」が設定される(e16)。
このようにして、インデックス生成装置100は、入力データ300の中の未処理のコンテキストがなくなるまで、コンテキスト選択部111、コンテキスト解析部112およびインデックス情報生成部113によるインデックス生成処理を繰り返させる。この結果、入力データ300におけるインデックス情報122が完成する。
[インデックス生成処理のフローチャート]
図8は、実施例1に係るインデックス生成処理のフローチャートを示す図である。なお、図8では、XBRLデータを「データ」というものとする。
図8に示すように、コンテキスト選択部111は、入力データ300を受け取ったか否かを判定する(ステップS10)。入力データ300を受け取っていないと判定した場合には(ステップS10;No)、コンテキスト選択部111は、入力データ300を受け取るまで、判定処理を繰り返す。
一方、入力データ300を受け取ったと判定した場合には(ステップS10;Yes)、コンテキスト選択部111は、入力データ300から対象のファイルを読み出す(ステップS11)。そして、コンテキスト選択部111は、読み出した対象のファイルからコンテキストを選択する(ステップS12)。
続いて、コンテキスト解析部112は、選択したコンテキストを字句解析する(ステップS13)。そして、コンテキスト解析部112は、プロパティの項目名およびプロパティの項目値を出現順に一時領域に保持する(ステップS14)。
続いて、インデックス情報生成部113は、保持した各プロパティの項目名に対応するインデックスの、選択したコンテキスト内の出現位置に対するビットに「1」を書き込む(ステップS15)。インデックス情報生成部113は、保持した各プロパティの項目値に対応するインデックスの、選択したコンテキスト内の出現位置に対するビットに「1」を書き込む(ステップS16)。インデックス情報生成部113は、選択したコンテキストと対象のデータとを対応付けて、コンテキスト位置情報123に設定する(ステップS17)。
そして、インデックス情報生成部113は、未処理のコンテキストは有るか否かを判定する(ステップS18)。未処理のコンテキストが有ると判定した場合には(ステップS18;Yes)、コンテキスト選択部111は、次のコンテキストを選択する(ステップS19)。そして、コンテキスト選択部111は、コンテキスト解析部112に遷移すべく、ステップS13に移行する。
一方、未処理のコンテキストが無いと判定した場合には(ステップS18;No)、インデックス情報生成部113は、入力データ300に未処理の対象のファイルは有るか否かを判定する(ステップS20)。未処理の対象のファイルが有ると判定した場合には(ステップS20;Yes)、インデックス情報生成部113は、コンテキスト選択部111に遷移すべく、ステップS11に移行する。
一方、未処理の対象のファイルが無いと判定した場合には(ステップS20;No)、インデックス情報生成部113は、インデックス生成処理を終了する。
[実施例1に係る検証装置の構成]
図9は、実施例1に係る検証装置の構成を示す機能ブロック図である。検証装置200は、入力される検証ルール310を、項目および値により規定される変換抽出条件に変換し、入力データ300より生成されたインデックス情報122を参照し、変換抽出条件に対応する項目および値の検証を行う。すなわち、検証装置200は、インデックス情報122を用いて、入力される検証ルール310から得られる変換抽出条件に合致するXBRLデータを抽出する。
ここでいう「変換抽出条件」とは、項目および値により規定される抽出条件が1つである場合には、抽出条件と一致するが、項目および値により規定される抽出条件が複数である場合には、複数の抽出条件を論理演算子で結合した条件のことをいう。
ここでいう検証ルール310とは、XBRLデータの内容の検証や計算を行うためのルールである。検証ルール310は、XBRLフォーミュラを用いて記述される。XBRLフォーミュラとは、XBRLデータの内容の検証や計算を行うためのルールを定義する記述言語であり、検証ルール310を定義する。
図10は、検証ルールの構造の一例を示す図である。図10に示すように、検証ルール310には、一例として、「変数」と、「変数個別の抽出条件」と、「変数共通の抽出条件」と、「検証式」とが定義される。「変数共通の抽出条件」は、検証ルール310内の全ての「変数個別の抽出条件」で定義される「変数」の共通の抽出条件である。ここでは、「変数」は、a1、a2、a3に対応する。「変数個別の抽出条件」は、b1、b2、b3に対応する。「変数共通の抽出条件」は、c0に対応する。「検証式」は、d0に対応する。
「変数共通の抽出条件」c0により、入力データ300の全体から検証ルール310で検証されるXBRLデータが絞り込まれる。さらに、「変数」a1では、「変数個別の抽出条件」b1によりXBRLデータが絞り込まれ、「変数」a1に絞り込まれたXBRLデータが割り当てられる。「変数」a2では、同様に「変数個別の抽出条件」b2によりXBRLデータが絞り込まれ、「変数」a2に絞り込まれたXBRLデータが割り当てられる。「変数」a3では、同様に「変数個別の抽出条件」b3によりXBRLデータが絞り込まれ、「変数」a3に絞り込まれたXBRLデータが割り当てられる。そして、割り当てられたXBRLデータの組み合わせ毎に、「検証式」d0が検証される。図10の例では、「変数共通の抽出条件」c0における1つ目の条件指定であるプロパティの項目名は、Dimensionで定義されるプロパティである「dim:CS」であり、その項目値は、「m:x26」である。2つ目の条件指定であるプロパティの項目名は、Dimensionで定義されるプロパティである「dim:VS」であり、その項目値は、「m:x80」である。3つ目の条件指定であるプロパティの項目名は、Dimensionで定義されるプロパティである「dim:D0」であり、その項目値は、「m:x0」である。
図9に示すように、検証装置200は、制御部210および記憶部220を有する。
記憶部220は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部220は、インデックス情報122およびコンテキスト位置情報123を有する。
インデックス情報122は、入力データ300に含まれるプロパティの項目名およびプロパティ値それぞれについて、プロパティの項目名およびプロパティ値それぞれの出現位置を表す情報である。すなわち、インデックス情報122とは、入力データ300に含まれるプロパティの項目名およびプロパティ値について、それぞれ、オフセット(出現位置)ごとの存否をインデックス化したビットマップのことをいう。なお、インデックス情報122は、インデックス生成装置100によって生成される情報であり、例えば、ネットワークを介して取得され、記憶部220に記憶される。
コンテキスト位置情報123は、コンテキスト(Context)に関連付けられるXBRLデータの情報である。なお、コンテキスト位置情報123は、インデックス生成装置100によって生成される情報であり、例えば、ネットワークを介して取得され、記憶部220に記憶される。
制御部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を有する。なお、抽出条件変換部211は、変換部の一例である。データ抽出部212は、検証部の一例である。
抽出条件変換部211は、検証ルール310を入力し、入力した検証ルール310をプロパティの項目名およびプロパティの項目値により規定される変換抽出条件に変換する。例えば、抽出条件変換部211は、検証ルール310の「変数共通の抽出条件」を解釈し、プロパティの項目およびプロパティの項目値を抽出する。抽出条件変換部211は、抽出した結果、1組のプロパティの項目およびプロパティの項目値を1個の抽出条件として、1個または複数個の抽出条件から変換抽出条件を生成する。
データ抽出部212は、インデックス情報122を参照し、抽出条件変換部211によって検証ルール310から変換された変換抽出条件に対応するXBRLデータを抽出する。
例えば、データ抽出部212は、変換抽出条件から1個の抽出条件を選択する。データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。また、データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するビットマップをインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。そして、データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。
抽出条件が1個である場合には、データ抽出部212は、AND結果のビットマップについて、各コンテキストに対応するビット区間に「1」が設定されたビット区間を検出する。データ抽出部212は、検出したビット区間に対応するコンテキストを検出する。そして、データ抽出部212は、コンテキスト位置情報123を参照し、検出したコンテキストに関連付けられるXBRLデータを絞り込む。
抽出条件が複数個である場合には、データ抽出部212は、それぞれの抽出条件に対して、AND結果を算出する。データ抽出部212は、複数の抽出条件に対するそれぞれのAND結果をOR演算する。データ抽出部212は、OR結果を参照し、変換抽出条件に含まれる複数の抽出条件を結合するために用いられる論理演算子に応じて該当するコンテキストを検出する。一例として、複数の抽出条件を結合する論理演算子がANDである場合には、データ抽出部212は、OR結果のビットマップについて、各コンテキストに対応するビット区間に「1」が抽出条件の数分設定されたビット区間を検出する。そして、データ抽出部212は、抽出したビット区間に対応するコンテキストを検出する。複数の抽出条件を結合する論理演算子がORである場合には、データ抽出部212は、OR結果のビットマップについて、各コンテキストに対応するビット区間に「1」が1つ以上設定されたビット区間を検出する。そして、データ抽出部212は、抽出したビット区間に対応するコンテキストを検出する。そして、データ検出部212は、コンテキスト位置情報123を参照し、検出したコンテキストに関連付けられるXBRLデータを絞り込む。
抽出結果出力部213は、データ抽出部212によって抽出されたXBRLデータを出力する。この後、検証装置200は、出力されたXBRLデータを用いて、検証ルール310の検証式d0を検証する。
[抽出条件変換処理の一例]
ここで、抽出条件変換処理の一例を、図11を参照して説明する。図11は、実施例1に係る抽出条件変換処理の一例を示す図である。
図11に示すように、検証ルール310の「変数共通の抽出条件」には、3種のプロパティの条件が含まれる。すなわち、「変数共通の抽出条件」には、対象のXBRLデータが満たすべき3種のプロパティの条件が含まれる。
抽出条件変換部211は、このような検証ルール310の「変数共通の抽出条件」を解釈し、プロパティの項目名およびプロパティの項目値をプロパティの条件(抽出条件)として抽出する。ここでは、プロパティの項目名として「dim:A1」、プロパティの項目値として「m:m1」が抽出され、[dim:A1、m:m1]が1つの抽出条件となる。プロパティの項目名として「dim:B1」、プロパティの項目値として「m:m2」が抽出され、[dim:B1、m:m2]が1つの抽出条件となる。プロパティの項目名として「dim:C1」、プロパティの項目値として「m:m3」が抽出され、[dim:C1、m:m3]が1つの抽出条件となる。
抽出条件変換部211は、複数の抽出条件から変換抽出条件を生成する。ここでは、SQL文で示されるコマンドを用いて変換抽出条件が生成されている。すなわち、変換抽出条件は、「(dim:A1=m:m1) and (dim:B1=m:m2) and (dim:C1=m:m3)」であり、抽出条件を結合する論理識別子がANDの場合である。
[データ抽出処理の一例]
ここで、データ抽出処理の一例を、図12を参照して説明する。図12は、実施例1に係るデータ抽出処理の一例を示す図である。なお、図12で示すデータ抽出処理は、1個のプロパティを持つXBRLデータを抽出する場合である。ここでは、変換抽出条件は、「dim:A1=m:m1」であるとする。
データ抽出部212は、変換抽出条件から1個の抽出条件を選択する。ここでは、抽出条件として「dim:A1=m:m1」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:A1」に対応するビットマップを抽出する(s1)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。ここでは、データ抽出部212は、プロパティの項目値「m:m1」に対応するビットマップを抽出し、1ビットだけ左シフトする(s2)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:A1」に対応するビットマップと「m:m1」に対応するシフトしたビットマップとをAND演算する(s3)。
抽出条件が1個である場合であるので、データ抽出部212は、AND結果のビットマップについて、各コンテキストに対応するビット区間に「1」が設定されたビット区間を検出し、検出したビット区間に対応するコンテキストを検出する(s4)。ここでは、コンテキスト1およびコンテキスト10が検出される。
データ抽出部212は、コンテキスト位置情報123を参照し、検出したコンテキストを含むXBRLデータを絞り込む(s5)。ここでは、コンテキスト位置情報123が図5に示される内容であるとすると、コンテキスト1は、データ3とデータ10に関連付けられる。コンテキスト10は、データ13に関連付けられる。したがって、データ3、データ10およびデータ13がXBRLデータとして絞り込まれる。
[データ抽出処理の別の例]
ここで、データ抽出処理の別の例を、図13を参照して説明する。図13は、実施例1に係るデータ抽出処理の別の例を示す図である。なお、図13で示すデータ抽出処理は、複数のプロパティのいずれも持つXBRLデータを抽出する場合である。ここでは、変換抽出条件は、「(dim:A1=m:m1) and (dim:B1=m:m2) and (dim:C1=m:m3)」であるとする。
データ抽出部212は、変換抽出条件から1個の抽出条件を選択する。ここでは、抽出条件として「dim:A1=m:m1」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:A1」に対応するビットマップを抽出する(s10)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。ここでは、データ抽出部212は、プロパティの項目値「m:m1」に対応するビットマップを抽出し、1ビットだけ左シフトする(s11)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:A1」に対応するビットマップと「m:m1」に対応するシフトしたビットマップとをAND演算する(s12)。
データ抽出部212は、変換抽出条件から次の1個の抽出条件を選択する。ここでは、抽出条件として「dim:B1=m:m2」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:B1」に対応するビットマップを抽出する(s13)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。ここでは、データ抽出部212は、プロパティの項目値「m:m2」に対応するビットマップを抽出し、1ビットだけ左シフトする(s14)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:B1」に対応するビットマップと「m:m2」に対応するシフトしたビットマップとをAND演算する(s15)。
データ抽出部212は、変換抽出条件から次の1個の抽出条件を選択する。ここでは、抽出条件として「dim:C1=m:m3」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:C1」に対応するビットマップを抽出する(s16)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。ここでは、データ抽出部212は、プロパティの項目値「m:m3」に対応するビットマップを抽出し、1ビットだけ左シフトする(s17)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:C1」に対応するビットマップと「m:m3」に対応するシフトしたビットマップとをAND演算する(s18)。
抽出条件が複数個である場合であるので、データ抽出部212は、複数の抽出条件に対するそれぞれのAND結果をOR演算する。ここでは、データ抽出部212は、「dim:A1」のプロパティのAND結果、「dim:B1」のプロパティのAND結果および「dim:C1」のプロパティのAND結果をOR演算する(s19)。
抽出条件を結合する論理識別子はANDの場合であるので、データ抽出部212は、以下の処理を行う。すなわち、データ抽出部212は、OR結果のビットマップについて、各コンテキストに対応するビット区間に「1」が抽出条件の数分設定されたビット区間を検出し、検出したビット区間に対応するコンテキストを検出する。ここでは、抽出条件の数は3であるので、抽出条件の数分「1」が設定されたビット区間であるコンテキスト1が検出される(s20)。
この後、データ抽出部212は、コンテキスト位置情報123を参照し、検出したコンテキストに関連付けられるXBRLデータを絞り込む。
[データ抽出処理のさらに別の例]
ここで、データ抽出処理のさらに別の例を、図14を参照して説明する。図14は、実施例1に係るデータ抽出処理のさらに別の例を示す図である。なお、図14で示すデータ抽出処理は、複数のプロパティのうちいずれかを持つXBRLデータを抽出する場合である。ここでは、変換抽出条件は、「(dim:B1=m:m1) or (dim:B1=m:m2) or (dim:B1=m:m3)」であるとする。
データ抽出部212は、変換抽出条件から1個の抽出条件を選択する。ここでは、抽出条件として「dim:B1=m:m1」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:B1」に対応するビットマップを抽出する(s30)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。ここでは、データ抽出部212は、プロパティの項目値「m:m1」に対応するビットマップを抽出し、1ビットだけ左シフトする(s31)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:B1」に対応するビットマップと「m:m1」に対応するシフトしたビットマップとをAND演算する(s32)。
データ抽出部212は、変換抽出条件から次の1個の抽出条件を選択する。ここでは、抽出条件として「dim:B1=m:m2」が選択される。
データ抽出部212は、プロパティの項目名「dim:B1」に対応するビットマップを既に抽出したので(s30)、この処理を省略する。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。ここでは、データ抽出部212は、プロパティの項目値「m:m2」に対応するビットマップを抽出し、1ビットだけ左シフトする(s33)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:B1」に対応するビットマップと「m:m2」に対応するシフトしたビットマップとをAND演算する(s34)。
データ抽出部212は、変換抽出条件から次の1個の抽出条件を選択する。ここでは、抽出条件として「dim:B1=m:m3」が選択される。
データ抽出部212は、プロパティの項目名「dim:B1」に対応するビットマップを既に抽出したので(s30)、この処理を省略する。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出し、抽出したビットマップを1ビットだけ左シフトする。ここでは、データ抽出部212は、プロパティの項目値「m:m3」に対応するビットマップを抽出し、1ビットだけ左シフトする(s35)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するシフトした結果のビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:B1」に対応するビットマップと「m:m3」に対応するシフトしたビットマップとをAND演算する(s36)。
抽出条件が複数個である場合であるので、データ抽出部212は、複数の抽出条件に対するそれぞれのAND結果をOR演算する。ここでは、データ抽出部212は、3個の「dim:B1」のプロパティのAND結果をOR演算する(s37)。
抽出条件を結合する論理識別子がORの場合であるので、データ抽出部212は、以下の処理を行う。すなわち、データ抽出部212は、OR結果のビットマップについて、各コンテキストに対応するビット区間に「1」が1つ以上設定されたビット区間を検出し、検出したビット区間に対応するコンテキストを検出する。ここでは、「1」が1つ以上設定されたビット区間であるコンテキスト1、コンテキスト100が検出される(s38)。
この後、データ抽出部212は、コンテキスト位置情報123を参照し、検出したコンテキストに関連付けられるXBRLデータを絞り込む。
[検証処理のフローチャート]
図15は、実施例1に係る検証処理のフローチャートを示す図である。なお、図15では、XBRLデータを「データ」というものとする。
図15に示すように、抽出条件変換部211は、検証ルール310を受け取ったか否かを判定する(ステップS21)。検証ルール310を受け取っていないと判定した場合には(ステップS21;No)、抽出条件変換部211は、検証ルール310を受け取るまで、判定処理を繰り返す。
一方、検証ルール310を受け取ったと判定した場合には(ステップS21;Yes)、抽出条件変換部211は、検証ルール310を1個又は複数の抽出条件を含む変換抽出条件に変換する(ステップS22)。例えば、抽出条件変換部211は、検証ルール310の「変数共通の抽出条件」を解釈し、プロパティの項目名およびプロパティの項目値を抽出する。抽出条件変換部211は、抽出した結果、1組のプロパティの項目名およびプロパティの項目値を1個の抽出条件として、1個または複数個の抽出条件から変換抽出条件を生成する。
続いて、データ抽出部212は、変換抽出条件から1個の抽出条件を選択する(ステップS23)。そして、データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名とプロパティの項目値に対応するそれぞれのインデックスを抽出する(ステップS24)。
データ抽出部212は、プロパティの項目値に対するインデックスを1ビットだけ左シフトする(ステップS25)。そして、データ抽出部212は、プロパティの項目名に対するインデックスとプロパティの項目値に対するインデックスとをAND演算する(ステップS26)。
そして、データ抽出部212は、変換抽出条件に、未処理の抽出条件が存在するか否かを判定する(ステップS27)。未処理の抽出条件が存在すると判定した場合には(ステップS27;Yes)、データ抽出部212は、次の抽出条件を選択すべく、ステップS23に移行する。
一方、未処理の抽出条件が存在しないと判定した場合には(ステップS27;No)、データ抽出部212は、変換抽出条件に含まれる抽出条件の数が複数であるか否かを判定する(ステップS28)。抽出条件の数が複数でないと判定した場合には(ステップS28;No)、データ抽出部212は、ステップS30に移行する。
一方、抽出条件の数が複数であると判定した場合には(ステップS28;Yes)、データ抽出部212は、プロパティごとにAND演算した複数のAND結果をOR演算する(ステップS29)。そして、データ抽出部212は、ステップS30に移行する。
ステップS30において、データ抽出部212は、演算結果に基づいて、変換抽出条件に合致するコンテキストを検出する(ステップS30)。例えば、データ抽出部212は、抽出条件が1個である場合には、AND結果のインデックスについて、各コンテキストに対応するビット区間に「1」が設定されたビット区間を検出し、検出したビット区間に対応するコンテキストを検出する。データ抽出部212は、抽出条件が複数個である場合には、OR結果のインデックスについて、変換抽出条件に含まれる複数の抽出条件を結合するために用いられる論理演算子に応じて該当するコンテキストを検出する。
そして、データ抽出部212は、コンテキスト位置情報123を用いて、検出したコンテキストに関連付けられるデータを抽出する(ステップS31)。この後、検証装置200は、抽出されたデータを用いて、検証ルール310の検証式d0を検証する。そして、データ抽出部212は、検証処理を終了する。
[実施例1の効果]
上記実施例1によれば、検証装置200は、入力された検証ルール310を、項目および値により規定される変換抽出条件に変換する。検証装置200は、入力データ300より生成された、入力データ300に含まれる項目および値それぞれについての出現位置に関するインデックス情報122を参照し、変換抽出条件に対応する項目および値の検証を行う。かかる構成によれば、検証装置200は、項目および値それぞれについての出現位置に関するインデックス情報122を用いることで項目および値による複数の条件でデータを抽出することが可能となる。この結果、検証装置200は、項目および値による複数の条件であっても、データの抽出に関する演算量を抑制し、高速にデータを抽出することが可能となる。
また、上記実施例1によれば、検証装置200は、インデックス情報122を参照し、変換抽出条件に含まれる項目および値に対応するそれぞれのインデックスを取得する。検証装置200は、取得した値に対応するインデックスを1ビット分左シフトする。検証装置200は、項目に対応するインデックスと値に対応するシフトした結果のインデックスとの論理演算により、変換抽出条件に対応する項目および値の検証を行う。かかる構成によれば、検証装置200は、インデックス情報122について論理演算を用いることで、項目および値による変換抽出条件に合致するデータを抽出することができる。
また、上記実施例1によれば、検証装置200は、変換抽出条件に項目および値の組が複数存在する場合には、各組に含まれる項目に対応するインデックスと同一の組に含まれる値に対応するシフトした結果のインデックスとをAND演算する。検証装置200は、各組のAND演算結果をOR演算する。検証装置200は、OR演算結果を用いて変換抽出条件に対応する項目および値の検証を行う。かかる構成によれば、検証装置200は、インデックス情報122について論理演算を用いることで、項目および値による複数の条件に合致するデータを抽出することができる。
また、上記実施例1によれば、インデックス生成装置100は、項目および値の組み合わせにより記述された入力データ300を入力する。インデックス生成装置100は、入力データ300に含まれる項目および値それぞれについて、項目および値それぞれの出現位置に関するインデックス情報122を生成する。かかる構成によれば、インデックス生成装置100は、入力データ300に含まれる項目および値それぞれについてインデックス情報122を生成することで、効率的なインデックス情報122を生成することができる。また、インデックス生成装置100は、入力データ300に含まれる項目および値の組み合わせでなく、項目および値それぞれについてインデックス情報122を生成することで、インデックスのサイズ爆発を抑制できる。また、インデックス生成装置100は、項目および値それぞれの出現位置に関するインデックスを生成することで、仮に入力データ300に新たな値が有ったとしても、インデックス情報122の値の領域に1行追加するだけで、同様に、インデックス情報122を生成することができる。インデックス生成装置100は、項目名および値それぞれの出現位置に関するインデックスを生成することで、仮に入力データ300に新たな項目名が有ったとしても、インデックス情報122の項目の領域に1行追加するだけで、同様に、インデックス情報122を生成することができる。
ところで、実施例1に係るインデックス生成装置100は、入力データ300に含まれる項目および値それぞれの出現位置に関するインデックス情報122を生成すると説明した。しかしながら、インデックス生成装置100は、これに限定されず、入力データ300に含まれる項目および値の組について、同一の組の値を項目と同じ出現位置とする、出現位置に関するインデックス情報を生成しても良い。
そこで、実施例2では、インデックス生成装置100が、入力データ300に含まれる項目および値の組について、同一の組の値を項目と同じ出現位置とする、出現位置に関するインデックス情報を生成する場合を説明する。
ここで、実施例2に係るインデックス情報122Aの一例を、図16を参照して説明する。図16は、実施例2に係るインデックス情報の一例を示す図である。図16に示すように、インデックス情報122AのX軸はコンテキストごとの出現位置を表し、Y軸はプロパティ名とプロパティ値とを表す。また、インデックス情報122Aは、プロパティ名のインデックス情報の領域と、プロパティ値のインデックス情報の領域を有する。プロパティ名のインデックス情報は、それぞれのプロパティの項目名について、コンテキスト(Context)内の出現位置に関するインデックスの束の情報である。また、プロパティ値のインデックス情報は、それぞれのプロパティの項目値について、コンテキスト(Context)内の出現位置に関するインデックスの束の情報である。プロパティの項目値についての出現位置は、当該プロパティの項目値と同一の組のプロパティの項目名と同じとする。各プロパティ名および各プロパティ値について、コンテキスト内に出現する出現位置には、ONすなわち2進数の「1」が設定される。一例として、プロパティ名として「dim:A1」、プロパティ値として「m:m1」が同一の組であるとする。このプロパティ名の出現位置がContext1内の2番目である場合に、Context1内の2番目に「1」が設定される。このプロパティ値の出現位置は、同じ組のプロパティ名と同じ出現位置であるContext1内の2番目に「1」が設定される。
[インデックス生成処理の一例]
ここで、インデックス生成処理の一例を、図17を参照して説明する。図17は、実施例2に係るインデックス生成処理の一例を示す図である。なお、図17では、コンテキスト選択部111が、コンテキストとして「Context1」を選択した場合について説明する。
すると、コンテキスト解析部112は、コンテキストとして選択された「Context1」を字句解析する。一例として、コンテキスト解析部112は、特定の要素(xbrldi:explicitMember)の行に含まれるプロパティの項目名およびプロパティの項目値の組を検知する。ここでは、符号r1で示される行には、プロパティの項目名として「dim:B1」、プロパティの項目値として「m:m2」の組が検知される。また、符号r2で示される行には、プロパティの項目名として「dim:A1」、プロパティの項目値として「m:m1」の組が検知される。符号r3で示される行には、プロパティの項目名として「dim:C1」、プロパティの項目値として「m:m3」の組が検知される。
そして、コンテキスト解析部112は、プロパティの項目名およびプロパティの項目値の組を出現順に一時領域に保持する。プロパティの項目値についての出現位置は、当該プロパティの項目値と同一の組のプロパティの項目名と同じとする。ここでは、コンテキスト解析部112は、符号r1で示される行で検知した組の出現順に応じて、1番目の一時領域に「dim:B1」および「m:m2」を保持する。コンテキスト解析部112は、符号r2で示される行で検知した組の出現順に応じて、2番目の一時領域に「dim:A1」および「m:m1」を保持する。コンテキスト解析部112は、符号r3で示される行で検知した組の出現順に応じて、3番目の一時領域に「dim:C1」および「m:m3」を保持する。
そして、インデックス情報生成部113は、「Context1」について、一時領域に保持された組に含まれるプロパティの項目名に対して、当該プロパティの項目名の出現位置にビットを立てる。インデックス情報生成部113は、「Context1」について、一時領域に保持された組に含まれるプロパティの項目値に対して、当該プロパティの項目値の出現位置にビットを立てる。ここでは、インデックス情報生成部113は、プロパティの項目名「dim:B1」に対して、1番目の出現位置にビット「1」を設定する(e1’)。インデックス情報生成部113は、プロパティの項目値「m:m2」に対して、1番目の出現位置にビット「1」を設定する(e2’)。インデックス情報生成部113は、プロパティの項目名「dim:A1」に対して、2番目の出現位置にビット「1」を設定する(e3’)。インデックス情報生成部113は、プロパティの項目値「m:m1」に対して、2番目の出現位置にビット「1」を設定する(e4’)。インデックス情報生成部113は、プロパティの項目名「dim:C1」に対して、3番目の出現位置にビット「1」を設定する(e5’)。インデックス情報生成部113は、プロパティの項目値「m:m3」に対して、3番目の出現位置にビット「1」を設定する(e6’)。
[データ抽出処理の一例]
ここで、データ抽出処理の一例を、図18を参照して説明する。図18は、実施例2に係るデータ抽出処理の一例を示す図である。なお、図18で示すデータ抽出処理は、複数のプロパティのいずれも持つXBRLデータを抽出する場合である。ここでは、変換抽出条件は、「(dim:A1=m:m1) and (dim:B1=m:m2) and (dim:C1=m:m3)」であるとする。
データ抽出部212は、変換抽出条件から1個の抽出条件を選択する。ここでは、抽出条件として「dim:A1=m:m1」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:A1」に対応するビットマップを抽出する(s40)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目値「m:m1」に対応するビットマップを抽出する(s41)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:A1」に対応するビットマップと「m:m1」に対応するビットマップとをAND演算する(s42)。
データ抽出部212は、変換抽出条件から次の1個の抽出条件を選択する。ここでは、抽出条件として「dim:B1=m:m2」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:B1」に対応するビットマップを抽出する(s43)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目値「m:m2」に対応するビットマップを抽出する(s44)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:B1」に対応するビットマップと「m:m2」に対応するビットマップとをAND演算する(s45)。
データ抽出部212は、変換抽出条件から次の1個の抽出条件を選択する。ここでは、抽出条件として「dim:C1=m:m3」が選択される。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目名に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目名「dim:C1」に対応するビットマップを抽出する(s46)。
データ抽出部212は、選択した抽出条件に含まれるプロパティの項目値に対応するインデックス(ビットマップ)をインデックス情報122から抽出する。ここでは、データ抽出部212は、プロパティの項目値「m:m3」に対応するビットマップを抽出する(s47)。
データ抽出部212は、プロパティの項目名に対応するビットマップと、プロパティの項目値に対応するビットマップとをAND演算する。ここでは、データ抽出部212は、「dim:C1」に対応するビットマップと「m:m3」に対応するビットマップとをAND演算する(s48)。
抽出条件が複数個である場合であるので、データ抽出部212は、複数の抽出条件に対するそれぞれのAND結果をOR演算する。ここでは、データ抽出部212は、「dim:A1」のプロパティのAND結果、「dim:B1」のプロパティのAND結果および「dim:C1」のプロパティのAND結果をOR演算する(s49)。
抽出条件を結合する論理識別子がANDの場合であるので、データ抽出部212は、以下の処理を行う。すなわち、データ抽出部212は、OR結果のビットマップについて、各コンテキストに対応するビット区間に「1」が抽出条件の数分設定されたビット区間を検出し、検出したビット区間に対応するコンテキストを検出する。ここでは、抽出条件の数は3であるので、抽出条件の数分「1」が設定されたビット区間であるコンテキスト1が検出される(s50)。
この後、データ抽出部212は、コンテキスト位置情報123を参照し、検出したコンテキストに関連付けられるXBRLデータを絞り込む。
[実施例2の効果]
上記実施例2によれば、検証装置200は、出現位置に関するインデックス情報122Aを参照し、変換抽出条件に含まれる項目および値に対応するそれぞれのインデックスを取得する。検証装置200は、取得した項目に対応するインデックスと取得した値に対応するインデックスとの論理演算により、変換抽出条件に対応する項目および値の検証を行う。インデックス情報122Aは、入力データ300に含まれる項目および値の組について、同一の組の値を項目と同じ出現位置とするインデックス情報である。かかる構成によれば、検証装置200は、項目および値それぞれについての出現位置に関するインデックス情報122Aを用いて項目および値による複数の条件でデータを抽出することが可能となる。
また、上記実施例2によれば、インデックス生成装置100は、入力データ300に含まれる項目および値の組について、同一の組の値を項目と同じ出現位置とする、出現位置に関するインデックス情報122Aを生成する。かかる構成によれば、インデックス生成装置100は、インデックス情報122Aを生成する際に、項目および値の組について、同一の組の値を項目と同じ出現位置とすることで、インデックスのサイズ爆発をさらに抑制することができる。
[その他]
なお、実施例では、インデックス生成処理をインデックス生成装置100により実現し、検証処理を検証装置200により実現すると説明した。しかしながら、1つの情報処理装置が、インデックス生成処理および検証処理を実現しても良い。
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、インデックス情報生成部113を、プロパティ名およびプロパティ値をインデックス情報122に設定する設定部と、プロパティ名およびプロパティ値の出現位置に応じてインデックス情報122にビットを立てる生成部とに分離しても良い。また、データ抽出部212および抽出結果出力部213を併合しても良い。また、記憶部120をインデックス生成装置100の外部装置としてネットワーク経由で接続するようにしても良い。記憶部220を検証装置200の外部装置としてネットワーク経由で接続するようにしても良い。
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図1に示したインデックス生成装置100と同様の機能を実現するインデックス生成プログラムおよび図9に示した検証装置200と同様の機能を実現する検証プログラムを実行するコンピュータの一例を説明する。図19は、インデックス生成プログラムおよび検証プログラムを実行するコンピュータの一例を示す図である。
図19に示すように、コンピュータ500は、各種演算処理を実行するCPU503と、ユーザからのデータの入力を受け付ける入力装置515と、表示装置509を制御する表示制御部507とを有する。また、コンピュータ500は、記憶媒体からプログラムなどを読取るドライブ装置513と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部517とを有する。また、コンピュータ500は、各種情報を一時記憶するメモリ501と、HDD505を有する。そして、メモリ501、CPU503、HDD505、表示制御部507、ドライブ装置513、入力装置515、通信制御部517は、バス519で接続されている。
ドライブ装置513は、例えばリムーバブルディスク511用の装置である。HDD205は、検証プログラム505a、インデックス生成プログラム505bおよび処理関連情報505cを記憶する。
CPU503は、検証プログラム505aを読み出して、メモリ501に展開し、プロセスとして実行する。かかるプロセスは、検証装置200の各機能部に対応する。CPU503は、インデックス生成プログラム505bを読み出して、メモリ501に展開し、プロセスとして実行する。かかるプロセスは、インデックス生成装置100の各機能部に対応する。処理関連情報505cは、プロパティ定義情報121、インデックス情報122およびコンテキスト位置情報123に対応する。そして、例えばリムーバブルディスク511が、検証プログラム505a、インデックス生成プログラム505bなどの各情報を記憶する。
なお、検証プログラム505aおよびインデックス生成プログラム505bについては、必ずしも最初からHDD505に記憶させておかなくても良い。例えば、コンピュータ500に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカード等の「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ500がこれらから検証プログラム505aおよびインデックス生成プログラム505bを読み出して実行するようにしても良い。