(57)【要約】  本発明に関する検索装置（１００）は、パストライ生成部（１５０ａ）が、ＸＭＬデータから入力パストライ（１４０ｂ）を生成し、パストライ表示部（１５０ｃ）が、入力パストライ（１４０ｂ）をディスプレイ等の出力部（１２０）に出力して、Ｊｏｉｎ点、結合条件をユーザに指定させる。そして、指示受付部（１５０ｄ）が、ユーザに指示されたＪｏｉｎ点、結合条件に基づいて各ＸＭＬデータを結合するための命令文となるクエリを生成する。
2010106681.tif 000002
【特許請求の範囲】
【請求項１】
要素が階層化された木構造データを記憶装置に記憶したコンピュータに、
前記木構造データを対象として、同一名称の親要素に直接関連づけられた同一名称の子要素が複数存在する場合に、複数の子供要素を一つの子供要素に集約することで前記木構造データの要素間の関係を集約した集約構造データを作成する集約機能と、
各木構造データの一部を結合することで作成される結合データに対応した集約構造データと、結合対象となる木構造データの各要素の条件となる結合条件、および、前記集約構造データの要素の何れかを指定要素として受け付ける受付機能と
前記結合データに対応する集約構造データと前記結合条件を基にして、前記集約構造データの要素の何れかを基準要素として判定する基準要素判定機能と、
前記基準要素を基にした前記木構造データの取り扱い単位により生成される結合データの第一データ量と、前記指定要素を基にした前記木構造データの取り扱い単位により生成される結合データの第二データ量とを比較して、比較結果を出力する比較結果出力機能
をコンピュータで実現させるためのプログラムを記録した記憶媒体。
【請求項２】
前記集約機能は、同一名称でかつ同一の親要素に直接関連づけられた複数の同一名称の子要素を集約した場合は、集約した要素の集約数を前記集約構造データに対応付けて記録し、前記比較結果出力機能は、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数に基づいて、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項１に記載の記憶媒体。
【請求項３】
前記基準要素判定機能は、
前記受付手段で受け付けた、前記結合データに対応した集約構造データの出力要素として指定された要素の各々について、該要素を含む木構造データに対応する集約構造データの最上位階層から該要素までの階層関係を示す階層情報を抽出し、
さらに、
前記受付手段で受け付けた前記結合条件となる各要素について、該要素を含む木構造データに対応する集約構造データにおける最上位階層の要素から該結合対象の要素までの階層関係を示す階層情報を抽出し、
結合された前記木構造データの集約構造データの各々について、前記抽出された階層情報で共通している階層情報の最下位の要素を前記基準要素として判定する
ことを特徴とする請求項１に記載の記憶媒体。
【請求項４】
前記比較結果出力機能は、前記集約構造データ毎に、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数を特定し、各集約数を乗算することで、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項１に記載の記憶媒体。
【請求項５】
要素が階層化された木構造データを記憶装置に記憶し、前記木構造データを対象として、同一名称の親要素に直接関連づけられた同一名称の子要素が複数存在する場合に、複数の子供要素を一つの子供要素に集約することで前記木構造データの要素間の関係を集約した集約構造データを作成する集約部と、
各木構造データの一部を結合することで作成される結合データに対応した集約構造データと、結合対象となる木構造データの各要素の条件となる結合条件、および、前記集約構造データの要素の何れかを指定要素として受け付ける受付部と
前記結合データに対応する集約構造データと前記結合条件を基にして、前記集約構造データの要素の何れかを基準要素として判定する基準要素判定部と、
前記基準要素を基にした前記木構造データの取り扱い単位により生成される結合データの第一データ量と、前記指定要素を基にした前記木構造データの取り扱い単位により生成される結合データの第二データ量とを比較して、比較結果を出力する比較結果出力部と
を有することを特徴とするデータベース検索装置。
【請求項６】
前記集約部は、同一名称でかつ同一の親要素に直接関連づけられた複数の同一名称の子要素を集約した場合は、集約した要素の集約数を前記集約構造データに対応付けて記録し、前記比較結果出力部は、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数に基づいて、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項５に記載のデータベース検索装置。
【請求項７】
前記基準要素判定部は、
前記受付手段で受け付けた、前記結合データに対応した集約構造データの出力要素として指定された要素の各々について、該要素を含む木構造データに対応する集約構造データの最上位階層から該要素までの階層関係を示す階層情報を抽出し、
さらに、
前記受付手段で受け付けた前記結合条件となる各要素について、該要素を含む木構造データに対応する集約構造データにおける最上位階層の要素から該結合対象の要素までの階層関係を示す階層情報を抽出し、
結合された前記木構造データの集約構造データの各々について、前記抽出された階層情報で共通している階層情報の最下位の要素を前記基準要素として判定する
ことを特徴とする請求項５に記載のデータベース検索装置。
【請求項８】
前記比較結果出力部は、前記集約構造データ毎に、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数を特定し、各集約数を乗算することで、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項１に記載の記憶媒体。
【請求項９】
要素が階層化された木構造データを記憶装置に記憶した検索装置が、
前記木構造データを対象として、同一名称の親要素に直接関連づけられた同一名称の子要素が複数存在する場合に、複数の子供要素を一つの子供要素に集約することで前記木構造データの要素間の関係を集約した集約構造データを作成する集約ステップと、
各木構造データの一部を結合することで作成される結合データに対応した集約構造データと、結合対象となる木構造データの各要素の条件となる結合条件、および、前記集約構造データの要素の何れかを指定要素として受け付ける受付ステップと
前記結合データに対応する集約構造データと前記結合条件を基にして、前記集約構造データの要素の何れかを基準要素として判定する基準要素判定ステップと、
前記基準要素を基にした前記木構造データの取り扱い単位により生成される結合データの第一データ量と、前記指定要素を基にした前記木構造データの取り扱い単位により生成される結合データの第二データ量とを比較して、比較結果を出力する比較結果出力ステップと
を含んだことを特徴とするデータベース検索方法。
【請求項１０】
前記集約ステップは、同一名称でかつ同一の親要素に直接関連づけられた複数の同一名称の子要素を集約した場合は、集約した要素の集約数を前記集約構造データに対応付けて記録し、前記比較結果出力ステップは、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数に基づいて、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項９に記載のデータベース検索方法。
【請求項１１】
前記基準要素判定ステップは、
前記受付手段で受け付けた、前記結合データに対応した集約構造データの出力要素として指定された要素の各々について、該要素を含む木構造データに対応する集約構造データの最上位階層から該要素までの階層関係を示す階層情報を抽出し、
さらに、
前記受付手段で受け付けた前記結合条件となる各要素について、該要素を含む木構造データに対応する集約構造データにおける最上位階層の要素から該結合対象の要素までの階層関係を示す階層情報を抽出し、
結合された前記木構造データの集約構造データの各々について、前記抽出された階層情報で共通している階層情報の最下位の要素を前記基準要素として判定する
ことを特徴とする請求項９に記載のデータベース検索方法。
【請求項１２】
前記比較結果出力ステップは、前記集約構造データ毎に、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数を特定し、各集約数を乗算することで、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項９に記載のデータベース検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、半構造体データを利用するデータベース検索装置等に関する。
【背景技術】
【０００２】
近年、コンピュータで処理される文書データとして、ＸＭＬ（Extensible  Markup  Language）等のマークアップ言語が利用されている。このＸＭＬは、異なる情報システムの間で、特にインターネットを介して、構造化された文書や構造化されたデータの共有を容易にすることができるため、コンピュータにおいてますます多用されてきている（例えば、特許文献１参照）。以下、ＸＭＬに基づいて記述された階層構造をなす文書データをＸＭＬデータと表記する。【０００３】
なお、ＸＭＬデータ等に関する技術として、執筆者に編集上の制約を与えずに文書を自由に編集させても、過去の文書を復元可能とする技術も知られている（例えば、特許文献２参照）。【０００４】
【特許文献１】特開平５−１０１０５３号公報
【特許文献２】特開平９−１７１５１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来では、既存のＸＭＬデータを流用するために、複数のＸＭＬデータから特定のデータを取り出してデータを結合させることで、新たなＸＭＬデータを作成する場合がある。しかしながら、かかるデータを結合させる場合には、ユーザ自身が、複雑なクエリ（Xquery）をコンピュータに入力する必要があり、ユーザにかかる負担が大きいという問題があった。【０００６】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、ＸＭＬデータのデータ結合を容易に実行することができるデータベース検索プログラムを記録するコンピュータ読取可能な記憶媒体、データベース検索装置、および、データベース検索方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、この記憶媒体は、要素が階層化された木構造データを記憶装置に記憶したコンピュータに、前記木構造データを対象として、同一名称の親要素に直接関連づけられた同一名称の子要素が複数存在する場合に、複数の子供要素を一つの子供要素に集約することで前記木構造データの要素間の関係を集約した集約構造データを作成する集約機能と、各木構造データの一部を結合することで作成される結合データに対応した集約構造データと、結合対象となる木構造データの各要素の条件となる結合条件、および、前記集約構造データの要素の何れかを指定要素として受け付ける受付機能と前記結合データに対応する集約構造データと前記結合条件を基にして、前記集約構造データの要素の何れかを基準要素として判定する基準要素判定機能と、前記基準要素を基にした前記木構造データの取り扱い単位により生成される結合データの第一データ量と、前記指定要素を基にした前記木構造データの取り扱い単位により生成される結合データの第二データ量とを比較して、比較結果を出力する比較結果出力機能を実現させるためのプログラムを記録する。
【発明の効果】
【０００８】
この記憶媒体に記憶されたプログラムを実行することで、コンピュータは、ユーザに対してＸＭＬデータのデータ結合を容易に実行させることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、ＸＭＬデータのデータ構造の一例を示す図である。
【図２】図２は、「従業員ＤＢ．ｘｍｌ」の木構造を示す図である。
【図３】図３は、「住民ＤＢ．ｘｍｌ」の木構造を示す図である。
【図４】図４は、木の用語を補足説明するための図である。
【図５】図５は、従来のＸＭＬデータのデータ結合を説明するための図である。
【図６】図６は、ユーザがコンピュータに入力するクエリの一例を示す図である。
【図７】図７は、本実施例にかかる検索装置が実現させるデータ結合のユーザインターフェースの一例を示す図（１）である。
【図８】図８は、本実施例にかかる検索装置が実現させるデータ結合のユーザインターフェースの一例を示す図（２）である。
【図９】図９は、本実施例にかかる検索装置が実現させるデータ結合のユーザインターフェースの一例を示す図（３）である。
【図１０】図１０は、本実施例にかかる検索装置が実現させるデータ結合のユーザインターフェースの一例を示す図（４）である。
【図１１】図１１は、本実施例にかかる検索装置が実現させるデータ結合のユーザインターフェースの一例を示す図（５）である。
【図１２】図１２は、本実施例にかかる検索装置が実現させるデータ結合のユーザインターフェースの一例を示す図（６）である。
【図１３】図１３は、図１０の結合データのパストライから作成される複数の結合データの一例を示す図である。
【図１４】図１４は、結合ケース１、２のクエリの一例を示す図である。
【図１５】図１５は、本実施例にかかる検索装置の構成を示す図である。
【図１６】図１６は、「従業員ＤＢ．ｘｍｌ」に対応する入力パストライを示す図である。
【図１７】図１７は、「住民ＤＢ．ｘｍｌ」に対応するパストライを示す図である。
【図１８】図１８は、入力パストライノード構造体のデータ構造の一例を示す図である。
【図１９】図１９は、「住民ＤＢ．ｘｍｌ」の入力パストライを各入力パストライノード構造体で示した図である。
【図２０】図２０は、「従業員ＤＢ．ｘｍｌ」の入力パストライを各入力パストライノード構造体で示した図である。
【図２１】図２１は、出力パストライノード構造体のデータ構造の一例を示す図である。
【図２２】図２２は、「従業員電話帳ＤＢ．ｘｍｌ」の出力パストライを各出力パストライノード構造体で示した図である。
【図２３】図２３は、結合条件指定テーブルのデータ構造の一例を示す図である。
【図２４】図２４は、Ｊｏｉｎ点指定テーブルのデータ構造の一例を示す図である。
【図２５】図２５は、指示受付部の処理を説明するための図（１）である。
【図２６】図２６は、指示受付部の処理を説明するための図（２）である。
【図２７】図２７は、指示受付部の処理を説明するための図（３）である。
【図２８】図２８は、指示受付部の処理を説明するための図（４）である。
【図２９】図２９は、指示受付部の処理を説明するための図（５）である。
【図３０】図３０は、指示受付部の処理を説明するための図（６）である。
【図３１】図３１は、増加判定部の処理を説明するための図である。
【図３２】図３２は、増加判定部が出力するメッセージの表示例を示す図である。
【図３３】図３３は、レコード数が飛躍的に増加してしまう例を示す図である。
【図３４】図３４は、クエリ生成部が生成するクエリの一例を示す図である。
【図３５】図３５は、本実施例にかかる検索装置の処理手順を示すフローチャートである。
【図３６】図３６は、パストライ生成処理の処理手順を示すフローチャートである。
【図３７】図３７は、パス登録処理の処理手順を示すフローチャートである。
【図３８】図３８は、兄弟出現数計数処理の処理手順を示すフローチャートである。
【図３９】図３９は、ノード新規作成処理の処理手順を示すフローチャートである。
【図４０】図４０は、ノードコピー処理の処理手順を示すフローチャートである。
【図４１】図４１は、ノード間のリンク追加処理の処理手順を示すフローチャートである。
【図４２】図４２は、ノード間のリンク削除処理を示すフローチャートである。
【図４３】図４３は、全ノードの値の更新処理の処理手順を示すフローチャートである。
【図４４】図４４は、結合条件の指定受付処理の処理手順を示すフローチャートである。
【図４５】図４５は、Ｊｏｉｎ点の指定処理の処理手順を示すフローチャートである。
【図４６】図４６は、基準Ｊｏｉｎ点判定処理の処理手順を示すフローチャートである。
【図４７】図４７は、レコード数増加量計算処理の処理手順を示すフローチャートである。
【図４８】図４８は、クエリ生成処理の処理手順を示すフローチャートである。
【図４９】図４９は、Ｆｏｒ文の作成処理の処理手順を示すフローチャートである。
【図５０】図５０は、Ｗｈｅｒｅ文の作成処理の処理手順を示すフローチャートである。
【図５１】図５１は、Ｒｅｔｕｒｎ文の作成処理の処理手順を示すフローチャートである。
【図５２】図５２は、実施例に示した検索装置に対応するコンピュータのハードウェア構成を示す図である。
【符号の説明】
【００１０】
１１    入力装置
１２    モニタ
１３    ＲＡＭ
１３ａ，１８ａ  各種データ
１４    ＲＯＭ
１５    通信制御装置
１６    媒体読取装置
１７    ＣＰＵ
１７ａ  クエリ生成プロセス
１７ｂ  検索プロセス
１８    ＨＤＤ
１８ｂ  クエリ生成プログラム
１８ｃ  検索プログラム
１９    バス
１００    検索装置
１１０    入力部
１２０    出力部
１３０    入出力制御部
１４０    記憶部
１４０ａ  ＸＭＬデータ
１４０ｂ  入力パストライ
１４０ｃ  出力パストライ
１４０ｄ  結合条件指定テーブル
１４０ｅ  Ｊｏｉｎ点指定テーブル
１４０ｆ  クエリ
１５０    制御部
１５０ａ  パストライ生成部
１５０ｂ  兄弟出現数計数部
１５０ｃ  パストライ表示部
１５０ｄ  指示受付部
１５０ｅ  増加判定部
１５０ｆ  クエリ生成部
１５０ｇ  結合処理部
１５０ｈ  検索処理部
【発明を実施するための最良の形態】
【００１１】
以下に添付図面を参照して、この発明に係るデータベース検索プログラムを記録するコンピュータ読取可能な記憶媒体、データベース検索装置、および、データベース検索方法の実施例を詳細に説明する。
【実施例】
【００１２】
まず、本実施例で使用するＸＭＬ（Extensible  Markup  Language）データについて説明する。図１は、ＸＭＬデータのデータ構造の一例を示す図である。図１に示すように、このＸＭＬデータは、要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有している。以下の説明において、図１の左側に示すＸＭＬデータを、「従業員ＤＢ．ｘｍｌ」と表記し、図１の右側に示すＸＭＬデータを、「住民ＤＢ．ｘｍｌ」と表記する。図１に示した各ＸＭＬデータは、木構造で表すことが出来る。【００１３】
図２は、「従業員ＤＢ．ｘｍｌ」の木構造を示す図であり、図３は、「住民ＤＢ．ｘｍｌ」の木構造を示す図である。図２に示すように、「従業員ＤＢ．ｘｍｌ」の木構造では、ノードＩＤ１１〜２１の要素ノードを有しており、各要素ノードがそれぞれ接続している。同様に、「住民ＤＢ．ｘｍｌ」の木構造では、ノード３１〜３９の要素ノードを有しており、各要素ノードがそれぞれ接続している。なお、ＸＭＬデータの木構造には、テキストデータが含まれる場合もあるが、ここでは説明を省略する。このように、ＸＭＬデータに代表される半構造データは、項目間や項目・値間の関係が木構造として表現可能なデータである。【００１４】
図２、図３に示した木構造に含まれる各ノードの説明を行う場合に、根ノード、親ノード、子供ノード、兄ノード、弟ノード、先祖ノード、子孫ノードというような用語を用いる場合がある。図４は、木の用語を補足説明するための図である。図４に示すように、木を構成する各ノードのうち、最上層に位置するノードを根ノードと定義する。また、基準ノードのひとつ上の層に存在し、基準ノードに接続されたノードを、基準ノードに対する親ノード（以下、単に親ノード）と定義する。また、基準ノードのひとつ下の層に存在し、基準ノードに接続されたノードを基準ノードに対する子供ノード（以下、単に子供ノード）と定義する。【００１５】
また、基準ノードと同じ層に存在し、基準ノードと同じ親ノードに接続され、基準ノードの左側に存在するノードを、基準ノードに対する兄ノード（以下、単に兄ノード）と定義する。また、基準ノードと同じ層に存在し、基準ノードと同じ親ノードに接続され、基準ノードの右側に存在するノードを、基準ノードに対する弟ノード（以下、単に弟ノード）と定義する。また、根ノードから親ノードに至るパスに存在する各ノードをまとめて先祖ノードと定義する。また、基準ノードの配下に接続された各ノードをまとめて子孫ノードと定義する。【００１６】
次に、従来のＸＭＬデータのデータ結合について説明する。図５は、従来のＸＭＬデータのデータ結合を説明するための図である。図５に示す例では、「従業員ＤＢ．ｘｍｌ」における従業員項目内に、「住民ＤＢ．ｘｍｌ」における同一人物のＴＥＬ項目を加えることで、新たな「従業員電話帳．ｘｍｌ」を作成する場合を示している。【００１７】
ここで、図５における同一人物は、「従業員ＤＢ．ｘｍｌ」、「住民ＤＢ．ｘｍｌ」において、名前項目と会社項目が共に一致する人物を示す。例えば、「従業員ＤＢ．ｘｍｌ」、「住民ＤＢ．ｘｍｌ」において、従業員の項目を参照すると、浅井と富士通研究所の組と、多湖と富士通研究所の組が一致している。すなわち、「従業員ＤＢ．ｘｍｌ」の浅井と、「住民ＤＢ．ｘｍｌ」の浅井は同一人物であり、「従業員ＤＢ．ｘｍｌ」の多湖と、「住民ＤＢ．ｘｍｌ」の多湖は同一人物である。【００１８】
図５に示したように、「従業員ＤＢ．ｘｍｌ」および「住民ＤＢ．ｘｍｌ」のデータを結合して、「従業員電話帳．ｘｍｌ」を作成する場合には、図６に示すようなクエリをユーザ自身がコンピュータに入力する必要があった。図６は、ユーザがコンピュータに入力するクエリの一例を示す図である。【００１９】
図６において、「For〜」は、Ｆｏｒ文と呼ばれ、処理対象となるＸＭＬデータの項目を指定する命令文である。例えば、
For  $a=document（従業員ＤＢ．ｘｍｌ）/従業員ＤＢ/従業員
は、「従業員ＤＢ．ｘｍｌ」の従業員項目を指定している。また、
For  $b=document（住民ＤＢ．ｘｍｌ）/住民ＤＢ/住民
は、「住民ＤＢ．ｘｍｌ」の住民項目を指定している。【００２０】
図６において、「Where〜」は、Ｗｈｅｒｅ文と呼ばれ、データ結合を行ううえでの各種条件を指定する命令文である。以下の説明において、データを結合する上での条件を毛結合条件と表記する。例えば、
Where  $a/名前/=$b/名前
Where  $a/会社名/=$b/会社
が指定された場合には、Ｆｏｒ文で指定した項目（従業員の項目、住民の項目）において、データＡ（例えば、「従業員ＤＢ．ｘｍｌ」）の名前のタグ名とデータＢ（例えば、「住民ＤＢ．ｘｍｌ」）の名前のタグ名が一致し、データＡの会社名のタグ名とデータＢの会社のタグ名が一致するという結合条件を指定している。【００２１】
図６において、「Return〜」は、Ｒｅｔｕｒｎ文と呼ばれ、データ結合後のフォーマットを指定する命令文である。また、Ｒｅｔｕｒｎ文により指定されるフォーマットには、Ｆｏｒ文で指定した項目のうち、Ｗｈｅｒｅ文の条件を満たす項目のみが登録される。【００２２】
例えば、図５に示した「従業員電話帳．ｘｍｌ」のフォーマットで出力させる場合には、ユーザは、
＜従業員電話帳＞
＜従業員＞
｛$a/名前｝
｛$a/住所｝
｛$b/ＴＥＬ｝
＜／従業員＞
＜従業員電話帳＞
と指定する。【００２３】
しかしながら、図６に示したようなクエリは複雑であるため、ユーザ自身がクエリを指定して、ＸＭＬデータのデータ結合を行うことは、ユーザにかかる負担が大きくなってしまう。そこで、図６に示したようなクエリを作成することなく、直感的に、ＸＭＬデータのデータ結合を行うことができれば、ユーザにかかる負担を軽減できる。【００２４】
次に、本実施例にかかる検索装置の概要について説明する。本実施例にかかる検索装置は、ユーザにクエリ（例えば、図６参照）を直接入力させること無く、直感的な方法で、データ結合を実現する。図７〜図１２は、本実施例にかかる検索装置が実現させるデータ結合のユーザインターフェースの一例を示す図である。ここでは一例として、「従業員ＤＢ．ｘｍｌ」、「住民ＤＢ．ｘｍｌ」から、「従業員電話帳．ｘｍｌ」を作成する場合を例にして説明する。【００２５】
まず、検索装置は、既存のＸＭＬデータ「従業員ＤＢ．ｘｍｌ」、「住民ＤＢ．ｘｍｌ」の階層構造を集約することでパストライを作成し、ディスプレイに表示させる。図７の左上に示すパストライは、「従業員ＤＢ．ｘｍｌ」のパストライを示し、図７の右上に示すパストライは、「住民ＤＢ．ｘｍｌ」のパストライを示す。図７の下段には、ユーザが作成したい結合データのパストライを、入力装置（キーボード、マウス等）を用いて構築する。【００２６】
例えば、図８に示すように、ユーザは入力装置を用いて、結合データの根ノード（従業員電話帳）と、結合データのレコードノードを作成する。そして、図９に示すように、ユーザは入力装置を用いて、ドラック＆ドロップによる簡単な操作を行い、結合データのパストライにレコード項目を追加する。図９に示す例では、「従業員ＤＢ．ｘｍｌ」のパストライの「名前」、「住所」ノードを従業員ノードに接続し、「住民ＤＢ．ｘｍｌ」のパストライの「ＴＥＬ」を従業員ノードに接続している。【００２７】
また、ユーザは、入力装置を用いて結合条件を指定する。例えば、各パストライの「名前」のタグ名を一致させるという結合条件を指定する場合には、「従業員ＤＢ．ｘｍｌ」のパストライの「名前」と、「住民ＤＢ．ｘｍｌ」の「名前」とを同じ色に設定する。また、「従業員ＤＢ．ｘｍｌ」のパストライの「会社名」と、「住民ＤＢ．ｘｍｌ」の「会社」のタグ名を一致させるという結合条件を指定する場合には、「会社名」、「会社」を同じ色に設定する（図１０参照）。【００２８】
ところで、図１０に指定された結合データのパストライを基にして、検索装置が結合データを作成する場合、図１３に示すような２通りの結合データが考えられる。図１３は、図１０の結合データのパストライから作成される複数の結合データの一例を示す図である。【００２９】
図１３の左側に示すように、結合ケース１では、住民単位で結合データを作成しているため、単一の人物に対して複数のＴＥＬが存在する場合でも、複数のＴＥＬをまとめて結合データが作成されている。一方、結合ケース２では、ＴＥＬ単位で結合データを作成しているため、単一の人物に対して複数のＴＥＬが存在する場合には、ＴＥＬ毎にデータが生成されている。【００３０】
ここで、結合ケース１、２を比較すると、まとめてＴＥＬを結合データに記載している分、結合ケース１の結合データの方が、結合ケース２の結合データよりもデータ量を少なくすることが出来る。従って、結合データを作成する場合には、結合ケース２よりも、結合ケース１のような結合データを作成することが好ましい。【００３１】
図１４は、結合ケース１、２のクエリの一例を示す図である。図１４の左側に示すクエリは、「従業員電話帳．ｘｍｌ（結合ケース１）」を生成するためのクエリを示し、図１４の右側に示すクエリは、「従業員電話帳．ｘｍｌ（結合ケース２）」を生成するためのクエリを示している。【００３２】
図１４の左側を参照すると、クエリ中のＦｏｒ文が、「For  $b=document（住民ＤＢ．ｘｍｌ）/住民ＤＢ/住民」となっているため、結合データを作成する場合に、「住民ＤＢ．ｘｍｌ」を、住民単位で処理する旨が指定されている。また、図１４の右側を参照すると、クエリ中のＦｏｒ文が、「For  $b=document（住民ＤＢ．ｘｍｌ）/住民ＤＢ/住民/ＴＥＬ」となっているため、結合データを作成する場合に、「住民ＤＢ．ｘｍｌ」を、ＴＥＬ単位で処理する旨が指定されている。【００３３】
図１４に示したクエリレベルでは、検索装置は、どの単位で結合データを生成するのかを判定することが可能であるが、図１０に示したユーザフェースのままでは、どの単位で結合データを生成するのかを判定できない。したがって、本実施例にかかる検索装置は、Ｊｏｉｎ点という概念を更に導入する。ここで、Ｊｏｉｎ点は、「データの取り扱い単位」を指定するパス式に対応するパストライのノードと定義する。【００３４】
ユーザは入力装置を操作して、「従業員ＤＢ．ｘｍｌ」のパストライおよび「住民ＤＢ．ｘｍｌ」のパストライ上のノードの何れかをＪｏｉｎ点に指定して、データの取り扱い単位を指定する。【００３５】
例えば、「従業員ＤＢ．ｘｍｌ」を従業員単位、「住民ＤＢ．ｘｍｌ」を住民単位で処理して図１３の左側に示す「従業員電話帳．ｘｍｌ（結合ケース１）」を作成する場合には、図１１に示すように、「従業員ＤＢ．ｘｍｌ」の従業員ノードと、「住民ＤＢ．ｘｍｌ」の住民ノードをＪｏｉｎ点に指定すればよい。また、「従業員ＤＢ．ｘｍｌ」を従業員単位、「住民ＤＢ．ｘｍｌ」をＴＥＬ単位で処理して図１３の右側に示す「従業員電話帳．ｘｍｌ（結合ケース２）」を作成する場合には、図１２に示すように、「従業員ＤＢ．ｘｍｌ」の従業員ノードと、「住民ＤＢ．ｘｍｌ」のＴＥＬノードをＪｏｉｎ点に指定すればよい。【００３６】
なお、ユーザはＪｏｉｎ点を指定した場合、どの程度結合データのデータ容量が大きくなるかを判断することが出来ない。ユーザが指定したＪｏｉｎ点によっては、結合データが極めて大きくなってしまう場合があり、かかるケースを回避する必要がある。本実施例にかかる検索装置は、ユーザが指定するＪｏｉｎ点の他に、基準Ｊｏｉｎ点を自動判定し、ユーザの指定したＪｏｉｎ点と基準Ｊｏｉｎ点とを基にして、どの程度、結合データが大きくなるのかをあわせてユーザに通知する。【００３７】
このように、本実施例にかかる検索装置は、パストライを利用して、結合データをユーザに構築させるので、難しいクエリの構文を覚えなくても容易に結合データを設計することができる。また、本実施例にかかる検索装置は、Ｊｏｉｎ点を指定させることで、パストライ上のデータ結合のあいまい性を解消することができる。また、本実施例にかかる検索装置は、ユーザが指定するＪｏｉｎ点の他に、基準Ｊｏｉｎ点を自動判定し、ユーザの指定したＪｏｉｎ点と基準Ｊｏｉｎ点とを基にして、どの程度、結合データが大きくなるのかをあわせてユーザに通知するので、結合データのデータ容量が大きくなる場合に注意を促すことが出来る。【００３８】
次に、本実施例にかかる検索装置の構成について説明する。図１５は、本実施例にかかる検索装置１００の構成を示す図である。図１５に示すように、この検索装置１００は、入力部１１０と、出力部１２０と、入出力制御部１３０と、記憶部１４０と、制御部１５０を有する。【００３９】
このうち、入力部１１０は、結合データのパストライ、Ｊｏｉｎ点等を指定するための情報を入力する入力部であり、キーボードやマウス等に該当する。出力部１２０は、クエリ、ＸＭＬデータ、パストライ、検索結果等の各種の情報を出力する出力部であり、モニタ（若しくはディスプレイ、タッチパネル）に該当する。入出力制御部１３０は、入力部１１０、出力部１２０、記憶部１４０、制御部１５０によるデータの入出力を制御する処理部である。【００４０】
記憶部１４０は、制御部１５０による各種処理に必要なデータおよびプログラムを記憶する記憶部である。この記憶部１４０は、ＸＭＬデータ１４０ａと、入力パストライ１４０ｂと、出力パストライ１４０ｃと、結合条件指定テーブル１４０ｂと、Ｊｏｉｎ点指定テーブル１４０ｅと、クエリ１４０ｆを有する。【００４１】
このうち、ＸＭＬデータ１４０は、上述したように要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有する文書データである（図１参照）また、ＸＭＬデータ１４０ａのデータ構造は、図１に示したものに限られず、図２，３等で説明したような木構造で表すことも出来る。【００４２】
入力パストライ１４０ｂは、ＸＭＬデータ１４０ａを集約したデータ（パストライ）である。具体的に、「従業員ＤＢ．ｘｍｌ」に対応する入力パストライは、図１６に示す入力パストライで表され、「住民ＤＢ．ｘｍｌ」に対応するパストライは、図１７に示す入力パストライで表される。図１６は、「従業員ＤＢ．ｘｍｌ」に対応する入力パストライを示す図であり、図１７は、「住民ＤＢ．ｘｍｌ」に対応するパストライを示す図である。【００４３】
なお、入力パストライ１４０ｂは、複数の入力パストライノード構造体を相互に接続している。図１８は、入力パストライノード構造体のデータ構造の一例を示す図である。図１８に示すように、この入力パストライノード構造体は、タグ名、絶対パス名、絶対パスＩＤ、データ名、最大兄弟数、兄弟数カウンタ、親ノードへのポインタ、子供ノードへのポインタリストを有する。【００４４】
例えば、図１７に示した「住民ＤＢ．ｘｍｌ」の入力パストライの「住民」に該当する入力パストライノード構造体の場合には、タグ名「住民」、絶対パス名「/住民ＤＢ/住民」、絶対パスＩＤ「２」、データ名「住民ＤＢ．ｘｍｌ」となる。また、親ノードへのポインタは、タグ名「住民ＤＢ」の入力パストライノード構造体に接続されている。子供ノードへのポインタはそれぞれ、タグ名「名前」、「会社」、「ＴＥＬ」に接続されている。【００４５】
また、最大兄弟数は、住民ＤＢ．ｘｍｌにおける住民の最大兄弟数が「２」となるため（図３参照）、タグ名「住民」に対応する最大兄弟数は「２」となる。兄弟数カウンタに関する説明は後述する。【００４６】
ここで、「住民ＤＢ．ｘｍｌ」の入力パストライを、複数の入力パストライノード構造体で示すと、図１９に示す構造となる。図１９は、「住民ＤＢ．ｘｍｌ」の入力パストライを各入力パストライノード構造体で示した図である。また、「従業員ＤＢ．ｘｍｌ」の入力パストライを、複数の入力パストライノード構造体で示すと、図２０に示す構造体となる。図２０は、「従業員ＤＢ．ｘｍｌ」の入力パストライを各入力パストライノード構造体で示した図である。図１５に示す入力パストライ１４０ｂには、「従業員ＤＢ．ｘｍｌ」の入力パストライと、「住民ＤＢ．ｘｍｌ」の入力パストライが含まれているものとする。【００４７】
出力パストライ１４０ｃは、結合データを集約したデータ（パストライ）であり、ユーザが入力部１１０を介して指定する（例えば、図１２の下段参照）。出力パストライは、複数の出力パストライノード構造体を相互に接続している。図２１は、出力パストライノード構造体のデータ構造の一例を示す図である。【００４８】
図２１に示すように、この出力パストライノード構造体は、タグ名、絶対パス名、絶対パスＩＤ、入力データ名、入力パス名、入力パスＩＤ、親ノードへのポインタ、子供ノードへのポインタリストを有する。このうち、入力データ名は、該当ノードが存在していたデータ名が登録され、入力パス名は、該当ノードが存在していたデータ上のノードＩＤが登録され、入力パスＩＤは、該当ノードが存在していたデータ上のパスＩＤが登録される。なお、該当ノードがユーザによって新規に作られたノードである場合には、入力データ名、入力パス名、入力パスＩＤには「Ｎｅｗ」が登録される。【００４９】
例えば、図１２の下段に示した結合データのパストライの「名前」に該当する出力パストライノード構造体の場合には、タグ名「名前」、絶対パス名「従業員電話帳/従業員/名前」となる。また、名前ノードは、「従業員ＤＢ．ｘｍｌ」のパストライ（図２０参照）から移動されてきたノードであるため、入力データ名は「従業員ＤＢ．ｘｍｌ」、入力パス名は「従業員ＤＢ/従業員/名前」となり、入力パスＩＤは「５」となる。【００５０】
図１２の下段に示した結合データのパストライの「ＴＥＬ」に該当する出力パストライノード構造体の場合には、タグ名「ＴＥＬ」、絶対パス名「従業員電話帳/従業員/住所」となる。また、ＴＥＬノードは、「住民ＤＢ．ｘｍｌ」のパストライ（図１９参照）から移動されてきたノードであるため、入力データ名は「住民ＤＢ．ｘｍｌ」、入力パス名は「住民ＤＢ/住民/ＴＥＬ」となり、入力パスＩＤは「５」となる。【００５１】
図１２の下段に示した結合データのパストライの「従業員」に該当する出力パストライノード構造体の場合には、タグ名「従業員」、絶対パス名「従業員電話帳/従業員」、絶対パスＩＤ「２」となる。なお、従業員ノードは、図８等で説明したように、新規に作成されたノードであるため、入力データ名、入力パス名、入力パスＩＤには「Ｎｅｗ」が登録される。【００５２】
ここで、結合データ（例えば、従業員電話帳．ｘｍｌ）の出力パストライを、複数の出力パストライノード構造体で示すと、図２２に示す構造となる。図２２は、「従業員電話帳ＤＢ．ｘｍｌ」の出力パストライを各出力パストライノード構造体で示した図である。【００５３】
図１５の説明に戻ると、結合条件指定テーブル１４０ｄは、結合条件を管理するテーブルである。図２３は、結合条件指定テーブル１４０ｄのデータ構造の一例を示す図である。図２３の１段目では、「従業員ＤＢ．ｘｍｌ」の「会社名」のタグ名と、「住民ＤＢ．ｘｍｌ」の「会社」のタグ名とが完全一致するという条件を指定している。また、図２３の２段目では、「従業員ＤＢ．ｘｍｌ」の「名前」のタグ名と、「住民ＤＢ．ｘｍｌ」の「名前」のタグ名とが完全一致するという条件を指定している。【００５４】
Ｊｏｉｎ点指定テーブル１４０ｅは、Ｊｏｉｎ点を管理するテーブルである。図２４は、Ｊｏｉｎ点指定テーブル１４０ｅのデータ構造の一例を示す図である。図２４に示すように、このＪｏｉｎ点指定テーブル１４０ｅは、データ種別とパス名を対応付けて記憶している。【００５５】
図２４の１段目では、従業員ＤＢ．ｘｍｌのパストライにおいて、従業員ノード（パス名；/従業員ＤＢ/従業員）がＪｏｉｎ点として指定された旨を示している（図１２の左上参照）。また、図２４の２段目では、住民ＤＢ．ｘｍｌのパストライにおいて、ＴＥＬノード（パス名；/住民ＤＢ/住民/ＴＥＬ）がＪｏｉｎ点として指定された旨を示している（図１２の右上参照）。【００５６】
クエリ１４０ｆは、出力パストライ１４０ｃ、結合条件指定テーブル１４０ｄ、Ｊｏｉｎ点指定テーブル１４０ｅ等に基づいて、制御部１５０により自動生成されるクエリである。クエリ１４０ｆのデータ構造は、例えば、図１３等に示したデータ構造となる。【００５７】
制御部１５０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御部である。図１５に示すように、この制御部１５０は、パストライ生成部１５０ａ、兄弟出現数計数部１５０ｂ、パストライ表示部１５０ｃ、指示受付部１５０ｄを有する。また、制御部１５０は、増加判定部１５０ｅ、クエリ生成部１５０ｆ、結合処理部１５０ｇ、検索処理部１５０ｈを有する。【００５８】
このうち、パストライ生成部１５０ａは、ＸＭＬデータ１４０ａ（図１〜図３参照）を集約して、入力パストライ１４０ｂ（図１６、図１７）を作成する処理部である。具体的に、パストライ生成部１５０ａの処理を説明する。まず、パストライ生成部１５０ａは、ＸＭＬデータ１４０ａの木構造データに存在する要素ノードについて、同一タグ名の親ノードに直接関連付けられた同一タグ名の子供ノードが複数存在するか否かを判定する。【００５９】
そして、パストライ生成部１５０ａは、同一タグ名の親ノードに直接関連づけられた同一タグ名の子供ノードが複数存在する場合には、重複する同一タグ名の親ノードおよび子供ノードを一つの親ノードおよび子供ノードに集約することで、入力パストライ１４０ｂを生成する。【００６０】
例えば、図２に示す「従業員ＤＢ．ｘｍｌ」において、同一タグ名の親ノード「従業員ＤＢ」に直接関連づけられた同一タグ名の子供ノード「従業員」が複数存在している。したがって、パストライ生成部１５０ａは、従業員１２と従業員１７とを一つの従業員に集約することで、図１６に示す入力パストライを生成する。なお、パストライ生成部１５０ａは、従業員１２と従業員１７の子孫ノードも同一タグ名のノードが重複しないように集約する。【００６１】
また、図３に示す「住民ＤＢ．ｘｍｌ」において、同一タグ名の親ノード「住民ＤＢ」に直接関連づけられた同一タグ名の子供ノード「住民」が複数存在している。したがって、パストライ生成部１５０ａは、住民３２と住民３６とを一つの住民に集約することで、図１７に示す入力パストライを生成する。なお、パストライ生成部１５０ａは、住民３２と住民３６の子孫ノードも同一タグ名のノードが重複しないように集約する。【００６２】
パストライ生成部１５０ａが、ＸＭＬデータ１４０ａから入力パストライ１４０ｂを生成した時点において、入力パストライ１４０ｂの入力パストライノード構造体に含まれる最大兄弟数および兄弟数カウンタは、Nullとなっている。【００６３】
兄弟出現数計数部１５０ｂは、入力パストライ１４０ｂに含まれる要素ノードと、ＸＭＬデータ１４０ａを基にして、入力パストライ１４０ｂの要素ノードに該当するＸＭＬデータの要素ノードの兄弟数を判定する処理部である。【００６４】
具体的に、図２、図３を用いて説明する。図２に示す従業員ＤＢ．ｘｍｌにおいて、ノード「従業員ＤＢ」は、根ノードであるため兄弟は存在しない。したがって、兄弟出現数計数部１５０ｂは、入力パストライ構造体のタグ名「従業員ＤＢ」に該当する最大兄弟数を１に設定する。【００６５】
図２に示す従業員ＤＢ．ｘｍｌにおいて、ノード「従業員」の兄弟数を判定すると、同一親ノード「従業員ＤＢ」に直接対応付けられたノード「従業員」が２つ存在する。兄弟出現数計数部１５０ｂは、入力パストライ構造体のタグ名「従業員」に該当する最大兄弟数を２に設定する。【００６６】
なお、図２に示す従業員ＤＢ．ｘｍｌにおいて、ノード「ＩＤ」、「会社名」、「名前」、「住所」の兄弟数を判定すると、各ノードに兄弟は存在しない。したがって、兄弟出現数計数部１５０ｂは、入力パストライ構造体のタグ名「従業員」に該当する最大兄弟数を２に設定する。【００６７】
パストライ表示部１５０ｃは、記憶部１４０の入力パストライ１４０ｂを読み出して、各ＸＭＬデータのパストライを出力部１２０に表示させる処理部である。例えば、パストライ表示部１５０ｃは、図７に示したように、「従業員ＤＢ．ｘｍｌ」のパストライおよび「住民ＤＢ．ｘｍｌ」のパストライをディスプレイに表示させる。【００６８】
指示受付部１５０ｄは、入力部１１０を操作するユーザの指示を受け付けて、結合データの出力パストライを作成する処理部である。また、指示受付部１５０ｄは、入力部１１０を操作するユーザから、Ｊｏｉｎ点や結合条件を受け付ける。以下において、指示受付部１５０ｄの処理を具体的に説明する。また、ここでは、図７〜図１２の手順にしたがって、指示受付部１５０ｄがユーザからの指示を受け付けた場合を例に説明する。【００６９】
図２５〜図３０は、指示受付部１５０ｄの処理を説明するための図である。図２５に示すように、指示受付部１５０ｄは、ユーザから根ノード「従業員電話帳」の新規作成要求を受け付けた場合に、出力パストライノード構造体を新規に作成し、作成した出力パストライノード構造体のタグ名に「従業員電話帳」を登録し、絶対パス名と絶対パスＩＤをNULLに設定する。また、かかる出力パストライノード構造体は、新規に作成された構造体である。したがって、指示受付部１５０ｄは、「従業員電話帳」ノードの入力データ名、入力パス名、入力パスＩＤをそれぞれＮｅｗに設定する。【００７０】
図２６に示すように、指示受付部１５０ｄは、ユーザからノード「従業員」の新規作成要求を受け付けた場合に、出力パストライノード構造体を新規に作成し、作成した出力パストライノード構造体のタグ名に「従業員」を登録し、絶対パス名と絶対パスＩＤをNullに設定する。また、かかる出力パストライノード構造体は、新規に作成された構造体である。したがって、指示受付部１５０ｄは、「従業員」ノードの入力データ名、入力パス名、入力パスＩＤをそれぞれＮｅｗに設定する。【００７１】
続いて、ユーザが入力部１１０を操作して「従業員電話帳」を親ノード、「従業員」を子供ノードに指定し、従業員電話帳ノードと従業員ノードを接続した場合について説明する。図２７に示すように、指示受付部１５０ｄは、従業員電話帳ノードの子供ポインタを従業員ノードに設定し、従業員ノードの親ポインタを従業員電話帳ノードに設定することで、従業員電話帳ノードと従業員ノードを接続する。【００７２】
従業員電話帳ノードは根ノードであるため、指示受付部１５０ｄは従業員電話帳ノードの絶対パスを「/従業員電話帳」に設定し、絶対パスＩＤを「１」に設定する。また、指示受付部１５０ｄは、従業員ノードの絶対パスＩＤを設定する場合に、根ノードから従業員ノードまでのタグ名を順に追加することで、絶対パス名を判定する。従業員ノードの絶対パス名は「/従業員ＤＢ/従業員」となるため、指示受付部１５０ｄは「/従業員ＤＢ/従業員」を従業員ノードの絶対パス名に登録する。また、指示受付部１５０ｄは従業員ノードの絶対パスＩＤを「２」に設定する。【００７３】
続いて、ユーザが入力部１１０を操作して、「従業員ＤＢ．ｘｍｌ」の入力パストライから「名前」ノードをドラッグ＆ドロップし、結合データの出力パストライの従業員ノードに接続した場合につい説明する。図２８に示すように、指示受付部１５０ｄは、出力パストライノード構造体を新規作成し、作成した出力パストライノード構造体のタグ名に「名前」を設定する。また、指示受付部１５０ｄは、絶対パスＩＤをNullに設定する。【００７４】
名前ノードは、「従業員ＤＢ．ｘｍｌ」の入力パストライからドラッグ＆ドロップされたノードである。したがって、指示受付部１５０ｄは、入力パストライ１４０ｂを参照し、「従業員ＤＢ．ｘｍｌ」の入力パストライ上における「名前」ノードの絶対パス名を入力パス名として取得し、絶対パスＩＤを入力パスＩＤとして取得する。【００７５】
図２０に示すように、「従業員ＤＢ．ｘｍｌ」の入力パストライ上における「名前」の絶対パス名は「/従業員ＤＢ/従業員/名前」、絶対パスＩＤ「５」である。指示受付部１５０ｄは、図２８に示すように、名前ノードの入力データ名に「従業員ＤＢ．ｘｍｌ」を設定し、入力パス名に「/従業員ＤＢ/従業員/名前」を設定し、入力パスＩＤに「５」を設定する。【００７６】
図２９に示すように、指示受付部１５０ｄは、従業員ノードの子供ポインタを名前ノードに設定し、名前ノードの親ポインタを従業員ノードに設定することで、従業員ノードと名前ノードを接続する。【００７７】
続いて、ユーザが入力部１１０を操作して、「従業員ＤＢ．ｘｍｌ」の入力パストライから「住所」ノードをドラッグ＆ドロップし、結合データの出力パストライの従業員ノードに接続した場合につい説明する。図３０に示すように、指示受付部１５０ｄは、出力パストライノード構造体を新規作成し、作成した出力パストライノード構造体のタグ名に「住所」を設定する。また、指示受付部１５０ｄは、絶対パスＩＤを４に設定する。【００７８】
住所ノードは、「従業員ＤＢ．ｘｍｌ」の入力パストライからドラッグ＆ドロップされたノードである。したがって、指示受付部１５０ｄは、入力パストライ１４０ｂを参照し、「従業員ＤＢ．ｘｍｌ」の入力パストライ上における「住所」ノードの絶対パス名を入力パス名として取得し、絶対パスＩＤを入力パスＩＤとして取得する。【００７９】
図２０に示すように、「従業員ＤＢ．ｘｍｌ」の入力パストライ上における「住所」の絶対パス名は「/従業員ＤＢ/従業員/住所」、絶対パスＩＤ「６」である。指示受付部１５０ｄは、図３０に示すように、住所ノードの入力データ名に「従業員ＤＢ．ｘｍｌ」を設定し、入力パス名に「/従業員ＤＢ/従業員/住所」を設定し、入力パスＩＤに「６」を設定する。【００８０】
続いて、ユーザが入力部１１０を操作して、「住民ＤＢ．ｘｍｌ」の入力パストライから「ＴＥＬ」ノードをドラッグ＆ドロップし、結合データの出力パストライの従業員ノードに接続した場合につい説明する。図３０に示すように、指示受付部１５０ｄは、出力パストライノード構造体を新規作成し、作成した出力パストライノード構造体のタグ名に「ＴＥＬ」を設定する。また、指示受付部１５０ｄは、ＴＥＬノードの絶対パスＩＤを５に設定する。【００８１】
ＴＥＬノードは、「住民ＤＢ．ｘｍｌ」の入力パストライからドラッグ＆ドロップされたノードである。したがって、指示受付部１５０ｄは、入力パストライ１４０ｂを参照し、「住民ＤＢ．ｘｍｌ」の入力パストライ上における「ＴＥＬ」ノードの絶対パス名を入力パス名として取得し、絶対パスＩＤを入力パスＩＤとして取得する。【００８２】
図１９に示すように、「住民ＤＢ．ｘｍｌ」の入力パストライ上における「ＴＥＬ」の絶対パス名は「/住民ＤＢ/住民/ＴＥＬ」、絶対パスＩＤ「５」である。指示受付部１５０ｄは、図３０に示すように、ＴＥＬノードの入力データ名に「住民ＤＢ．ｘｍｌ」を設定し、入力パス名に「/住民ＤＢ/住民/ＴＥＬ」を設定し、入力パスＩＤに「５」を設定する。【００８３】
上述したように、指示受付部１５０ｄが、図２５〜図３０に示す処理を実行することで、結合データの出力パストライ１４０ｃが作成される。【００８４】
続いて、図１０に示したように、指示受付部１５０ｄがユーザから結合条件を受け付けた場合の処理について説明する。例えば、指示受付部１５０ｄは、「従業員ＤＢ．ｘｍｌ」の入力パストライ上の「会社名」と、「住民ＤＢ．ｘｍｌ」の入力パストライ上の「会社」が同じ色に設定された場合に、「会社名」と「会社」を完全一致とする結合条件を受け付ける。この場合、図２３に示した結合条件指定テーブル１４０ｄの１段目に示すように、会社名の絶対パス名「従業員ＤＢ/従業員/会社名」と、会社の絶対パス名「住民ＤＢ/住民/名前」を登録し、条件を完全一致とする。【００８５】
また、指示受付部１５０ｄは、「従業員ＤＢ．ｘｍｌ」の入力パストライ上の「名前」と、「住民ＤＢ．ｘｍｌ」の入力パストライ上の「名前」が同じ色に設定された場合に、各「名前」を完全一致とする結合条件を受け付ける。この場合、図２３に示した結合条件指定テーブル１４０ｄの２段目に示すように、名前の絶対パス名「従業員ＤＢ/従業員/名前」と、名前の絶対パス名「住民ＤＢ/住民/名前」を登録し、条件を完全一致とする。【００８６】
続いて、図１１、図１２に示したように、指示受付部１５０ｄがユーザからＪｏｉｎ点を受け付けた場合の処理について説明する。指示処理部１５０ｄは、ユーザによって指定されたＪｏｉｎ点に基づいて、図２４に示したＪｏｉｎ点指定テーブル１４０ｅを作成する。一例として、指定受付部１５０ｄは、「従業員ＤＢ．ｘｍｌ」の従業員がＪｏｉｎ点として指定された場合について説明する。指定受付部１５０ｄは、指定された従業員の絶対パス名「/従業員ＤＢ/従業員」を入力パストライ１４０ｂから取得し、データ種別「従業員ＤＢ」と対応付けて絶対パス名「/従業員ＤＢ/従業員」をＪｏｉｎ点指定テーブル１４０ｅに登録する（図２４の１段目参照）。【００８７】
また、指定受付部１５０ｄは、「住民ＤＢ．ｘｍｌ」のＴＥＬがＪｏｉｎ点として指定された場合について説明する。指定受付部１５０ｄは、指定された従業員の絶対パス名「/住民ＤＢ/住民/ＴＥＬ」を入力パストライ１４０ｂから取得し、データ種別「住民ＤＢ」と対応付けて絶対パス名「/住民ＤＢ/住民/ＴＥＬ」をＪｏｉｎ点指定テーブル１４０ｅに登録する（図２４の２段目参照）。【００８８】
増加判定部１５０ｅは、結合データのレコード数が基準値となる基準Ｊｏｉｎ点を判定し、基準Ｊｏｉｎ点を基に作成される結合データのレコード数と比べて、ユーザに指定されたＪｏｉｎ点を基に作成される結合データのレコード数がどの程度増加するのかを判定する処理部である。【００８９】
まず、増加判定部１５０ｅが入力パストライ上の基準Ｊｏｉｎ点を判定する処理について説明する。増加判定部１５０ｅは、出力パストライ１４０ｃを全検索し、入力データ名毎に入力パス名を抽出する。例えば、図２２の出力パストライ１４０ｃを参照すると、入力データ名「従業員ＤＢ．ｘｍｌ」に対応する入力パス名は「/従業員ＤＢ/従業員/名前」、「/従業員ＤＢ/従業員/住所」となる。また、入力データ名「住民ＤＢ．ｘｍｌ」に対応する入力パス名は「/住民ＤＢ/住民/ＴＥＬ」となる。【００９０】
続いて、増加判定部１５０ｅは、結合条件指定テーブル１４０ｄを全検索し、データ種別毎にパス名を抽出する。例えば、図２３の結合条件指定テーブル１４０ｄを参照すると、「従業員ＤＢ．ｘｍｌ」に対応するパス名は、「/従業員ＤＢ/従業員/会社名」、「/従業員ＤＢ/従業員/名前」となる。また、「住民ＤＢ．ｘｍｌ」に対応するパス名は、「/住民ＤＢ/住民/会社」、「/住民ＤＢ/住民/名前」となる。【００９１】
続いて、増加判定部１５０ｅは、抽出した各パスを入力データ毎に比較することで共通接頭辞を判定し、判定した共通接頭辞に含まれるパスの内、最長のパスに該当するノードを基準Ｊｏｉｎ点として判定する。【００９２】
出力パストライ１４０ｃと結合条件指定テーブル１４０ｄから抽出された「従業員ＤＢ．ｘｍｌ」に対応するパスは、「/従業員ＤＢ/従業員/ＩＤ」、「/従業員ＤＢ/従業員/住所」、「/従業員ＤＢ/従業員/会社名」、「/従業員ＤＢ/従業員/名前」となる。各パスを比較して共通接頭辞を判定すると、共通接頭辞は「/従業員ＤＢ」と「/従業員ＤＢ/従業員」となる。共通接頭辞に含まれるパスの内、最長のパスは「/従業員ＤＢ/従業員」となる。したがって、増加判定部１５０ｅは、「従業員ＤＢ．ｘｍｌ」の入力パストライのうち、「/従業員ＤＢ/従業員」に該当する「従業員」ノードを基準Ｊｏｉｎ点として判定する。【００９３】
一方、出力パストライ１４０ｃと結合条件指定テーブル１４０ｄから抽出された「住民ＤＢ．ｘｍｌ」に対応するパスは、「/住民ＤＢ/住民/ＴＥＬ」、「/住民ＤＢ/住民/会社」、「/住民ＤＢ/住民/名前」となる。各パスを比較して共通接頭辞を判定すると、共通接頭辞は「/住民ＤＢ」と「/住民ＤＢ/住民」となる。共通接頭辞に含まれるパスの内、最長パスは「/住民ＤＢ/住民」となる。したがって、増加判定部１５０ｅは、「住民ＤＢ．ｘｍｌ」の入力パストライのうち、「/住民ＤＢ/住民」に該当する「住民」ノードを基準Ｊｏｉｎ点として判定する。【００９４】
増加判定部１５０ｅは、入力パストライの基準Ｊｏｉｎ点を判定した後に、基準Ｊｏｉｎ点による結合データのレコード数に比べて、ユーザの指定したＪｏｉｎ点のレコード数の増加量を判定する。データＡの基準Ｊｏｉｎ点をＫＡ、データＢの基準Ｊｏｉｎ点をＫＢと定義し、データＡのユーザが指定したＪｏｉｎ点をＵＡ、データＢのユーザが指定したＪｏｉｎ点をＵＢとして、増加判定部１５０ｅの処理を説明する。【００９５】
まず、増加判定部１５０ｅは、ＫＡとＵＡを基にして基準値αを算出する。増加判定部１５０ｅはＫＡとＵＡが等しい場合に、基準値αの値を１に設定する。一方、増加判定部１５０ｅは、ＫＡとＵＡが等しくない場合には、データＡの入力パストライにおいて、ＵＡの各子孫ノード（ＵＡも含む）の内、ＫＢまでの各子孫ノードの最大兄弟数を掛け合わせることで、基準値αを算出する。【００９６】
続いて、増加判定部１５０ｅは、ＫＢとＵＢを基にして基準値βを算出する。増加判定部１５０ｅは、ＫＢとＵＢが等しい場合に、基準値βの値を１に設定する。一方、増加判定部１５０ｅは、ＫＢとＵＢが等しくない場合に、データＢの入力パストライにおいて、ＵＢの各子孫ノードの内（ＵＢも含む）、ＫＢまでの各ノードの最大兄弟数を掛け合わせることで、基準値βを算出する。【００９７】
増加判定部１５０ｅは、上記した手法により算出した基準値αと基準値データとを掛け合わせることで、増加量を算出する。例えば、増加量判定部１５０ｅは、増加量α＝α×βにより算出する。そして、増加量判定部１５０ｅは、算出した増加量αをディスプレイに出力する。ユーザは、増加判定部１５０ｅにより算出された増加量αを算出することで、自身が指定したＪｏｉｎ点によるレコード数の増加量を把握することができ、場合によっては、Ｊｏｉｎ点をつけなおすなどの対処を行うことができる。【００９８】
具体例を用いて、増加判定部１５０ｅの処理を説明する。図３１は、増加判定部１５０ｅの処理を説明するための図である。図３１の各ノードの隣に位置する数字は、該当ノードの最大兄弟数を示す。また、説明の便宜上、従業員ＤＢ．ｘｍｌの入力パストライをデータＡ、住民ＤＢ．ｘｍｌの入力パストライをデータＢとする。また、ＫＡおよびＵＡを、従業員ＤＢ．ｘｍｌの入力パストライの従業員とし、住民ＤＢ．ｘｍｌの入力パストライの住民をＫＢ、ＴＥＬをＵＢとする。【００９９】
まず、増加判定部１５０ｅは、ＫＡとＵＡを基にして基準値αを算出する。ＫＡとＵＡは共に「従業員」ノードであるため、増加判定部１５０ｅは、基準値αを「１」に設定する。【０１００】
続いて、増加判定部１５０ｅは、ＫＢとＵＢを基にして基準値βを算出する。ＫＢとＵＢは等しくないため、増加判定部１５０ｅは、住民ＤＢ．ｘｍｌの入力パストライにおいて、ＵＢの各子孫ノードの内（ＵＢも含む）、ＫＢまでの各ノードの最大兄弟数を掛け合わせることで、基準値βを算出する。ＵＢの各子孫ノードの内（ＵＢも含む）、ＫＢまでの各ノードに該当するノードは、ＴＥＬノードである。この場合は、ＴＥＬノードの最大兄弟数をそのままβに設定する。増加判定部１５０ｅは、ＴＥＬノードの最大兄弟数「２」をβに設定する。【０１０１】
増加判定部１５０ｅは、基準値α（１）と基準値（２）とを掛け合わせることで増加量α（２）を算出する。増加判定部１５０ｅは、例えば、「あなたが指定したＪｏｉｎ点を用いると、基準ケースに比べてレコード数が最大２倍に増大します」というメッセージをディスプレイに表示する。図３２は、増加判定部１５０ｅが出力するメッセージの表示例を示す図である。【０１０２】
図３１を用いて説明した処理では、説明の便宜上、小規模なＸＭＬデータを集約した入力パストライを用いて説明したが、実際のＸＭＬデータは大規模な場合が多く、かかるＸＭＬデータを集約した場合の入力パストライの最大兄弟数は大きな値となる。したがって、ユーザの指定するＪｏｉｎ点によっては、基準値と比べてレコード数が飛躍的に増加してしまう場合がある。【０１０３】
図３３は、レコード数が飛躍的に増加してしまう例を示す図である。図３３に示すように、例えば、入力パストライＡのノード２と、入力パストライＢのノード２を基準Ｊｏｉｎ点に指定し、ユーザが入力パストライＡのノード３と入力パストライＢのノード３をＪｏｉｎ点に指定した場合の増幅量を上記手法と同様に算出すると、１００００となってしまう。したがって、この場合では、結合データのレコード数が基準の１００００倍となってしまう場合があり、記憶装置の記憶容量を圧迫してしまう。【０１０４】
図１５の説明に戻ると、クエリ生成部１５０ｆは、結合条件指定テーブル１４０ｄ、Ｊｏｉｎ点指定テーブル１４０ｅに基づいて、クエリを生成する処理部である。まず、クエリ生成部１５０ｆは、Ｊｏｉｎ点指定テーブル１４０ｅに基づいてクエリのＦｏｒ文を作成する。クエリ生成部１５０ｆは、結合条件指定テーブル１４０ｄから、データＡとデータＢに対するＪｏｉｎ点のパス名を取得し、Ｆｏｒ文に代入する。【０１０５】
例えば、Ｊｏｉｎ点指定テーブル１４０ｄが、図２３に示す情報を記憶している場合には、クエリ生成部１５０ｆは、Ｆｏｒ文として
For  $a=/従業員ＤＢ/従業員
For  $b=/住民ＤＢ/住民/ＴＥＬ
を作成する。ただし、データＡを従業員ＤＢ（従業員ＤＢ．ｘｍｌ）とし、データＢを住民ＤＢ（住民ＤＢ．ｘｍｌ）とする。【０１０６】
続いて、クエリ生成部１５０ｆは、結合条件指定テーブル１４０ｄとＪｏｉｎ点指定テーブル１４０ｅに基づいて、Ｗｈｅｒｅ文を作成する。クエリ生成部１５０ｆは、結合条件指定テーブル１４０ｄの段毎に、データＡに対するパス名と、データＢに対するパス名を条件（結合条件）で対応付けることで、Ｗｈｅｒｅ文を作成する。なお、Ｗｈｅｒｅ文に入力されるパス名は、Ｊｏｉｎ点からの相対パスとなる。【０１０７】
例えば、結合条件指定テーブル１４０ｄが、図２３に示す情報を記憶し、Ｊｏｉｎ点指定テーブル１４０ｅが、図２４に示す情報を記憶している場合を例にして説明する。結合条件指定テーブル１４０ｄの１段目において、従業員ＤＢ（データＡ）のパス名は「/従業員ＤＢ/従業員/会社名」であり、Ｊｏｉｎ点が「/従業員ＤＢ/従業員」であるため、相対パスは「会社名」となる。【０１０８】
また、結合条件指定テーブル１４０ｄの１段目において、住民ＤＢ（データＢ）のパス名は「/住民ＤＢ/住民/会社」であり、Ｊｏｉｎ点が「/住民ＤＢ/住民/ＴＥＬ」であるため、相対パスは「../会社」となる（../は、会社の親ノードを示す）。そして、クエリ生成部１５０ｆは、相対パス「会社名」と「../会社」を条件（完全一致；＝）で対応付けることで、Ｗｈｅｒｅ文
Where  $a/会社名=$b/../会社
を作成する。【０１０９】
結合条件指定テーブル１４０ｄの２段目において、従業員ＤＢのパス名は「/従業員ＤＢ/従業員/名前」であり、Ｊｏｉｎ点が「/従業員ＤＢ/従業員」であるため、相対パスは「名前」となる。また、結合条件指定テーブルの２段目において、住民ＤＢのパス名は「/住民ＤＢ/住民/名前」であり、Ｊｏｉｎ点が「/住民ＤＢ/住民/ＴＥＬ」であるため、相対パスは「../名前」となる（../は、名前の親ノードを示す）。そして、クエリ生成部１５０ｆは、相対パス「名前」と「../名前」を条件（完全一致；＝）で対応付けることで、Ｗｈｅｒｅ文
Where  $a/名前=$b/../名前
を作成する。【０１１０】
続いて、クエリ生成部１５０ｆは、出力パストライ１４０ｃに基づいてＲｅｔｕｒｎ文を作成する。まず、クエリ生成部１５０ｆは、クエリに文字列「Ｒｅｔｕｒｎ」を記述する。そして、クエリ生成部１５０ｆは、出力パストライ１４０ｃの各ノードをプリオーダ順に参照し、参照したノードの入力パス名が「Ｎｅｗ」の場合には、該当ノードのタグ名を「＜タグ名＞」の形式でクエリに記載する。【０１１１】
一方、クエリ生成部１５０ｆは、参照したノードの入力パス名が「Ｎｅｗ」ではない場合には、該当ノードのパス名とＪｏｉｎ点のパス名とを比較して、Ｊｏｉｎ点からの相対パスを計算し、「｛$a/相対パス｝」や「｛$b/絶対パス｝」の形式でクエリに記載する。なお、クエリ生成部１５０ｆは、出力パストライ１４０ｃ中のすべてのノードを参照した後に、閉じタグを適切に補完する。【０１１２】
一例として、図３０に示した出力パストライ１４０ｃを基にして、クエリ生成部１５０ｆが、Ｒｅｔｕｒｎ文を作成する処理を説明する。また、Ｊｏｉｎ点指定テーブル１４０ｅは、図２３に示す情報を記憶しているものとする。【０１１３】
まず、クエリ生成部１５０ｆは、クエリに「Ｒｅｔｕｒｎ」を記述し、従業員電話帳ノードに移行する。従業員電話帳ノードの入力パス名はＮｅｗであるため、クエリ生成部１５０ｆは、クエリ中の「Ｒｅｔｕｒｎ」の下に＜従業員電話帳＞を記述する。【０１１４】
従業員ノードに移行すると、従業員ノードの入力パス名はＮｅｗであるため、クエリ生成部１５０ｆは、クエリ中の＜従業員電話帳＞の下に＜従業員＞を記述する。【０１１５】
名前ノードに移行すると、名前ノードの入力パス名はＮｅｗではない。この場合、クエリ生成部１５０ｆは、名前ノードとＪｏｉｎ点とを基にして相対パスを算出する。名前ノードの入力パス名は「/従業員ＤＢ/従業員/名前」であり、Ｊｏｉｎ点は「/従業員ＤＢ/従業員」であるため、相対パスは「名前」となる。クエリ生成部１５０ｆは、クエリ中の＜従業員＞の下に｛$a/名前｝を記述する。【０１１６】
住民ノードに移行すると、住所ノードの入力パス名はＮｅｗではない。この場合、クエリ生成部１５０ｆは、住所ノードとＪｏｉｎ点とを基にして相対パスを算出する。住所ノードの入力パス名は「/従業員ＤＢ/従業員/住所」であり、Ｊｏｉｎ点は「/従業員ＤＢ/従業員」であるため、相対パスは「住所」となる。クエリ生成部１５０ｆは、クエリ中の｛$a/名前｝の下に｛$a/住所｝を記述する。【０１１７】
ＴＥＬノードに移行すると、ＴＥＬノードの入力パス名はＮｅｗではない。この場合、クエリ生成部１５０ｆは、ＴＥＬノードとＪｏｉｎ点とを基にして相対パスを算出する。ＴＥＬノードの入力パス名は「/住民ＤＢ/住民/ＴＥＬ」であり、Ｊｏｉｎ点は「/住民ＤＢ/住民/ＴＥＬ」であるため、相対パスは「なし」となる。クエリ生成部１５０ｆは、クエリ中の｛$b/名前｝の下に｛$b｝を記述する。なお、相対パスが「なし」の場合は、$a/や$b/における「/」を記載せず、単に$a（または$b）のみを記載する。【０１１８】
クエリ生成部１５０ｆは、出力パストライ１４０ｃの各ノードを参照した後に、閉じタグを適切に補完する。図３０に示す出力パストライ１４０ｃの各ノードをすべて参照した場合には、クエリ生成部１５０ｆは、クエリ中の｛$b｝の下に＜/従業員＞と＜/従業員電話帳＞を順に記載する。【０１１９】
このように、クエリ生成部１５０ｆがＦｏｒ文、Ｗｈｅｒｅ文、Ｒｅｔｕｒｎ文を作成することにより、クエリ１４０ｆが生成される。図３４は、クエリ生成部１４０ｆが生成するクエリの一例を示す図である。【０１２０】
図１５の説明に戻ると、結合処理部１５０ｇは、例えば、図５に示したように、クエリ１４０ｆに基づいてＸＭＬデータ１４０ａを結合する処理部である。なお、クエリ１４０ｆに基づいてＸＭＬデータ１４０ａを結合する処理は、周知技術を用いて実行することが出来る。【０１２１】
検索処理部１５０ｈは、検索クエリが指定された場合に、検索クエリに対応するデータをＸＭＬデータから検索し、検索結果を出力部１２０に出力する処理部である。例えば、従業員ＤＢ．ｘｍｌに対して、検索クエリ「Q=/従業員ＤＢ/従業員/ＩＤ」が指定された場合には、従業員ＤＢ．ｘｍｌのＩＤノードに対応付けられたテキストデータ等を検索結果として出力する。【０１２２】
次に、本実施例にかかる検索装置１００の処理手順について説明する。図３５は、本実施例にかかる検索装置１００の処理手順を示すフローチャートである。図３５に示すように、検索装置１００は、ＸＭＬデータ１４０ａを取得し（ステップＳ１０）、パストライ生成部１５０ａがパストライ生成処理を実行し（ステップＳ１１）、兄弟出現数計数処理を実行する（ステップＳ１２）。【０１２３】
パストライ表示部１５０ｃは、入力パストライを表示し（ステップＳ１３）、指示受付部１５０ｄが、出力パストライ指示および結合条件指定の受付を行い（ステップＳ１４）、Ｊｏｉｎ点指定の受付を行う（ステップＳ１５）。【０１２４】
増加判定部１５０ｅは、基準Ｊｏｉｎ点判定処理を行い（ステップＳ１６）、レコード数増加量計算処理を行い（ステップＳ１７）、クエリ生成部１５０ｆが、クエリ生成処理を実行する（ステップＳ１８）。そして、結合処理部１５０ｇは、クエリ１４０ｆに基づいて結合データを生成する（ステップＳ１９）。【０１２５】
次に、図３５のステップＳ１１に示したパストライ生成処理について説明する。図３６は、パストライ生成処理の処理手順を示すフローチャートである。図３６に示すように、パストライ生成部１５０ａは、パストライＴを空の木として初期化し（ステップＳ２０）、ＸＭＬデータＤに次のタグ「＜」または「＜／」が存在するか否かを判定する（ステップＳ２１）。【０１２６】
次のタグが存在しない場合には（ステップＳ２２，Ｎｏ）、パストライ生成部１５０ａは、パストライＴを出力する（ステップＳ２３）。一方、次のタグが存在する場合には（ステップＳ２２，Ｙｅｓ）、タグの種類は開始タグであるか否かを判定する（ステップＳ２４）。ここで、タグ「＜」は、開始タグを示し、「＜／」は、終了タグを示す。【０１２７】
タグの種類が終了タグの場合には（ステップＳ２５，Ｎｏ）、パストライ生成部１５０ａは、パスＰの末端タグをＰから除去し（ステップＳ２６）、ステップＳ２１に移行する。一方、タグの種類が開始タグの場合には（ステップＳ２５，Ｙｅｓ）、パスＰの末端にタグを追記する（ステップＳ２７）。【０１２８】
そして、パストライ生成部１５０ａは、パスＰがパストライＴに登録済みか否かを判定し（ステップＳ２８）、登録済みの場合には（ステップＳ２９，Ｙｅｓ）、ステップＳ２１に移行する。一方、登録済みではない場合には（ステップＳ２９，Ｎｏ）、パストライ生成部１５０ａは、パス登録処理を実行する（ステップＳ３０）。【０１２９】
次に、図３６のステップ３６に示したパス登録処理について説明する。図３７は、パス登録処理の処理手順を示すフローチャートである。図３７に示すように、パストライ生成部１５０ａは、パストライＴは空の木であるか否かを判定する（ステップＳ４０）。【０１３０】
パストライＴが空の木である場合には（ステップＳ４１，Ｙｅｓ）、パストライ生成部１５０ａは、入力パストライノード構造体Ｎを作成し（ステップＳ４２）、入力パストライノード構造体Ｎの絶対パス名にパスＰを登録し（ステップＳ４３）、入力パストライノード構造体のタグ名にパスＰに含まれる唯一のタグを登録する（ステップＳ４４）。【０１３１】
一方、パストライＴが空の木ではない場合には（ステップＳ４１，Ｎｏ）、Ｐ＝Ｑ／ｔａｇとなるようなパスＱと末尾タグｔａｇを判定し（ステップＳ４５）、パストライＴの根ノードから子供ポインタを辿って、絶対パス名がＱとなるノードＮＱを取得する（ステップＳ４６）。【０１３２】
そして、パストライ生成部１５０ａは、入力パストライノード構造体ＮＰを作成し（ステップＳ４７）、入力パストライノード構造体ＮＱに子供ポインタを追加して入力パストライノード構造体ＮＰを指定し、入力パストライノード構造体ＮＰの親ポインタに入力パストライノード構造体ＮＱを指定する（ステップＳ４８）。また、パストライ生成部１５０ａは、入力パストライノード構造体ＮＰの絶対パス名にパスＰを登録し、タグ名にｔａｇを登録する（ステップＳ４９）。【０１３３】
次に、図３５のステップＳ１２に示した兄弟出現数計数処理について説明する。図３８は、兄弟出現数計数処理の処理手順を示すフローチャートである。図３８に示すように、兄弟出現数計数部１５０ｂは、現在のタグＣｕｒＤを、ＸＭＬデータＤの最初の開始タグで初期化し（ステップＳ５０）、現在のノードＣｕｒＴを、パストライＴの根ノードで初期化する（ステップＳ５１）。【０１３４】
兄弟出現数計数部１５０ｂは、ＸＭＬデータＤに次のタグが存在するか否かを判定し（ステップＳ５２）、存在しない場合には（ステップＳ５３，Ｎｏ）、兄弟出現数計数処理を終了する。一方、ＸＭＬデータＤに次のタグが存在する場合には（ステップＳ５３，Ｙｅｓ）、次のタグが開始タグであるか否かを判定する（ステップＳ５４）。【０１３５】
次にタグが終了タグの場合には（ステップＳ５５，Ｎｏ）、兄弟出現数計数部１５０ｂは、ＣｕｒＴのすべての子供ノードについて、「兄弟数カウンタ」＞「最大兄弟数」の場合に、最大兄弟数の値を兄弟数カウンタの値に置き換える（ステップＳ５６）。【０１３６】
兄弟出現数計数部１５０ｂは、ＣｕｒＤを次の終了タグに更新し（ステップＳ５７）、ＣｕｒＴを、ＣｕｒＴの親ノードに変更し（ステップＳ５８）、ステップＳ５２に移行する。【０１３７】
ところで、ステップＳ５５において、次のタグが開始タグの場合には（ステップＳ５５，Ｙｅｓ）、兄弟出現数計数部１５０ｂは、ＣｕｒＤを次の開始タグに更新し（ステップＳ５９）、ＣｕｒＴを、ＣｕｒＤに対応するＣｕｒＴの子供ノードに置き換える（ステップＳ６０）。また、兄弟出現数計数部１５０ｂは、ＣｕｒＴの兄弟数カウンタに１を加算し（ステップＳ６１）、ステップＳ５２に移行する。【０１３８】
次に、図３５のステップＳ１４に示した出力パストライ指定および結合条件指定の受付について説明する。かかるステップＳ１４において、指示受付部１５０ｄは、入力部１１０を捜索するユーザの操作に応じた各種の受付処理を実行する。この受付処理は、ノード新規作成処理、ノードコピー処理、ノード間のリンク追加処理、ノード間のリンク削除処理、結合条件の指定受付処理、Ｊｏｉｎ点の指定処理を含む。【０１３９】
まず、ノード新規作成処理の処理手順について説明する。かかるノード新規作成処理は、図８に示したように、例えば、従業員電話帳ノード、従業員ノードの新規作成要求をユーザから受け付けた場合に、指示受付部１５０ｄが実行する処理である。図３９は、ノード新規作成処理の処理手順を示すフローチャートである。【０１４０】
図３９に示すように、指示受付部１５０ｄは、ユーザからノードの新規作成要求を受け付け（ステップＳ７０）、出力パストライノード構造体を新規作成し、ユーザの指定したノード名をtagnameに設定する（ステップＳ７１）。【０１４１】
指示受付部１５０ｄは、出力パストライノード構造体の初期値を設定する（ステップＳ７２）。ステップＳ７２において、指示受付部１５０ｄは、出力パストライノード構造体のタグ名をtagname、絶対パス名をNull、絶対パスＩＤをNull、入力データ名をNew、出力パスＩＤをNewに設定する。また、指示受付部１５０ｄは、親ポインタおよび子供ポインタリストを全てNullに設定する。【０１４２】
続いて、ノードコピー処理の処理手順について説明する。かかるノードコピー処理は、図９に示したように、例えば、入力パストライの名前ノード、住所ノード、ＴＥＬノードを出力パストライに接続するべく、コピーする処理である。図４０は、ノードコピー処理の処理手順を示すフローチャートである。【０１４３】
図４０に示すように、指示受付部１５０ｄは、ユーザからノードの新規作成要求を受け付け（ステップＳ７５）、ユーザにより指定された入力パストライのノードをノードＰに設定する（ステップＳ７６）。【０１４４】
指示受付部１５０ｄは、出力パストライノード構造体Ｑを新規作成し（ステップＳ７７）、出力パストライノード構造体Ｑの初期値を設定する（ステップＳ７８）。ステップＳ７８において、指示受付部１５０ｄは、出力パストライノード構造体Ｑのタグ名、入力データ名、入力パス名、入力パスＩＤに、ノードＰのタグ名、入力データ名、入力パス名、入力パスＩＤを登録する。【０１４５】
また、ステップＳ７８において、指示受付部１５０ｄは、出力パストライノード構造体Ｑの絶対パス名をNullに設定し、絶対パスＩＤをNullに設定する。また、指示受付部１５０ｄは、出力パストライノード構造体Ｑの親ポインタおよび子供ポインタリストを全てNullに設定する。【０１４６】
続いて、ノード間のリンク追加処理について説明する。かかるノード間リンク追加処理は、各出力パスノード構造体をリンクさせる処理である。例えば、図９において、従業員の出力パストライノード構造体Ｑに、名前の出力パストライノード構造体Ｐをリンクさせる処理が該当する。図４１は、ノード間のリンク追加処理の処理手順を示すフローチャートである。【０１４７】
図４１に示すように、指示受付部１５０ｄは、ユーザから、出力パストライにおけるノードＰからノードＱへのリンク追加要求を受け付ける（ステップＳ８０）。図４１において、ノードＰを、出力パストライノード構造体Ｐに対応するノードとし、ノードＱを、出力パストライノード構造体Ｑに対応するノードとする。【０１４８】
指示受付部１５０ｄは、ノードＰからノードＱへの子供リンクと、ノードＱからノードＰへの親リンクが共に存在するか否かを判定する（ステップＳ８１）。子供リンクと親リンクが共に存在する場合には（ステップＳ８２，Ｙｅｓ）、指示受付部１５０ｄは、「すでに要求は実現済み」である旨を出力し（ステップＳ８３）、ステップＳ８８に移行する。【０１４９】
一方、指示受付部１５０ｄは、ノードＰからノードＱへの子供リンクと、ノードＱからノードＰへの親リンクが共に存在しない場合には（ステップＳ８２，Ｎｏ）、ノードＰからノードＱへの子供リンクが存在せず、ノードＱからノードＰへの親リンクが存在するか否かを判定する（ステップＳ８４）。指示受付部１５０ｄは、ノードＰからノードＱへの子供リンクが存在せず、ノードＱからノードＰへの親リンクが存在する（条件を満たす）場合には（ステップＳ８５，Ｙｅｓ）、「不正な要求」である旨を出力し（ステップＳ８６）、ステップＳ８８に移行する。【０１５０】
一方、指示受付部１５０ｄは、ノードＰからノードＱへの子供リンクが存在する、あるいは、ノードＱからノードＰへの親リンクが存在しない（条件を満たさない）場合には（ステップＳ８５，Ｎｏ）、ノードＰの子供ポインタリストにノードＱを新規追加し、ノードＱの親ポインタにノードＰを代入する（ステップＳ８７）。そして、指示受付部１５０ｄは、全ノードの値の更新を実行する（ステップＳ８８）。【０１５１】
続いて、ノード間のリンク削除処理について説明する。かかるノード間リンク削除処理は、各出力パスノード構造体のリンクを解除する処理である。図４２は、ノード間のリンク削除処理を示すフローチャートである。【０１５２】
図４２に示すように、指示受付部１５０ｄは、ユーザから、出力パストライにおけるノードＰとノードＱの間のリンク削除要求を受け付ける（ステップＳ９０）。図４２において、ノードＰを、出力パストライノード構造体Ｐに対応するノードとし、ノードＱを、出力パストライノード構造体Ｑに対応するノードとする。【０１５３】
指示受付部１５０ｄは、ノードＰからノードＱへの子供リンクと、ノードＱからノードＰへの親リンクが共に存在するか否かを判定する（ステップＳ９１）。子供リンクと親リンクが共に存在しない場合には（ステップＳ９２，Ｎｏ）、指示受付部１５０ｄは、「不正な要求」である旨を出力し、ステップＳ９３に移行する。【０１５４】
一方、指示受付部１５０ｄは、ノードＰからノードＱへの子供リンクと、ノードＱからノードＰへの親リンクが共に存在する場合には（ステップＳ９２，Ｙｅｓ）、ノードＰの子供ポインタリストからノードＱを削除し、ノードＱの親ポインタをNullに設定する（ステップＳ９４）。そして、指示受付部１５０ｄは、全ノードの値の更新処理を実行する（ステップＳ９５）。【０１５５】
ここで、図４１のステップＳ８８と、図４２のステップＳ９５に示した全ノードの値の更新処理について説明する。図４３は、全ノードの値の更新処理の処理手順を示すフローチャートである。【０１５６】
図４３に示すように、指示受付部１５０ｄは、Ｎ＝０に設定し（ステップＳ１０１）、ＣｕｒＮｏｄｅに出力パストライの根ノードを設定し（ステップＳ１０２）、ＣｕｒＮｏｄｅの次のノードが存在するか否かを判定する（ステップＳ１０３）。図４３の説明において、指示受付部１５０ｄは、根ノードから辿れる全ての出力パストライノード構造体をプリオーダ順で辿るものとする。【０１５７】
指示受付部１５０ｄは、次のノードが存在しない場合には（ステップＳ１０４，Ｎｏ）、全ノードの値の更新処理を終了する。一方、指示受付部１５０ｄは、次のノードが存在する場合には（ステップＳ１０４，Ｙｅｓ）、ＣｕｒＮｏｄｅを次のノードに置き換え（ステップＳ１０５）、Ｎ＝Ｎ＋１に設定する（ステップＳ１０６）。【０１５８】
指示受付部１５０ｄは、ＣｕｒＮｏｄｅの絶対パス名を「ＣｕｒＮｏｄｅの親の絶対パス名」／「ＣｕｒＮｏｄｅのノード名」に設定し（ステップＳ１０７）、ＣｕｒＮｏｄｅの絶対パスＩＤをＮに設定する（ステップＳ１０８）。【０１５９】
続いて、結合条件の指定受付処理について説明する。かかる結合条件の指定受付処理は、結合条件を指定された場合に、結合条件指定テーブル１４０ｄに結合条件を登録する処理である。例えば、図１０において、従業員ＤＢ．ｘｍｌのパストライの会社名と、住民ＤＢ．ｘｍｌのパストライの会社が指定され、条件を「完全一致」とする処理が該当する。【０１６０】
図４４は、結合条件の指定受付処理の処理手順を示すフローチャートである。図４４に示すように、指定受付部１５０ｄは、ユーザから、結合条件の指定要求を受け付け（ステップＳ１１０）、結合条件指定テーブル１４０ｄを作成する（ステップＳ１１１）。【０１６１】
ステップＳ１１０において、結合条件の指定は、例えば、三項組（Ｐ、Ｑ、Ａ）で与えられる。Ｐは、一方の入力パストライのノード、Ｑはもう一方の入力パストライのノード、Ａは、ＰとＱに対する条件である。【０１６２】
続いて、Ｊｏｉｎ点の指定処理について説明する。かかるＪｏｉｎ点の指定処理は、入力パストライ上にＪｏｉｎ点が指定された場合に、Ｊｏｉｎ点指定テーブル１４０ｅにＪｏｉｎ点のパス名を登録する処理である。例えば、図１１において、従業員と住民がＪｏｉｎ点に指定された場合の処理に該当する。【０１６３】
図４５は、Ｊｏｉｎ点の指定処理の処理手順を示すフローチャートである。図４５に示すように、指示受付部１５０ｄは、ユーザからＪｏｉｎ点の指定要求を受け付け（ステップＳ１５０）、Ｊｏｉｎ点指定テーブル１４０ｅを作成する（ステップＳ１５１）。ステップＳ１５０において、Ｊｏｉｎ点の指定は、例えば、二項組（Ｄ、Ｐ）で与えられる。Ｄはデータ名を示し、ＰはＤのパストライ中のノードに対応する。【０１６４】
続いて、図３５のステップＳ１６に示した基準Ｊｏｉｎ点判定処理について説明する。かかるＪｏｉｎ点判定処理は、増加判定部１５０ｅがＪｏｉｎ点を判定する処理である。図４６は、基準Ｊｏｉｎ点判定処理の処理手順を示すフローチャートである。図４６に示すように、増加判定部１５０ｅが出力パストライ１４０ｃを全検索し、「入力パス名」の値を全て抽出する（ステップＳ１６０）。【０１６５】
増加判定部１５０ｅは、結合条件指定テーブル１４０ｄを全検索し、登録してあるパス名を全て抽出する（ステップＳ１６１）。そして、増加判定部１５０ｅは、抽出したパス名の集合に対して、それぞれの入力データ毎に最長共通接頭辞を求めることで、基準Ｊｏｉｎ点を判定する（ステップＳ１６２）。【０１６６】
続いて、図３５のステップＳ１７に示したレコード数増加量計算処理について説明する。かかるレコード数増加量計算処理は、増加判定部１５０ｅが、基準Ｊｏｉｎ点を基に作成される結合データのレコード数と比べて、ユーザに指定されたＪｏｉｎ点を基に作成される結合データのレコード数がどの程度増加するのかを判定する処理である。【０１６７】
図４７は、レコード数増加量計算処理の処理手順を示すフローチャートである。図４７に示すように、増加判定部１５０ｅが、α＝β＝１に設定し（ステップＳ１７０）、出力パストライＴにおいて、Ｊｏｉｎ点ＵＡはＪｏｉｎ点ＫＡの「子孫または自身」であり、かつ、Ｊｏｉｎ点ＵＢはＪｏｉｎ点ＫＢの「子孫または自身」であるかを判定する（ステップＳ１７１）。【０１６８】
Ｊｏｉｎ点ＵＡはＪｏｉｎ点ＫＡの「子孫または自身」ではない、または、Ｊｏｉｎ点ＵＢはＪｏｉｎ点ＫＢの「子孫または自身」でない場合には（ステップＳ１７２，Ｎｏ）、増加判定部１５０ｅは、エラー等を出力する。かかる場合では、ユーザが指定したＪｏｉｎ点の少なくとも１つが、基準Ｊｏｉｎ点との間に依存関係を持たない。よって、レコード数増加量を計算することが出来ない（ステップＳ１７３）。【０１６９】
一方、Ｊｏｉｎ点ＵＡはＪｏｉｎ点ＫＡの「子孫または自身」であり、かつ、Ｊｏｉｎ点ＵＢはＪｏｉｎ点ＫＢの「子孫または自身」である場合には（ステップＳ１７２，Ｙｅｓ）、増加判定部１５０ｅは、Ｊｏｉｎ点ＫＡ＝Ｊｏｉｎ点ＵＡであるか否かを判定する（ステップＳ１７４）。【０１７０】
Ｊｏｉｎ点ＫＡ＝Ｊｏｉｎ点ＵＡの場合には（ステップＳ１７５，Ｙｅｓ）、ステップＳ１７７に移行する。一方、Ｊｏｉｎ点ＫＡ≠Ｊｏｉｎ点ＵＡの場合には（ステップＳ１７５，Ｎｏ）、増加判定部１５０ｅは、Ｊｏｉｎ点ＵＡの子孫ノードのうち、Ｊｏｉｎ点ＫＡまでの各ノードの最大兄弟数を掛け合わせた値を算出し、算出した値をαに代入する（ステップＳ１７６）。【０１７１】
増加判定部１５０ｅは、Ｊｏｉｎ点ＫＢ＝Ｊｏｉｎ点ＵＢであるか否かを判定する（ステップＳ１７７）。Ｊｏｉｎ点ＫＢ＝Ｊｏｉｎ点ＵＢの場合には（ステップＳ１７８，Ｙｅｓ）、ステップＳ１８０に移行する。【０１７２】
一方、Ｊｏｉｎ点ＫＢ≠Ｊｏｉｎ点ＵＢの場合には、増加判定部１５０ｅは、Ｊｏｉｎ点ＵＢの子孫ノードのうち、Ｊｏｉｎ点ＫＢまで各ノードの最大兄弟数を掛け合わせた値を算出し、算出した値をβに代入する（ステップＳ１７９）。増加判定部１５０ｅは、α＝α×βに設定し（ステップＳ１８０）、αを増加量の指標として、出力部１２０に出力する（ステップＳ１８１）。【０１７３】
次に、図３５のステップＳ１８に示したクエリ生成処理について説明する。かかるクエリ生成処理は、クエリ生成部１５０ｆが、結合条件指定テーブル１４０ｄ、Ｊｏｉｎ点指定テーブル１４０ｅに基づいて、クエリを生成する処理である。図４８は、クエリ生成処理の処理手順を示すフローチャートである。【０１７４】
図４８に示すように、クエリ生成部１５０ｆは、Ｆｏｒ文の作成処理を実行し（ステップＳ２００）、Ｗｈｅｒｅ文の作成処理を実行する（ステップＳ２０１）。そして、クエリ生成部１５０ｆは、Ｒｅｔｕｒｎ文の作成処理を実行し（ステップＳ２０２）、クエリを出力する（ステップＳ２０３）。【０１７５】
続いて、図４８のステップＳ２００に示したＦｏｒ文の作成処理について説明する。図４９は、Ｆｏｒ文の作成処理の処理手順を示すフローチャートである。図４９に示すように、クエリ生成部１５０ｆは、Ｊｏｉｎ点指定テーブル１４０ｅから、データＡとデータＢに対応するＪｏｉｎ点のパス名をそれぞれ取得する（ステップＳ２１０）。【０１７６】
クエリ生成部１５０ｆは、
For  $a=(データＡのＪｏｉｎ点のパス名)
For  $b=(データＢのＪｏｉｎ点のパス名)
に設定する（ステップＳ２１１）。【０１７７】
続いて、図４８のステップＳ２０１に示したＷｈｅｒｅ文の作成処理について説明する。図５０は、Ｗｈｅｒｅ文の作成処理の処理手順を示すフローチャートである。図５０に示すように、クエリ生成部１５０ｆは、結合条件指定テーブル１４０ｄに登録されたすべての結合条件を処理したか否かを判定する（ステップＳ２２０）。【０１７８】
クエリ生成部１５０ｆは、結合条件指定テーブル１４０ｄに登録されたすべての結合条件を処理した場合には（ステップＳ２２１，Ｙｅｓ）、Ｗｈｅｒｅ文の作成処理を終了する。一方、すべての結合条件を処理していない場合には（ステップＳ２２１，Ｎｏ）、結合条件指定テーブル１４０ｄから未処理の結合条件を取得する（ステップＳ２２２）。【０１７９】
クエリ生成部１５０ｆは、データＡとデータＢについて、結合条件で指定されたパス名の、Ｊｏｉｎ点から相対パスを判定し（ステップＳ２２３）、
Where  $a/(データＡの相対パス)(条件)$b/(データＢの相対パス)
をクエリ１４０ｆに登録する（ステップＳ２２４）。なお、相対パスが「なし」の場合は、$a/や$b/における「/」を記載せず、単に$a（または$b）のみ記載する。【０１８０】
続いて、図４８のステップＳ２０２に示したＲｅｔｕｒｎ文の作成処理について説明する。図５１は、Ｒｅｔｕｒｎ文の作成処理の処理手順を示すフローチャートである。図５１に示すように、クエリ生成部１５０ｆは、Ｎｏｄｅ＝Ｔの根ノードに設定し（ステップＳ２３０）、クエリの文字列「Return」を記述する（ステップＳ２３１）。【０１８１】
クエリ生成部１５０ｆは、プリオーダ順で、Ｎｏｄｅの次のノードが存在するか否かを判定する（ステップＳ２３２）。次のノードが存在しない場合には（ステップＳ２３３，Ｎｏ）、クエリ生成部１５０ｆは、閉じタグを適切に補完し（ステップＳ２３４）、Ｒｅｔｕｒｎ文の作成処理を終了する。【０１８２】
一方、Ｎｏｄｅの次にノードが存在する場合には（ステップＳ２３３，Ｙｅｓ）、クエリ生成部１５０ｆは、Ｎｏｄｅに、プリオーダ順で次のノードを代入し（ステップＳ２３４）、入力パス名＝Ｎｅｗであるか否かを判定する（ステップＳ２３５）。【０１８３】
入力パス名＝Ｎｅｗの場合には（ステップＳ２３６，Ｙｅｓ）、ステップＳ２３２に移行する。一方、入力パス名≠Ｎｅｗの場合には（ステップＳ２３６，Ｎｏ）、Ｎｏｄｅの入力パス名および入力データに対して、Ｊｏｉｎ点からの相対パスを計算し、クエリに「｛相対パス｝」の形式で記述し（ステップＳ２３７）、ステップＳ２３２に移行する。【０１８４】
上述してきたように、本実施例にかかる検索装置１００は、パストライ生成部１５０ａが、入力パストライ１４０ｂを生成し、パストライ表示部１５０ｃが、入力パストライ１４０ｂを出力部１２０に出力して、Ｊｏｉｎ点、結合条件をユーザに指定させる。そして、指示受付部１５０ｄが、ユーザに指示されたＪｏｉｎ点、結合条件に基づいて各ＸＭＬデータを結合するための命令文となるクエリを生成するので、ユーザは、複雑な命令文をユーザ自身が入力することなく、容易にＸＭＬデータを結合させることが出来る。【０１８５】
また、本実施例にかかる検索装置１００は、増加判定部１５０ｅが基準Ｊｏｉｎ点を判定し、基準Ｊｏｉｎ点とユーザの指定したＪｏｉｎ点とを基にして、ユーザに指定されたＪｏｉｎ点により生成される結合データの増加の目安を通知するので、結合データのデータ量が必要以上に増加してしまうことを予防することが出来る。【０１８６】
なお、本実施例では、半構造体データとしてＸＭＬデータ、クエリとしてＸＰａｔｈ式を用いて説明した。しかし、半構造体データとクエリの種類はこれらに限定されるものではない。例えば、半構造体データは、ＸＭＬデータの他にも、ＲＤＢのテーブルやＣＳＶデータ等が含まれ、かかるＲＤＢのテーブルやＣＳＶファイルに対しても本願発明を適用することが出来る。【０１８７】
ところで、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、図２３に示した結合条件指定テーブル１４０ｄの条件は、完全一致に限られるものではなく、例えば、部分一致などの条件に変更してもよい。【０１８８】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。【０１８９】
図５２は、実施例に示した検索装置１００に対応するコンピュータのハードウェア構成を示す図である。図５２に示すように、このコンピュータ（検索装置）１０は、入力装置１１、モニタ１２、ＲＡＭ（Random  Access  Memory）１３、ＲＯＭ（Read  Only  Memory）１４、ネットワークを介して他の装置とデータ通信を実行する通信制御装置１５、媒体読取装置１６、ＣＰＵ（Central  Processing  Unit）１７、ＨＤＤ（Hard  Disk  Drive）１８をバス１９で接続している。【０１９０】
そして、ＨＤＤ１８には、上述した検索装置１００の機能と同様の機能を発揮するクエリ生成プログラム１８ｂ、検索プログラム１８ｃが記憶されている。ＣＰＵ１７が、クエリ生成プログラム１８ｂ、検索プログラム１８ｃを読み出して実行することにより、クエリ生成プロセス１７ａ、検索プロセス１７ｂが起動される。【０１９１】
ここで、クエリ生成プロセス１７ａは、図１５に示したパストライ生成部１５０ａ、兄弟出現数計数部１５０ｂ、パストライ表示部１５０ｃ、指示受付部１５０ｄ、増加判定部１５０ｅ、クエリ生成部１５０ｆ、結合処理部１５０ｇに対応する。また、検索プロセス１７ｂは、検索処理部１５０ｈに対応する。【０１９２】
なお、ＨＤＤ１８は、図１５で示した記憶部１４０に記憶されたデータに対応する各種データ１８ａを記憶している。ＣＰＵ１７は、ＨＤＤ１８に記憶された各種データ１８ａをＲＡＭ１３に読み出し、各種データ１３ａを利用する。ＣＰＵ１７は、入力装置１１を介して、ユーザからＪｏｉｎ点、結合条件を受け付けた場合に、クエリを生成する。
【図１】
2010106681.tif 000003
【図２】
2010106681.tif 000004
【図３】
2010106681.tif 000005
【図４】
2010106681.tif 000006
【図５】
2010106681.tif 000007
【図６】
2010106681.tif 000008
【図７】
2010106681.tif 000009
【図８】
2010106681.tif 000010
【図９】
2010106681.tif 000011
【図１０】
2010106681.tif 000012
【図１１】
2010106681.tif 000013
【図１２】
2010106681.tif 000014
【図１３】
2010106681.tif 000015
【図１４】
2010106681.tif 000016
【図１５】
2010106681.tif 000017
【図１６】
2010106681.tif 000018
【図１７】
2010106681.tif 000019
【図１８】
2010106681.tif 000020
【図１９】
2010106681.tif 000021
【図２０】
2010106681.tif 000022
【図２１】
2010106681.tif 000023
【図２２】
2010106681.tif 000024
【図２３】
2010106681.tif 000025
【図２４】
2010106681.tif 000026
【図２５】
2010106681.tif 000027
【図２６】
2010106681.tif 000028
【図２７】
2010106681.tif 000029
【図２８】
2010106681.tif 000030
【図２９】
2010106681.tif 000031
【図３０】
2010106681.tif 000032
【図３１】
2010106681.tif 000033
【図３２】
2010106681.tif 000034
【図３３】
2010106681.tif 000035
【図３４】
2010106681.tif 000036
【図３５】
2010106681.tif 000037
【図３６】
2010106681.tif 000038
【図３７】
2010106681.tif 000039
【図３８】
2010106681.tif 000040
【図３９】
2010106681.tif 000041
【図４０】
2010106681.tif 000042
【図４１】
2010106681.tif 000043
【図４２】
2010106681.tif 000044
【図４３】
2010106681.tif 000045
【図４４】
2010106681.tif 000046
【図４５】
2010106681.tif 000047
【図４６】
2010106681.tif 000048
【図４７】
2010106681.tif 000049
【図４８】
2010106681.tif 000050
【図４９】
2010106681.tif 000051
【図５０】
2010106681.tif 000052
【図５１】
2010106681.tif 000053
【図５２】
2010106681.tif 000054
【手続補正書】
【提出日】平成23年4月25日(2011.4.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
要素が階層化された木構造データを記憶装置に記憶したコンピュータに、
前記木構造データを対象として、同一名称の親要素に直接関連づけられた同一名称の子要素が複数存在する場合に、複数の子供要素を一つの子供要素に集約することで前記木構造データの要素間の関係を集約した集約構造データを作成する集約機能と、
各木構造データの一部を結合することで作成される結合データに対応した集約構造データと、結合対象となる木構造データの各要素の条件となる結合条件、および、前記集約構造データの要素の何れかを指定要素として受け付ける受付機能と
前記結合データに対応する集約構造データと前記結合条件を基にして、前記集約構造データの要素の何れかを基準要素として判定する基準要素判定機能と、
前記基準要素を基にした前記木構造データの取り扱い単位により生成される結合データの第一データ量と、前記指定要素を基にした前記木構造データの取り扱い単位により生成される結合データの第二データ量とを比較して、比較結果を出力する比較結果出力機能
をコンピュータで実現させるためのプログラムを記録した記憶媒体。
【請求項２】
前記集約機能は、同一名称でかつ同一の親要素に直接関連づけられた複数の同一名称の子要素を集約した場合は、集約した要素の集約数を前記集約構造データに対応付けて記録し、前記比較結果出力機能は、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数に基づいて、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項１に記載の記憶媒体。
【請求項３】
前記基準要素判定機能は、
前記受付手段で受け付けた、前記結合データに対応した集約構造データの出力要素として指定された要素の各々について、該要素を含む木構造データに対応する集約構造データの最上位階層から該要素までの階層関係を示す階層情報を抽出し、
さらに、
前記受付手段で受け付けた前記結合条件となる各要素について、該要素を含む木構造データに対応する集約構造データにおける最上位階層の要素から該結合対象の要素までの階層関係を示す階層情報を抽出し、
結合された前記木構造データの集約構造データの各々について、前記抽出された階層情報で共通している階層情報の最下位の要素を前記基準要素として判定する
ことを特徴とする請求項１に記載の記憶媒体。
【請求項４】
前記比較結果出力機能は、前記集約構造データ毎に、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数を特定し、各集約数を乗算することで、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項１に記載の記憶媒体。
【請求項５】
要素が階層化された木構造データを記憶装置に記憶し、前記木構造データを対象として、同一名称の親要素に直接関連づけられた同一名称の子要素が複数存在する場合に、複数の子供要素を一つの子供要素に集約することで前記木構造データの要素間の関係を集約した集約構造データを作成する集約部と、
各木構造データの一部を結合することで作成される結合データに対応した集約構造データと、結合対象となる木構造データの各要素の条件となる結合条件、および、前記集約構造データの要素の何れかを指定要素として受け付ける受付部と
前記結合データに対応する集約構造データと前記結合条件を基にして、前記集約構造データの要素の何れかを基準要素として判定する基準要素判定部と、
前記基準要素を基にした前記木構造データの取り扱い単位により生成される結合データの第一データ量と、前記指定要素を基にした前記木構造データの取り扱い単位により生成される結合データの第二データ量とを比較して、比較結果を出力する比較結果出力部と
を有することを特徴とするデータベース検索装置。
【請求項６】
前記集約部は、同一名称でかつ同一の親要素に直接関連づけられた複数の同一名称の子要素を集約した場合は、集約した要素の集約数を前記集約構造データに対応付けて記録し、前記比較結果出力部は、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数に基づいて、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項５に記載のデータベース検索装置。
【請求項７】
要素が階層化された木構造データを記憶装置に記憶した検索装置が、
前記木構造データを対象として、同一名称の親要素に直接関連づけられた同一名称の子要素が複数存在する場合に、複数の子供要素を一つの子供要素に集約することで前記木構造データの要素間の関係を集約した集約構造データを作成する集約ステップと、
各木構造データの一部を結合することで作成される結合データに対応した集約構造データと、結合対象となる木構造データの各要素の条件となる結合条件、および、前記集約構造データの要素の何れかを指定要素として受け付ける受付ステップと
前記結合データに対応する集約構造データと前記結合条件を基にして、前記集約構造データの要素の何れかを基準要素として判定する基準要素判定ステップと、
前記基準要素を基にした前記木構造データの取り扱い単位により生成される結合データの第一データ量と、前記指定要素を基にした前記木構造データの取り扱い単位により生成される結合データの第二データ量とを比較して、比較結果を出力する比較結果出力ステップと
を含んだことを特徴とするデータベース検索方法。
【請求項８】
前記集約ステップは、同一名称でかつ同一の親要素に直接関連づけられた複数の同一名称の子要素を集約した場合は、集約した要素の集約数を前記集約構造データに対応付けて記録し、前記比較結果出力ステップは、前記指定要素の子孫要素のうち前記基準要素までの要素に対応付けられた集約数に基づいて、前記第一データ量と比較した場合の前記第二データ量の増加分を判定することを特徴とする請求項７に記載のデータベース検索方法。
【国際調査報告】
2010106681.tif 000055
2010106681.tif 000056
2010106681.tif 000057
2010106681.tif 000058
2010106681.tif 000059
2010106681.tif 000060