(57)【特許請求の範囲】
【請求項１】
論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付部と、
前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加部と、
前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合部と、
前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得部と、
前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成部と、
前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成部と、
前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付部と、
を備えるデータベース処理装置。 
【請求項２】
前記入力受付部は、前記構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、さらに、入れ子構造による３重以上のループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付け、
前記直積結合部は、さらに、前記対応付部により対応付けられた前記直積結合テーブルと、前記対応付部による対応付が行われていない前記単一ループテーブルと、直積結合しした多重直積結合テーブルを作成し、
前記結合テーブル作成部は、さらに、前記対応付部による対応付が行われていない前記単一ループテーブルと、前記対応付部により対応付けられた前記ループ間結合テーブルとを結合した多重ループ間結合テーブルを作成し、
前記対応付部は、さらに、前記直積結合テーブルと前記多重直積結合テーブルとを対応付けると共に、対応付けられた前記多重直積結合テーブルと前記多重ループ間結合テーブルとを対応付けること、
を特徴とする請求項１に記載のデータベース処理装置。 
【請求項３】
複数の識別子の組合せ毎に、ユニークなリンク識別子で更新する更新部をさらに備えることを特徴とする請求項１に記載のデータベース処理装置。 
【請求項４】
前記結合テーブル作成部は、複数の前記単一ループテーブルを結合したあと、前記問合要求の入れ子構造内部に示された結合条件に応じた所定の演算を行うことを特徴とする請求項１乃至３のいずれか一つに記載のデータベース処理装置。 
【請求項５】
前記入力受付部は、ＸＭＬ形式の前記構造化データベースに対して、ＸＱｕｅｒｙ形式による前記取得要求の入力を受け付けること、
を特徴とする請求項１乃至４のいずれか一つに記載のデータベース処理装置。 
【請求項６】
論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、
前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、
前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、
前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、
前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、
前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、
前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、
を有することを特徴とするデータベース処理方法。
【請求項７】
論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、
前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、
前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、
前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、
前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、
前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、
前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、階層構造を持った構造化文書に対して処理を行うデータベース処理装置、方法及びプログラムに関するものである。
【背景技術】
【０００２】
近年、ＸＭＬ等の構造化文書の普及に伴い、構造化文書を格納するデータベース（例えばＸＭＬデータベース）も利用される傾向になる。そして、このようなデータベースに対して問い合わせを行うための言語として、ＸＱｕｅｒｙ等が提案されている。
【０００３】
ＸＱｕｅｒｙは、ＸＭＬ問い合わせのための関数型言語であり、ＦＬＷＲ構文が特徴となっている。このＦＬＷＲ構文は、for節、let節、where節、return節からなる構文をいう。このＸＱｕｅｒｙを用いた処理は、例えば非特許文献１に記載されている。
【０００４】
そして、ＸＱｕｅｒｙのＦＬＷＲ構文において、for節はシーケンス内の各項目を変数にバインドする。これに対して、let節はシーケンスをまるごと変数にバインドする。このfor節とlet節を組み合わせることで、ＸＭＬに相応しい高度な問い合わせが行える(なお、ＸＭＬ再構成や集計はlet節無しでは表現できない)。
【０００５】
ところで、ＸＱｕｅｒｙにおいては、複数のfor節を用いて入れ子構造にした問い合わせもlet節を用いて呼び出すことができる。
【０００６】
ところで、現在のデータベース製品では、let節は関数系言語の処理系に準じた実装をしていることが多い。関数系言語の処理系に準じた実装では、上述したような入れ子構造で問い合わせを行った場合、入れ子構造のうち外側のＸＱｕｅｒｙと、内側のＸＱｕｅｒｙとの間に入出力関係があるとみなされ、外側のＸＱｕｅｒｙの処理が終了した後に、当該処理結果を、それぞれ変数として内側のＸＱｕｅｒｙに渡して処理が行われることになる。
【０００７】
【非特許文献１】M. Fernandez, J. Simeon, B. Choi, A. Marian, G. Sur. Implementing ＸＱｕｅｒｙ1.0: The Galax Experience. VLDB 2003.
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＸＱｕｅｒｙの高度な問い合わせを行うには、上述したような入れ子構造が不可欠であるが、関数型言語の処理系に準じたものである場合、２重以上の入れ子構造では計算量が増大するという問題が生ずる。
【０００９】
つまり、関数型言語の処理系の場合、外側の多重ループを処理してから内側の処理を行うので、多重ループの回数だけ内部のＸＱｕｅｒｙによる処理が呼び出されることになる。これにより、入れ子の数を一つ増加させるだけで計算量が膨大になる。
【００１０】
本発明は、上記に鑑みてなされたものであって、問い合わせが行われた場合における計算量を抑止するデータベース処理装置、方法及びプログラムを提供する。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するために、本発明にかかるデータベース処理装置は、論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付部と、前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加部と、前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合部と、前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得部と、前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成部と、前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成部と、前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付部と、を備える。
【００１２】
また、本発明にかかるデータベース処理方法は、論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、を有することを特徴とする。
【００１３】
また、本発明は、論理構造を有する構造化データベースに対して、当該構造化データベースに含まれている部分構文木に格納された各要素と対応付けられた情報を別の部分構文木から取得する処理を、入れ子構造による多重ループの各ループで変数として前記各要素を使用して要求する取得要求の入力を受け付ける入力受付ステップと、前記多重ループのループ毎に作成されると共に前記各要素が別レコードとして格納された要素テーブルに対して、レコード毎にユニークな識別子を付加する識別子付加ステップと、前記識別子が付加された前記要素テーブル間を直積結合して、レコード毎に複数の識別子が付加された直積結合テーブルを作成する直積結合ステップと、前記要素テーブル毎の前記各要素に従って、問合要求で取得対象となっている情報を取得する情報取得ステップと、前記ループ単位で、取得した前記情報と前記識別子と前記要素とを対応付けたレコードを保持する単一ループテーブルを作成する単一ループテーブル作成ステップと、前記ループ毎に作成された単一ループテーブルを結合して、複数の識別子が付加されたループ間結合テーブルを作成する結合テーブル作成ステップと、前記直積結合テーブルに付加された複数の前記識別子と、前記ループ間結合テーブルに付加された複数の前記識別子とに基づいて、前記直積結合テーブル及び前記ループ間結合テーブルの各レコード間を対応付ける対応付ステップと、をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、構造化データベースに対する処理で計算量を低減させるという効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、この発明にかかるデータベース処理装置、方法及びプログラムの最良な実施の形態を詳細に説明する。
【００１６】
（第１の実施の形態）
図１に示すように、第１の実施の形態にかかるデータベース処理装置１００は、問合受付部１０１と、入れ子ＸＱｕｅｒｙプラン生成部１０２と、単一ＸＱｕｅｒｙプラン生成部１０３と、ＸＱｕｅｒｙプラン実行部１０４と、直積結合オペレータ部１０５と、自然結合オペレータ部１０６と、リンク更新オペレータ部１０７と、テストオペレータ部１０８と、データ取得オペレータ部１０９と、索引取得オペレータ部１１０と、出力部１１２と、階層テーブル記憶部１１１と、ＸＭＬデータベース１１３とを備える。
【００１７】
ＸＭＬデータベース１１３は、複数の階層構造を持った構造化文書であるＸＭＬデータが格納されているデータベースである。ＸＭＬデータでは、構造化文書を構成する個々のパーツを「要素」(エレメント：Element)と呼ぶ。この要素はタグ(Tag)を使って記述される。具体的には、要素の始まりを示すタグ(以下、開始タグと呼ぶ)と、終わりを示すタグ(以下、終了タグと呼ぶ)の２つのタグでデータを挟み込んで、1つの要素を表現している。このような開始タグと終了タグで挟み込まれたテキストデータは、１つの要素に含まれるテキスト要素(テキストノード)となる。
【００１８】
図２に示す例では、開始タグ<ROOT>及び終了タグ</ROOT>で挟み込まれた複数の部分的なＸＭＬデータで構成されている。部分的なＸＭＬデータとしては、開始タグ<所属データ>及び終了タグ</所属データ>で挟み込まれた会社の所属部門名に関するデータ、開始タグ<年代データ>及び終了タグ</年代データ>で挟み込まれた西暦年代に関するデータ、開始タグ<従業員データ>及び終了タグ</従業員データ>で挟み込まれた従業員に関するデータとを含んでいる。このように、図２で示されたＸＭＬデータでは、異なる部分構文木毎に、及び異なる階層毎に、種類が異なるデータを保持するように構成されている。これにより、１つのＸＭＬデータで様々な種類のデータを保持することができる。
【００１９】
図２に示したＸＭＬデータは、図３に示すような構文木で表現することができる。ＸＭＬデータは、ＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）に似た形式でオブジェクトとリンクで表現される。これらオブジェクトは、上述した各要素を表現している。
【００２０】
例えばオブジェクトＥ１は、<ROOT＞を示す要素を示している。つまり、<ROOT>オブジェクトの直下に、１件の<所属データ>オブジェクトが存在し、<ROOT>オブジェクトから親子関係を示すリンクで結合されていることが表現されている。
【００２１】
また、構文木の一部を部分構文木と呼ぶこととする。図３に示す構文木では、所属データＥ２以下の部分構文木、年代データＥ７以下の部分構文木、及び従業員データＥ１２以下の部分構文木で構成されていることになる。これら部分構文木は、さらに細かい部分構文木から構成されている。例えば所属データＥ２以下の部分構文木は、所属Ｅ３以下の部分構文木、及び所属Ｅ５以下の部分構文木で構成されている。
【００２２】
また、当該オブジェクトの最下層には、上述したテキストノードを表現するテキストオブジェクトが存在している。これらテキストオブジェクトは、図３においては矩形で表されている。例えばオブジェクトＥ４は、テキスト要素として「分散」が格納されたテキストノードとなる。
【００２３】
階層テーブル記憶部１１１は、ＸＱｕｅｒｙの実行中に作成される階層テーブルを複数記憶する。このテーブル間の階層関係は、ＸＱｕｅｒｙの入れ子構造に応じて形成されるものとし、後で詳細に説明する。
【００２４】
また、階層テーブル記憶部１１１においては、階層性をリンクで表現している。このようにテーブル間の階層性を表現する技術は、ＲＤＢにおけるリレーションと等価な技術として説明を省略する。なお、階層テーブルは、従来のＲＤＢと同様に、カラム、レコードという要素から構成される。
【００２５】
上述したＸＭＬデータベース１１３及び階層テーブル記憶部１１１は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、光ディスク、メモリカード、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの一般的に利用されているあらゆる記憶手段により構成することができる。また、本実施の形態においてはＨＤＤを用いて永続的に記憶するが、必要に応じてＲＡＭに一時的に記憶しても良い。
【００２６】
図１に戻り、問合受付部１０１は、ＸＭＬデータベース１１３に対してＸＱｕｅｒｙによる問い合わせ要求の入力を受け付ける。
【００２７】
次に、ＸＱｕｅｒｙの言語仕様について、手続き的な観点で説明する。ＸＱｕｅｒｙは、上述したようにfor節、let節、where節、return節で構成されている。for節の構文は、「for  変数  in  式」で表される。for節の構文は、式を満足する値を変数に代入してループさせるという命令を示している。
【００２８】
let節の構文は、「let  変数  ：＝  式」で表される。let節の構文は、式を満足する値を集約してシーケンスとして変数に代入させるという命令を示している。なお、シーケンスとは、フラットなリストを示している。
【００２９】
where節の構文は、「where  式」で表される。where節は、式に応じて繰り返されるループを制限するものである。つまり、where節を含む命令文では、式で表された条件を満足する場合にループ処理を行い、式で表された条件を満たしていない場合にループをスキップさせるという命令を示している。
【００３０】
return節の構文は、「return  式」で表される。return節は、ＸＱｕｅｒｙを処理した結果をフォーマット化して出力するためのものである。このため、return節に含まれている式などには、変数を含む任意のＸＭＬデータを記述することができる。
【００３１】
これらＦＬＷＲ構文で用いられる変数は、「＄文字列」の形で定義する。この定義された変数は、主問い合わせ及び副問い合わせなどの入れ子構造により２重宣言された場合を除き、同じ文字列を持つ変数は同一のものと見なされる。
【００３２】
また、ＸＭＬデータの要素間の階層条件を指定するパス演算子は、ＸＱｕｅｒｙでは以下のようなものがある。パス演算子の例について３種類説明する。まず、“/”は要素間の親子関係を表す。具体的には、“/”の右側にある要素が、“/”の左側にある要素の子に該当することを示す。
【００３３】
次に、“//”は要素間が先祖子孫関係を表す。具体的には、“/”の右側にある要素が、“/”の左側にある要素の子孫に該当することを示す。最後に、“.”は任意の要素を表す。なお、パス演算子はこれらに制限するものではなく、他の演算子による処理を含んでいても良い。
【００３４】
このように、ＸＱｕｅｒｙは、ＸＭＬへの問い合わせのための関数型言語である。ところで、従来からＲＤＢに対して問い合わせを行う言語としては、ＳＱＬが存在しているが、ＳＱＬは宣言的な言語であるのに対して、ＸＱｕｅｒｙは関数型言語としての特徴を有する。
【００３５】
そして、問合受付部１０１は、上述した構文やパス演算子を含むＸＱｕｅｒｙデータの入力を受け付ける。このＸＱｕｅｒｙデータは、ユーザ又は他システム等から入力されたものとする。本実施の形態にかかるデータベース処理装置１００では、入れ子構造を有するＸＱｕｅｒｙデータの処理に特徴がある。次に、入れ子構造を有するＸＱｕｅｒｙについて説明する。
【００３６】
図４に示したＸＱｕｅｒｙデータは、「ＸＭＬデータベースのルートの子孫にある所属($x)とルートの子孫にある年代($y)の組合せを作りなさい。各組合せについてその組合せ(所属と入社年代)に合致するルートの子孫にある従業員($w)を取り出して、そのテキスト(従業員名)をシーケンスにして返しなさい」という要求を意味している。
【００３７】
言い換えると、図４に示したＸＱｕｅｒｙデータは、ＸＭＬデータベースに対して、当該ＸＭＬデータベースに含まれている部分構文木に格納された各要素の組合せを作成した後、当該組合せに合致する情報を別の部分構文木から取得する処理を、２重ループの各ループで変数として各要素を使用して要求することを意味する。なお、当該ＸＱｕｅｒｙにおいて、２重ループとは、“for  $x  in  //所属”によるループと、“for  $y  in  //年代”によるループと、で構成されている。
【００３８】
図４に示したＸＱｕｅｒｙで、図２に示したＸＭＬデータを処理した場合、データベース処理装置１００は、図５に示すＸＭＬデータを作成する。つまり、図４に示したfor節、let節及びwhere節に従って取得したデータを用いて、return節で定義されたフォーマットに従ったＸＭＬデータを作成される。
【００３９】
次に、ＸＱｕｅｒｙによるＸＭＬデータの処理を、従来からの処理手順で行った例について、図６−１及び図６―２を用いて説明する。従来のＸＱｕｅｒｙの処理では、入れ子構造の内部にlet節がある場合、当該入れ子構造の外側と、内側との間には入出力関係があるとみなされる。つまり、入れ子構造の外側のＸＱｕｅｒｙ処理が終了した後に、処理結果を入力変数の組に設定し、内側のＸＱｕｅｒｙに渡して処理を行うことになる。次に詳細な例について説明する。
【００４０】
まずは、従来のデータベース処理装置では、データ取得オペレータを用いて、$xに対応するデータ列をＸＭＬデータから取得して、テーブルT1を作成する（ステップＳ６０１）と共に、$yに対応するデータ列をＸＭＬデータから取得して、テーブルT2を作成する（ステップＳ６０２）。これらステップＳ６０１及びステップＳ６０２の処理は、図４に示すＸＱｕｅｒｙの“//”という演算子に対応している。
【００４１】
このようにして作成されたテーブルT1は、1カラム、２レコードで構成される。図６−１に示すように、テーブルT1の各レコードには、ＸＱｕｅｒｙの“//所属”に対応する“分散”と“軽量”とがそれぞれ格納されている。
【００４２】
テーブルT2も同様に1カラム、２レコードで構成され、ＸＱｕｅｒｙの“//年代”に対応する“1990”と“2000”とがそれぞれ格納されている。
【００４３】
次に、従来のデータベース処理装置では、直積結合オペレータを用いて、テーブルT1とテーブルT2との直積結合の演算を行い、テーブルT3を作成する（ステップＳ６０３）。図６−１に示すように、作成されたテーブルT3は、２カラム、４レコードで構成されている。
【００４４】
上述したステップＳ６０１〜Ｓ６０３までの処理が、入れ子構造の外側の処理に該当する。上述した外側のＸＱｕｅｒｙ処理が終了した後、テーブルT3に格納された各レコードの情報を入力変数の組としてセットし、内側のＸＱｕｅｒｙに渡して処理が行われる。
【００４５】
まず、従来のデータベース処理装置は、テーブルT3のレコード毎に複製を行う。具体的にはテーブルT3の１レコード目を複製して、１レコードだけで構成されたテーブルT4を作成する（ステップＳ６０４）。他のレコードについても同様に、テーブルT3の２レコード目を複製して、テーブルT5を作成し（ステップＳ６０５）、テーブルT3の３レコード目を複製して、テーブルT6を作成し（ステップＳ６０６）、テーブルT3の４レコード目を複製して、テーブルT7を作成する（ステップＳ６０７）。
【００４６】
ところで、図２に示したＸＭＬデータベースには、予め２種類の索引データが付与されているものとする。一方は、所属/text()をキーにして従業員/text()の集合を返す索引１であり、もう一方は、入社年代/text()をキーにして従業員/text()の集合を返す索引２とする。
【００４７】
そして、従来のデータベース処理装置は、索引取得オペレータを用いて、テーブルT4の第１カラムを検索キーとして上述した索引１にアクセスする。つまり、テーブルT4は、[“分散”, “1990”]という1つのレコードで構成されているため、索引取得オペレータ部を用いて第１カラム“分散”を検索キーとして索引１にアクセスし、当該検索キーの条件に該当する集合を取得する（ステップＳ６０８）。当該処理により取得した集合は、テーブルT8の第３カラムに展開される。図６−１に示すように、取得した集合“服部”、 “金井”、 “黒川”は、それぞれ別レコードとしてテーブルT8に格納される。
【００４８】
さらに、テーブルT5に対しても第１カラム“分散”を検索キーとして索引１にアクセスして、集合を取得した後、テーブルT9を作成する（ステップＳ６０９）。また、テーブルT6及びテーブルT7においても同様の処理を行う（ステップＳ６１０〜Ｓ６１１）。
【００４９】
次に、従来のデータベース処理装置は、データ取得オペレータを用いて、テーブルT8の第３カラムの従業員の名前を検索キーとして、ＸＭＬデータベースから当該従業員の名前と対応付けられている入社年代を取得する（ステップＳ６１２）。そして、取得した入社年代を第４カラムに設定したテーブルT12を作成する。
【００５０】
また、テーブルT9、T10、T11についても同様に、第３カラムの従業員の名前を検索キーとして取得した入社年代で、テーブルT13、T14、T15を作成する（ステップＳ６１３〜Ｓ６１５）。
【００５１】
そして、従来のデータベース処理装置は、テストオペレータを用いて、テーブルT12に対して、第２カラムと第４カラムが等しいという比較条件でテストし、図６−２に示すテーブルT16を作成する（ステップＳ６１６）。
【００５２】
また、テーブルT13、T14についても同様に、第２カラムと第４カラムが等しいという比較条件でテストし、図６−２に示すテーブルT17、T18を作成する（ステップＳ６１７〜S６１８）。さらに、また、テーブルT15についても同様に、第２カラムと第４カラムが等しいという比較条件でテストするが、一致するレコードが無いため、最終的なテーブルは空レコードとなり、テーブルは作成されない（ステップＳ６１９）。
【００５３】
次に、従来のデータベース処理装置では、テーブルT3に対して、作成したテーブルT16〜T18を関連付ける処理を行う（ステップＳ６２０）。当該処理により、テーブルT19からテーブルT16、T17、T18に対して片方向リンクを張り付けることができる。
【００５４】
これらテーブルT19、T16、T17、T18に格納された情報を、図４に示すＸＱｕｅｒｙのreturn節で記述されたフォーマットで整形することで、図５に示すＸＭＬデータを得ることができる。上述した従来のデータベース処理装置の処理では、直積結合で生成されたテーブルのレコード毎に処理を行うため、計算量が膨大になるという問題が生じていた。これに対して、本実施の形態にかかるデータベース処理装置１００では、後述する構成を備えることで、計算量の増加を抑止できる。
【００５５】
入れ子ＸＱｕｅｒｙプラン生成部１０２は、識別子付加部１２１と、対応付部１２２と、テーブル作成部１２３と、直積結合部１２４と、索引情報取得部１２８と、を備え、問合受付部１０１が入力を受け付けたＸＱｕｅｒｙデータが入れ子構造を有している場合に、当該入れ子構造の一部をなすＸＱｕｅｒｙデータを抽出し、入れ子を処理するためのプランを出力する。なお、抽出されるＸＱｕｅｒｙデータについては後述する。
【００５６】
単一ＸＱｕｅｒｙプラン生成部１０３は、問合受付部１０１が入力を受け付けたＸＱｕｅｒｙデータが入れ子構造を有していない場合に、当該ＸＱｕｅｒｙデータを処理するためのプランを出力する。
【００５７】
また、問合受付部１０１が入力を受け付けたＸＱｕｅｒｙデータから入れ子ＸＱｕｅｒｙプラン生成部１０２が入れ子構造の一部をなすＸＱｕｅｒｙデータを抽出した場合、単一ＸＱｕｅｒｙプラン生成部１０３は、抽出したＸＱｕｅｒｙデータ毎に、当該ＸＱｕｅｒｙデータを処理するためのプランを出力する。当該出力されるプランは後述する各オペレータ部による処理の系列で表される。なお、単一ＸＱｕｅｒｙプラン生成部１０３で生成されたプランは、入れ子ＸＱｕｅｒｙプラン生成部１０２に出力される。次に、ＸＱｕｅｒｙデータを処理するためプランを作成する構成要素について説明する。
【００５８】
テーブル作成部１２３は、要素テーブル作成部１２４と、単一ループテーブル作成部１２５と、結合テーブル作成部１２６と、直積結合部１２７と、を備え、テーブルを作成するプランを生成する。これにより、ＸＱｕｅｒｙプラン実行部１０４を介してテーブルが作成される。なお、テーブル作成の詳細な処理については後述する。以下に各構成が作成するテーブル生成プランについて説明する。
【００５９】
要素テーブル作成部１２４は、ＸＱｕｅｒｙの入れ子構造による多重ループのループ毎に、当該ループで変数で示された要素毎に別レコードとして格納されている要素テーブルを作成するプランを生成する。これにより、ＸＱｕｅｒｙプラン実行部１０４を介し、後述する複数のオペレータ部により、要素テーブルが作成される。
【００６０】
単一ループテーブル作成部１２５は、ＸＱｕｅｒｙの入れ子構造による多重ループのループ単位で、要素テーブルに格納された要素と、後述する識別子付加部１２１が付与するＩＤと、後述する索引情報取得部１２８が取得した索引情報と、を対応付けたレコードを保持する単一ループテーブルを作成するプランを生成する。これにより、ＸＱｕｅｒｙプラン実行部１０４を介して単一ループテーブルが作成される。
【００６１】
直積結合部１２７は、識別子付加部１２１のプランに従ってＩＤが付加された要素テーブル間を直積結合して、レコード毎に複数のＩＤが付加された上位テーブル（直積結合テーブル）を作成するプランを生成する。これにより、ＸＱｕｅｒｙプラン実行部１０４を介して上位テーブルが作成される。なお、上位テーブルについては後述する。
【００６２】
結合テーブル作成部１２６は、単一ループテーブル作成部１２５でループ毎に作成された単一ループテーブルを結合し、複数のカラムのそれぞれに、識別子付加部１２１により付加された別のＩＤが格納されたループ間結合テーブルを作成するプランを生成する。これにより、ＸＱｕｅｒｙプラン実行部１０４を介してループ間結合テーブルが作成される。
【００６３】
識別子付加部１２１は、ループ毎に作成された要素テーブルの各レコードに対して、ユニークなＩＤを付加するプランを生成する。これにより、ＸＱｕｅｒｙプラン実行部１０４を介して各レコードに対してユニークなＩＤが付加される。なお、具体的なＩＤの付加については後述する。
【００６４】
索引情報取得部１２８は、下位テーブル毎の各要素（レコード）に従って、ＸＱｕｅｒｙ問合要求で取得対象となっている情報を、索引情報として取得するプランを生成する。さらに生成したプランにおいては、取得した索引情報を、下位テーブルの各レコードに追加する処理が含まれている。これにより、ＸＱｕｅｒｙプラン実行部１０４を介して、下位テーブルのレコード毎に、対応する索引情報を取得して、下位テーブルの各レコードに追加される。
【００６５】
対応付部１２２は、ユニークなＩＤが付加された要素テーブルを直積結合したテーブルと、結合テーブル作成部１２６が作成したループ間結合テーブルとのレコード間を対応付けるプランを作成することで、ＸＱｕｅｒｙプラン実行部１０４を介してループ間結合テーブルとのレコード間を対応付ける。このレコード間の対応付には、それぞれのテーブルが保持するＩＤを用いる。そして、当該テーブルの対応付けに従って、後述するＸＱｕｅｒｙプラン実行部１０４でプランが実行される。なお、詳細な処理については後述する。
【００６６】
このようにして、入れ子ＸＱｕｅｒｙプラン生成部１０２及び単一ＸＱｕｅｒｙプラン生成部１０３で生成されたプランは、入れ子ＸＱｕｅｒｙプラン生成部１０２がまとめてＸＱｕｅｒｙプラン実行部１０４に出力する。
【００６７】
ＸＱｕｅｒｙプラン実行部１０４は、入れ子ＸＱｕｅｒｙプラン生成部１０２から入力されたプラン（テーブル作成、識別子付加、対応付け等を含む）通りに処理を実行する。また、ＸＱｕｅｒｙプラン実行部１０４は、入力されたプラン通りに処理を実行するため、後述する各種オペレータ部のオペレータを呼び出すこととする。
【００６８】
ＸＱｕｅｒｙプラン実行部１０４が使用する、直積結合、自然結合又はリンク更新などの基本機能を持った命令をオペレータと呼ぶ。オペレータの例としては、階層テーブル記憶部１１１に記憶されているテーブルを更新するオペレータなどが存在する。なお、オペレータ間の入出力は、階層テーブルのポインタやＩＤ等を用いて行われる。
【００６９】
直積結合オペレータ部１０５は、階層テーブル間の直積演算を行う。この直積演算は、ＲＤＢにおける直積演算と等価である。例えば、直積結合部１２７で作成されたプランに従って要素テーブル間の直積結合を行う。
【００７０】
自然結合オペレータ部１０６は、階層テーブル間の自然結合演算を行う。この自然結合演算は、ＲＤＢにおける自然結合演算と等価である。
【００７１】
リンク更新オペレータ部１０７は、階層が異なる複数のテーブル間をリンクさせるためのＩＤを更新する演算を行う。本実施の形態にかかるリンク更新オペレータ部１０７は、直積結合等で結合されたテーブルで複数のカラムそれぞれＩＤが格納されている場合に、これらＩＤの組合せに対してユニークなリンクＩＤで更新する処理を行う。
【００７２】
テストオペレータ部１０８は、等号や不等号など比較演算を行う。ＲＤＢにおける選択演算と等価である。
【００７３】
データ取得オペレータ部１０９は、ＸＭＬデータベース１１３に格納されているＸＭＬデータの各要素を接続するリンクに従って、階層を先祖に遡る、子孫の下る、テキストを取得するなどの操作を行って、必要なデータを取得する。
【００７４】
索引取得オペレータ部１１０は、ＸＭＬデータベース１１３のＸＭＬデータに付加された索引データにアクセスして、当該索引データとして格納されている情報を取得する。このように索引取得オペレータとデータ取得オペレータを組み合わせることで、ＸＭＬデータベース１１３から必要なデータを高速に取得することができる。
【００７５】
出力部１１２は、ＸＱｕｅｒｙプラン実行部１０４による実行結果として、問い合わせ要求として入力されたＸＱｕｅｒｙデータに合致するＸＭＬデータを出力する。
【００７６】
次に、データベース処理装置１００の全体的な処理手順について、図７を用いて説明する。
【００７７】
まず、問合受付部１０１が、ユーザ等からＸＱｕｅｒｙデータの入力を受け付ける（ステップＳ７０１）。
【００７８】
次に、入れ子ＸＱｕｅｒｙプラン生成部１０２及び単一ＸＱｕｅｒｙプラン生成部１０３が、入力されたＸＱｕｅｒｙデータに従って実行するプランを生成する（ステップＳ７０２）。なお、詳細な処理手順については後述する。
【００７９】
そして、ＸＱｕｅｒｙプラン実行部１０４は、各種オペレータ部を用いて、生成されたプランを実行する（ステップＳ７０３）。なお、詳細な処理手順については後述する。
【００８０】
最後に、出力部１１２が、ＸＱｕｅｒｙプラン実行部１０４のプランの実行により生成されたＸＭＬデータを出力する（ステップＳ７０４）。
【００８１】
上述した処理手順により、ユーザ等から入力を受け付けたＸＱｕｅｒｙデータに対応するＸＭＬデータの出力が可能となる。
【００８２】
次に、図７のステップＳ７０２で示した入れ子ＸＱｕｅｒｙプラン生成部１０２及び単一ＸＱｕｅｒｙプラン生成部１０３のプランの生成手順について、図８を用いて説明する。
【００８３】
まず、入れ子ＸＱｕｅｒｙプラン生成部１０２は、入力されたＸＱｕｅｒｙデータの構文解析を行う（ステップＳ８０１）。この構文解析は、例えばYacc&Lexなどのコンパイラコンパイラツールを用いることで容易に構文解析できる。
【００８４】
次に、入れ子ＸＱｕｅｒｙプラン生成部１０２は、構文解析結果より入れ子構造を含んでいるか否か判断する（ステップＳ８０２）。
【００８５】
そして、入れ子ＸＱｕｅｒｙプラン生成部１０２が入れ子構造を含んでいないと判断した場合（ステップＳ８０２：Ｎｏ）、構文解析結果を単一ＸＱｕｅｒｙプラン生成部１０３に出力する。これにより、単一ＸＱｕｅｒｙプラン生成部１０３が、入力されたＸＱｕｅｒｙデータに従った処理を行うための単一プランを生成する（ステップＳ８０３）。入れ子無しのＸＱｕｅｒｙデータの構文木を使ってプランを生成する手法については、従来技術、例えば、特開２００１−１４７９３３号公報「構造化文書検索方法、構造化文書検索装置及び構造化文書検索システム」を使うことで実現される。
【００８６】
一方、入れ子ＸＱｕｅｒｙプラン生成部１０２が入れ子構造を含んでいると判断した場合（ステップＳ８０２：Ｙｅｓ）、入力されたＸＱｕｅｒｙデータの分解処理を行う（ステップＳ８０３）。
【００８７】
この分解処理は、図４に示すＸＱｕｅｒｙデータを、図９及び図１０のそれぞれに示すＸＱｕｅｒｙデータに分解する処理とする。図４に示すＸＱｕｅｒｙデータは、当該ＸＱｕｅｒｙデータに含まれるパス演算子を辿ることで２つに分解される。すなわち、“for  $x  in  //所属”から始まるＸＱｕｅｒｙデータと、“for  $y  in  //年代”から始まるＸＱｕｅｒｙデータとが、入れ子を経由して繋がっているため、これらを分解する処理を行う。これにより、図９に示すＸＱｕｅｒｙデータと、図１０に示すＸＱｕｅｒｙデータとが生成される。なお、実際の処理としては、このようなＸＱｕｅｒｙデータではなく、構文木または分解要素としてもよい。
【００８８】
この分解された入れ子構造を含まないＸＱｕｅｒｙデータを、単一ＸＱｕｅｒｙデータと呼ぶ。また、分解された単一ＸＱｕｅｒｙデータ間には等号などの比較条件があるので、その情報を記憶しておく。なお、当該分解の処理手法は、従来から用いられた手法により実行可能なので説明を省略する。
【００８９】
次に、入れ子ＸＱｕｅｒｙプラン生成部１０２は、分解された単一ＸＱｕｅｒｙデータの処理を実行する全ての単一プランを生成したか否か判断する（ステップＳ８０５）。全ての単一プランを生成していないと判断した場合（ステップＳ８０５：Ｎｏ）、単一プラン生成部１０３が、分解された単一ＸＱｕｅｒｙデータに従った処理を行うための単一プランを生成する（ステップＳ８０６）。その後、再度ステップＳ８０５でプランを生成したか判断する。
【００９０】
そして、入れ子ＸＱｕｅｒｙプラン生成部１０２が単一ＸＱｕｅｒｙデータの処理を実行する全てのプランを生成したと判断した場合（ステップＳ８０５：Ｙｅｓ）、先ほど記憶した分解された単一ＸＱｕｅｒｙデータ間の比較条件を考慮して、生成された単一プランを結合するように入れ子結合プランを生成し、すでに生成された単一プラン群と、当該入れ子結合プランとを組み合わせた詳細なプランを生成して（ステップＳ８０７）、処理を終了する。
【００９１】
入れ子結合プランとは、直積結合オペレータ、自然結合オペレータ、リンク更新オペレータの３オペレータのうちいずれか一つ以上を用いて、上述した複数の単一プランによる処理結果を結合するプランを示している。そして、ステップＳ８０７やステップＳ８０３で生成されたプランに従って、ＸＱｕｅｒｙプラン実行部１０４が処理を行うことになる。次に、ステップＳ８０７におけるプランの生成の詳細について説明する。
【００９２】
次に、図８のステップＳ８０７で示されるプランの生成手順について、図１１を用いて説明する。なお、作成されるテーブルなどの詳細については図１２で詳細に説明する。
【００９３】
まず、入れ子ＸＱｕｅｒｙプラン生成部１０２の要素テーブル作成部１２４が、単一プランでループに用いる要素のデータを取得して、要素テーブルを作成するプランを生成する（ステップＳ１１０１）。なお、当該プランの実行時において、要素のデータの取得には、データ取得オペレータ部１０９を用いる。例えば、図９に示した単一ＸＱｕｅｒｙデータに対応する単一プランの場合、図３に示す所属データ以下から、“分散”、“軽量”を取得して、１カラム、２レコードの要素テーブルを作成する。この処理を単一プラン毎に行う。
【００９４】
次に、識別子付加部１２１が、作成された各要素テーブルのレコード毎に、ユニークなＩＤを付加するプランを生成する（ステップＳ１１０２）。これにより、上述した要素テーブルでは、２カラム、２レコードの要素テーブルとなる。
【００９５】
そして、テーブル作成部１２３の直積結合部１２４が、ユニークなＩＤが付加された後の要素テーブル間を直積結合して、上位テーブルを作成するプランを生成する（ステップＳ１１０３）。
【００９６】
なお、本実施の形態では、ＸＱｕｅｒｙデータの入れ子構造の階層に従ってテーブルを作成するが、当該階層の上位に該当するテーブルを上位テーブルとし、当該テーブルの下位に該当するテーブルを下位テーブルと呼ぶ。この上位テーブルは主問い合わせに相当するテーブルとなり、下位テーブルは副問い合わせに相当するテーブルとなる。なお、これら上位下位に制限するものではなく、入力されたＸＱｕｅｒｙデータがさらに多くの入れ子構造を有している場合、当該入れ子構造に従ってさらに多くの階層のテーブルを作成しても良い。
【００９７】
そして、単一ループテーブル作成部１２５が、各要素テーブルを複製して、下位テーブルを作成するプランを生成する（ステップＳ１１０４）。
【００９８】
その後、索引情報取得部１２８が、索引取得オペレータ部１１０が各下位テーブルのレコード毎に、対応する索引情報を取得して、下位テーブルの各レコードに追加するプランを生成する（ステップＳ１１０５）。
【００９９】
そして、結合テーブル作成部１２６が、下位テーブル間を結合して、下位結合テーブルを作成するプランを生成する（ステップＳ１１０６）。なお、当該結合は入れ子ＸＱｕｅｒｙプラン生成部１０２の上述した単一プランの結合手法により求められる。
【０１００】
次に、対応付部１２２の指示により、リンク更新オペレータ部１０７が、上位テーブルと、下位結合テーブルとに対してリンク更新を行うことで、これらテーブルのレコード間を対応付けるプランを生成する（ステップＳ１１０７）。なお、詳細な処理手順については後述する。
【０１０１】
上述した処理で生成されたプランが実行された場合には、入れ子構造のＸＱｕｅｒｙデータの入力を受け付けた場合に、従来の処理より計算量を低減させることができる。次に、計算量が低減されることを明確にするために、上述した処理で生成されたプランの実行手順を、図１２を用いて、生成されるテーブルの例と共に説明する。なお、処理対象となるＸＭＬデータは、図２で示したものを用いる。
【０１０２】
まず、要素テーブル作成部１２４で生成されたプランに従って、データ取得オペレータ部１０９が、図９の$xに対応するデータ列を取得する（ステップＳ１２０１）。これにより、要素テーブル作成部１２４が要素テーブルHT1を作成する。
【０１０３】
また、データ取得オペレータ部１０９が、図１０の$yに対応するデータ列を取得する（ステップＳ１２０２）。これにより、ＸＱｕｅｒｙプラン実行部１０４が、要素テーブルHT2を作成する。これら作成された要素テーブルHT1及びHT2は、階層テーブル記憶部１１１に記憶される。なお、ステップＳ１２０１及びステップＳ１２０２の処理は、ＸＱｕｅｒｙでの、“/”という演算子に対応している。
【０１０４】
次に、ＸＱｕｅｒｙプラン実行部１０４が、識別子付加部１２１が生成したプランに従って、作成された要素テーブルHT1の各レコードにユニークなＩＤ“Ａ１”、“Ａ２”を、第２カラムに付加し（ステップＳ１２０３）、要素テーブルHT3を作成する。
【０１０５】
また、ＸＱｕｅｒｙプラン実行部１０４が、識別子付加部１２１が生成したプランに従って、さらに作成された要素テーブルHT2の各レコードにユニークなＩＤ“Ｂ１”、“Ｂ２”を、第２カラムに付加し（ステップＳ１２０４）、要素テーブルHT4を作成する。
【０１０６】
次に、直積結合部１２５が生成したプランに従って、直積結合オペレータ部１０５が、要素テーブルHT3と要素テーブルHT4とを直積結合して、上位テーブルHT5を作成する（ステップＳ１２０５）。
【０１０７】
そして、ＸＱｕｅｒｙプラン実行部１０４は、単一ループテーブル作成部１２５が生成したプランに従って、要素テーブルHT3を複製して、下位テーブルHT6を作成する（ステップＳ１２０６）。また、ＸＱｕｅｒｙプラン実行部１０４は、単一ループテーブル作成部１２５が生成したプランに従って、要素テーブルHT4を複製して、下位テーブルHT7を作成する（ステップＳ１２０７）。
【０１０８】
このように下位テーブルHT6は、[“Ａ１”,“分散”],[“Ａ２”,”軽量”]という２レコードで構成されている。ここで、索引情報取得部１２８が生成したプランに従って、索引取得オペレータ部１１０は、第２カラムである所属を検索キーにして、索引情報の取得処理を行う（ステップＳ１２０８）。この索引取得には、従来技術として説明した索引１を用いる。そして、ＸＱｕｅｒｙプラン実行部１０４は、単一ループテーブル作成部１２５が生成したプランに従って、取得した索引情報の集合を下位テーブルHT6の第３カラムとして付加し、下位テーブルHT8を作成する。
【０１０９】
また、同様の処理を下位テーブルHT7に対して行うこととして、下位テーブルHT9を作成する（ステップＳ１２０９）。
【０１１０】
なお、要素テーブルHT1から、要素テーブルHT3、下位テーブルHT6を介して下位テーブルHT8の作成までの処理は、図９の単一ＸＱｕｅｒｙデータに対応する単一プランで実行される。また、要素テーブルHT2から、要素テーブルHT4、下位テーブルHT7を介して下位テーブルHT9の作成までの処理は、図１０の単一ＸＱｕｅｒｙデータに対応する単一プランで実行される。あとの処理、つまりステップＳ１２０５の直接結合、ステップＳ１２１０の自然結合及びステップＳ１２１１のリンク更新は、図８のステップＳ８０７で示した入れ子結合プラン追加で作られたオペレータとなる。
【０１１１】
その後、ＸＱｕｅｒｙプラン実行部１０４は、結合テーブル作成部１２６が生成したプランに従って、下位テーブルHT8と下位テーブルHT9とを結合して、下位結合テーブルHT10を作成する(ステップＳ１２１０)。当該結合処理では、自然結合オペレータ部１０６による自然結合を用いる。
【０１１２】
そして、対応付部１２２が生成したプランに従って、リンク更新オペレータ部１０７が、上位テーブルHT5と、下位結合テーブルHT10とに対してリンク更新を行うことで、上位テーブルHT11と下位テーブルHT12とを作成し、これらテーブルのレコード間を対応付ける（ステップＳ１２１１）。つまり、上位テーブルHT5の第３カラム及び第４カラム（複合リンクカラムと呼ぶ）、及び下位結合テーブルHT10の第１カラム及び第２カラム（同様に複合リンクカラムと呼ぶ）のそれぞれに対して、“Ａ１”及び“Ｂ１”の組合せに、単一カラム（単一リンクカラム）としてユニークなＩＤ“Ｃ１”で更新する。他の複合リンクカラムについても同様にＩＤの組合せ毎に、単一カラムとしてユニークなリンクＩＤで更新する。これによりレコード毎の対応関係が明確となり、処理を終了する。このユニークなリンクＩＤはどのような値でも良く、Ｃ１、Ｃ２以外の例としては、１，２，３…といった昇順に並んだ自然数を割り当てても良い。このような処理には、ハッシュテーブルなど高速にアクセスできるメモリデータ構造を使って実装してもよい。なお、詳細な処理手順については後述する。
【０１１３】
その後、ＸＱｕｅｒｙプラン実行部１０４は、作成された上位テーブルHT11と、下位結合テーブルHT12を用いて、return節で記述されたフォーマットでＸＭＬデータとして整形する。これにより、図５で示したＸＭＬデータが得られる。
【０１１４】
つまり、従来の処理手順では、外側のＸＱｕｅｒｙ処理が終了した後、終了結果を入力変数の組として内側のＸＱｕｅｒｙに相当する処理に渡して処理した。これに対して上述した処理手順では、内側のＸＱｕｅｒｙに相当する処理に渡す点では同じであるが、直積結合オペレータの出力結果を複製しない点、及び直積結合オペレータにより作成されたテーブルのレコード毎に複製して、テーブルを作成していない点で異なる。
【０１１５】
つまり、図６−１及び図６−２で示した従来の処理手順では、上位の多重ループの回数だけ入れ子処理を行っているが、図１２で示した処理手順ではこのような繰り返しが存在しない。これにより、図６−１及び図６−２の処理回数と、図１２の処理回数とを比較すれば、実行されたオペレータの回数に違いあることは明確である。また、上述した処理の違いを鑑みれば、上位の多重ループがさらに増加すれば、性能差はさらに大きなものになる。
【０１１６】
次に、対応付部１２２が生成したプランに従って、リンク更新オペレータ部１０７がリンク更新を行う処理手順を、図１３を用いて説明する。
【０１１７】
まず、リンク更新オペレータ部１０７は、上位テーブルの全てのレコードについて全てスキャンしたか否か判断する（ステップＳ１３０１）。スキャンしていないと判断した場合（ステップＳ１３０１：Ｎｏ）、スキャンしていないレコードにおける複合リンクカラムに格納されているＩＤの組合せに対して、ユニークなリンクＩＤで更新する（ステップＳ１３０２）。
【０１１８】
そして、リンク更新オペレータ部１０７は、更新情報をハッシュテーブルに保存する（ステップＳ１３０３）。
【０１１９】
一方、リンク更新オペレータ部１０７は、上位テーブルの全てのレコードについて全てスキャンしたと判断した場合（ステップＳ１３０１：Ｙｅｓ）、下位結合テーブルの全てのレコードに対してスキャンしたか否か判断する（ステップＳ１３０４）。全てのレコードに対してスキャンしていないと判断した場合（ステップＳ１３０４：Ｎｏ）、ハッシュテーブルを参照して、スキャンしていないレコードにおける複合リンクカラムに格納されているＩＤの組合せに対して、ユニークなリンクＩＤで更新する（ステップＳ１３０５）。
【０１２０】
また、リンク更新オペレータ部１０７は、全てのレコードに対してスキャンしたと判断した場合（ステップＳ１３０４：Ｙｅｓ）、処理を終了する。
【０１２１】
上述した処理手順を行うことで、上位テーブルのレコードと、下位結合テーブルのレコードとの間で対応付けを行うことができる。
【０１２２】
また、上述した実施の形態に限定されるものではなく、以下に例示するような種々の変形が可能である。
【０１２３】
（変形例１）
上述した第１の実施の形態において、下位テーブル間の結合として自然結合のみで結合する場合について説明した。しかしながら、このような下位テーブル間の結合を自然結合のみに制限するものではない。
【０１２４】
そこで、変形例１では、自然結合に加えてテスト処理を行う場合について説明する。なお、データベース処理装置１００の構成は第１の実施の形態と同様として説明を省略する。
【０１２５】
本変形例では、問合受付部１０１は、図１４に示すＸＱｕｅｒｙデータの入力を受け付けたこととする。この図１４に示すＸＱｕｅｒｙデータは、行１４０１において“and  $x/@id  !=  $y/@id”が追加された点で、図４のＸＱｕｅｒｙデータと異なる。
【０１２６】
このような場合に生成されるプランに従って実行される処理手順を、図１５を用いて説明する。
【０１２７】
まず、第１の実施形態の図１２に示すステップＳ１２０１〜Ｓ１２１０までの処理と同様に、生成されたプランに従って上位テーブルHT’5の作成と、下位テーブルHT’8及びHT’9を自然結合する（ステップＳ１５０１〜Ｓ１５１０）。
【０１２８】
そして、本変形例にかかるデータベース処理装置１００では、下位テーブル間を自然結合して生成されたテーブルに対して、テストオペレータ部１０８がテスト処理を行う（ステップＳ１５１１）。当該テスト処理では、自然結合して生成されたテーブルの各レコードから、“and  $x/@id  !=  $y/@id”の条件に一致するレコードのみ抽出する。これにより、下位結合テーブルHT’10が作成される。
【０１２９】
そして、対応付部１２２が生成したプランに従って、リンク更新オペレータ部１０７が、上位テーブルHT’5と、下位結合テーブルHT’10とに対してリンク更新を行うことで、上位テーブルHT’11と下位テーブルHT’12とを作成し、これらテーブルのレコード間を対応付ける（ステップＳ１５１２）。
【０１３０】
本変形例に示すように、下位テーブル間の結合処理において、自然結合に加えてテスト処理を行ってもよい。このように、下位テーブル間の結合処理は、入力されるＸＱｕｅｒｙデータに応じて変更されるものとする。つまり、入力されるＸＱｕｅｒｙデータによっては、下位テーブル間を自然結合以外の結合処理で行ってもよい。
【０１３１】
（変形例２）
上述した第１の実施の形態において、入れ子構造により２重ループを含むＸＱｕｅｒｙデータの場合の処理について説明した。しかしながら、上述した実施形態は２重ループのみに制限するものではない。そこで、３重以上のループに適用する例について説明する。なお、データベース処理装置１００の構成は第１の実施の形態と同様として説明を省略する。
【０１３２】
本変形例では、データベース処理装置１００の問合受付部１０１は、図１６に示すＸＱｕｅｒｙデータの入力を受け付けたものとする。図１６に示したＸＱｕｅｒｙデータは、図４に示したＸＱｕｅｒｙデータと比べて、行１６０１に記載されている“for  $d  in(男性,女性)”というループが追加されている。
【０１３３】
これにより、入れ子ＸＱｕｅｒｙプラン生成部１０２は、図１６に示したＸＱｕｅｒｙデータから、図１７〜図１９に示す単一ＸＱｕｅｒｙデータを抽出し、単一ＸＱｕｅｒｙプラン生成部１０３が、これら単一ＸＱｕｅｒｙデータに対応するプランを作成する。
【０１３４】
そして、ＸＱｕｅｒｙプラン実行部１０４が、図１７〜図１９に示す単一ＸＱｕｅｒｙデータに対応するプランを実行する。図１７に示す単一ＸＱｕｅｒｙデータに対応する処理を図２０に示し、図１８に示す単一ＸＱｕｅｒｙデータに対応する処理を図２１に示し、図１９に示す単一ＸＱｕｅｒｙデータに対応する処理を図２２に示す。
【０１３５】
図２０に示す処理については、第１の実施形態と同様に、所属データに関する要素テーブルHA.1を作成した後に、当該要素テーブルを複製して階層テーブルHA.2を作成し、索引取得などの処理を行って階層テーブルHA.3が作成されたものとする。
【０１３６】
図２１に示す処理については、第１の実施形態と同様に、年代データに関する要素テーブルHB.1を作成した後に、当該要素テーブルを複製して階層テーブルHB.2を作成し、索引取得などの処理を行って階層テーブルHB.3が作成されたものとする。
【０１３７】
図２２に示す処理については、男性、女性に関する要素はＸＭＬデータに含まれていないので、空のテーブルHC.1を作成する。その後、索引取得などに対応する処理として、男性、女性が別のレコードとして追加すると共に、ユニークなＩＤのカラムを付与して階層テーブルHC.2を作成した後に、当該階層テーブルを複製してHC.3を作成する。
【０１３８】
図２０〜図２２により作成された各テーブルを用いて対応付ける処理を、図２３に示す。図２３に示すように、２つの直積結合と、１つの（自然）結合と、２つのリンク更新とを、ＸＱｕｅｒｙデータ内部の入れ子構造によるループ回数から１回減じた回数を繰り返すことで、ＸＱｕｅｒｙデータにより要求された処理を実現することができる。これにより３重以上のループの入れ子構造を有するＸＱｕｅｒｙデータに対しても適用できる。
【０１３９】
つまり、図２０で示した要素テーブルHA.1と階層テーブルHA.2と階層テーブルHA.3と、図２１で示した要素テーブルHB.1と階層テーブルHB.2と階層テーブルHB.3と、をそれぞれ直積結合、直積結合及び自然結合した後、結合した結果作成されたテーブル間のリンク更新を行うことで、直積結合テーブルHAB.1’、 直積結合テーブルHAB.2’’及び自然結合テーブルHAB.3’を作成する。
【０１４０】
その後、図２２で示した要素テーブルHC.1（本変形例では空のテーブル）と階層テーブルHC.2と階層テーブルHC.3と、上述した処理で作成された直積結合テーブルHAB.1’と直積結合テーブルHAB.2’’と自然結合テーブルHAB.3’とをそれぞれ直積結合、直積結合及び自然結合した後、結合した結果作成されたテーブル間のリンク更新を行うことで、直積結合テーブルHABC.1’、直積結合テーブルHABC2’’、自然結合テーブルHABC3’とを作成する。
【０１４１】
上述した処理においては、例えば直積結合オペレータ部１０９が、リンク更新まで終了した直積結合テーブルHAB.1と、要素テーブルHC.1とを直積結合した直積結合テーブルHABC.1を作成し、リンク更新まで終了した直積結合テーブルHAB.2と、結合処理を行っていない階層テーブルHC.2とを直積結合したテーブルHABC.2を作成する。なお、当該処理で、HC.1は空のテーブルのため、直積結合テーブルHAB.1が、直積結合テーブルHABC.1となる。
【０１４２】
また、結合テーブル作成部１２６は、結行処理が行われていないHC.3と、リンク更新まで終了した自然結合テーブルHABC3’とを自然結合した自然結合テーブルHABC.3を作成するプランを生成する。
【０１４３】
対応付部１２２は、さらに、直積結合テーブルHABC.1と直積結合テーブルHAB.2とをリンク更新を行うことで対応付けると共に、対応付け済みの直積結合テーブルHAB.2’と自然結合テーブルHABC.3とをリンク更新を行うことで対応付けるプランを生成している。これにより以下に示す対応関係が生成される。
【０１４４】
図２４に示すように、上述した処理で作成されたHABC.1’及びHABC2’’間は、ユニークな識別子“Ｋ１”〜“Ｋ４”で対応付けられている。また、HABC2’’及びHABC3’間は、ユニークな識別子“Ｊ１”〜“Ｊ５”で対応付けられている。
【０１４５】
本変形例にかかるデータベース処理装置１００においては、上述した手順で処理を行うことで、入れ子構造で３重以上の多重ループを有するＸＱｕｅｒｙデータに従ってＸＭＬデータに対して処理を行う場合であっても計算量を削減することが出来る。
【０１４６】
図２５に示すように、上述したデータベース処理装置１００は、ハードウェア構成として、上述した処理を行うデータベース処理プログラムなどが格納されているＲＯＭ２５０２と、ＲＯＭ２５０２内のプログラムに従ってデータベース処理装置１００の各部を制御するＣＰＵ２５０１と、必要な種々のデータを記憶するＲＡＭ２５０３と、ネットワークに接続して通信を行う通信Ｉ／Ｆ２５０４と、各部を接続するバス２５０５とを備えている。
【０１４７】
データベース処理プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク（ＦＤ）、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供されてもよい。
【０１４８】
この場合には、プログラムは、データベース処理装置１００において上記記録媒体から読み出して実行することにより主記憶装置（例えばＲＡＭ２５０３）上にロードされ、上記ソフトウェア構成で説明した各部が主記憶装置上に生成されるようになっている。
【０１４９】
また、本実施の形態のプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。
【０１５０】
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【図面の簡単な説明】
【０１５１】
【図１】第１の実施の形態にかかるデータベース処理装置の全体構成を示す図である。
【図２】階層構造を持った構造化文書であるＸＭＬデータの一例を示した図である。
【図３】図２のＸＭＬデータを木構造で示した概念図である。
【図４】ＸＱｕｅｒｙデータの第１の例を示した図である。
【図５】図４に示すＸＱｕｅｒｙデータの処理結果となるＸＭＬデータの例を示した図である。
【図６−１】図４のＸＱｕｅｒｙデータが入力された場合に、従来の処理手順で行った第１の例を示した説明図である。
【図６−２】図４のＸＱｕｅｒｙデータが入力された場合に、従来の処理手順で行った第２の例を示した説明図である。
【図７】データベース処理装置の全体的な処理手順を示したフローチャートである。
【図８】入れ子ＸＱｕｅｒｙプラン生成部及び単一ＸＱｕｅｒｙプラン生成部によるプランの生成手順を示したフローチャートである。
【図９】図４に示すＸＱｕｅｒｙデータを分解して得られた単一ＸＱｕｅｒｙデータの第１の例を示した図である。
【図１０】図４に示すＸＱｕｅｒｙデータを分解して得られた単一ＸＱｕｅｒｙデータの第２の例を示した図である。
【図１１】入れ子ＸＱｕｅｒｙプランを実現するプランの生成手順を示したフローチャートである。
【図１２】ＸＱｕｅｒｙプラン実行部により行われるプランの実行処理の第１の例を、作成されるテーブルと共に示した説明図である。
【図１３】リンク更新オペレータ部によるリンク更新を行う処理手順を示したフローチャートである。
【図１４】ＸＱｕｅｒｙデータの第２の例を示した図である。
【図１５】ＸＱｕｅｒｙプラン実行部により行われるプランの実行処理の第２の例を、作成されるテーブルと共に示した説明図である。
【図１６】ＸＱｕｅｒｙデータの第３の例を示した図である。
【図１７】図１６に示すＸＱｕｅｒｙデータを分解して得られた単一ＸＱｕｅｒｙデータの第１の例を示した図である。
【図１８】図１６に示すＸＱｕｅｒｙデータを分解して得られた単一ＸＱｕｅｒｙデータの第２の例を示した図である。
【図１９】図１６に示すＸＱｕｅｒｙデータを分解して得られた単一ＸＱｕｅｒｙデータの第３の例を示した図である。
【図２０】図１７に示した単一ＸＱｕｅｒｙデータに対応するプランでテーブルを作成する処理手順を示した説明図である。
【図２１】図１８に示した単一ＸＱｕｅｒｙデータに対応するプランでテーブルを作成する処理手順を示した説明図である。
【図２２】図１９に示した単一ＸＱｕｅｒｙデータに対応するプランでテーブルを作成する処理手順を示した説明図である。
【図２３】図２０〜図２２で作成されたテーブル群に対して直積結合、自然結合及びリンク更新を行うことで、図１６に示したＸＱｕｅｒｙデータによる処理結果を取得する処理手順を示した説明図である。
【図２４】変形例３にかかるデータベース処理装置で、図１６に示したＸＱｕｅｒｙデータに応じて作成されたテーブルを示した図である。
【図２５】データベース処理装置のハードウェア構成を示す図である。
【符号の説明】
【０１５２】
１００  データベース処理装置
１０１  問合受付部
１０２  入れ子ＸＱｕｅｒｙプラン生成部
１０３  単一ＸＱｕｅｒｙプラン生成部
１０４  ＸＱｕｅｒｙプラン実行部
１０５  直積結合オペレータ部
１０６  自然結合オペレータ部
１０７  リンク更新オペレータ部
１０８  テストオペレータ部
１０９  データ取得オペレータ部
１１０  索引取得オペレータ部
１１１  階層テーブル記憶部
１１２  出力部
１１３  ＸＭＬデータベース
１２１  識別子付加部
１２２  対応付部
１２３  テーブル作成部
１２４  要素テーブル作成部
１２５  単一ループテーブル作成部
１２６  結合テーブル作成部
１２７  直積結合部
１２８  索引情報取得部
２５０１  ＣＰＵ
２５０２  ＲＯＭ
２５０３  ＲＡＭ
２５０４  通信Ｉ／Ｆ
２５０５  バス
【図１】
0005196924.tif 000002
【図２】
0005196924.tif 000003
【図３】
0005196924.tif 000004
【図４】
0005196924.tif 000005
【図５】
0005196924.tif 000006
【図６−１】
0005196924.tif 000007
【図６−２】
0005196924.tif 000008
【図７】
0005196924.tif 000009
【図８】
0005196924.tif 000010
【図９】
0005196924.tif 000011
【図１０】
0005196924.tif 000012
【図１１】
0005196924.tif 000013
【図１２】
0005196924.tif 000014
【図１３】
0005196924.tif 000015
【図１４】
0005196924.tif 000016
【図１５】
0005196924.tif 000017
【図１６】
0005196924.tif 000018
【図１７】
0005196924.tif 000019
【図１８】
0005196924.tif 000020
【図１９】
0005196924.tif 000021
【図２０】
0005196924.tif 000022
【図２１】
0005196924.tif 000023
【図２２】
0005196924.tif 000024
【図２３】
0005196924.tif 000025
【図２４】
0005196924.tif 000026
【図２５】
0005196924.tif 000027