(57)【要約】【課題】構造化文書データの検索の高速化することが可能な構造化データの記憶方法および装置を提供する。【解決手段】複数の構造化データ中での出現頻度が第１の閾値以上の要素データに対し、複数の記憶エリア内における当該要素データを記憶するための予め定められた記憶位置を定めるエレメントＩＤを決定し、複数の構造化データのうちの１つである第１の構造化データに含まれる要素データ群のうち、エレメントＩＤの決定された各要素データを、複数の記憶エリアのうち第１の構造化データを記憶するための第１の記憶エリアの当該エレメントＩＤに対応する記憶位置に記憶する。【選択図】      図２
2005227851.tif 000002
【特許請求の範囲】
【請求項１】
複数の要素データをそれぞれ含む複数の構造化データを複数の記憶エリアのそれぞれに記憶するための構造化データ記憶方法であって、
前記複数の構造化データ中での出現頻度が第１の閾値以上の要素データに対し、前記複数の記憶エリアのそれぞれにおける記憶位置を定めるエレメントＩＤを決定する第１のステップと、
前記複数の構造化データのうちの１つに対応する第１の構造化データに含まれる要素データ群のうち、前記エレメントＩＤの決定された各要素データを、前記複数の記憶エリアのうち前記第１の構造化データを記憶するための第１の記憶エリアの当該エレメントＩＤに対応する記憶位置に記憶する第２のステップと、
を有することを特徴とする構造化データ記憶方法。
【請求項２】
前記複数の構造化データは、前記複数の要素データを含む複数の階層構造のうちの１つをそれぞれ有し、
前記第１のステップは、
前記複数の要素データのそれぞれの前記複数の構造化データ中での出現頻度を基に前記複数の階層構造を認識する第３のステップと、
前記複数の構造化データのそれぞれを、前記複数の階層構造のうちの１つに分類する第４のステップと、
前記複数の階層構造のそれぞれについて、当該階層構造に分類された構造化データ群中での出現頻度が前記第１の閾値以上の要素データに対し、前記複数の記憶エリアのそれぞれにおける記憶位置を定めるエレメントＩＤを決定する第５のステップと、
を有することを特徴とする請求項１記載の構造化データ記憶方法。
【請求項３】
前記第５のステップは、前記複数の階層構造で同じ位置に配置される要素データには、当該複数の階層構造で同じエレメントＩＤを与えることを特徴とする請求項２記載の構造化データ記憶方法。
【請求項４】
前記複数の構造化データ中での出現頻度が第１の閾値以上の要素データは、当該要素データを含む構造化データを識別するためのドキュメントＩＤ、当該要素データを含む構造化データの階層構造上での当該要素データの位置を識別するためのテンプレートＩＤ、及び前記エレメントＩＤを含む識別子をもち、
前記複数の階層構造で同じ位置に配置される要素データに対し与えられる前記エレメントＩＤは当該要素データの各階層構造上での位置を識別するためのテンプレートＩＤに対応付けて第２の記憶手段に記憶することを特徴とする請求項３記載の構造化データ記憶方法。
【請求項５】
複数の要素データをそれぞれ含む複数の構造化データを記憶するための複数の記憶エリアを有する記憶手段と、
前記複数の構造化データ中での出現頻度が第１の閾値以上の要素データに対し、前記複数の記憶エリアのそれぞれにおける記憶位置を定めるエレメントＩＤを決定する決定手段と、
前記複数の構造化データのうちの１つに対応する第１の構造化データに含まれる要素データ群のうち、前記エレメントＩＤの決定された各要素データを、前記複数の記憶エリアのうち前記第１の構造化データを記憶するための第１の記憶エリアの当該エレメントＩＤに対応する記憶位置に記憶する手段と、
を具備したことを特徴とする構造化データ記憶装置。
【請求項６】
前記複数の構造化データは、前記複数の要素データを含む複数の階層構造のうちの１つをそれぞれ有し、
前記決定手段は、
前記複数の要素データのそれぞれの前記複数の構造化データ中での出現頻度を基に前記複数の階層構造を認識する第１の手段と、
前記複数の構造化データのそれぞれを、前記複数の階層構造のうちの１つに分類する第２の手段と、
前記複数の階層構造のそれぞれについて、当該階層構造に分類された構造化データ群中での出現頻度が前記第１の閾値以上の要素データに対し、前記複数の記憶エリアのそれぞれにおける記憶位置を定めるエレメントＩＤを決定する第３の手段と、
を有することを特徴とする請求項５記載の構造化データ記憶装置。
【請求項７】
前記第３の手段は、前記複数の階層構造で同じ位置に配置される要素データには、当該複数の階層構造で同じエレメントＩＤを与えることを特徴とする請求項６記載の構造化データ記憶装置。
【請求項８】
前記複数の構造化データ中での出現頻度が第１の閾値以上の要素データは、当該要素データを含む構造化データを識別するためのドキュメントＩＤ、当該要素データを含む構造化データの階層構造上での当該要素データの位置を識別するためのテンプレートＩＤ、及び前記エレメントＩＤを含む識別子をもち、
前記複数の階層構造で同じ位置に配置される要素データに対し与えられる前記エレメントＩＤを、当該要素データの各階層構造上での位置を識別するためのテンプレートＩＤに対応付けて記憶する第２の記憶手段をさらに具備したことを特徴とする請求項７記載の構造化データ記憶装置。
【請求項９】
複数の要素データをそれぞれ含む複数の構造化データを複数の記憶エリアのそれぞれに記憶するための構造化データ記憶方法であって、
前記記憶エリアに記憶された第１の階層構造を有する所定数以上の構造化データ群中での各要素データの出現頻度を基に、第２の階層構造を認識する第１のステップと、
前記第１の階層構造を有する前記構造化データ群中での各要素データの出現頻度が第１の閾値以上の要素データに対し、前記複数の記憶エリアのそれぞれにおける当該要素データを記憶するための予め定められた記憶位置を定めるエレメントＩＤを決定する第２のステップと、
前記第２の階層構造を有する第１の構造化データに含まれる要素データ群のうち、前記エレメントＩＤの決定された各要素データを、前記複数の記憶エリアのうち前記第１の構造化データを記憶するための第１の記憶エリアの当該エレメントＩＤに対応する記憶位置に記憶する第３のステップと、
前記記憶エリアに記憶された前記第２の階層構造を有する所定数以上の構造化データ群中での各要素データの出現頻度を基に、第３の階層構造を認識する第４のステップと、
前記第２の階層構造を有する前記構造化データ群中での各要素データの出現頻度が第１の閾値以上の要素データであって、かつ前記エレメントＩＤの決定されていない要素データに対し、前記エレメントＩＤを決定する第５のステップと、
前記第３の階層構造を有する第２の構造化データに含まれる要素データ群のうち、前記エレメントＩＤの決定された各要素データを、前記複数の記憶エリアのうち前記第２の構造化データを記憶するための第２の記憶エリアの当該エレメントＩＤに対応する記憶位置に記憶する第６のステップと、
を有することを特徴とする構造化データ記憶方法。
【請求項１０】
前記第１乃至第３の階層構造で同じ位置に配置される要素データには、当該第１乃至第３の階層構造で同じエレメントＩＤを与えることを特徴とする請求項９記載の構造化データ記憶方法。
【請求項１１】
複数の要素データをそれぞれ含む複数の構造化データを複数の記憶エリアのそれぞれに記憶した記憶手段から要素データを検索する検索方法であって、
前記複数の構造化データのうちの１つである第１の構造化データに含まれる要素データ群は、第１の構造化データを識別するためのドキュメントＩＤ、当該要素データの第１の構造化データの階層構造上での位置を識別するためのテンプレートＩＤ、及び前記複数の記憶エリア内の当該テンプレートＩＤを有する要素データを記憶するための予め定められた記憶位置を定めるエレメントＩＤを含む識別子をそれぞれもち、
前記要素データ群のうちの第１の要素データの第１の識別子に含まれるテンプレートＩＤとエレメントＩＤを、第１の構造化データの階層構造において第１の要素データの上流にある要素データのテンプレートＩＤとエレメントＩＤにそれぞれ置き換えることにより第２の要素データの第２の識別子を求めることを特徴とする検索方法。
【請求項１２】
前記複数の構造化データは、前記複数の要素データを含む複数の階層構造のうちの１つをそれぞれ有し、
前記複数の階層構造で同じ位置に配置される要素データには、当該複数の階層構造で同じエレメントＩＤが与えられることを特徴とする請求項１１記載の検索方法。
【請求項１３】
前記複数の階層構造で同じ位置に配置される要素データに対し予め定められた前記エレメントＩＤは当該要素データの各階層構造上でのテンプレートＩＤに対応付けて予め第２の記憶手段に記憶されていることを特徴とする請求項１２記載の検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、階層化された論理構造をもつ構造化文書データベースに関する。
【背景技術】
【０００２】
Extensible markup language（ＸＭＬ）などで記述された構造化文書データを記憶・検索するための構造化文書管理システムには、いくつかの方式が考えられている。
【０００３】
（１）単純な方式として、構造化文書データをそのままテキストファイルとして管理する方式。この方式では、データ数やサイズが大きくなると格納効率が悪くなったり、構造化文書の特性を生かした検索が困難になる。
【０００４】
（２）ＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ）に構造化文書データを管理する方式。
【０００５】
（３）構造化文書データを管理するために開発されたＯＯＤＢ（Ｏｂｊｅｃｔ  Ｏｒｉｅｎｔｅｄ  Ｄａｔａｂａｓｅ）で管理する方式。基幹系などで広くＲＤＢが使われているが、これを拡張した例えばＸＭＬ対応ＲＤＢが製品として出ている。ＲＤＢは、データをフラットなテーブル形式に格納するため、ＸＭＬデータのような階層構造をテーブルに対応づける複雑なマッピングが必要となる。このマッピングのため、テーブルに関する事前の構造（スキーマ）設計を十分に行わないと、パフォーマンスが低下してしまう問題が発生する。
【０００６】
近年、上記（１）〜（３）以外に新たな方式が提案されている。
【０００７】
（４）ネイティブに構造化文書データを管理する方式。この方式は、多種多様な階層構造を持つＸＭＬデータを特別なマッピング処理すること無しに格納する。このため、格納や取得時に特別なオーバヘッドが存在しない。また、コストのかかる事前のスキーマ設計が不要になり、ビジネス環境の変化により必要に応じてＸＭＬデータの構造を自由に変更することが可能である。
【０００８】
いくら構造化文書データが効率良く格納されたからといって、格納されたデータを取り出す手段が無ければ意味が無い。この格納されたデータを取り出す手段として、問合せ言語がある。ＲＤＢの世界ではＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）があるように、ＸＭＬではＸＱｕｅｒｙ（ＸＭＬ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）が策定されている。ＸＱｕｅｒｙは、ＸＭＬデータをデータベースのように扱うための言語である。このため条件に合致するデータ集合の取り出しや集計・分析を行うための手段が提供されている。また、ＸＭＬデータは親子や兄弟などの要素が組み合わさった階層構造を持つため、この階層構造を辿る手段が提供されている。
【０００９】
格納された構造化文書データの階層構造を辿りながら、検索条件で指定された特定の要素と特定の構造が含まれている構造化文書データを検索するための技術は既に開示されている（例えば、特許文献１、２参照）。
【００１０】
構造化文書データの構造が大規模になるほど、データベースに格納されている構造化文書データの数が多いほど、検索条件が複雑なほど、各構造化文書データの階層構造を構成する要素間をたどるという処理には時間がかかる。また、構造化文書データの数、サイズが大きくなれば、格納された構造化文書データをメモリ上に展開することは不可能であり、多くはハードディスクなど二次記憶に格納されることになる。
【００１１】
ネイティブに構造化文書データを管理する方式では、構造化文書データは要素間の階層構造をそのまま記憶する。検索条件として指定された要素や構造があるか否かを調べるためには、二次記憶上に格納された構造化文書データの要素間を頻繁にアクセスしなければならない。複雑な検索条件の場合はなおさらである。
【特許文献１】特開２００２−３４６１８公報
【特許文献２】特開２０００−５７１６３公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
従来は、階層構造を有する構造化文書データを記憶するデータベースから所望の要素や構造を有する構造化文書データを検索する際には、データベース内の各構造化文書データの階層構造を構成する要素データ間を辿りながら、検索条件にて指定された要素や構造を持つ構造化文書データを検索するため、高速に検索できないという問題点があった。特に、構造化文書データのサイズが大きくなるほど、検索対象の構造化文書データの数が多いほど、検索条件が複雑であるほど検索処理の高速化が困難であった。
【００１３】
そこで、本発明は上記問題点に鑑み、構造化文書データの検索の高速化を図るための構造化文書データの記憶方法および装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、複数の要素データをそれぞれ含む複数の構造化データを複数の記憶エリアのそれぞれに記憶するものであって、その際に、（１）前記複数の構造化データ中での出現頻度が第１の閾値以上の要素データに対し、前記複数の記憶エリアのそれぞれにおける記憶位置を定めるエレメントＩＤを決定し、（２）前記複数の構造化データのうちの１つである第１の構造化データに含まれる要素データ群のうち、前記エレメントＩＤの決定された各要素データを、前記複数の記憶エリアのうち前記第１の構造化データを記憶するための第１の記憶エリアの当該エレメントＩＤに対応する記憶位置に記憶する。
【００１５】
また、前記複数の構造化データは、前記複数の要素データを含む複数の階層構造のうちの１つをそれぞれ有し、前記エレメントＩＤを決定する際には、（３）前記複数の要素データのそれぞれの前記複数の構造化データ中での出現頻度を基に前記複数の階層構造を認識し、（４）前記複数の構造化データのそれぞれを、前記複数の階層構造のうちの１つに分類し、（５）前記複数の階層構造のそれぞれについて、当該階層構造に分類された構造化データ群中での出現頻度が前記第１の閾値以上の要素データに対し、前記複数の記憶エリアのそれぞれにおける記憶位置を定めるエレメントＩＤを決定する。
【００１６】
さらに、前記複数の階層構造で同じ位置に配置される要素データには、当該複数の階層構造で同じエレメントＩＤを与える。
【００１７】
記憶する複数の構造化データ中での出現頻度の高い要素データには、各構造化データを記憶する記憶エリア内での記憶位置を予め定めておき、当該記憶位置をエレメントＩＤで特定するため、検索時には、各構造化データのそれぞれの文書構造を辿る必要がないため、検索が高速に行える。
【発明の効果】
【００１８】
構造化文書データの検索の高速化が図れる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態について、図面を参照して説明する。
【００２０】
図１は、構造化文書データ（構造化データ）の一例である。構造化文書を記述するための代表的な言語としてＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）が挙げられる。図１に示す構造化文書はＸＭＬで記述されたものである。ＸＭＬでは、文書構造を構成する個々のパーツを「要素」（エレメント：Ｅｌｅｍｅｎｔ）と呼び、要素はタグ（ｔａｇ）を使って記述する。具体的には、要素の始まりを示すタグ（開始タグ）と、終わりを示すタグ「終了タグ」）の２つのタグでテキストデータを挟み込んで、１つの要素を表現している。なお、開始タグと終了タグで挟み込まれたテキストデータは、当該開始タグと終了タグで表された１つの要素に含まれるテキスト要素である。
【００２１】
この例では、＜ｂｏｏｋ＞というタグで囲まれた要素のルート要素が存在する。この「ｂｏｏｋ」要素は、＜ｔｉｔｌｅ＞、＜ａｕｔｈｏｒｓ＞、＜ａｂｓｔｒａｃｔ＞の各タグで囲まれた３つの子要素を包含する。「ａｕｔｈｏｒｓ」要素は、＜ａｕｔｈｏｒ＞というタグをもつ２つの子要素を包含する。各「ａｕｔｈｏｒ」要素は、＜ｆｉｒｓｔ＞、＜ｌａｓｔ＞という各タグで囲まれた子要素が存在する。「ｆｉｒｓｔ」要素と「ｌａｓｔ」要素は、それぞれ「太郎」や「田中」といったテキスト要素を持っている。
【００２２】
図２は、本実施形態に関る構造化文書管理システムの機能的な構成例を示したものである。構造化文書管理システムは、大きく分けてクライアント２０１とサーバ１０１とから構成されている。クライアント２０１からの格納要求や検索要求を受けて、サーバ１０１が各要求に対応する処理を行う。
【００２３】
クライアント２０１は、主に、登録部２０２、検索部２０３、入力部２０４、表示部２０５を有する。キーボードやマウス等の入力装置からなる入力部２０４は、構造化文書を入力したり、各種指示入力を行うためのものである。登録部２０２は、入力部２０４から入力された構造化文書や、クライアント２０１のもつ記憶装置などに予め記憶された構造化文書を構造化文書データベース１１１に登録するためのものである。登録部２０２は、格納要求とともに登録すべき構造化文書をサーバ１０１へ送信する。
【００２４】
検索部２０３は、入力部２０４からユーザにより入力された指示に従って、構造化文書データベース１１１から所望のデータを検索するための検索条件などが記述された問合せデータを作成し、当該問合せデータを含む検索要求をサーバ１０１へ送信する。また、サーバ１０１から送信された当該検索要求に対応する検索結果データを受け取り、これを表示部２０５に表示する。
【００２５】
サーバ１０１は、要求処理部１０２、格納処理部１０３、検索処理部１０４から構成されている。また、サーバ１０１には構造化文書データベース（構造化文書ＤＢ）１１１が接続されている。構造化文書データベース１１１は、構造テンプレート記憶部１１２、構造化文書データ記憶部１１３、索引データ記憶部１１４から構成されている。
【００２６】
要求処理部１０２は、クライアント２０１から送信される格納要求や検索要求を判別し、格納処理部１０３や検索処理部１０４などへ処理の振り分けを行い、格納処理部１０３や検索処理部１０４での処理結果をクライアント２０１に返す。
【００２７】
格納処理部１０３は、クライアント２０１からの格納要求を受けて、クライアント２０１から送信された構造化文書を構造化文書データベース１１１に格納する処理を行う。格納処理部３は、図３に示すように、構造化文書構文解析部３１、構造化文書構造抽出部３２、構造化文書構造照合部３３、構造化文書格納部３４、構造配置イメージ決定部３５、構造テンプレート更新部３６から構成される。
【００２８】
構造化文書構文解析部３１は、要求処理部１０２から渡された構造化文書を構文解析し、解析結果として、例えば、ＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）のようなオブジェクトツリーを得る。この解析結果を基に構造化文書構造抽出部３２では当該構造化文書の（文書）構造を抽出する。構造化文書構造照合部３３は、構造化文書データベース１１１に記憶された構造テンプレートの中から、構造化文書構造抽出部３２により抽出された構造に最も類似する（合致する）構造テンプレートを１つ選択する。
【００２９】
構造テンプレート更新部３６は、構造化文書構造照合部３３により選択された構造テンプレートに、構造化文書構造抽出部３２により抽出された構造を反映させる。構造化テンプレート記憶部１１２には、構造を表すグラフデータだけでなく構造の発生頻度などの統計データを保持しており、構造テンプレート更新部３６は、グラフデータと統計データの双方を更新する。また、統計データに、構造テンプレート上に典型的な構造パターンが現れた場合、この典型的な構造パターンを新たな構造テンプレートとして構造化テンプレート記憶部１１２に格納する。
【００３０】
構造配置イメージ決定部３５は、構造パターンに合致する構造化文書データの配置上の位置決めが行われる。
【００３１】
構造化文書格納部３４は、入力された構造化文書のデータを構造化文書データベース１１１の構造化文書データ記憶部１１３に格納するとともに、索引データを索引データ記憶部１１４に格納する。
【００３２】
一方、検索処理部１０４は、クライアント２０１からの検索要求を受けて、指定された条件（問合せデータ）に合致するデータを構造化文書データベース１１１から探し出し、得られたデータを結果データとしてクライアント２０１へ返す処理を行う。検索処理部１０４は、図４に示すように、問合せ構文解析部４１、問合せ構造抽出部４２、問合せ構造照合部４３、問合せ実行部４４から構成される。
【００３３】
問合せ構文解析部４１は、要求処理部１０２から渡された問合せデータを構文解析し、解析結果として、後述する問合せグラフを得る。この解析結果を基に問合せ構造抽出部４２では、当該問合せデータの構造（問合せ構造）を抽出する。
【００３４】
問合せ構造照合部４３は、構造化文書データベース１１１の構造テンプレート記憶部１１２に記憶された構造テンプレートのなかから、当該問合せ構造に類似する（合致する）構造テンプレートの集合を取り出す。問合せ構造と構造テンプレートの集合との照合結果は、問い合わせグラフに発生する変数集合の取り得る構造パターンの組合せとして表現される。
【００３５】
問合せ実行部４４は、問合せ構造照合部４３での照合結果を基に、構造化文書データベース１１１の構造化文書データ記憶部１１３に記憶されている構造化文書データや、索引データ記憶部１１４に記憶されている語彙索引データにアクセスして、問合せデータに記述された条件に合致する結果データを生成する。
【００３６】
図５は、サーバ１０１のハードウエア的な構成例を示したもので、バス１に通信Ｉ／Ｆ装置２、可搬記憶媒体ドライブ装置３、表示装置４、入力装置５、出力装置６、演算装置（ＣＰＵ）７および外部記憶装置８並びにメモリ９が接続されて構成されている。さらに、図５に示す構成では、バス１に、図２の構造化文書データベース１１１が接続されている。
【００３７】
図２の要求処理部１０２と格納処理部１０３と検索処理部１０４のそれぞれの機能を実現するためのプログラムは、図５の外部記憶装置８に予め記憶され、必要に応じて、各プログラムがメモリ９に読み込まれてＣＰＵ７により実行される。なお、以下、図２〜図４を参照して説明する。
【００３８】
次に、構造化文書データ記憶部１１３、索引データ記憶部１１４について説明する。
【００３９】
図６は、構造化文書データ記憶部１１３のデータ構造を模式的に表したものである。構造化文書データ記憶部１１３には、論理的には、大量の構造化文書が「ｒｏｏｔ」ノード３０１をルートする１つの構造化文書の部分文書として記憶されている。図６では、この「ｒｏｏｔ」ノード３０１をルートとする１つの構造化文書の構造を、ノードとアークから構成される階層木で表している。各ノードは構造化文書の要素（テキスト要素を含む）を示し、要素間の親子関係をアークで示している。実装上は、各ノードはオブジェクトデータのファイルとして構造化文書データ記憶部１１３に格納される。各ノードには、オブジェクトＩＤ（ＯＩＤ）と呼ばれる識別子が割当てられている。ＯＩＤは、後述するように、ドキュメントＩＤ（ＤｏｃＩＤ）とエレメントＩＤ（ＥｌｅｍＩＤ）とテンプレートＩＤ（ＴＩＤ）とから構成され、本明細書の中では＜ＤｏｃＩＤ，ＥｌｅｍＩＤ，ＴＩＤ＞という形式で表すものとする。ＯＩＤを指定することで所望のオブジェクトデータを取り出すことができる。
【００４０】
ノード間の親子関係を表わすアークは、オブジェクトデータ間のリンクであり、このリンクはオブジェクトデータ内に子要素のオブジェクト集合を指すＯＩＤ配列として、構造化文書データ記憶部１１３に記憶される。
【００４１】
「ｒｏｏｔ」ノード３０１の下には「ｂｏｏｋＦｏｌｄｅｒ」ノード３０２が存在する。「ｂｏｏｋＦｏｌｄｅｒ」ノードの下には、２つの「ｂｏｏｋ」ノード３０４，３０５が存在する。ＯＩＤが＜２、０、Ｄ２＞の「ｂｏｏｋ」ノード３０４には、図１で示した構造化文書データ３１１が格納されている。
【００４２】
このように「ｒｏｏｔ」ノード３０１以下のデータは、複数の構造化文書のそれぞれの各要素からなる１つの大きな構造化文書データであり、図１で示した構造化文書データは、当該大きな構造化文書データの一部分として格納されている。例えば、図１の構造化文書＜ｂｏｏｋ＞…＜／ｂｏｏｋ＞は、図６の構造化文書では、＜ｒｏｏｔ＞＜ｂｏｏｋＦｏｌｄｅｒ＞＜ｂｏｏｋ＞…＜／ｂｏｏｋ＞＜／ｂｏｏｋＦｏｌｄｅｒ＞＜／ｒｏｏｔ＞と表すことができる。
【００４３】
なお、このような複数のノードからなる階層構造は、汎用のＯＳで広く採用されているディレクトリ構造に当てはめると、これら各ノードは、ディレクトリ構造のフォルダとファイルに対応する。すなわち、図６に示す階層構造は、「ｒｏｏｔ」フォルダの下に、「ｂｏｏｋＦｏｌｄｅｒ」という子フォルダがあり、「ｂｏｏｋＦｏｌｄｅｒ」フォルダの下に、「ｂｏｏｋ」という要素をルートに持つ２つのドキュメントファイル３１１，３１２が存在するディレクトリ構造で構造化文書データ記憶部１１３に記憶される。
【００４４】
以下、「ｒｏｏｔ」ノード、「ｂｏｏｋＦｏｌｄｅｒ」ノード、「ｐａｐｅｒＦｏｌｄｅｒ」ノードをフォルダと解釈し、フォルダ以下のデータをまとめてドキュメントファイルと解釈する。例えば、図６の場合、「ｂｏｏｋＦｏｌｄｅｒ」フォルダに２つの「ｂｏｏｋ」ドキュメント（ファイル３１１、３１２）が格納されていると解釈することができる。
【００４５】
構造化文書ＤＢ１１１に対する検索を行うには、問合せデータを与える必要がある。問合せデータには、テキスト（単語などの文字列）を検索条件として指定したもの、構造化文書の構造を検索条件として指定したもの、あるいは両者を組み合わせて検索条件として指定したものがある。問合せデータに単語などの文字列が検索条件として含まれる場合、構造化文書管理システムでは高速に検索を行うため、語彙索引を付けることが多い。語彙索引データとは、格納された構造化文書データに含まれるテキスト要素のテキストデータ（文字列）を抽出し、テキストデータと当該テキストデータを含む構造化文書データ中の要素のオブジェクトＩＤ（ＯＩＤ）との対応関係を表す情報である。
【００４６】
図１で示した構造化文書データには、「ＸＭＬデータベース」、「ＸＭＬデータの検索技術」、「田中」、などのテキストデータが含まれている。これらのテキストデータを字句解析することで「ＸＭＬ」、「データ」、「データベース」などの語彙（文字列）に分解している。
【００４７】
索引データ記憶部１１４には図７に示すように、語彙テーブルと当該語彙テーブル中の各語彙にリンクされた当該語彙を含むテキスト要素のＯＩＤを記録する複数のテーブルが記憶されている。語彙テーブル中の語彙からリンクをたどることで、その語彙を含むテキスト要素の出現位置、つまりＯＩＤが得られる。
【００４８】
なお、図７に示した索引データでは省略したが、語彙テーブル中の各語彙にリンクされたテーブルには、当該語彙を含むテキスト要素のＯＩＤが、＜ＤｏｃＩＤ，ＥｌｅｍＩＤ，ＴＩＤ＞という形式で、図８に示すように記録されている。
【００４９】
構造テンプレート記憶部１１２には、構造テンプレートデータが格納されている。構造テンプレートデータには、構造化文書データ記憶部１１３に格納されている構造化文書データから抽出された構造データが格納されている。構造テンプレート記憶部１１２に格納される初期の構造テンプレートデータは、構造化文書データ記憶部１１３に（例えば最初に）格納される構造化文書から抽出されたものである。
【００５０】
図９は、構造テンプレート記憶部１１２に記憶されている（構造化文書データ記憶部１１３に記憶される構造化文書データから構成される）階層構造を模式的に示したもので、図６の「ｒｏｏｔ」、「ｂｏｏｋＦｏｌｄｅｒ」という２つのノード３０１，３０２のそれぞれに対応する「ｒｏｏｔ」、「ｂｏｏｋＦｏｌｄｅｒ」という２つの要素と、「ｂｏｏｋＦｏｌｄｅｒ」ノード３０２以下に格納される構造化文書のドキュメントファイルに対応する要素「ｂｏｏｋ」からなる階層構造を表している。
【００５１】
「ｂｏｏｋ」要素には、「ｂｏｏｋＦｏｌｄｅｒ」ノード３０２以下に格納される構造化文書の文書構造のベース（基準）となる文書構造を表す少なくとも１つの構造テンプレートデータが対応付けられて格納されている。
【００５２】
図９には、「ｂｏｏｋ」要素に、初期構造テンプレートＳＴ１が格納されている場合を示している。構造テンプレート（データ）は、グラフデータと統計データから構成されており、グラフデータを図１０に、統計データを記録する統計データテーブルを図１１に示す。なお、以下の説明において、統計データとグラフデータのうちグラフデータのみを構造テンプレート（データ）と呼ぶ。
【００５３】
図１０に示す初期構造テンプレートＳＴ１は、図１に示した文書から抽出された構造を表したものである。図１の構造化文書には、「ｂｏｏｋ」ノード直下に「ａｕｔｈｏｒｓ」ノードがあり、その下には２つの「ａｕｔｈｏｒ」ノードがあったが、図１０に示した構造テンプレートでは、「ａｕｔｈｏｒ」ノードは１つにまとめられて、テキストノード（テキスト要素）は「＃ｔｅｘｔ」ノードとして表されている。
【００５４】
図９、図１０の構造テンプレートデータの六角形で表された各ノード（各ノードは、フォルダ、ファイル、要素、テキスト要素に対応する）には、「Ｆ０」、「Ｄ２」、「Ｅ３」、「Ｔ４」などのユニークなＩＤが割り振られている。構造テンプレートデータの各ノードの種別や構造上の位置を識別するために、各ノードに割り振られたＩＤをテンプレートＩＤ（ＴＩＤ）と呼ぶ。
【００５５】
テンプレートＩＤについて説明する。テンプレートＩＤは、構造テンプレート上の当該ノードの種類を表す情報と、同じ種類のノードのなかで各ノードを識別するための番号とから構成されている。ノードの種類は、「Ｆ」「Ｄ」「Ｅ」「Ｔ」という４種の文字により表されている。「Ｆ」はフォルダ、「Ｄ」はドキュメントファイル、「Ｅ」は要素（テキスト要素ではない要素）、「Ｔ」はテキスト要素を表す。ノードの種類を表す文字とそれに続く番号「ｘ」とからなるテンプレートＩＤにより、当該ノードの種類と、当該テンプレートＩＤを持つノードが構造テンプレート上のどのノードであるかを識別することができる。
【００５６】
テンプレートＩＤが「Ｆｘ」であるノードはフォルダを表し、これをフォルダ型構造テンプレートノードと呼ぶ。テンプレートＩＤが「Ｄｘ」であるノードはドキュメントを表し、ドキュメント型構造テンプレートノードと呼ぶ。テンプレートＩＤが「Ｅｘ」であるノードはドキュメント内の要素（テキスト要素でない要素）を表し、エレメント型構造テンプレートノードと呼ぶ。テンプレートＩＤが「Ｔｘ」であるノードはドキュメント内のテキスト要素を表し、テキスト型構造テンプレートノードと呼ぶ。なお、ここでは、「ｘ」は、構造テンプレートデータの各ノードにユニークなシリアルな整数とする。
【００５７】
構造化文書データ記憶部１１３に記憶される各構造化文書データの各要素（ノード）は、当該ノードを識別するためのオブジェクトＩＤ（ＯＩＤ）が与えられている。データファイルに格納されている構造化文書データの各ノードのＯＩＤは、ドキュメントＩＤ（ＤｏｃＩＤ）、エレメントＩＤ（ＥｌｅｍＩＤ）、上記テンプレートＩＤ（ＴＩＤ）から構成されている。ここでは、ＯＩＤを＜ＤｏｃＩＤ，ＥｌｅｍＩＤ，ＴＩＤ＞と表すことにする。
【００５８】
ＤｏｃＩＤとは、ドキュメント、フォルダに割当てられるデータファイル内でユニークなＩＤであり、ドキュメントファイルの識別子、フォルダの識別子である。ＥｌｅｍＩＤは、各ドキュメント内の各要素に割当てられる各ドキュメント内でユニークなＩＤであり、ＥｌｅｍＩＤにより、当該ドキュメント内での各要素を識別することができる。ＴＩＤとは、前述したように構造テンプレートデータ内のノードが持つＩＤ、すなわち、テンプレートＩＤである。
【００５９】
ドキュメントファイル内のある要素のＯＩＤを見れば、当該ＯＩＤに含まれるＤｏｃＩＤからは当該ＯＩＤをもつノードを含むドキュメントファイルを識別することができ、当該ＯＩＤに含まれるＴＩＤからは当該ノードの構造テンプレート中の存在位置とノードの種別を識別することができ、ＥｌｅｍＩＤからは当該ノードの当該ドキュメント中の存在位置を識別することができるのである。
【００６０】
さて、図１１に示す統計データテーブルには、図１０の構造テンプレートに表された各要素（のテンプレートＩＤ）について、図１０の構造テンプレートに基づきテンプレートＩＤやエレメントＩＤが付与されて構造化文書データ記憶部１１３に格納された構造化文書データ群中での出現（発生）頻度などを表している。
【００６１】
例えば、図１１に示す統計データテーブルには、図１０の構造テンプレートに基づき構造化文書データ記憶部１１３に格納された構造化文書データの総数（ＮｕｍＲｅｇｉｓｔ）と、図１０の構造テンプレートに表された各要素について、当該構造化文書データ群の各構造化文書データ内での出現回数（発生回数）の総数（ＳｕｍＯｃｃ）、当該構造化文書データ群の各構造化文書データ内での出現回数（発生回数）の二乗値の総数（ＳｕｍＯｃｃ２）、１つの構造化文書データ内での当該要素の最小発生回数（ＭｉｎＯｃｃ）、１つの構造化文書データ内での当該要素の最大発生回数（ＭａｘＯｃｃ）などが表されている。
【００６２】
図１１の統計データテーブルは、図１０の構造テンプレートで表された構造をもつ新たな構造化文書データを構造化文書データ記憶部１１３に格納する度に更新される。
【００６３】
図１０の構造テンプレートから新たな構造テンプレートを抽出する際に、各要素について得られた上記値の平均値、標準偏差が参照される。
【００６４】
構造テンプレートの要素のうちの固定配置要素（後述する）には予めエレメントＩＤが定められているため、統計データテーブル中の当該固定配置要素についてはそのエレメントＩＤも「ＯｉｄＯｆｆｓｅｔ」欄に記録されている。また、当該固定配置要素が同じ親要素の子要素として繰返し出現する回数も予め定められているときには、その繰返し回数が「ＮｕｍＳｉｂ」欄に記録される。なお、図１１の統計データテーブル中の要素には固定配置要素が存在しないため、「ＯｉｄＯｆｆｓｅｔ」欄と「ＮｕｍＳｉｂ」欄には全て「ＵＮＤＥＦＦ」（未定義）が記録されている。
【００６５】
次に、図１２〜図１４に示すフローチャートを参照して、図２の格納処理部１０３の処理動作について説明する。
【００６６】
クライアント２０１の登録部２０２からは、新たに格納すべき構造化文書データと、この格納先のフォルダのＯＩＤを含む格納要求メッセージが送信される。ここで、格納先のフォルダのＯＩＤをＯＩＤｐと表す。
【００６７】
なお、クライアント２０１では、格納先のフォルダのＯＩＤは、次のようにして得ることができる。クライアント２０１の検索部２０３には、例えば、図６に示すような構造化文書データ記憶部１１３の概略構造を表示するためのＧＵＩ機能を有している。このＧＵＩ機能により表示された構造からユーザが格納先のフォルダとして所望のノード（フォルダ）を指示すると、当該ノードに対応するＯＩＤを得るための問合せデータが作成され、サーバ１０１へ送信される。サーバ１０１では、当該問合せデータから、当該指示されたノードのＯＩＤを獲得して、クライアント２０１の検索部２０３へ返す。検索部２０３は、この得られたＯＩＤ（すなわち、ＯＩＤｐ）を登録部２０２へ渡す。
【００６８】
さて、サーバ１０１の要求処理部１０２では、新たなに格納すべき構造化文書データと格納先のフォルダのＯＩＤｐを含む格納要求メッセージを受け取る（ステップＳ１）。ここでは、例えば、「ｂｏｏｋＦｏｌｄｅｒ」フォルダ３０２に対応するＯＩＤｐ（＜１，０，Ｆ１＞）が格納先のフォルダとして指定され、このフォルダ下に新たなドキュメントを格納するケースを考える。
【００６９】
格納要求メッセージに含まれる、格納すべき構造化文書データは、格納処理部１０３の構造化文書構文解析部３１へ渡されて、当該構造化文書データの構文解析が行われる。この結果得られるものは、構造化文書データの複数のオブジェクトデータからなる階層構造であり、メモリ上に展開される（ステップＳ２）。すなわち、構造化文書構文解析部３１は、ＸＭＬデータである構造化文書データに対し、構文解析処理を行うことによりＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）形式のオブジェクトデータに展開するＸＭＬパーサに相当する機能を有するものである。
【００７０】
さらに、当該構造化文書データに対し、新たなドキュメントＩＤ（ＤｏｃＩＤ）を付与する（ステップＳ３）。
【００７１】
次に、構造化文書構造抽出部３２は、構造化文書構文解析部３１での解析結果をそのルートから辿ることによって、当該構造化文書データの構造、すなわち、当該構造化文書データ中の各要素に対応する複数のノードと、当該複数のノードからなる構造を抽出する。当該構造化文書データの構造をＳｃとする（ステップＳ４）。
【００７２】
構造化文書構造照合部３３は、格納先フォルダのＯＩＤｐをキーに構造テンプレート記憶部１１２から構造テンプレートの集合を取得する。例えば、ＯＩＤｐが＜１，０，Ｆ１＞である場合には、まず、ＴＩＤ「Ｆ１」を取得する。このＯＩＤｐから取得したＴＩＤをＴＩＤｐと表す。構造化文書構造照合部３３は、ＴＩＤｐをキーにして構造テンプレート記憶部１１２をスキャンすることで、対応する構造テンプレートの集合を取得できる（ステップＳ５）。取得した構造テンプレートの集合をＳｐｓとする（ステップＳ６）。
【００７３】
取得した構造テンプレートの集合Ｓｐｓが空（ｎｕｌｌ）であるとき（ステップＳ７）、格納先フォルダには、構造テンプレートが存在しないため、当該格納先フォルダにおける初期構造テンプレートを作成すべく、ステップＳ１１へ進み、図１４に示す構造テンプレート更新処理を行う。Ｓｐｓが空でないときには（ステップＳ７）、ステップＳ８へ進み、Ｓｐｓの各構造テンプレートと新たに格納すべき構造化文書データから抽出された構造Ｓｃとを照合し、Ｓｐｓのなかから、Ｓｃに最も類似する構造テンプレートを選択する（ステップＳ８）。選択された構造テンプレートをＳｐとする（ステップＳ９）。そして、ＳｃとＳｐを用いて、図１４の構造テンプレート更新処理を行う（ステップＳ１０）。
【００７４】
図１４は、構造テンプレート更新部３６における構造テンプレート更新処理動作を説明するためのフローチャートである。図１２のステップＳ７でＳｐｃが空である場合（ステップＳ１１での構造テンプレート更新処理）には、まず、初期構造テンプレートを作成する。すなわち、図１４のステップＳ３１からステップＳ３２へ進み、新たに格納すべき構造化文書データから抽出された構造Ｓｃを初期の構造テンプレートＳＴ１とする（ステップＳ３２）。そして、この初期構造テンプレートＳＴ１の各要素に対し、新たなＴＩＤを付与し、初期構造テンプレートＳＴ１の当該統計データテーブルを初期化する（ステップＳ３３）。その後、初期構造テンプレートをＳｐとし（ステップＳ３４）、ステップＳ３５へ進む。
【００７５】
一方、構造テンプレートＳｐが既に得られている場合（図１２のステップＳ１０の構造テンプレート更新処理）には、図１４のステップＳ３１からステップＳ３５へ進む。
【００７６】
ステップＳ３５では、構造テンプレートＳｐと新たに格納すべき構造化文書データから抽出された構造Ｓｃとの構造の和を取る。これをＳｐｃとする。構造の和であるから、Ｓｐｃは、構造テンプレートＳｐに、ＳｃにありＳｐにない要素が追加された構造を表す構造テンプレートとなっている。
【００７７】
次に、構造テンプレートＳｐｃを基に、Ｓｐの統計データテーブルを更新する（ステップＳ３６）。更新内容は以下の通りである。すなわち、（１）Ｓｐｃにあり、Ｓｐの統計データテーブルには登録されていない要素があれば、当該要素に新たなＴＩＤを付与し、当該統計データテーブルに当該新たなＴＩＤを登録する。また、ＳｐをＳｐｃのグラフデータで書き換え、Ｓｐ自体を更新する。（２）Ｓｐの統計データテーブルに登録されている各要素（ＴＩＤ）の発生回数の総和（ＳｕｍＯｃｃ）を、Ｓｐｃに出現する当該ＴＩＤの要素の数だけインクリメントする。（３）Ｓｐの統計データテーブルに登録されている各要素（ＴＩＤ）に対するＳｕｍＯｃｃ２の値に、Ｓｐｃに出現する当該ＴＩＤの要素の数の二乗値を加算する。（４）Ｓｐの統計データテーブルに登録されている各要素（ＴＩＤ）のＭｉｎＯｃｃの値が、Ｓｐｃ内の当該要素の出現回数より大きいとき、当該ＭｉｎＯｃｃの値をＳｐｃ内の当該要素の出現回数に書き換える。（５）Ｓｐの統計データテーブルに登録されている各要素（ＴＩＤ）のＭａｘＯｃｃの値が、Ｓｐｃ内の当該要素の出現回数より小さいとき、当該ＭａｘＯｃｃの値をＳｐｃ内の当該要素の出現回数に書き換える。（６）ＮｕｍＲｅｇｉｓｔの値を１つインクリメントする。
【００７８】
以上の統計データテーブルの更新が終了すると、ステップＳ３７へ進み、新たなに格納すべき構造化文書データから抽出された構造Ｓｃの各要素に、当該要素に対応するＳｐ内の要素のＴＩＤを付与する。
【００７９】
以上の構造テンプレート更新処理が終了すると、図１３のステップＳ２１へ進む。図１３では、構造化文書格納部３４は、新たなに格納すべき構造化文書データから抽出された構造Ｓｃの階層構造の上流から下流へと順に要素を取出して、各要素に対してエレメントＩＤを付与した後（ステップＳ２１〜ステップＳ２６）、索引データを更新し（ステップＳ２７）、当該構造化文書データを構造化文書データ記憶部１１３へ格納する（ステップＳ２８）。なお、格納する各構造化文書データのルート要素のエレメントＩＤは「０」である。
【００８０】
ここで重要なのは、構造Ｓｃ中の要素がそのＴＩＤから当該構造中で必須の要素（すなわち、固定配置できる要素）であるときには、当該固定配置要素に対し予め定められたＥｌｅｍＩＤを与え、そうでなければ固定配置要素の最大オフセットＥｌｅｍＩＤより順次割り付けているという戦略をとっていることである。
【００８１】
ステップＳ２１では、Ｓｃのルート要素を取出し、これをＥとする。Ｓｐの統計データテーブル中に、要素ＥのＴＩＤに対し固定配置要素のエレメントＩＤ（ＯｉｄＯｆｆｓｅｔ）が登録されている場合には、当該要素Ｅは固定配置要素である。この場合には（ステップＳ２２）、ステップＳ２３へ進み、要素Ｅに当該統計データテーブルに登録されている当該固定配置要素に対応するエレメントＩＤを付与する。要素Ｅが固定配置要素でないときには（ステップＳ２２）、ステップＳ２４へ進み、要素Ｅに固定配置要素に対し予め定められているエレメントＩＤ以外のエレメントＩＤであって、当該新たなに格納すべき構造化文書データ内で唯一のエレメントＩＤを付与する。
【００８２】
ステップＳ２２〜ステップＳ２４の処理がＳｃの全ての要素に対し行い、Ｓｃの全ての要素にエレメントＩＤが付与されると（ステップＳ２５、ステップＳ２６）、Ｓｃの全ての要素に対し、＜ＤｏｃＩｄ，ＥｌｅｍＩＤ，ＴＩｄ＞という構成のＯＩＤが与えられたことになる。
【００８３】
次に、ステップＳ２７へ進み、Ｓｃのテキスト要素を基に、索引データを更新する。すなわち、テキスト要素のテキストデータから語彙（単語、複数の単語からなる語などの文字列）を抽出し、抽出した語彙が図８に示すような語彙テーブル中に無ければ、それを追加する。そして、各テキスト要素のＯＩＤを、当該テキスト要素のテキストデータに含まれる語彙テーブル中の語彙にリンクして記憶する。
【００８４】
ステップＳ２８では、構造化文書格納部３４は、構造化文書データ記憶部１１３内をスキャンすることで、格納先として与えられたＯＩＤｐに対応するオブジェクトを取得し、当該オブジェクトデータの子要素のオブジェクトの集合を示すＯＩＤ配列に、当該格納すべき構造化文書データの各要素のＯＩＤを追加する。すなわち、構造化文書データ記憶部１１３に、各要素に上記のようなＯＩＤの付された当該格納すべき構造化文書データが、ＯＩＤｐが＜１，０，Ｆ１＞の「ｂｏｏｋＦｏｌｄｅｒ」フォルダ３０２の直下に追加される形で格納される。
【００８５】
次に、上記格納処理動作について具体的に説明する。
【００８６】
構造テンプレート記憶部１１２に、図１７に示すように、「ｒｏｏｔ」フォルダと、「ｂｏｏｋＦｏｌｄｅｒ」フォルダという２つの要素からなる階層構造が格納されている状態において、「ｂｏｏｋＦｏｌｄｅｒ」フォルダの下に、図１に示すような構造化文書データを挿入格納する場合を考える。なお、「ｒｏｏｔ」フォルダにはＴＩＤ「Ｆ０」が、「ｂｏｏｋＦｏｌｄｅｒ」フォルダにはＴＩＤ「Ｆ１」が割りふられている。
【００８７】
この場合、図１２のステップＳ７からステップＳ１１へ進み、ステップＳ１１では、図１４のステップＳ３１〜ステップＳ３４の処理を経て、図１の構造化文書データから抽出された構造Ｓｃが初期構造テンプレートＳＴ１と決定される。
【００８８】
すなわち、図９に示すように、「ｂｏｏｋＦｏｌｄｅｒ」フォルダの下に「ｂｏｏｋ」という要素に、図１０に示すような初期構造テンプレートＳＴ１と、図１１に示すような統計データのテーブルが格納される。
【００８９】
図１０に示す構造テンプレートＳＴ１は、図１の構造化文書データの構造だけを抽出したツリー形状のグラフとなっている。「ｂｏｏｋ」に対応した構造要素としてＴＩＤ「Ｄ２」、「ｔｉｔｌｅ」に対応した構造要素としてＴＩＤ「Ｅ３」、「ｔｉｔｌｅ／＃ｔｅｘｔ」に対応した構造要素としてＴＩＤ「Ｔ４」とそれぞれＴＩＤが割当てられている。なお、図１の構造化文書データには、２つの「ａｕｔｈｏｒ」要素が兄弟関係で存在していたが、それらは１つに縮約され、「ａｕｔｈｏｒ」要素には「Ｅ６」、「ｆｉｒｓｔ」要素には「Ｅ７」、「ｌａｓｔ」要素には「Ｅ９」というＴＩＤが割当てられている。
【００９０】
図１４のステップＳ３６では、まず、構造テンプレートＳＴ１の統計データテーブルのＮｕｍＲｅｇｉｓｔの値に「１」加算して「１」に更新する。
【００９１】
図１の構造化文書データには、「ｂｏｏｋ」は１回発生している。そこで、図１４のステップＳ３６では、統計データテーブルの当該構成要素に対応するＴＩＤ「Ｄ２」ついて、ＳｕｍＯｃｃの値に「１」加算して「１」、ＳｕｍＯｃｃ２の値に「１＊１＝１」加算して「１」、ＭｉｎＯｃｃの値は「１」、ＭａｘＯｃｃの値は「１」と更新する。すなわち、ＳｕｍＯｃｃ＝１、ＳｕｍＯｃｃ２＝１＊１＝１、ＭｉｎＯｃｃ＝１、ＭａｘＯｃｃ＝１、ＮｕｍＲｅｇｉｓｔ＝１、となる。
【００９２】
また、図１の構造化文書データには「ａｕｔｈｏｒ」は２回発生している。そこで、図１４のステップＳ３６では、統計データテーブルの当該構成要素に対応するＴＩＤ「Ｅ６」について、ＳｕｍＯｃｃの値に「２」加算して「２」、ＳｕｍＯｃｃ２の値に「２＊２＝４」加算して「４」、ＭｉｎＯｃｃの値は「２」、ＭａｘＯｃｃの値は「２」と更新される。すなわち、ＳｕｍＯｃｃ＝２、ＳｕｍＯｃｃ２＝２＊２＝４、ＭｉｎＯｃｃ＝２、ＭａｘＯｃｃ＝２、ＮｕｍＲｅｇｉｓｔ＝１、となる。
【００９３】
次に、「ｂｏｏｋＦｏｌｄｅｒ」フォルダに、図１８に示すような構造化文書データを格納するケースを考える。図１８の構造化文書データを格納する際には、図１２のステップＳ８で、図１０の構造テンプレートがＳｐとして選択されるので、ステップＳ１０では、図１４のステップＳ３１から直ちにステップＳ３５、さらにステップＳ３６へ進む。
【００９４】
図１４のステップＳ３６では、まず、図１９に示すように、構造テンプレートＳＴ１の統計データテーブルのＮｕｍＲｅｇｉｓｔの値に「１」加算して「２」に更新する。
【００９５】
図１８の構造化文書データには、「ｂｏｏｋ」は１回発生している。そこで、図１４のステップＳ３６では、統計データテーブルの当該構成要素に対応するＴＩＤ「Ｄ２」について、図１９に示すように、ＳｕｍＯｃｃの値に「１」加算して「２」、ＳｕｍＯｃｃ２の値に「１＊１＝１」加算して「２」と更新する。ＭｉｎＯｃｃ、ＭａｘＯｃｃの値は「１」のままとする。ＳｕｍＯｃｃ＝１＋ＳｕｍＯｃｃ＝２、ＳｕｍＯｃｃ２＝１＊１＋ＳｕｍＯｃｃ２＝２、ＭｉｎＯｃｃ＝Ｍｉｎ（１，ＭｉｎＯｃｃ）＝１、ＭａｘＯｃｃ＝Ｍａｘ（１，ＭａｘＯｃｃ）＝１、ＮｕｍＲｅｇｉｓｔ＝１＋ＮｕｍＲｅｇｉｓｔ＝２、となる。
【００９６】
また、図１８の構造化文書データには「ａｕｔｈｏｒ」は１回発生している。そこで、図１４のステップＳ３６では、統計データテーブルの当該構成要素に対応するＴＩＤ「Ｅ６」について、図１９に示すように、ＳｕｍＯｃｃの値に「１」加算して「３」、ＳｕｍＯｃｃ２の値に「１＊１＝１」加算して「５」、ＭｉｎＯｃｃの値は「１」と更新される。ＭａｘＯｃｃの値は「２」のままである。すなわち、ＳｕｍＯｃｃ＝１＋ＳｕｍＯｃｃ＝３、ＳｕｍＯｃｃ２＝１＊１＋ＳｕｍＯｃｃ２＝５、ＭｉｎＯｃｃ＝Ｍｉｎ（１，ＭｉｎＯｃｃ）＝１、ＭａｘＯｃｃ＝Ｍａｘ（１，ＭａｘＯｃｃ）＝２、ＮｕｍＲｅｇｉｓｔ＝１＋ＮｕｍＲｅｇｉｓｔ＝２、となる。
【００９７】
次に、「ｂｏｏｋＦｏｌｄｅｒ」フォルダに、図２０に示すような構造化文書データを格納するケースを考える。図１８の構造化文書データを格納する際には、図１２のステップＳ８で、図１０の構造テンプレートがＳｐとして選択されるので、ステップＳ１０では、図１４のステップＳ３１から直ちにステップＳ３５、さらにステップＳ３６へ進む。なお、図２０の構造化文書データには「ａｕｔｈｏｒ」は２回発生している。この場合、ステップＳ３６での構造テンプレートＳＴ１の統計データテーブルの更新結果を図２１に示す。
【００９８】
さらに、「ｂｏｏｋＦｏｌｄｅｒ」フォルダに、図２２（ａ）（ｂ）（ｃ）に示すような大量の構造化文書データを格納するケースを考える。これら大量の構造化文書データのそれぞれを格納する際には、図１２のステップＳ８で、図１０の構造テンプレートがＳｐとして選択されるので、ステップＳ１０では、図１４のステップＳ３１から直ちにステップＳ３５、さらにステップＳ３６へ進む。これら大量（例えば、全部で１００件）の構造化文書データを格納した後の構造テンプレートＳＴ１の統計データテーブルの更新結果を図２３に示す。
【００９９】
図２３の統計データテーブルからは次のことが読みとれる。（１）ＴＩＤ「Ｄ２」、「Ｅ３」、「Ｔ４」、「Ｅ５」など、ほとんどの構造要素は、必ず１回発生している。（２）ＴＩＤが「Ｅ６」の「ａｕｔｈｏｒ」は１００件の構造化文書データにそれぞれ最低１回、最大３回出現（発生）している。その平均は「２．５」であり、標準偏差は「０．４」である。つまり、１００件の構造化文書データのうちのほとんどに２回以上発生していることになる。（３）ＴＩＤが「Ｅ１１」の「ａｂｓｔｒａｃｔ」ＴＩＤが「Ｔ１２」の「ａｂｓｔｒａｃｔ／＃ｔｅｘｔ」は、１００件の構造化文書データにそれぞれ０回もしくは１回発生する。
【０１００】
図２４は、ＴＩＤが「Ｅ６」の「ａｕｔｈｏｒ」の発生ヒストグラムのイメージを説明する図である。平均発生回数「２．５」で標準偏差が「０．４」である。「２．５」を中心に「２．５−０．４」から「２．５＋０．４」までの間に１００件の構造化文書データのうちの６８％が集中していると予想される。
【０１０１】
このように、大量の構造化文書データを格納していくことにより、構造テンプレートＳＴ１の統計データテーブルには、当該大量の構造化文書データのうちの一部の構造化文書データ群に共通する構造が表れてくる。この共通の構造を抽出して新たな構造テンプレートを生成することができる。構造テンプレートＳＴ１から抽出される新たな構造テンプレートＳＴ２は、構造テンプレートＳＴ１と同様に、構造テンプレート記憶部１１２の「Ｂｏｏｋｆｏｌｄｅｒ」の下に格納される。
【０１０２】
次に、図１５〜図１６に示すフローチャートを参照して、構造テンプレート更新部３６における構造テンプレート抽出処理動作について説明する。なお、この構造テンプレート抽出処理は、所定時間毎あるいは必要に応じて随時開始される。
【０１０３】
構造テンプレート更新部３６は、構造テンプレート記憶部１１２に記憶されている各構造テンプレートＳｑの統計データテーブル上のデータが新たな構造テンプレートの生成基準を満たしているか否かチェックする（ステップＳ５１）。
【０１０４】
新たな構造テンプレートの生成基準としては、例えば、以下のα、β、γは閾値とすると、「ＮｕｍＲｅｇｉｓｔ＞α  かつ  ＳｕｍＯｃｃ＞γを満足する要素の数＞β」である。この生成基準を満たすような統計データテーブルをもつ構造テンプレートＳｑ１が存在するときには（ステップＳ５２）、ステップＳ５３へ進み、存在しないときには処理を終了する。
【０１０５】
ステップＳ５３以下では、構造テンプレートＳｑ１を基に、新たな構造テンプレートＳｑ２を生成する。すなわち、統計データテーブルにて、構造テンプレートＳｑ１上に典型的な構造パターンが現れた場合、その典型的な構造パターンを新たな構造テンプレートＳｑ２として格納する。
【０１０６】
まず、ステップＳ５３では、構造テンプレートＳｑ１の統計データテーブルを基に、Ｓｑ１の各要素について、１つの構造化文書データに発生する回数の平均値と標準偏差と、平均的な繰り返し数ＮｕｍＳｉｂを決定する（ステップＳ５３）。ここでは平均と標準偏差は以下のように求められる。
【０１０７】
平均＝ＳｕｍＯｃｃ／ＮｕｍＲｅｇｉｓｔ
標準偏差＝｛ＳｕｍＯｃｃ２／ＮｕｍＲｅｇｉｓｔ−（ＳｕｍＯｃｃ／ＮｕｍＲｅｇｉｓｔ）２｝１／２
ＮｕｍＳｉｂ＝ＩＮＴ（平均−標準偏差）
標準偏差とは誤差である。分析対象となっているデータ全体のばらつきが左右対称なつりがね型の正規分布にしたがっていると仮定するならば、「平均−標準偏差」〜「平均＋標準偏差」の範囲内にデータの約６８％が存在することを意味する。構造の繰り返し回数がＮｕｍＳｉｂ以上である確率は８４％以上であることが期待される。
【０１０８】
ステップＳ５４へ進み、統計データテーブル上の要素のうち、ＮｕｍＳｉｂが「０」でない要素があれば、当該要素については、ＮｕｍＳｉｂの数だけＳｑ１に追加した新たな構造テンプレートＳｑ２を生成する。構造テンプレートＳｑ２と、構造テンプレートＳｑ２の統計データテーブルを１組にして、構造テンプレート記憶部１１２に既に記憶されている構造テンプレートＳｑ１を格納するフォルダ内に格納する。
【０１０９】
次に、図１６のステップＳ５５へ進み、構造テンプレートＳｑ２のルートノードからスタートし、下位ノードへと深さ優先で構造要素をたどりながら（トラバースして）、構造テンプレートＳｑ２の統計データテーブルに各要素のＴＩＤを登録しながら以下の処理を行う。
【０１１０】
Ｓｑ２の構造要素のうち、ＳｕｍＯｃｃ＞γなる要素は固定配置要素と決定する（ステップＳ５５）。固定配置要素には固定配置要素のエレメントＩＤ（ＯＩＤｏｆｆｓｅｔ）を「０」から順に割当ていき、当該エレメントＩＤを統計データテーブルに登録する（ステップＳ５６）。一方、Ｓｑ２の構造要素のうち、ＳｕｍＯｃｃがγ以下なる要素は固定配置要素ではないので、ＯＩＤｏｆｆｓｅｔは割り当てない。統計データテーブル上の当該要素のＴＩＤに対応する欄の「ＯＩＤｏｆｆｓｅｔ」には、未定義「ＵＮＤＥＦ」を登録する。
【０１１１】
Ｓｑ２の全ての要素について探索が終了したら、Ｓｑ１とＳｑ２の統計データテーブル上のＳｕｍＯｃｃ、ＳｕｍＯｃｃ２、ＭｉｎＯｃｃ、ＭａｘＯｃｃ、ＮｕｍＳｉｂ、平均、標準偏差の各値を初期化する（ステップＳ５７）。
【０１１２】
例えば、図２３に示すような、構造テンプレートＳＴ１（図１０参照）の統計データテーブルからは、図１５〜図１６の構造テンプレート抽出処理により、図２６に示すような新たな構造テンプレートＳＴ２が生成される。ここでは、α＝１００、β＝５、γ＝１００と設定されているとものとする。この新たなに生成された構造テンプレートＳＴ２と統計データテーブルは、図２５に示すように、「ｂｏｏｋｆｏｌｄｅｒ」フォルダに格納される。
【０１１３】
図２３の統計データテーブルでは、ＴＩＤ「Ｅ６」の平均値が「２．５」であり、「ａｕｔｈｏｒ」が１つの構造化文書データ中に２回以上発生することが多いため、図１０の構造テンプレートＳＴ１では「ａｕｔｈｏｒ」１つで縮約されていた構造部分が、図２６に示す構造テンプレートＳＴ２では、展開されて２個になっている。
【０１１４】
構造テンプレートＳＴ２の各要素には、それぞれ構造テンプレートＳＴ１とは異なるＴＩＤが新たに振り直されている。
【０１１５】
構造テンプレートＳＴ２の初期化された統計データテーブルを図２７に示し、構造テンプレートＳＴ１の初期化された統計データテーブルを図２８に示す。図２３の統計データテーブル上でＳｕｍＯｃｃがγ＝１００以上の構造テンプレートＳＴ１の各要素（ＴＩＤが）に対応する、構造テンプレートＳＴ２の各要素は固定配置要素と設定され、図２７に示すように、上流の要素から順に「０」〜「１３」とエレメントＩＤが割りふられている。なお、ＴＩＤが「Ｅ２７」の「ａｂｓｔｒａｃｔ」とＴＩＤが「Ｅ２７」の「ａｂｓｔｒａｃｔ／＃ｔｅｘｔ」は、固定配置要素とは設定されていない。図２７、図２８に示す統計データテーブル上のＳｕｍＯｃｃ、ＳｕｍＯｃｃ２、ＭｉｎＯｃｃ、ＭａｘＯｃｃ、ＮｕｍＳｉｂ、平均、標準偏差の各値は、図１６のステップＳ５７において「０」に初期化されている。
【０１１６】
構造テンプレートＳＴ２が生成された後に、当該構造テンプレートＳＴ２に基づき、「ｂｏｏｋＦｏｌｄｅｒ」フォルダに大量の＜ｂｏｏｋ＞＜ｔｉｔｌｅ＞…＜／ａｂｓｔｒａｃｔ＞＜／ｂｏｏｋ＞なる構造化文書データを格納されたときの構造テンプレートＳＴ２の統計データテーブルを図２９に示し、構造テンプレートＳＴ２を図３０に示す。
【０１１７】
構造テンプレートＳＴ３の各要素には、それぞれ構造テンプレートＳＴ２とは異なるＴＩＤが新たに振り直されている。
【０１１８】
図３０に示す構造テンプレートＳＴ３にはＴＩＤ「Ｅ２９」の「ｋｅｙｗｏｒｄ」が追加されている。また、図２９からも明らかなように、ＴＩＤ「Ｅ２７」の「ａｂｓｔｒａｃｔ」と、ＴＩＤ「Ｔ２８」の「ａｂｓｔｒａｃｔ／＃ｔｅｘｔ」の１つの構造化文書データ中に出現する平均回数は「１」である。
【０１１９】
図２９に示す統計データテーブル上のデータは、新たな構造テンプレートの生成基準を満たすので、ここから図３２に示すようなような新たな構造テンプレートＳＴ３が生成される。構造テンプレートＳＴ３と、図３３に示すような統計データテーブルは、図３１に示すように、「ｂｏｏｋｆｏｌｄｅｒ」フォルダに格納される。
【０１２０】
図２９からも明らかなように、ＴＩＤ「Ｅ２７」の「ａｂｓｔｒａｃｔ」と、ＴＩＤ「Ｔ２８」の「ａｂｓｔｒａｃｔ／＃ｔｅｘｔ」は１つの構造化文書データ中に必ず１回出現するので、構造テンプレートＳＴ３では、図３３に示すように、新たに固定配置要素と設定され（新たなＴＩＤは、「Ｅ４４」「Ｔ４５」）、ＯＩＤｏｆｆｓｅｔ「１４」「１５」が設定されている。
【０１２１】
このように、１つの構造テンプレートＳＴ１から新たな構造が認識され、新たな構造テンプレートＳＴ２が生成（抽出）される。また、構造テンプレートＳＴ２からはさらに新たな構造が認識され、構造テンプレートＳＴ３が生成（抽出）される。１つの構造テンプレートが構造化文書データの種類を表すとすると、構造化文書データを格納する際に、図１２のステップＳ８で構造テンプレートを選択することで、構造化文書データをその構造上の種類で分類しながら構造化文書データ記憶部１１３に格納することができるのである。
【０１２２】
なお、格納される各構造化文書データの各要素のＯＩＤは、ドキュメントＩＤ（ＤｏｃＩＤ）とエレメントＩＤ（ＥｌｅｍｎＩＤ）とテンプレートＩＤ（ＴＩＤ）とからなる。従って、格納時に図１２のステップＳ８で選択される構造テンプレートのＴＩＤが当該構造化文書データの各要素のＯＩＤに含まれている。
【０１２３】
図３４は、図１の構造化文書データの各要素に、構造テンプレートＳＴ１のＴＩＤを付与して格納したときの構造化文書データ記憶部１１３の記憶例を模式的に示したものである。ここで、図１の構造化文書データのドキュメントＩＤ（ＤｏｃＩＤ）は「２」である。なお、ＤｏｃＩＤが「２」の構造化文書データを格納する際には、固定配置要素がまだ設定されていないので、当該構造化文書データのルートノードのエレメントＩＤ「０」から開始して、上流から下流に向けて順番にエレメントＩＤが割りふられている。
【０１２４】
図３４に示すように、構造化文書データ記憶部１１３には、各構造化文書（のファイル）の格納する複数の記憶エリアからなり、そのうちの１つの格納エリア、例えば、ＤｏｃＩＤが「２」の構造化文書データの格納エリアに着目すると、当該格納エリアは、当該構造化文書データ中の各要素を格納するための複数の記憶エリアからなる。各構造化文書データの記憶エリアはドキュメントＩＤにより一意に特定することができる。すなわち、ドキュメントＩＤは、構造化文書データ記憶部１１３内の構造化文書の記憶エリアを特定するアドレスに対応する情報であるといえる。また、各構造化文書データの格納エリア内の各要素の記憶エリアは、エレメントＩＤにより一意に特定することができる。すなわち、エレメントＩＤは、要素の格納エリアを特定するアドレスに対応する情報であるといえる。
【０１２５】
従って、ＯＩＤが与えられれば、その中のドキュメントＩＤと、エレメントＩＤから、構造化文書データ記憶部１１３内の当該要素の記憶エリアの配置位置を特定することができるのである。
【０１２６】
各要素の記憶エリアには、当該要素のＴＩＤと、当該要素の親要素のＯＩＤと、当該要素の子要素のＯＩＤあるいはテキストデータと、当該要素の兄弟要素のＯＩＤなどが格納されている。
【０１２７】
固定配置要素とは、当該要素が出現する全ての構造化文書データの構造上で当該要素の発生位置が常に一定である要素であり、構造化文書データ記憶部１１３内に格納される多くの構造化文書データに共通する典型的な構造（構造テンプレート）を構成する要素である。各構造化文書の記憶エリア内で予め定められたエリアを当該固定配置要素の記憶エリアとする。これを固定配置要素のエレメントＩＤ（ＯＩＤｏｆｆｓｅｔ）で特定することにより、ＯＩＤｏｆｆｓｅｔをエレメントＩＤにもつ要素の当該典型的な構造中の配置位置が、当該エレメントＩＤから特定することができる。すなわち、従来のように、各構造化文書データの階層構造を辿ることなく、ある要素のＯＩＤｏｆｆｓｅｔからその上流に配置されている要素のエレメントＩＤが容易に得られるのである。
【０１２８】
多くの構造化文書データが格納されれば、それに合わせて多くの固定配置要素が設定され得る。また、多くの構造化文書データが格納されれば、その構造の違いから多くの構造テンプレートが生成され得る。なお、固定配置要素には、どの構造テンプレートにおいても当該固定配置要素が含まれていれば、全て同じＯＩＤｏｆｆｓｅｔで区別される。
【０１２９】
各構造化文書データの各要素は、当該構造化文書データの構造により分類されてＴＩＤが与えられ、さらに、固定配置要素である場合は、ＯＩＤｏｆｆｓｅｔのエレメントＩＤが与えられる。よって、ＯＩＤが与えられれば、そのなかに含まれるドキュメントＩＤから当該要素をもつ構造化文書データを特定する事ができるのみならず、当該ＯＩＤに含まれるＴＩＤから当該構造化文書データの構造上の配置位置が特定でき、さらに、当該ＯＩＤに含まれるＥｌｅｍｎＩＤ（特にＯＩＤｏｆｆｓｅｔ）から、当該構造化文書データ中の配置位置と、構造化文書データ記憶部１１３内の格納エリアまで特定することができるのである。
【０１３０】
このように、構造化文書データの各要素のＯＩＤがドキュメントＩＤ（ＤｏｃＩＤ）とエレメントＩＤ（ＥｌｅｍｎＩＤ）とテンプレートＩＤ（ＴＩＤ）とからなり、さらに、構造化文書データ記憶部１１３内の各構造化文書データを格納する記憶エリア内の全構造テンプレートで共通に設定される固定配置要素の記憶エリアの位置を固定とし、当該固定配置要素の記憶エリアをエレメントＩＤとして与えることにより、構造化文書データの検索時には、ある１つの検索条件を満たす要素ＯＩＤが得られたら、階層構造を辿ることなく、当該要素の上流の要素のＯＩＤを当該ＯＩＤの値を変換することで得られるのである。
【０１３１】
構造テンプレート記憶部１１２（の「ｂｏｏｋｆｏｌｄｅｒ」フォルダ）に、図１０の構造テンプレートＳＴ１と図２６の構造テンプレートＳＴ２が存在するときに、図１に示すような「ａｕｔｈｅｒｓ」要素に「ａｕｔｈｅｒ」要素が２回繰返し出現する構造化文書データを新たに格納する場合には、図１２のステップＳ８では、当該構造化文書データの構造Ｓｃに最も類似する構造テンプレートとして、「ａｕｔｈｅｒｓ」要素に「ａｕｔｈｅｒ」要素が２回繰返し出現する構造テンプレートＳＴ２が選択される。
【０１３２】
図３５は、図１の構造化文書データを格納する際に、構造テンプレートＳＴ２を選択して、構造テンプレートＳＴ２のＴＩＤを付与して格納したときの構造化文書データ記憶部１１３の記憶例を模式的に示したものである。ここで、図１の構造化文書データのドキュメントＩＤ（ＤｏｃＩＤ）は「３」である。なお、構造テンプレートＳＴ２では、エレメントＩＤ「１」〜「１３」は固定配置要素のエレメントＩＤとして設定されている。
【０１３３】
すなわち、構造化文書データのルートにある「ｂｏｏｋ」要素、その下に発生する「ｔｉｔｌｅ」要素と「ａｕｔｈｅｒｓ」要素、「ｔｉｔｌｅ」要素の下に発生する（「ｔｉｔｌｅ」要素がもつ）テキスト要素（「ｔｉｔｌｅ／＃ｔｅｘｔ」）、「ａｕｔｈｅｒｓ」要素の下に発生する２つの「ａｕｔｈｅｒ」要素、当該各「ａｕｔｈｅｒ」要素の下に発生する「ｆｉｒｓｔ」要素と「ｌａｓｔ」要素とこれらのテキスト要素は、それぞれその発生位置が確定されているとともに、構造化文書データ記憶部１１３内の各構造化文書データを記憶する記憶エリア内において、当該固定配置要素を記憶するための記憶エリアの位置が固定となっている。固定配置要素の記憶エリアは、当該記憶エリアに対応するエレメントＩＤで特定される。
【０１３４】
図１の構造化文書データの各要素には、ドキュメントＩＤは「３」と、構造テンプレートＳＴ２の各構造要素のＴＩＤをもつＯＩＤが与えられ、固定配置要素には固定配置要素に固定のエレメントＩＤ（ＯＩＤｏｆｆｓｅｔ）が与えられ、固定配置要素でない要素には、ＯＩＤｏｆｆｓｅｔ以外のエレメントＩＤが与えられる。例えば、「ｂｏｏｋ」要素のＯＩＤは＜ＤｏｃＩｄ＝３，ＥｌｅｍＩｄ＝０，ＴＩＤ＝Ｄ１３＞となり、１番目の「ａｕｔｈｏｒ［１］」要素のＯＩＤは＜ＤｏｃＩｄ＝３，ＥｌｅｍＩｄ＝４，ＴＩＤ＝Ｅ１７＞となり、２番目の「ａｕｔｈｏｒ［２］」要素のＯＩＤは＜ＤｏｃＩｄ＝３，ＥｌｅｍＩｄ＝９，ＴＩＤ＝Ｅ２２＞となる。なお、固定配置要素ではない、「ａｂｓｔｒａｃｔ」要素や「ａｂｓｔｒａｃｔ／＃ｔｅｘｔ」要素には、固定配置要素のエレメントＩＤ「１」〜「１３」以外のエレメントＩＤである、「１４」、「１５」がそれぞれ与えられる。
【０１３５】
（検索）
図３６〜図３７に示すフローチャートに従って、検索処理部１０４の処理動作について説明する。
【０１３６】
図３８は、検索処理部１０４に入力する問合せデータの一例を示したものである。ＸＭＬでは、ＸＱｕｅｒｙ（ＸＭＬ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）という問合せ言語があり、これに基づいた問合せ記述方法に則っている。
【０１３７】
図３８に示す問合せデータには、「構造化文書ＤＢ「ＤＢ」の階層木の中に「ａｕｔｈｅｒｓ」という要素がある。この「ａｕｔｈｅｒｓ」という要素の中に「田中」という文字列を含むテキスト要素をもつ「ｌａｓｔ」という要素がある。そのような「ａｕｔｈｅｒｓ」の一覧を求めよ」という条件が記述されている。
【０１３８】
図３８に示すような問合せデータは、クライアント２０１の検索部２０３からサーバ１０１へ送信され、サーバ１０１の要求処理部１０２で受信される。
【０１３９】
以下、図３６〜図３７に示すフローチャートを参照して、例えば、図３８に示したような問合せデータを受信した検索処理部１０４の処理動作の概略を説明する。また、構造テンプレート記憶部１１２には、図２５に示したような状態であり、「ｂｏｏｋｆｏｌｄｅｒ」フォルダに構造テンプレートＳＴ１と構造テンプレートＳＴ２が記憶されているものとする。
【０１４０】
要求処理部１０２で受信された問合せデータは、検索処理部１０４の問合せ構文解析部４１に渡される。問合せ構文解析部４１では、受け取った問合せデータの構文解析を行い（ステップＳ１０１）、この結果を基に、問合せ構造抽出部４２では、当該問合せデータから、問合せグラフと呼ばれるグラフ構造を抽出する（ステップＳ１０２）。例えば、図３８に示した問合せデータの場合、図３９に示すような問合せグラフが得られる。ここでは、問合せグラフで表されるような問合せデータ中の構造をＳｃと表す。
【０１４１】
問合せグラフは、図３９に示すように、問合せデータ中に含まれる要素名（例えば、「ｄｂ“ＤＢ”」、「ａｕｔｈｅｒｓ」、「ｌａｓｔ」）や、「田中」のような語彙（文字列）にそれぞれ対応する変数と、各変数を、問合せデータ中に含まれる要素と文字列の包含関係に従って接続して構成されている。
【０１４２】
次に、問合せ構造照合部４３は、構造化文書データベース１１１の構造テンプレート記憶部１１２から構造を取り出す。この取り出した構造をＳｐと表す。ここでは、例えば、問合せデータ中で指定された、構造化文書データベースの階層木の最も上流にある要素、すなわち、「ｂｏｏｋ」という要素以下の構造を抽出する。そして、この取り出した構造Ｓｐと先ほどのＳｃとの照合を行う。この結果、Ｓｃの各要素に対して、取り得るＴＩＤを割当てる（ステップＳ１０３）。
【０１４３】
図４０は、ＳｃとＳｐの照合を行った結果、図３９の各変数Ｖ０〜Ｖ２に対し求められたＴＩＤの３つの組合せを表したものである。１つ目の組合せは、構造テンプレートＳＴ１から得られたもので、変数Ｖ０，Ｖ１、Ｖ２の順にＴＩＤは、「Ｆ０」「Ｔ１０」「Ｅ５」が得られている。２つ目の組合せは、構造テンプレートＳＴ２から得られたもので、変数Ｖ０，Ｖ１、Ｖ２の順にＴＩＤは、「Ｆ０」「Ｔ２１」「Ｅ１６」が得られている。３つ目の組合せは、構造テンプレートＳＴ２から得られたもので、変数Ｖ０，Ｖ１、Ｖ２の順にＴＩＤは、「Ｆ０」「Ｔ２６」「Ｅ１６」が得られている。
【０１４４】
問合せ実行部４４は、問合せグラフに含まれる全ての変数の具体化を目標として、テーブルと呼ばれる変数集合の取り得る値の組み合わせを表すデータを次々と生成する。ここでは、１つのテーブルを生成する単位処理をオペレータと呼ぶ。
【０１４５】
まず、問合せグラフに含まれる全ての変数が１テーブルで具体化されているか判定する（ステップＳ１０４）。Ｙｅｓであれば、全ての変数の取り得る値の組合せが具体化されたので、それが結果となる。なお、変数が取り得る値とは、ＯＩＤのことである。
【０１４６】
以下、問合せグラフに含まれる全ての変数が１テーブルで具体化されていないならば、具体化されるまで、ステップＳ１０５〜ステップＳ１１０を繰り返す。
【０１４７】
ステップＳ１０５では、索引データ記憶部１１４に記憶されている索引データを用いた検索が可能か判定する。「ｃｏｎｔａｉｎｓ」など語彙索引系の関数があれば、構造化文書ＤＢ１１中の図８に示すような索引データを用いて検索を高速化できる。この場合ＬｅｘｉｃａｌＳｃａｎＷｉｔｈＴｉｄオペレータを実行する。
【０１４８】
図３７のステップＳ１０６では、親ドキュメント取得操作が可能か判定する。子要素ＯＩＤから親ドキュメントルートＯＩＤをダイレクトに取り出すことができれば、ＧｅｔＤｏｃｕｍｅｎｔオペレータを実行する。
【０１４９】
ステップＳ１０７では、複数テーブルに同一変数が発生しているか判定する。発生している場合は２つのテーブル毎にＪｏｉｎオペレータを実行する。
【０１５０】
ステップＳ１０８では、値を取得すべき変数がすべて具体化されており、問合せの先頭にあるデータベースのルートを指定する「ｄｂ（）」しか残っていなければ、Ｎｏｐオペレータ（無操作）を実行する。
【０１５１】
ステップＳ１０９では、任意の２変数の上位階層にある変数に対してドキュメント型ＴＩＤが割当てられており、その２変数の値が具体化されていれば、ＦｉｌｔｅｒＤｏｃｕｍｅｎｔオペレータを実行する。
【０１５２】
ステップＳ１１０では、変数の上位階層に変数があり、下位階層にある変数が具体化されていて上位階層にある変数が具体化されていなければ、ＳｃａｎＡｎｃｅｓｔｏｒＷｉｔｈＴＩｄオペレータを実行する。
【０１５３】
ステップＳ１１１では、結果出力処理を行う。ここで各変数の取り得る値（ＯＩＤ）の組合せ（ＯＩＤの組合せ）がテーブルとして得られている。各組合せは、同じドキュメントＩＤをもつ複数のＯＩＤからなり、よって、テーブル上の各組合せは、１つの構造化データに対応する。テーブル上の組合せから得られる各ドキュメントＩＤに対応する構造化データを構造化文書データ記憶部１１２から取り出すことにより、問合せデータに合致する構造化文書データの集合を得ることができる。
【０１５４】
図３９に示した問合せグラフでは、変数は、丸で囲まれたノードで表されており、丸のなかに変数名が記述されている。これを変数ノードと呼ぶ。また、問合せデータ中に指定されていた要素は、六角形のなかに「ＴＡＧ」と書かれたノードで表されている。これをタグノードと呼ぶ。さらに、問合せデータ中に指定されていた文字列は、六角形のなかに「ＶＡＬＣＭＰ」と書かれたノードで表されている。これを値比較タグノードと呼ぶ。
【０１５５】
図３９に示した問合せグラフの各変数に対し割当てられたＴＩＤを基に、ステップＳ１０４〜ステップＳ１１０の処理を以下のように実行する。以下、図４１、図４２を参照して説明する。
【０１５６】
（１）問合せグラフには値比較タグノードがありｃｏｎｔａｉｎｓ語彙索引系の関数なので、文字列「田中」に関して、ＬｅｘｉｃａｌＳｃａｎＷｉｔｈＴｉｄオペレータを実行する（図４１（ａ））。すなわち、「田中」という文字列を含む要素のＯＩＤを索引データ記憶部１１４に記憶されている索引データから求め、そのうちＴＩＤが「Ｔ１０」「Ｔ２１」「Ｔ２６」のうちのいずれかであるものを得る。この結果、変数ノードＶ１が具体化する（図４２（ａ）に示すＴａｂｌｅ１）。
【０１５７】
（２）変数Ｖ１が具体化され、変数Ｖ１の上位階層にある変数Ｖ２が具体化されていないので、図４２（ａ）のＴａｂｌｅ１の各ＯＩＤについて、ＳｃａｎＡｎｃｅｓｔｏｒＷｉｔｈＴＩｄオペレータを実行する（図４１（ｂ））。
【０１５８】
例えば、図４２（ａ）のＴａｂｌｅ１の最初のＯＩＤ＜２，１３，Ｔ１０＞に対しＳｃａｎＡｎｃｅｓｔｏｒＷｉｔｈＴｉｄオペレータを実行し、当該ＯＩＤの上流にあり、変数Ｖ２に対応するＴＩＤ「Ｅ５」をもつＯＩＤを求める場合について説明する。すなわち、この場合、ＴＩＤ「Ｅ５」を含む構造テンプレートには、固定配置要素が存在しないため、構造化文書データ記憶部１１３にアクセスして、ドキュメントＩＤ「２」の構造化文書データの各要素をたどらなければならない。そのため、ディスクＩ／Ｏが発生する。ドキュメントＩＤ「２」の構造化文書データのＯＩＤ＜２，１３，Ｔ１０＞の要素から、そのの上流のノードをたどることでＴＩＤが「Ｅ５」である要素のエレメントＩＤ（例えば、ここでは「ａｕｔｈｅｒｓ」に対応するエレメントＩＤ「２」）を取得する。すなわち、ＯＩＤ＜２，１３，Ｔ１０＞の要素からＯＩＤ＜２，２，Ｅ５＞を得る（図４２（ｂ）参照）。
【０１５９】
次に、図４２（ａ）のＴａｂｌｅ１の２番目のＯＩＤ＜３，１３，Ｔ２６＞に対しＳｃａｎＡｎｃｅｓｔｏｒＷｉｔｈＴｉｄオペレータを実行し、当該ＯＩＤの上流にあり、変数Ｖ２に対応するＴＩＤ「Ｅ１６」をもつＯＩＤを求める場合について説明する。この場合、ＴＩＤ「Ｅ１６」を含む構造テンプレートでは、ＴＩＤ「Ｅ１６」は固定配置要素であるから、構造化文書データ記憶部１１３にアクセスすることなく（ドキュメントＩＤ「３」の構造化文書データの各要素をたどる必要なく）、ＴＩＤ「Ｅ１６」のエレメントＩＤ「３」が得られる。すなわち、ＴＩＤ「Ｅ１６」に対応するＯＩＤは固定化されているので、ディスクＩ／Ｏの発生なく、ＯＩＤ＜２，１３，Ｔ１０＞のドキュメントＩＤ「３」はそのままに、ＴＩＤ「Ｔ１０」、エレメントＩＤ「１３」を「Ｅ１６」「３」にそれぞれ変換することで、ＯＩＤ＜３，３，Ｅ１６＞を得る（図４２（ｂ）参照）。
【０１６０】
Ｔａｂｅｌｅ１上の他のＯＩＤについても上記同様にＳｃａｎＡｎｃｅｓｔｏｒＷｉｔｈＴｉｄオペレータを実行する。その結果、変数Ｖ１について求めた各ＯＩＤに対応する変数Ｖ２が得られ、図４２（ｂ）に示すようなＴａｂｌｅ２が得られる。
【０１６１】
（３）図４２（ｂ）のＴａｂｌｅ２に示すように、変数Ｖ１、Ｖ２の取り得る値の組合せ（オブジェクトＩＤの組合せ）が得られる。１つの組合せに含まれる各ＯＩＤの持つドキュメントＩＤは同じものである。
【０１６２】
このようにして、「ａｕｔｈｅｒｓ」要素に対する変数Ｖ２もＴｅｂｌｅ２で具体化されているので、「ａｕｔｈｅｒｓ」要素以下のデータの一覧が検索結果として問合せ実行部４４から出力される。検索結果は、要求処理部１０２から検索要求元のクライアント２０１へ渡される。クライアント２０１では、サーバ１０１から受け取った構造化データを表示部２０５へ表示する。
【０１６３】
図３９に示す問合せグラフに基づき、図４１に示すように、ＬｅｘｉｃａｌＳｃａｎＷｉｔｈＴｉｄオペレータを実行して、語彙「田中」を含むＯＩＤのうち、ＴＩＤが「Ｔ１０」「Ｔ２１」「Ｔ２６」のうちのいずれかであるものを得る。その結果、変数Ｖ１に対し、＜２，１３，Ｔ１０＞、＜３，１３，Ｔ２６＞、…というＯＩＤが得られる。ここでテンプレートＩＤ「Ｔ１０」は構造テンプレートＳＴ１にある構造要素、「Ｔ２６」は構造テンプレートＳＴ２にある構造要素である。
【０１６４】
ＳｃａｎＡｎｃｅｓｔｏｒＷｉｔｈＴｉｄオペレータを実行することにより、変数Ｖ２に対するＯＩＤが得られる。これは変数Ｖ１のＯＩＤの値から得られるものである。
【０１６５】
従来は、変数Ｖ１に対し得られたＯＩＤ＜３，１３，Ｔ２６＞から、ＴＩＤが「Ｅ５」と「Ｅ１６」のいずれかである上流要素を取得するためには、構造化文書ＤＢ中の構造化文書データファイルの各要素をたどらなければならない。そのためにはディスクＩ／Ｏが発生してしまう。
【０１６６】
一方、本実施形態によれば、変数Ｖ１に対し得られたＯＩＤ＜３，１３，Ｔ２６＞から｛Ｅ５，Ｅ１６｝のいずれかのＴＩＤを持つ上流要素を取得するためには、構造化文書ＤＢ中の構造化文書データファイルの各要素をたどる必要はない。なぜならば、「Ｔ２６」をもつ要素は固定配置要素であるから、その上流要素には同じく固定配置要素の「Ｅ１６」をもつ要素があることが明らかであるためである。「Ｅ１６」に対応するエレメントＩＤは「３」である。結果として、変数Ｖ１に対応するＯＩＤ＜２，１３，Ｔ１０＞の上流にある変数Ｖ２に対応するＯＩＤ＜２，２，Ｅ５＞が求まり、変数Ｖ１に対応するＯＩＤに対応する＜３，１３，Ｔ２６＞の上流にある変数Ｖ２に対応するＯＩＤ＜３，３，Ｅ１６＞が求まる。
【０１６７】
以上説明したように、上記実施形態によれば、構造化データの格納時には、構造化データの各要素データに、テンプレートＩＤとエレメントＩＤが与えられ、特に、構造テンプレートを構成する複数の要素のうち、出現頻度の高い要素のテンプレートＩＤが与えられた要素データには構造化データ群で共通のエレメントＩＤが与えられる。
【０１６８】
各要素データのもつテンプレートＩＤとエレメントＩＤには、当該要素データを含む構造化データの文書構造や当該要素データの記憶位置が表されているため、検索時には、各構造化データのそれぞれの文書構造を辿る必要がないため、検索が高速に行える。
【０１６９】
本発明の実施の形態に記載した本発明の手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フレキシブルディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、半導体メモリなどの記録媒体に格納して頒布することもできる。
【０１７０】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【０１７１】
【図１】構造化文書データの一具体例を示した図。
【図２】本発明の実施形態に係る構造化文書管理システムの機能的な構成例を示した図。
【図３】格納処理部の機能的な構成例を示した図。
【図４】検索処理部の機能的な構成例を示した図。
【図５】サーバのハードウエア的な構成例を示した図。
【図６】構造化文書データ記憶部のデータ構造を模式的に示した図。
【図７】索引データについて説明するための図。
【図８】索引データ記憶部のデータ構造を模式的に示した図。
【図９】構造テンプレート記憶部に記憶されている階層構造を模式的に示した図。
【図１０】構造テンプレート記憶部に記憶されている構造テンプレート（グラフデータ）ＳＴ１の位置具体例を示した図。
【図１１】構造テンプレートＳＴ１の統計データテーブルを示した図。
【図１２】格納処理動作を説明するためのフローチャート。
【図１３】格納処理動作を説明するためのフローチャート。
【図１４】構造テンプレート更新処理動作を説明するためのフローチャート。
【図１５】構造テンプレート抽出処理動作を説明するためのフローチャート。
【図１６】構造テンプレート抽出処理動作を説明するためのフローチャート。
【図１７】構造テンプレート記憶部に記憶されている構造の初期状態の一例を示した図。
【図１８】「ｂｏｏｋＦｏｌｄｅｒ」フォルダに格納する構造化文書データの一例を示した図。
【図１９】図１８の構造化文書データを格納したときの構造テンプレートＳＴ１の統計データテーブルの状態を示した図。
【図２０】「ｂｏｏｋＦｏｌｄｅｒ」フォルダに格納する構造化文書データの一例を示した図。
【図２１】図２０の構造化文書データを格納したときの構造テンプレートＳＴ１の統計データテーブルの状態を示した図。
【図２２】「ｂｏｏｋＦｏｌｄｅｒ」フォルダに格納する構造化文書データを示した図。
【図２３】大量の構造化文書データを格納したときの構造テンプレートＳＴ１の統計データテーブルの状態を示した図。
【図２４】格納された複数の構造化文書データ中の「ａｕｔｈｅｒ」要素の発生回数の平均値とその標準偏差について説明するための図
【図２５】構造テンプレートＳＴ１から構造テンプレートＳＴ２が生成されたときの構造テンプレート記憶部に記憶されている構造を模式的に示した図。
【図２６】構造テンプレートＳＴ１を示した図。
【図２７】構造テンプレートＳＴ１の統計データテーブルの初期状態を示した図。
【図２８】構造テンプレートＳＴ１の統計データテーブルの初期状態を示した図。
【図２９】大量の構造化文書データが格納された後の構造テンプレートＳＴ２の統計データテーブルを示した図。
【図３０】更新された構造テンプレートＳＴ２を示した図。
【図３１】構造テンプレートＳＴ２から構造テンプレートＳＴ３が生成されたときの構造テンプレート記憶部に記憶されている構造を模式的に示した図。
【図３２】構造テンプレートＳＴ３を示した図。
【図３３】構造テンプレートＳＴ３の統計データテーブルの初期状態を示した図。
【図３４】図１の構造化文書データの各要素に、構造テンプレートＳＴ１のＴＩＤを付与して格納したときの構造化文書データ記憶部の記憶例を模式的に示した図。
【図３５】図１の構造化文書データを格納する際に、構造テンプレートＳＴ２を選択して、構造テンプレートＳＴ２のＴＩＤを付与して格納したときの構造化文書データ記憶部の記憶例を模式的に示した図。
【図３６】検索処理動作を説明するためのフローチャート。
【図３７】検索処理動作を説明するためのフローチャート。
【図３８】問合せデータの一例を示した図。
【図３９】図３８の問合せデータから得られる問合せグラフを示した図。
【図４０】図３９の各変数Ｖ０〜Ｖ２に対し求められたＴＩＤの３つの組合せを表した図。
【図４１】図３９の問合せグラフに基づく検索処理に用いられるオペレータ系列を示した図。
【図４２】図３９のオペレータ系列による処理動作を説明するための図。
【符号の説明】
【０１７２】
３１…構造化文書構文解析部、３２…構造化文書構造抽出部、３３…構造化文書構造照合部、３４…構造化文書格納部、３５…構造配置イメージ決定部、３６…構造テンプレート更新部、４１…問合せ構文解析部、４２…問合せ構造抽出部、４３…問合せ構造照合部、４４…問合せ実行部、１０１…サーバ装置、１０２…要求処理部、１０３…格納処理部、１０４…検索処理部、１１１…構造化文書データベース、１１２…構造テンプレート記憶部、１１３…構造化文書データ記憶部、１１４…索引データ記憶部、２０１…クライアント装置、２０２…登録部、２０３…検索部、２０４…入力部、２０５…表示部。
【図１】
2005227851.tif 000003
【図２】
2005227851.tif 000004
【図３】
2005227851.tif 000005
【図４】
2005227851.tif 000006
【図５】
2005227851.tif 000007
【図６】
2005227851.tif 000008
【図７】
2005227851.tif 000009
【図８】
2005227851.tif 000010
【図９】
2005227851.tif 000011
【図１０】
2005227851.tif 000012
【図１１】
2005227851.tif 000013
【図１２】
2005227851.tif 000014
【図１３】
2005227851.tif 000015
【図１４】
2005227851.tif 000016
【図１５】
2005227851.tif 000017
【図１６】
2005227851.tif 000018
【図１７】
2005227851.tif 000019
【図１８】
2005227851.tif 000020
【図１９】
2005227851.tif 000021
【図２０】
2005227851.tif 000022
【図２１】
2005227851.tif 000023
【図２２】
2005227851.tif 000024
【図２３】
2005227851.tif 000025
【図２４】
2005227851.tif 000026
【図２５】
2005227851.tif 000027
【図２６】
2005227851.tif 000028
【図２７】
2005227851.tif 000029
【図２８】
2005227851.tif 000030
【図２９】
2005227851.tif 000031
【図３０】
2005227851.tif 000032
【図３１】
2005227851.tif 000033
【図３２】
2005227851.tif 000034
【図３３】
2005227851.tif 000035
【図３４】
2005227851.tif 000036
【図３５】
2005227851.tif 000037
【図３６】
2005227851.tif 000038
【図３７】
2005227851.tif 000039
【図３８】
2005227851.tif 000040
【図３９】
2005227851.tif 000041
【図４０】
2005227851.tif 000042
【図４１】
2005227851.tif 000043
【図４２】
2005227851.tif 000044