(57)【要約】【課題】  データ項目間に他のデータ項目の値を算出可能であるというような依存関係があるデータファイルに対して、データファイルから抽出したい情報の計算式の計算に必要なデータ項目の値を効率よく特定し、計算式の結果を高速に得られるようにすること。【解決手段】  データファイルのデータ項目間の他のデータ項目の値を算出可能であるというような依存関係である論理構造と、データファイルから抽出したい情報の計算式から、データファイルを処理するときに用いる処理時用のデータをあらかじめ作成しておき、処理時には当該処理時用のデータを参照することで、データファイルから読み出したデータ項目が計算式の計算に必要か否かを判断する。【選択図】図3
2010170287.tif 000002
【特許請求の範囲】
【請求項１】
論理構造を有するデータであって、複数のデータ項目と各データ項目の値を有するデータから、所定の出力情報の算出に用いるデータ項目を抽出するデータ抽出システムにおいて、
前記出力情報の算出の条件と、各データ項目について他のデータ項目との関係を示し、他のデータ項目からの導出条件を用いて、出力情報を算出するための依存情報を生成する手段と、
生成された前記依存情報を用いて、前記データに含まれるデータ項目から、前記出力情報の算出に用いられるデータ項目を抽出する手段とを有することを特徴とするデータ抽出システム。
【請求項２】
請求項１に記載のデータ抽出システムであって、
前記依存情報として、前記データ項目が他の前記データ項目および前記出力情報の算出に必要となる可能性を示す情報であって、前記データ項目を前記データから抽出した場合には、他の前記データ項目を前記データファイルから抽出する必要がないことを判断できる抽出済み情報を保持する手段と、
前記抽出済み情報および前記依存情報を利用して、既に前記データファイルから抽出した前記データ項目により必要がないことを判断できた前記データ項目について、前記データファイルから抽出する処理を省略するよう前記抽出する手段を制御する手段を有することを特徴とするデータ抽出システム。
【請求項３】
請求項１または請求項２のいずれかに記載のデータ抽出システムであって、
前記データは、前記データ項目の並び順が順不同であるXMLまたはCSVであることを特徴とするデータ抽出システム。
【請求項４】
請求項１または請求項２のいずれかに記載のデータ抽出システムであって、
前記データはXBRLインスタンスであり、前記出力情報は前記XBRLインスタンスの内容である財務情報から算出する経営についての指標であることを特徴とするデータ抽出システム。
【請求項５】
請求項４に記載のデータ抽出システムであって、
複数の前記データ項目について他の前記データ項目を導出するための導出条件は、XBRLの計算リンクであることを特徴とするデータ抽出システム。
【請求項６】
請求項２に記載のデータ抽出システムであって、
前記依存情報と、前記抽出済み情報は範囲ラベルによって、前記各データ項目に対してラベルを対応付けて記憶する手段をさらに有し、
前記制御する手段は、前記データ項目の範囲ラベルを前記依存情報から取得し、前記抽出済み情報の範囲ラベルと比較して、既に前記データファイルから抽出した前記データ項目により必要がないか否かを判断することを特徴とするデータ抽出システム。
【請求項７】
請求項６に記載のデータ抽出システムであって、
前記制御する手段は、出力すべき出力情報が複数ある場合には、前記データファイルから前記データ項目を抽出した際に、前記データ項目が複数あるうちのいずれの前記出力情報に必要となる可能性があるかを前記範囲ラベルにより判断し、前記必要となる可能性がある前記出力情報を算出する手段に、前記データ項目の値を出力することを特徴とするデータ抽出システム。
【請求項８】
請求項６に記載のデータ抽出システムであって、
前記記憶する手段は、前記依存情報がツリー構造となっていない場合に、前記ツリー構造に項目を追加して、前記依存情報をツリー構造とすることで、前記範囲ラベルの対応付けた記憶を行うことを特徴とするデータ抽出システム。
【請求項９】
請求項８に記載のデータ抽出システムであって、
前記記憶する手段は、出力すべき前記出力情報が複数あって、前記依存情報の前記範囲ラベルを付与するために、前記依存情報がツリー構造となっていない場合に、前記項目と前記出力情報の依存関係を保つことを条件として、前記依存情報から依存関係の情報の削除と追加を行って、前記依存情報をツリー構造とすることを特徴とするデータ抽出システム。
【請求項１０】
請求項６に記載のデータ抽出システムであって、
前記記憶する手段は、前記依存情報の範囲ラベルを、前記依存情報の構造の中で隣接する前記項目では値の範囲が連続するように作成し、前記データファイルから抽出した前記データ項目を前記抽出済み情報に記録する場合には、前記抽出済みに既に登録されている情報と、新たに登録する情報の範囲ラベルが連続するか重なりがある場合には、これらの情報を統合して、１つのレコードとして前記抽出済み情報に記録することを特徴とするデータ抽出システム。
【請求項１１】
請求項８に記載のデータ抽出システムであって、
前記記憶する手段は、前記依存情報がツリー構造とならない場合に、前記依存情報を複数に分割することによってツリー構造とし、分割した前記ツリーごとに前記範囲ラベルを記憶する際には、前記範囲ラベルを構成する数値の一方は前記分割した前記ツリーで共有して管理し、前記範囲ラベルのもう一方は前記分割した前記ツリーごとに別々に管理することを特徴とするデータ抽出システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、XML等で表現される論理構造を有するデータを処理する技術に関する。その中でも特にデータ項目間に他のデータ項目を算出可能であるという依存関係があるようなデータ列から、目的とする計算式に必要なデータ項目の値を取り出すための技術に関する。
【背景技術】
【０００２】
現在、様々な分野でXMLやCSV（カンマ区切りのデータ）を用いたデータが用いられている。たとえばXMLはテキスト形式によるデータであるが、階層的なタグを用いることで構造を持った情報を表現することができる。また、CSVではデータはカンマを区切りとしてデータは単純に並べられ、その意味は別途定義されていなければならない。近年、企業等の財務情報を電子データとして表現するために使われるようになったXBRL（eXtensible Business Reporting Language）では、XMLを用いて財務情報を表現するが、財務情報の中心となるファイル（XBRLインスタンス）では勘定科目ごとのデータはXML特有の階層的なタグを通常は用いず、勘定科目を表す要素が階層構造無しに並ぶことが多い。
【０００３】
また、これらの勘定科目の情報とは別のXMLファイル（タクソノミ）で、勘定科目の科目間の計算による算出できることを示す依存関係や、貸借対照表等としての表示順序などの構造を表現する。このようにXBRLでは、物理構造（XMLの階層的なタグのようなデータ項目間のファイル内での表現上の構造）を持たないファイルと、そのデータ項目間の依存関係などの論理構造を表すファイルとから、財務情報の全体を構成している。
【０００４】
【非特許文献１】Y.Diao,P.Fischer，M.Franklin著，”High-Performance XML Filtering: An Overview of YFilter”，IEEE Data Engineering Bulletin,(2003).
【発明の開示】
【発明が解決しようとする課題】
【０００５】
XBRLのデータから、特定の勘定科目や、複数の勘定科目から何らかの数式により算出する指標の情報を取得しようとする場合、勘定科目ごとの値の情報を含むインスタンスの全体を読み込み、必要な勘定科目の値を抽出しなければならなかった。これはある勘定科目は他の勘定科目の値から算出可能であるという依存関係が多数あるが、この依存関係により不要となる勘定科目を、インスタンスの読み込み処理中に決定することができなかったためである。
【０００６】
この課題はXBRL以外でも、データファイルの物理的な構造とは別途、データ項目の間に算出可能であるという依存関係からなる論理的な構造が定義されているデータファイルについて、ある特定のデータ項目を用いる計算のために、データファイルからデータ項目の値を抽出する場合に共通する課題である。
【０００７】
非特許文献１では、XML文書から、XPATH式によりXMLの階層構造中における位置に基づいたデータ抽出を高速に行うための仕組みとして、対象とするXML文書の要素の階層構造を表す情報と、XPATH式の情報を事前に処理して、オートマトン（状態遷移図）を構成し、XML文書の処理時にはそのオートマトンを利用することでXPATH式の情報の抽出を高速に行う技術が開示されている。しかし、この方法は対象とするXML文書のタグの階層構造（ファイルの物理的な構造）の情報と、求めたい式を事前に処理して、対象の文書の処理時用のデータ（この場合はオートマトン）を構成するものであり、XBRLのようにデータ項目である各勘定科目の要素がフラットに並び、要素による物理的な構造がなく、またタクソノミの計算リンクのように、インスタンスの物理的な構造ではなく、データ項目の論理的な構造しか表現しないデータには対応できない。
【課題を解決するための手段】
【０００８】
この課題を解決するために、本発明では以下の構成を用いる。すなわち、論理構造を有するデータであって、複数のデータ項目と各データ項目の値を有するデータから、所定の出力情報を算出する場合に、出力情報の算出の条件と、各データ項目について他のデータ項目との関係を示し、他のデータ項目からの導出条件を用いて、出力情報を算出するための依存情報を生成するものである。また、本発明には、依存情報を用いて、上記のデータ（データファイルの形式で存在）に含まれるデータ項目から、出力情報の算出に用いられる（もしくは影響を与える）データ項目を抽出することも含まれる。
【０００９】
より詳細には、本発明には、以下の態様が含まれる。データファイルの論理的な構造の情報と、データファイルから出力したい情報（計算式などで定義）の条件を記した情報とから、データファイルの読み込み時に参照すべきデータとして、データ項目同士の依存関係と計算式の依存関係の情報(依存情報)をあらかじめ管理（生成）しておく。そして、データファイルの読み込み時には、データファイルの所定方向（例えば、前方）から順にデータ項目とその値を読み込む処理を行う。このときデータ項目の特定を行った段階で当該データ項目の要否を決定し、データ項目の値のXML等のテキストからの抽出や計算式の結果の算出などを行う他の機能への出力を不要とする。また、データファイルの読み込み時に参照すべきデータとして、データ項目、計算式の依存関係の把握を容易に行えるように、範囲ラベルにもとづくラベルを付与する。
【発明の効果】
【００１０】
データファイルの物理的な構造とは別に、データ項目間で算出が可能であるという依存関係を表す論理的なデータ構造が定義されているデータファイルに対して、データファイルから必要なデータ項目の情報を抽出する場合に、データファイル中のデータ項目から論理的な構造である依存情報を用いて不要と判断できるデータ項目の抽出を行わないようにすることで、効率のよいデータ抽出処理を行うことができる。
【発明を実施するための最良の形態】
【００１１】
本実施の形態においては、様々なデータ項目からなるデータを複数格納しているデータファイルから、ある計算に必要な情報を取り出すための方法を示す。以下では、データファイルとしてXBRLを例として用いるが、データファイル中のデータ項目について、他のデータ項目を導出可能であるという依存関係が別途定義されているようなデータファイルに同様に適用できる。
【００１２】
XBRLは、企業の貸借対照表等の財務情報を表現するためのXML文書の仕様である。XBRLは財務情報をXBRLインスタンスおよびタクソノミの複数のXMLファイルとして記録する。インスタンスとは財務情報の本体であり、勘定科目毎にその科目の値を記録する。図2にインスタンス内の勘定科目のデータの例201を示す（XBRLインスタンスの一部について概要を示すもので、正確なXBRLインスタンスではない）。図2のXMLは2つの勘定科目（売上高と純利益）を含むものであり、要素の値としてその勘定科目の値を記録する。これらの勘定科目の要素は多くの場合図2の例201に示すように、XMLのタグの階層として同じ階層にあり、フラットに並ぶ（それぞれの勘定科目の要素が他の要素の下位にならない）。
【００１３】
また、XBRLの仕様では勘定科目の要素は順不同である（要素の順序は財務情報として意味を持たない）。タクソノミはタクソノミスキーマとリンクベースからなる。このうちタクソノミスキーマは、XML  Schemaであり、インスタンスで用いられる勘定科目の要素名、値の型等を定義する。リンクベースは勘定科目の様々な付加情報を表すもので、勘定科目の名称を表す名称リンクや、財務諸表として表示する際の表示順序を示す表示リンク、勘定科目間の計算関係を示す計算リンクなどを含む。このうち計算リンクは、ある科目の値が他のどの（１つ以上の）科目を足し合わせることによって算出できるか、というような各勘定科目の間の計算関係を示す。例えば「資産」という科目は、科目「流動資産」と科目「固定資産」を足したものであるというような情報である。このようにXBRLは、財務情報の本体となるインスタンスの物理構造（XMLのタグの階層構造）とは別に、タクソノミのリンクベースにおいて論理構造（計算リンクによる科目と科目の計算関係）を管理するという特徴を持ったデータである。
【００１４】
XBRLは企業の様々な財務情報を管理するものであり、この財務情報は例えば企業の株式投資のための分析に用いることができる。このとき、XBRLに含まれる勘定科目の値をそのまま用いたり、いくつかの科目から計算式によって指標を算出して用いたりする。例えば企業の安全性(倒産しないこと)を示す指標として、流動資産÷流動負債のような計算を行って指標値を求めることがある。XBRLデータは例えば企業か証券取引所等に提出し、これを証券取引所等が一般に公開する。公開されると投資家はこの情報を参照して、株式投資の行動を決定する。このとき、公開された情報が株価に影響するような内容である場合、他の投資家よりも先にXBRLの内容を判断して株式の売買注文を出すことが重要である。このためには、XBRLデータを入手後、高速に特定の科目の値や、複数の科目から指標を算出することが必要であるが、勘定科目は一般に多数の種類のものがあり、インスタンスにはその一部の科目の値（のみ）が記録される。
【００１５】
そのため、必要な科目の値がインスタンスに記録されていない場合も多い。このとき、計算リンクの情報を用いると、インスタンスに含まれていない科目の値を補うことができる。例えば計算リンクにおいて、「A引当金」「B引当金」「C引当金」の３つの科目の値の合計が「引当金合計」という科目であると定義されている場合で、「引当金合計」の値が必要な場合、「引当金合計」の値がインスタンスに含まれている場合にはその値、含まれていない場合には3つの科目の値のうちインスタンスに含まれる科目の値の合計の値を出力することで、必要な情報を得ることができる。そのため、「引当金合計」がインスタンスに含まれているか否かが不明であれば、インスタンスからは３つの科目の情報も探す必要がり、「引当金合計」が含まれていることが分かったならば３つの科目の情報はインスタンスから抽出する必要はない。
【００１６】
図1は、本発明の一実施例のデータ抽出を行うシステムの構成図である。データ抽出装置101は、たとえばPCであり、処理装置120、記憶装置150、入出力装置110からなる。処理装置120は例えばCPUであり、記憶装置150に格納したプログラムを読み込み実行する。記憶装置150は例えばメモリ、ハードディスクであり、プログラム、データを記憶する。入出力装置110は、ネットワークインターフェースやキーボード、ディスプレイ、外部記憶装置とのインターフェースである。記憶装置150は、データである構造情報151、計算式152、依存情報153、データファイル154、抽出済み一覧155やその他のデータと、処理プログラムである依存情報生成機能161、抽出機能162等を記録する。以降、データ抽出装置101の動作を説明するが、これは処理装置120が記憶装置150から処理プログラムを読み込み、プログラムを実行して記憶装置150からのデータの読み込み、データの書き込み、入出力装置110による外部とのデータの入出力により実行することで動作するものとする。
【００１７】
図3は、XBRLなどのデータファイルからデータ項目の値を取り出して、必要な計算式の値を算出する実施例の全体の処理のフローであり、依存情報生成機能161、抽出機能162、計算実行機能163の処理を示す。なお、XBRL以外のXML、CSV、その他のデータ形式でも、データ項目の並び順がXMLスキーマ、その他の規定により定められておらず、順不同であるようなデータファイルについては同様の処理が行える。また、本フローは、上述した図１のプログラムで実行される。
【００１８】
図3のステップ301が依存情報生成機能161の処理、ステップ352が計算実行機能163の処理、その他のステップが抽出機能162の処理である。データファイルからのデータの抽出において、ステップ301は事前に実行し、その他のステップは処理対象となるデータファイルがデータ抽出装置に入力された後、または入力される都度、実行する。依存情報生成機能161であるステップ301では、処理対象とするデータファイルの論理構造の情報（構造情報151）と、データファイルから取り出したい内容を表す計算式152から、抽出機能162が用いる依存情報153を生成する処理である。
【００１９】
次に、図4に構造情報151の構成を示す。構造情報151は処理対象とするデータファイル内の論理構造（データ項目間の依存関係）を表すものであり、データ項目の親子関係を表す表である。構造情報151は事前にデータ抽出装置101が入出力装置110からデータの入力を受け、記憶装置150に格納する。構造情報151は、親項目401、子項目402からなる表であり、それぞれデータ項目を識別するための符号を記録する。親項目401に示されるデータ項目が上位である親、子項目402に示されるデータ項目が会である子であることを示す。親、子とは例えばデータ項目がXBRLの勘定科目において、子の科目の値を足し合わせることで親の科目の値になることを示す。つまり、データ項目の依存関係において、親は子のデータ項目の値がそろうことで算出可能である。なお、数値を足し合わせることにより算出可能であるという関係のほか、他のデータ型や他の関係（関数、アルゴリズム）を用いて親の項目の値を導出する関係でもよい。以下では数値を足し合わせて算出する場合を例とする。
【００２０】
図5は、構造情報151の図4の例の表す内容の模式図501である。図5は、データ項目を頂点、親子の依存関係（図4の構造情報151の１レコード）を辺とし、親を上位として子から親の向きに矢印を置いたグラフ（有向グラフ）である。図4での親項目が１で子項目が２であるレコードは、模式図501では項目2から項目1へ結ぶ辺となる。
【００２１】
計算式152は、データファイル内のデータ項目から計算して出力する出力情報の条件であり、例えば、「計算式１＝項目2÷項目7」というようなデータである。なお、数値から計算する計算式のみではなく、他のデータ型に対する様々な関数、アルゴリズムなどの情報の導出条件でもよい。以下では、導出条件として、数値からなる計算式を例とする。また、複数の計算式を保持してもよい。
【００２２】
依存情報153は、構造情報151と計算式152から、処理対象のデータファイルに現れうるデータ項目同士、データ項目と計算式152の依存関係を表す情報である。依存情報153の目的は、データ項目同士、データ項目と計算式152の依存関係を高速に判定することである。依存情報153の構成を図6に示す。依存情報153はデータ項目または計算式を区別するための項目601、前置順602、後置順603からなる表である。前置順602と後置順603はデータ項目または計算式の依存関係を管理ための数値である。データ抽出装置101はある二つのデータ項目またはデータ項目と計算式の依存関係を調べる場合に、依存情報153から、それぞれの前置順と後置順の値を取り出す。データ項目または計算式のそれぞれをα、βとし、αの前置順＜βの前置順であり、かつ、αの後置順＞βの後置順であれば、αはβの上位（親または親の親、さらにその親など）にあると判断する。これは一般に範囲ラベルと呼ばれるラベルである。
【００２３】
依存関係153を作成する依存情報生成処理161の処理フローを、図8に示す。まずデータ抽出装置101は、記憶装置150から構造情報151と計算式152を取り出す（ステップ801）。
【００２４】
次に、構造情報151と計算式152の情報から、データ抽出装置101は図9に示すツリー構造データ951を記憶装置150内に作成する（ステップ802）。ツリー構造データ951は、構造情報151と計算式152の依存関係を表す情報で、図5の構造情報151と、計算式「計算式１＝項目2÷項目7」から図5と同様に表したものが模式図701である。計算式１が「計算式１＝項目2÷項目7」である場合、図7は項目1と項目2から計算式1を算出可能であることを示す。図6の依存情報153は図7のグラフの依存関係を表した表である。ツリー構造データ951はこの図7の情報を表すデータであり、親項目に計算式が現れることを除けば構造情報151と同様の構成である。このツリー構造データ951は次のように作成する。なお値903は後の処理において、データファイルから取り出した項目の値と、その値から算出した値を格納する領域であり、ここでの処理では空欄としておく。
【００２５】
まず、構造情報151の全ての情報をツリー構造データ951にコピーする。次に計算式152から、計算式を親項目901、計算式が用いるデータ項目を子項目902としてツリー構造データ951にレコードを追加する。計算式が「計算式１＝項目2÷項目7」のように複数のデータ項目を利用する場合、それぞれのデータ項目についてレコードを作成する。次に、ツリー構造データ951から、上位に計算式がないデータ項目が親項目901となっているレコードを削除する。これはツリー構造データ951の各レコードについて、上位に辿って親項目901に計算式が現れないレコードを削除することである。
【００２６】
上位に辿るとは、親項目901が他のレコードの子項目902となるレコード、さらにその親項目901が他のレコードの子項目902となるレコードというように、再帰的に上位のレコードを特定することである。図5に示す構造情報の例501と計算式「計算式１＝項目2÷項目7」からは、図7に示すようなツリー構造データ951の例701を作成することができ、これは、図5に計算式の依存関係（項目2と項目3の上位に計算式１がある）を加え、上位に計算式が無い項目（項目1）が親項目901となっているレコードを削除したものである。
【００２７】
次に、データ抽出装置101の依存情報生成処理161で、依存情報153の作成として、ラベル付けを行う（ステップ803）。この処理ではまず、記憶装置150に数値を記録するための領域であるカウンタを用意し、初期値として1を記録する。次にツリー構造データ951からルートとなる項目を特定し、その項目についてステップ804以降の処理を行う。ルートとなる項目の特定とは、ツリー構造データ951の内容を記憶装置150から読み込み、親項目901の内容が、子項目902に現れないような親項目901を特定することである。図9のツリー構造データ951の例では、「計算式1」が、親項目901には現れるが、子項目902には現れないためルートとなる項目となる。ルートとなる項目を特定した後、データ抽出装置101は、そのルートの項目をパラメータとして、ステップ804を開始する。
【００２８】
ステップ804以降は、ツリー構造データ951を深さ優先探索を行いながらカウンタを更新し、始めに項目に到達したときに前置順602に、最後に項目に到達したときに後置順603にカウンタの値を記録する処理である。以下にその処理を示す。
【００２９】
ステップ804では、パラメータとして与えられたデータ項目について、依存情報153にレコードを追加する。項目604をパラメータとして与えられたデータ項目とし、前置順602はカウンタの値を記録する。また、カウンタの値を更新（1を加算）する。
【００３０】
次にデータ抽出装置101は、ステップ804でパラメータとして与えられた項目の子項目を特定し、それらの項目についてラベル付けする（ステップ805）。この処理では、ステップ804でパラメータとして与えられた項目が、ツリー構造データ951の親項目901であるレコードを特定し、その子項目902を特定する。データ抽出装置101は、この子項目902をパラメータとしてステップ804を再帰的に呼び出す。また、ステップ804でパラメータとして与えられた項目が、ツリー構造データ951の親項目901であるレコードが複数ある場合には、それらの子項目902について、繰り返しステップ804を呼び出す。
【００３１】
データ抽出装置101は、各子項目902について再帰的なラベル付け処理の呼び出しを完了した後、ステップ804でパラメータとして与えられた項目について、依存情報153に作成したレコードの後置順603をカウンタの値で更新し、また、カウンタを更新（+1）する（ステップ806）。ステップ806が終了した場合、ステップ804の呼び出し元へ処理を復帰させる。すなわち、ステップ804がステップ803から呼び出された場合には、全体の処理を終了し、ステップ805から呼び出された場合はステップ805に復帰し、未処理の子項目902がある場合にはその処理、各子項目902について処理が終了した場合は、ステップ806へ進む。
【００３２】
以上の処理により、依存情報生成機能161（処理フローのステップ301）の依存情報153の生成が完了する。この依存情報153の生成までは事前に行っておき、次のステップ302以降の処理は、処理対象のデータファイル154としてデータ抽出装置101が入出力装置110により受信し、記憶装置150に格納した後に実行する。
【００３３】
次に、ステップ321について説明する。ステップ321は処理対象のデータファイルから次のデータ項目を特定する。データ項目の特定とは、データファイルから読み出そうとしている項目の種類を特定することである。例えばデータファイルがXBRLのXMLである場合には、XMLのテキストを解析して、次に現れるXMLの開始タグの要素名と、必要な属性名、属性値を特定することである。すなわち、データ抽出装置101は記憶装置150に記憶した処理対象のデータファイルのXMLのテキストを順次読み込み、開始タグの要素名を取り出す。
【００３４】
また、その他のデータ項目を特定するために必要な属性を見つけるまで、開始タグ内の属性の情報を読み込む。要素名等による項目の特定のため、データ抽出装置101はあらかじめ記憶装置150に、要素名等と項目を識別する情報の対応を記録しておくものとする。データ抽出装置101は、この対応の情報により、XMLから取り出した要素名等の情報から、項目を特定し、ステップ322へ進む。なお、この段階では、XMLの要素の値を読み出す必要はない。また、ステップ321において、データファイルから次のデータ項目の特定を行う途中でデータファイルの終端に達した場合、ステップ352の計算実行へ進む。
【００３５】
次に、ステップ321で特定した項目が、指標の下位であるか否かをチェックする（ステップ322）。これは、ステップ321で特定したデータ項目が、計算式152の算出のために必要となる可能性があるか否かを確認するもので、具体的にはデータ抽出装置101が、取り出したデータ項目が依存情報153の項目601と一致するレコードを選択し、その情報（前置順602、後置順603）を取得して記憶装置150に記録する。取得できた場合には計算式152の算出のために必要となる可能性があると判断しステップ323へ進み、取得できない場合には不要であると判断してステップ321へ戻り、XMLのテキストから次の開始タグを見つける処理へと進む。
【００３６】
またここで、計算式152が複数ある場合にデータ抽出システム101は、データファイルから取り出したデータ項目が、どの計算式に影響を与える可能性があるかを判断してもよい。これは、計算式152が複数ある場合、その計算式の計算の実行をデータ抽出システム101の他の処理プロセス、処理スレッド、またはデータ抽出システム101以外のシステムが行う場合に、取り出したデータの送信先を決定するためである。これは、依存情報153の項目601が計算式であるレコードについて、その前置順602 、後置順603と、取り出したデータ項目の前置順、後置順を比較することで判断する。取り出したデータ項目が計算式の下位である場合（計算式をα、取り出したデータ項目をβとしたとき、αの前置順＜βの前置順かつ、αの後置順＞βの後置順）には、当該計算式に影響を与える可能性があると判断する。そして、以降のステップ324、ステップ340において、データ抽出システム101はデータファイルから抽出した項目とその値を抽出した場合、当該計算式を計算する他の処理プロセス、処理スレッド、他システムに、記憶装置150、入出力装置110などを利用して送信する。これを受信した他システム等は、ステップ352と同様の処理により、計算式352の計算を実行する。
【００３７】
次に、データ抽出装置101は、ステップ321で特定した項目と既にデータファイルから抽出したデータ項目との関係をチェックし、データ項目の要否を決定する（ステップ323）。この処理は抽出済み一覧155を用いて行う。抽出済み一覧155の構成を図10に示す。抽出済み一覧155は項目1001、前置順1002、後置順1003、値1004からなる表である。項目1001はデータファイルから取り出したデータの項目を識別する情報を記録する。前置順1002、後置順1003は依存情報153と同様であり、項目1001に項目601が対応する依存情報153の前置順602および後置順603を記録する。値1004は項目1001についてデータファイルから取り出した値である。例えばXBRLの財務情報であれば、項目は勘定科目を表すものであるため、値1001は勘定科目の値である。また抽出済み一覧155は、はじめは空であり、データファイルの処理を進める中で追加、削除されるものである。
【００３８】
抽出済み一覧155を用いてステップ323の処理は、次のように行う。まず、データファイルから取り出したデータ項目の前置順および後置順（ステップ322で依存情報153から取得）と、抽出済み一覧155の各レコードの前置順1002、後置順1003を比較する（抽出済み一覧155に複数のレコードが登録されている場合は複数のレコードと比較する）。データファイルから取り出したデータ項目の前置順が抽出済み一覧155の前置順より大きく、かつ、データファイルから取り出したデータ項目の後置順が抽出済み一覧155の後置順より小さい場合、取り出したデータ項目は抽出済み一覧155内の比較を行ったレコードの項目1001の下位であると判断する（図3の分岐の「廃棄」へ）。これは例えば、図7の計算式1の計算を行う場合に、データファイルから項目2の情報を取り出し、その後に項目3の情報を取り出した場合である。このとき、計算式1の計算を実行するためには、項目2の情報が存在する場合には項目3の情報は不要である。すなわち、取り出したデータ項目の値を用いなくても、抽出済み一覧155内の項目の情報により、計算式152の計算を実行可能であることが分かる。よって、この場合、取り出したデータ項目の情報は不要であるため、その情報を廃棄（データ項目を特定する情報を削除し、データの値をデータファイルから読み込まないことを決定）して、ステップ321へ戻り次のデータ項目の特定へ進む。
【００３９】
データファイルから取り出したデータ項目の前置順が抽出済み一覧155の前置順より小さく、かつ、データファイルから取り出したデータ項目の後置順が抽出済み一覧155の後置順より大きい場合、取り出したデータ項目は抽出済み一覧155内の比較を行ったレコードの項目1001の上位であると判断する（図3の分岐の「置換」へ）。これは例えば、図7の計算式1の計算を行う場合に、データファイルから項目3の情報を取り出し、その後に項目2の情報を取り出した場合である。このとき、計算式1の計算を実行するためには、項目2の情報があれば項目3の情報は不要である。すなわち、取り出したデータ項目の値を用いることで、抽出済み一覧155内の項目の情報は不要となることが分かる。よって、この場合、取り出したデータ項目の値を出力して、抽出済み一覧155の情報を更新するステップ340、ステップ341の処理へ進む。
【００４０】
その他の場合、抽出済み一覧155内の次のレコードと、同様のチェックを繰り返す。抽出済み一覧155内のいずれのレコードの項目とも、上位、下位との判断ができなかった場合には、当該データ項目は抽出済み一覧155の上位でも下位でも無いと判断する（図3の分岐の「抽出」へ）。これは例えば、図7の計算式1の計算を行う場合に、データファイルから項目3の情報を取り出し、その後に項目8の情報を取り出した場合である。このとき、計算式1の計算を実行するためには、項目3が必要になる可能性があり、項目8の値も必要になる可能性がある状態である。以降の処理で項目2や項目７の情報がデータファイルから得られなかった場合には、これらの項目の情報を組み合わせて項目2や項目７の値を算出して、そこから計算式1の計算を実行することが可能である。そのため、データファイルから取り出したデータ項目の情報を抽出するステップ324、ステップ325の処理へ進む。
【００４１】
以上のようにステップ323では、データファイルから取り出したデータ項目のラベルと、抽出済み一覧のラベルを比較することで、そのデータ項目が必要であるか否かを判断する。この判断は、取り出したデータ項目から、ツリー構造データ951を上位に辿ることでも判断することができるが、これはツリー構造データの階層の深さに処理時間が依存してしまう。また抽出済み一覧155の項目の数値の比較のみでデータが必要であるか否かを判断できるこの方法は、処理速度の向上を図ることができる。
【００４２】
図3の分岐の「置換」の場合、まず、データファイルからデータ項目の値を抽出する（ステップ340）。これはステップ321において、XMLの要素名等のみによりデータ項目の特定のみを行っていて、XMLの値を取り出していなかった場合に、そのXMLの要素の値を取り出す処理である。
【００４３】
次にデータ抽出システム101は、ステップ323において、ステップ321で取り出したデータ項目と比較を行った抽出済み一覧155のレコードを削除し、代わりに抽出済み一覧155に取り出したデータ項目とその値の情報を記録して、抽出済み一覧155のデータの置換を行う（ステップ341）。項目1001にはステップ321で取り出したデータ項目を識別する情報を記録し、前置順1002、後置順1003にはステップ322で依存情報153から取得して記憶装置150に記録しておいた前置順602、後置順603の値を記録する。また、値1004にはステップ340で抽出した値を記録する。
【００４４】
ステップ341の終了後、データ抽出システム101はステップ321へ戻る。なお、ステップ341で抽出済み一覧155にデータを記録することに加え、データの削除も行ってもよい。このことは、データファイルから取り出したデータ項目により、以降では不要であることが判断が可能である。このように判断されたデータ項目の情報を削除し、抽出済み一覧155のデータ量を削減し、以降のステップ323の処理で比較対象とする抽出済み一覧155の件数を削減する。例えば、図7に示すような構造の場合、項目3の値をデータファイルより取得し、その後項目2の値を取得した場合、計算式の算出に項目3の情報は不要である。よって、抽出済み一覧155では、不要となる項目3の情報を削除して項目2の情報を追加する。また、抽出済み一覧155とともに値1004を管理することで、不要となったデータ項目の値も削除ができることとなる。
【００４５】
図3の分岐の「抽出」の場合、まず、データファイルからデータ項目の値を抽出する（ステップ324）。この処理はステップ340と同様である。次にデータ抽出システム101は、抽出済み一覧155に取り出したデータ項目とその値の情報を記録する（ステップ325）。記録の内容はステップ341と同様である。ステップ324の終了後、データ抽出システム101はステップ321へ戻る。
【００４６】
以上により、データ抽出システム101はデータファイルから、計算に必要となる可能性のあるデータの値を抽出することを完了したこととなる。データ抽出システム101はステップ321において、データファイルの終端に達した後、実際に計算式の計算の実行を行う（ステップ352）。なお、計算の実行はデータ抽出システム101が行っても、他のシステムが行ってもよい。他のシステムが行う場合、データ抽出システム101は入出力装置110により他のシステムへ、抽出済み一覧155の項目1001と値1004の情報を送信する。また、データ抽出システム101は、ステップ321においてデータファイルの終端に達する前でも、ステップ325、ステップ341において、データファイルから項目の値を取り出した場合に、その項目の情報が得られたことで計算可能になった計算式を順次計算してもよい。
【００４７】
計算式の計算は、次のように行う（ステップ352）。複数の依存関係のあるデータ項目について、その一部のデータ項目の値が得られている場合の計算は、例えば図7で項目3と項目4と項目7の値が得られている場合、項目3と項目4から項目2の値を算出し、これにより項目2と項目7の値から計算式1の計算を実行することにより行う。これはデータファイルから値が得られる都度、その値が得られた項目について図7の上位の項目の算出が可能であれば行い、また、算出したことによりさらにその上位の項目が算出可能である場合には算出することを、図7の内容を表すツリー構造データ951で上位に辿りながら繰り返すものである。または、データファイルの全てのデータ項目を抽出後（ステップ352）、抽出済み一覧155に集められた項目1001と値1004により、行ってもよい。具体的には次のように行う。
【００４８】
ステップ325 またはステップ341で新たに抽出済み一覧155に記録した項目1001と値1004について、ツリー構造データ951の子項目902が項目1001と一致するレコードの値903に記録する。次に、記録したツリー構造データ951のレコードの親項目901を取得する（この親項目901を上位項目とする）。次に、上位項目の値が他のレコードの親項目901と一致するレコードを選択する（複数ある場合は複数選択する）。次に、選択した（1つ以上の）レコードの値903の情報を取得する。これらは上位項目の下位の項目の値である。ここでいずれかのレコードで値903が空である場合は、当該上位項目の値はその時点では算出不可能であると判断する。全てのレコードで値903に値が格納されている場合には、この上位項目の値は算出可能であると判断し、この上位項目の値を算出する（例えば足し合わせる）。そして、上位項目がツリー構造データ951の子項目902となっているレコードを特定し、その値903に算出した値を記録する。
【００４９】
なお、ステップ321でデータファイルの読み込みを終了後に計算の実行を行う場合には、上位項目の下位の項目値が全て得られない場合でも、それらの項目から上位項目を導出する条件によっては上位項目の値を導出してもよい。例えば、上位項目が下位の項目を加算したものであるときは、値が得られなかった項目は無視し（0として扱う）、その他の項目のみの加算を行う。また、この上位項目の値を算出した場合は、ツリー構造データ951のさらに上位項目の値の算出を繰り返す。これは新たに値903に記録したレコードの親項目901を前記の上位項目として同様の処理を行う。また、処理の中でツリー構造データ951から選択した上位項目が計算式であった場合で、その上位項目が算出可能であると判断できた場合には、データ抽出システム101は、計算式152を実行してその結果の算出を行う。
【００５０】
以上説明した処理により、基本的な場合について、データ抽出システム101はデータファイルから計算式152の計算に必要なデータの抽出、計算を実行したこととなる。この処理の仕組みについて、一部の処理を効率化するため、またツリー構造データ951の構造がツリーとならないような複雑な場合に対応するための、図3の処理フローの処理の別パターンについて示す。まず、図3のステップ323において、取り出したデータ項目と抽出済み一覧155の比較を行った。このとき、抽出済み一覧の件数が多い場合に処理に時間がかかる可能性がある。そこで、抽出済み一覧155をソートする方法と、抽出済み一覧155を統合する方法について示す。
【００５１】
抽出済み一覧155をソートする方法について示す。ステップ301で示した依存情報153の作成方法による、範囲ラベル（前置順、後置順）の付与方法を示した。一般に2つの項目α、βについて、範囲ラベルではαの前置順＜βの前置順でありかつ、αの後置順＞βの後置順であれば、αはβの上位にあると判断できる。このような前置順、後置順のラベル付けの方法は複数存在するが、ステップ301で示したラベル付けの方法は、一つのカウンタを更新（1を加算）しながら前置順、後置順を付与するものである。よって、一つの項目について見れば、前置順は後置順よりも必ず小さくなっている。そのため、αがβの上位にあるならば、αの前置順＜βの前置順＜βの後置順＜αの後置順の関係が成りたつ。
【００５２】
逆に、βがαの上位にあるならば、βの前置順＜αの前置順＜αの後置順＜βの後置順の関係が成りたつ。よって、抽出済み一覧155を前置順1002でソートした場合、あるレコードαについて、そのレコード以降ではαの下位のレコード、上位でも下位でもないレコードは存在しても、上位となる項目のレコードは存在しない。また、その下位となる可能性のあるレコードβについて、βの前置順＜βの後置順＜αの後置順となり、αの後置順より大きな前置順の項目は、αの下位とはならない。つまり、抽出済み一覧155を順にチェックしていき、データファイルから取り出した項目の前置順が、抽出済み一覧155の後置順1003より大きい場合、抽出済み一覧155の以降のレコードで、データファイルから取り出した項目の上位または下位となる項目は存在しないことが確定することとで、抽出済み一覧155のチェックを終了することができ、抽出済み一覧155の全体をチェックする場合に比較して短時間で処理を完了させることができる。このために、ステップ325、ステップ341で抽出済み一覧155にデータを登録する際に、前置順でソートした状態で格納するものとする。なお、ソートした状態で格納する場合でも、ステップ323において抽出済み一覧155を小さいほうから順次チェックしているため、その挿入位置を決定することが容易に可能である。
【００５３】
次に、抽出済み一覧155を統合する方法について示す。抽出済み一覧155は、図3の処理を行うなかで、徐々にデータ件数が増えていくことが想定される。このデータ件数の増加を抑えるために、依存情報153の管理内容と、記録方法を変更する。まず、依存情報153について、図6に示すものに代わり、図11の依存情報1151に示すように項目1101、前置順1102、後置順1103からなるデータを用いる。項目1101、前置順1102、後置順1103は図6の項目601、前置順602、後置順603と同様であるが、前置順、後置順の作成方法が異なる。図11は図7に示す構造を表した状態を例として示している。この図11の情報の模式図を図12に示す。図12は、図11の前置順1102、後置順1103を、前置順1102の値から後置順1103の値までの数値の範囲としたときに、各項目が占める範囲を図示するものである。このように、上位の項目は下位の項目よりも広い範囲を占める（上位が下位よりも広い範囲を占めるのは、図6でも同様である）。また、図8で示したラベル付けの方法では、カウンタを＋１ずつ更新しているため、ある項目の両端（前置順と後置順）は、他の項目の両端とは同じ数値とならないが、図11、図12の例では同じ数値となる場合がある。このようなラベル付けをすることで、隣接する項目の把握を容易とし、隣接する項目が抽出済み一覧155に登録された場合には、それらの情報を統合する。
【００５４】
まず、図11に示すようなラベルの付与方法について示す。これは図8で示したラベル付け方法において、カウンタの更新タイミングを変更するものである。具体的には、ステップ804の最後、ステップ806の最後にカウンタを更新(1を加算)していたものを、ステップ805において子の項目に対するラベル付けを行う場合に、子の項目が０個の場合、もしくは1つの場合で子の項目のラベル付けが終了した場合にカウンタを更新（1を加算）するものである。これにより、図7に示すような構造において、ツリーの葉（末端の項目）については前置順と後置順が１だけ異なり、その他の項目ではその項目の下位の葉の項目の数だけ異なることとなる（ただし、項目に子が１つのみの場合は、親の後置順は子の後置順より１だけ大きくなる。これは子が１つの項目とその子の項目について、範囲ラベルに差をつけて依存関係を把握できるようにするためである）。以上の処理により、依存情報1151の作成が完了する。
【００５５】
次に、この依存情報1151を用いた場合の抽出済み一覧155のデータ構造を図13に示す。図13の抽出済み一覧1351の項目1301、前置順1302、後置順1303、値1304は図10の抽出済み一覧155と同様であるが、一つの前置順1302、後置順1303に対して複数組の項目1301、値1304を記録可能とする。
【００５６】
次に、この依存情報1151を用いたデータ抽出処理システム101の処理について示す。具体的には、図3のステップ323の変更と、ステップ325とステップ341の後への処理の追加である。まずステップ323では前置順、後置順の比較の条件を「より大きい」「より小さい」を用いていたが、これを「より大きいか等しい」「より小さいか等しい」とする。等しいことを条件に加えるのは、前置順、後置順が図8に示したように異なる階層の項目が、前置順や後置順で同じ値を持つ場合があるためである。
【００５７】
具体的には、データファイルから取り出したデータ項目の前置順が抽出済み一覧1351の前置順より大きいか等しく、かつ、データファイルから取り出したデータ項目の後置順が抽出済み一覧1351の後置順より小さいか等しい場合、取り出したデータ項目は抽出済み一覧155内の比較を行ったレコードの項目1001の下位であることが判断する（図3の分岐の「廃棄」へ）。
【００５８】
また、データファイルから取り出したデータ項目の前置順が抽出済み一覧1351の前置順より小さいか等しく、かつ、データファイルから取り出したデータ項目の後置順が抽出済み一覧1351の後置順より大きいか等しい場合、取り出したデータ項目は抽出済み一覧1351内の比較を行ったレコードの項目1001の上位であることが判断する（図3の分岐の「置換」へ）。
【００５９】
また、ステップ325、ステップ341で抽出済み一覧155（この場合では抽出済み一覧1351）にデータを追加（または置換）した後、登録したレコードと、既存のレコードと統合できるものがある場合にはそれらのレコードを統合して記録する。具体的には、抽出済み一覧1351に登録した項目をαとした場合、抽出済み一覧1351のレコード（βとする）について、αの前置順≦βの前置順≦αの後置順≦βの後置順となるか、βの前置順≦αの前置順≦βの後置順≦αの後置順となるβがあった場合に、αとβの範囲ラベルが統合するように更新する。これは例えば、図7の項目4と項目8の情報がデータファイルから得られた場合に、抽出済み一覧でそれらの情報を統合することである。項目4と項目8は、図12に示すように範囲ラベルが連続しており、数値の範囲として統合することができる。また、さらにその後に、項目7の情報がデータファイルから得られた場合にも、抽出済み一覧1351で情報を統合する。統合する場合、αの前置順とβの前置順1302の小さいほうを新たな前置順1302とし、αの後置順とβの後置順1303の大きいほうを新たな後置順1303とする。項目1301、値1304はα、βの両方のものを記録する。
【００６０】
以上、図3で示した処理について、一部の処理を効率化する仕組みとして、抽出済み一覧155をソートする方法と、抽出済み一覧155を統合する方法を示した。次に、ツリー構造データ951がツリーとならないような場合への対応について示す。
これまでの説明においては、範囲ラベルを用いて抽出済み一覧155と、データファイルから取り出したデータ項目の依存関係をチェックする処理の前提となる依存情報153は、ツリー構造データ951が計算式をルートとするツリーの場合にのみ、図8に示した深さ優先探索による範囲ラベルを付与することができる。すなわち、構造情報151および計算式152が単純な場合、具体的には計算式152が一つのみで、ツリー構造データ951（図7に表すような構造の情報を保持する）が計算式をルートとするツリーになる場合のみに適用することができる。
【００６１】
例えば構造情報151がツリーとなっていない場合や、計算式が複数ある場合には、ツリー構造データ951を図7のように表してもツリーとはならない。このようにツリー構造データ951がツリーとならない場合については、ツリー構造データ951の内容を修正しツリー構造とするか、ツリー構造以外でも対応できるラベル付けを行う必要がある。以下、その方法として、ルートを追加する方法、リンクを切断する方法、ラベルを拡張する方法を示す。なお、ツリー構造データ951の情報は、計算式の計算実行においても用いるため、ラベル付けのためのデータとして、ラベル用データ156を用いるものとする。ラベル用データ156の構成はツリー構造データ951と同様に親項目901、子項目902を持ち、初期値としてはツリー構造データ951と同じ内容とする（ラベル用データ156は値903は持たない）。
【００６２】
次に、ルートを追加する方法について述べる。計算式が複数ある場合、ラベル用データ156はツリーとならない。これは、計算式は他のどの項目よりも上位にあり、また、計算式は依存関係が無いため、ツリーのルートが１つに定まらないためである。このような場合には、それぞれの計算式の上位に、１つの仮想的な項目を加えて、その項目をルートとすることでツリーとする。例えば、ラベル用データ156が図14の左側のような模式図1501の内容を表している場合、計算式が複数あるために図が２つに分かれ、全体としてツリーとなっていない。このような場合、図14の右側の図の模式図1502の項目0のように、上位にノードを加えれば、全体をツリーとすることができる。
【００６３】
この処理は、より具体的には、次のように行う。ラベル用データ156の全てのレコードについて、親項目901に現れる項目または計算式を取り出し、それらのうち、ツリー構造データ951の他のいずれかのレコードの子項目902に現れない項目または計算式を抽出する（ルート候補とする）。これらの項目または計算式が複数あった場合、それぞれについてラベル用データ156に新たにレコードを追加し、親項目901は他の項目と区別できる符号を記録し、子項目902には抽出した項目または計算式を記録する。
【００６４】
以上の処理により、図14の左側の図のような場合には、全体をツリーに変換することが可能となり、深さ優先探索でのラベル付けが可能となる。なお、この方法が利用できるのは、ラベル用データ156が計算式ごとに複数のツリーに分かれている場合である。これは複数あるルート候補から、ラベル用データ156を下位に辿った場合に、同一の項目または計算式が現れないことにより確認する（ルート候補からラベル用データ156の子項目902を特定し、その子項目902が他のレコードの親項目901となるレコードを特定する。これを再帰的に繰り返し、特定したレコードの子項目902となる項目に、重複がないことを確認する）。
【００６５】
次に、リンクを切断する方法について述べる。計算式が複数ある場合、それらの計算式が用いるデータ項目間に依存関係があると、ラベル用データ156がツリーとならない。例えば図15の左側に表すような場合（1501）、2つの計算式が依存関係を持つ項目1と項目5を用いるため、全体がツリーとならない。また、ルートの追加で示した方法を行っても、この例ではツリーとすることができない。（複数あるルート候補から、ラベル用データ156を下位に辿ると、項目5、項目6、項目7がそれぞれのルート候補の下位に共通して現れる。
【００６６】
このような場合、図15の右側（1502）に示すように、既存のリンクを１つ切断することで、共通に現れる項目をなくし、ルートの追加で示した方法で全体をツリーに変換できるようになる。これは、ラベル用データ156で必要な情報は、各データ項目と計算式の依存関係であるが、依存関係の全てが必要ではないことによる。例えば1502に示す例の項目5の値は、項目3の算出に必要であることを示すが、項目5は計算式2の算出に利用される。そのため、項目3の値がデータファイルから得られたとしても、項目5の値が必要であることには変わりが無い。図3に示したような方法で、データファイルから項目3の情報が得られた後は、その下位の項目5の情報をデータファイルから抽出しないこととしてはいけない。そこでこのような場合には、項目5から上位へのリンクを切断することで、図3の処理の整合性を確保し、かつ、ラベル用データ156をツリーに変換できるようになる。
【００６７】
また、ステップ322で、データファイルから取り出した項目がいずれの計算式152に影響を与えるかの判断を行ったが、これを正しく行うために、リンクの切断後、1つリンクを加える。これは図15の右側の1502における計算式2から計算式１へのリンクであり、このリンクにより、項目5、項目6、項目7が計算式１にも影響を与えることを表現する。（図15の右側に示すラベル用データ156では項目3と項目5のリンクを切断しているが、ツリー構造データ951としては、項目3を親項目901とするレコードの一つに子項目902が項目5であるレコードがある。そのため、ラベル用データ156でリンクを切断していてもステップ352で項目5から項目3を算出できる）
この処理は、より具体的には次のように行う。まず、複数ある計算式152を算出するために直接必要な項目の集合を計算式ごとに特定する。次にそれらの項目について、ラベル用データ156内での依存関係を確認する。ある計算式αの算出に必要な項目の集合（項目α１、α２・・・とする。これは例えば計算式がα１＋α２＋・・・等の場合）と、他の計算式βの算出に必要な項目の集合（項目β１、β２・・・とする）を特定する。このとき、α１、α２、・・・などαに必要な項目の全てが、ラベル用データ156において、βに必要な項目β１、β２、・・・のいずれか一つ（β０とする）の項目の下位にあり、かつ、α１、α２などがβ１、β２などのいずれの項目よりも上位にない場合にリンクの切断を行える。このとき、α１、α２、・・・の中で、もっともβ０に近いものから、β０へ向かうリンクを切断する。例えば図15の1501では、計算式2をα、計算式1をβとすると上記の条件が成立する。
【００６８】
この処理は、データ抽出システム101が次のように処理を行う。まず、計算式152のうち一つ（αとする）について、直接必要とする項目を特定する。次に、計算式152のうち別の一つ（βとする）について、直接必要とする項目を特定する。これらは、計算式152から、当該計算式を構成するデータ項目を特定する情報を抽出することによって行う。次に、βが直接必要とする項目から１つを選択し、ラベル用データ156内で当該項目が親項目901となっているレコードから下位に辿り（当該レコードの子項目902が他のレコードの親項目901となっているレコードを探す。これを再帰的に繰り返す）、子項目902にαが必要とする項目の全てが現れるか否かを確認する。現れない場合には、βが直接必要とする項目のうち他の項目を選択して同様に確認する。いずれのβが直接必要とする項目でも下位にαが必要とする項目の全てが現れない場合は、当該βとαの組み合わせではリンクの切断は不可能であると判断する。
【００６９】
現れた場合には、次にαが直接必要とする項目のうち一つを選択し、それがβが直接必要とする項目の上位に無いことを確認する（ラベル用データ156で、αが直接必要とする項目が子項目902となるレコードの親項目901、その親項目901が他のレコードの子項目902となるレコードを探す。これを再帰的に繰り返す）。これをαが直接必要とする項目の全てで確認し、βが直接必要とする項目が上位に無いことを確認する。αが直接必要とする項目のいずれか一つでも、上位にβが直接必要とする項目が無い場合には、当該βとαの組み合わせではリンクの切断は不可能であると判断する。このようにして複数ある計算式152から他のα、βの組み合わせについて同様に調べる。リンクの追加については、上記のαとβにおいて、αを子項目902、βを親項目901とするレコードを追加する。
【００７０】
上記のようにルートの追加、リンクの切断を行ってもラベル用データ156がツリーとならない場合がある。例えば図16の模式図1601に示すような場合、項目5が複数の親項目を持っているため、ルートの追加やリンクの切断ではツリーに変換することができない。そこでこのような場合には、図17の模式図1701と模式図1702のようにツリーを仮想的に２つに分割し、それぞれについてラベル付けを行うものとする。このように分割することで、ある項目と他の項目、またはある項目と計算式の依存関係は、図17のいずれかのツリーで上位または下位の関係にある場合、元の図16でも上位または下位の関係にあると判断できる。分割は、ラベル用データを複数個用意し、それぞれのラベル用データに、分割したツリーのそれぞれのデータを格納することによって行う。
【００７１】
なお、本実施例では、分割の対象は図16のように親項目を複数持つ項目が、１つのみか、複数ある場合でもそれらの項目同士に依存関係は無いものとする。（末端または末端に近い部分でのみ親項目を複数持つ項目があり、そのような項目の下位には親項目を複数持つ項目はない。）
このような図の分割は、次のように行う。まず、ツリー構造データ951の複数のレコードで子項目902が共通するレコードを抽出する（下位共通部分とする）。このレコード数だけのツリー（ラベル用データ）に分割することとなる。次に、子項目902が共通するレコードそれぞれから上位に辿る（親項目901が他のレコードの子項目902となるレコードを抽出する。これを再帰的に繰り返す）。このとき、子項目902が共通するレコードそれぞれから辿ったときに、共通して現れるレコード（上位共通部分とする）と、共通して現れないレコード（個別部分とする）を抽出する。上位共通部分、下位共通部分から下位に辿り（子項目902が他のレコードの親項目901となるレコードを特定する。これを再帰的に繰り返す）、現れるレコードを分割したラベル用データ156のそれぞれに加える。ただし、個別部分のレコードが現れた場合は、再帰的な処理を行わない。次に個別部分から下位に辿り（子項目902が他のレコードの親項目901となるレコードを特定する。これを再帰的に繰り返す）、現れるレコードをラベル用データのそれぞれ１つに加える。例えば図16では、上位共通部分はなく、下位共通部分は、項目5以下の部分である。ただし、共通部分のレコードが現れた場合は、再帰的な処理を行わない。個別部分は、計算式１から項目2、項目3、項目5につながるリンクの部分と、計算式１から項目6、項目7、項目5につながるリンクである。共通部分の下位は分割後もそれぞれの分割したグループに共通に属し、個別部分とその下位はグループの１つにのみ属する。
【００７２】
このようにすることで、ラベル用データ156を複数のツリー（複数のラベル用データ）に分割することができた。これら複数のツリーのそれぞれについて依存情報153を作成することで、項目や計算式間の依存関係は、いずれかのツリーの依存情報153で上位または下位にあると判断できれば、それらの項目や計算式は上位または下位にあると判断できる。よって、図3の処理においても、複数のツリーごとの依存情報153を管理することで処理を行うことが可能となる。また、抽出済み一覧155も、前置順1002、後置順1003を一組ではなく、それぞれのツリーごとに管理することで、データファイルから取り出したデータ項目と、抽出済み一覧との依存関係の確認も行える。
【００７３】
しかし、この場合、依存情報153においては、ツリーごとに前置順601、後置順602を管理することとなり、これらのデータ量が増加してしまう。このデータ量を抑えるために、依存情報153を図18に示す依存情報1851のような構成とする。依存情報1851は依存情報153と同様な構成だが、後置順が後置順ア1803と後置順イ1804の２つを持つ。これは、前置順601、後置順602をツリーごとに管理するのではなく、前置順については共有し、後置順のみツリーごとに管理するものである。前置順は複数のツリーで、その順序に矛盾が生じないような数値を各項目に付与する。ツリーが３つ以上の場合は後置順ア1803、後置順イ1804の２つではなく、これを3つ以上にする。以下、ツリーが2つの場合について示すが、3つ以上の場合も同様である。
【００７４】
依存情報1851のラベル付け方法について説明する。まず、複数のツリー（ラベル用データ）のうち一つについて、図8で示した方法によりラベル付けを行い、前置順1802、後置順ア1803に記録する。次に別のツリーについて、図8で示した方法と同様にラベル付けを行い、後置順については後置順イ1804にそのまま記録する。このとき、前置順1802については始めのツリーへのラベル付けと重複するため、これと矛盾がないようにラベル付けする。具体的には、ルートとなる項目に既に前置順1802が付与されている場合はその値を保持してカウンタをその値にする。その後、図8でカウンタを1ずつ加算していたが、この加算する数値を1またはより小さい数値として処理を行う。ラベル付けの深さ優先探索において、既に前置順1802が付されている項目があった場合には、そのときのカウンタが前置順1802より小さいか等しい場合は、カウンタをその前置順1802にして以降の処理を進める。カウンタが既にある前置順1802より大きい場合には、それまでの前置順と矛盾となってしまうため、2つ目ツリーにおけるラベルを一旦削除し、カウンタに加算する数値を小さくして（例えば半分にする）、2つ目のツリーのラベル付けをやり直す。3つ以上のツリーがある場合には同様に繰り返す。
【００７５】
なお、複数あるツリーについてラベル付けを行う順序によっては、上記により矛盾なく前置順を付与できない場合がある（カウンタを更新する値を小さくしても、ラベル付けができない）。この場合は複数あるツリーから、ラベル付けを行うツリーの順序を変えてやり直す。また、ツリー構造データ951について、ステップ805で参照すべき子項目902が複数ある場合には、このうちのどの子項目902について、先にラベル付けするかを変更してやり直す。以上の処理により、矛盾の無い前置順を付与できるまで処理を繰り返す。
【００７６】
図18の依存情報1851は、依存情報153と同様に項目、計算式間の依存関係を示すが、後置順が複数あるため、依存情報の確認は、後置順の比較を行う際に、比較対象の項目について、後置順ア1803または後置順イ1804の両方の値が揃っているものを使う。また、抽出済み一覧155についても後置順1003の欄を増やして、後置順ア、後置順イを記録できるようにし、ステップ323においてデータファイルから取り出した項目と抽出済み一覧とのチェックでは、データファイルから取り出した項目の後置順について依存情報1851から複数の後置順の情報を取得し、これと抽出済み一覧の複数の後置順をチェックする（後置順ア、後置順イで比較対象の両方で値があるものを用いる）。
【００７７】
データ項目間に他のデータ項目の値を算出可能であるというような依存関係があるデータファイルに対して、データファイルから抽出したい情報の計算式の計算に必要なデータ項目の値を効率よく特定することで、計算式の計算結果を効率よく得ることが可能となる。
【図面の簡単な説明】
【００７８】
【図１】システムの全体構成図である。
【図２】XBRLインスタンスの勘定科目の情報の例を示す図である。
【図３】本発明の全体の処理フローである。
【図４】処理対象のデータファイルの論理的な構造を示す構造情報の表である。
【図５】構造情報の表す内容の模式図である。
【図６】データファイルの処理を効率化するために利用する処理情報の表である。
【図７】処理情報の表す内容の元となるツリー構造データの模式図である。
【図８】処理情報を作成するための処理フローである。
【図９】データ項目と計算式の依存関係を表すツリー構造データの表である。
【図１０】データファイルから取り出したデータを管理する抽出済み一覧の表である。
【図１１】抽出済み一覧のレコードを統合するための依存情報の表である。
【図１２】抽出済み一覧のレコードを統合するための依存情報の内容の模式図である。
【図１３】抽出済み一覧のレコードを統合するための抽出済み一覧の表である。
【図１４】ルートの追加によるツリーへの変形を表す模式図である。
【図１５】リンクの切断によるツリーへの変形を表す模式図である。
【図１６】ツリーの分割によりツリーへの変形の対象の例を表す模式図である。
【図１７】ツリーの分割によりツリーへの変形の対象の結果を表す模式図である。
【図１８】依存情報の変形例である依存情報1851を示す図である。
【符号の説明】
【００７９】
101 データ抽出装置
110 入出力装置
120 処理装置
150 記憶装置
151 構造情報
152 計算式
153 依存情報
154 処理対象データ
155 抽出済み一覧
161 依存情報生成機能
162 抽出機能
163 計算実行機能
951 ツリー構造データ
1151 依存情報
1351 抽出済み一覧
1851 依存情報
【図１】
2010170287.tif 000003
【図２】
2010170287.tif 000004
【図３】
2010170287.tif 000005
【図４】
2010170287.tif 000006
【図５】
2010170287.tif 000007
【図６】
2010170287.tif 000008
【図７】
2010170287.tif 000009
【図８】
2010170287.tif 000010
【図９】
2010170287.tif 000011
【図１０】
2010170287.tif 000012
【図１１】
2010170287.tif 000013
【図１２】
2010170287.tif 000014
【図１３】
2010170287.tif 000015
【図１４】
2010170287.tif 000016
【図１５】
2010170287.tif 000017
【図１６】
2010170287.tif 000018
【図１７】
2010170287.tif 000019
【図１８】
2010170287.tif 000020