(57)【要約】【課題】シリアライズされたデータに基づいて木構造を復元することを可能とし、元のデータから木構造の情報を含む部分データの抽出を可能とする。【解決手段】検索部１３は、検索処理により、シリアライズされたデータのシーケンス要素を特定する。必須要素列特定部３１は、検索されたシーケンス要素を含むシーケンス要素列（必須要素列）を特定する。後部分特定部３２は、必須要素列の全てのシーケンス要素に対応するノードを含む部分木を構成するために必要な、必須要素列の後に位置するシーケンス要素を含むシーケンス要素列を特定する。前部分特定部３３は、必須要素列の全てのシーケンス要素に対応するノードを含む部分木を構成するために必要な、必須要素列の前に位置するシーケンス要素を含むシーケンス要素列を特定する。最小部分木特定部４１は、検索部により特定された複数のノードを全て含む部分木に対応するシーケンス要素列を特定する。【選択図】図９
2014059757.tif 000002
【特許請求の範囲】
【請求項１】
木構造を有するデータを処理する装置において、
前記木構造の各ノードに対応するシーケンス要素を、当該木構造を先行順で走査して得られたノードの順に配置し、葉ノードの次のノードを探索するために遡ったエッジの数に相当する数値をシーケンス要素として当該葉ノードに対応するシーケンス要素の直後に挿入して構成されたシリアライズド・データを対象とし、検索条件を満たす複数のノードを特定する検索部と、
特定された前記複数のノードに対応する前記シーケンス要素を全て含む一連のシーケンス要素で構成されたシーケンス要素列である必須要素列を特定する必須要素列特定部と、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報および前記必須要素列に含まれる各シーケンス要素に対応する各ノードの深さの最高値に基づいて、シーケンス要素に対応するノードの深さの加算値が、当該最高値を超えるように、当該必須要素列の後に位置するシーケンス要素を含むシーケンス要素列を特定する後部分特定部と、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報に基づいて、シーケンス要素に対応するノードの深さの加算値が、前記必須要素列特定部により特定された前記必須要素列および前記後部分特定部により特定されたシーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値に負号を付した値と等しくなるように、当該必須要素列の前に位置するシーケンス要素を含むシーケンス要素列を特定する前部分特定部と、
前記必須要素列特定部により特定された前記必須要素列、前記後部分特定部により特定されたシーケンス要素列および前記前部分特定部により特定されたシーケンス要素列に基づき、前記検索部により特定された前記複数のノードを全て含む部分木に対応するシーケンス要素列を特定する部分木特定部と、
を備える、装置。
【請求項２】
処理対象の前記データは、構造化言語で記述された構造化文書であり、
前記部分木特定部により特定されたシーケンス要素列に基づいて部分木の木構造を復元し、前記構造化文書のうちで当該部分木に対応する部分である部分文書を生成する部分文書生成部をさらに備える、請求項１に記載の装置。
【請求項３】
処理対象の前記データは、構造化言語で記述され、木構造のノードにテキスト・ノードが付加された構造化文書であり、
前記検索部は、キーワード検索により前記テキスト・ノードの検索を行い、検索されたテキスト・ノードに対応する前記木構造におけるノードを特定する、
請求項１または請求項２に記載の装置。
【請求項４】
前記前部分特定部は、前記必須要素列特定部により特定された前記必須要素列および前記後部分特定部により特定されたシーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値が０である場合は、シーケンス要素列を特定する処理を行わない、請求項１乃至請求項３のいずれかに記載の装置。
【請求項５】
構造化言語で記述され、木構造のノードにテキスト・ノードが付加された構造化文書を処理する装置において、
前記木構造の各ノードに対応するシーケンス要素を、当該木構造を先行順で走査して得られたノードの順に配置し、葉ノードの次のノードを探索するために遡ったエッジの数に相当する数値をシーケンス要素として当該葉ノードに対応するシーケンス要素の直後に挿入して構成されたシリアライズド・データを対象とし、キーワード検索により前記テキスト・ノードの検索を行い、検索されたテキスト・ノードに対応する複数のノードを特定する検索部と、
特定された前記複数のノードに対応する前記シーケンス要素を全て含む一連のシーケンス要素で構成されたシーケンス要素列である必須要素列を特定する必須要素列特定部と、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報および前記必須要素列に含まれる各シーケンス要素に対応する各ノードの深さの最高値に基づいて、シーケンス要素に対応するノードの深さの加算値が、当該最高値を超えるように、当該必須要素列の後に位置するシーケンス要素を含むシーケンス要素列を特定する後部分特定部と、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報に基づいて、シーケンス要素に対応するノードの深さの加算値が、前記必須要素列特定部により特定された前記必須要素列および前記後部分特定部により特定されたシーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値に負号を付した値と等しくなるように、当該必須要素列の前に位置するシーケンス要素を含むシーケンス要素列を特定する前部分特定部と、
前記必須要素列特定部により特定された前記必須要素列、前記後部分特定部により特定されたシーケンス要素列および前記前部分特定部により特定されたシーケンス要素列に基づき、前記検索部により特定された前記複数のノードを全て含む部分木に対応するシーケンス要素列を特定する部分木特定部と、
前記部分木特定部により特定されたシーケンス要素列に基づいて部分木の木構造を復元し、前記構造化文書のうちで当該部分木に対応する部分である部分文書を生成する部分文書生成部と、
を備える、装置。
【請求項６】
コンピュータによる木構造を有するデータの処理方法であって、
前記木構造の各ノードに対応するシーケンス要素を、当該木構造を先行順で走査して得られたノードの順に配置し、葉ノードの次のノードを探索するために遡ったエッジの数に相当する数値をシーケンス要素として当該葉ノードに対応するシーケンス要素の直後に挿入して構成されたシリアライズド・データを対象とし、検索条件を満たす複数のノードを特定するステップと、
特定された前記複数のノードに対応する前記シーケンス要素を全て含む一連のシーケンス要素で構成された第１シーケンス要素列を特定するステップと、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報および前記第１シーケンス要素列に含まれる各シーケンス要素に対応する各ノードの深さの最高値に基づいて、シーケンス要素に対応するノードの深さの加算値が、当該最高値を超えるように、当該第１シーケンス要素列の後に位置するシーケンス要素を含む第２シーケンス要素列を特定するステップと、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報に基づいて、シーケンス要素に対応するノードの深さの加算値が、前記第１シーケンス要素列および前記第２シーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値に負号を付した値と等しくなるように、当該第１シーケンス要素列の前に位置するシーケンス要素を含む第３シーケンス要素列を特定するステップと、
前記第１シーケンス要素列、前記第２シーケンス要素列および前記第３シーケンス要素列に基づき、特定された前記複数のノードを全て含む部分木に対応するシーケンス要素列を特定するステップと、
を含む、データ処理方法。
【請求項７】
コンピュータに、
木構造の各ノードに対応するシーケンス要素を、当該木構造を先行順で走査して得られたノードの順に配置し、葉ノードの次のノードを探索するために遡ったエッジの数に相当する数値をシーケンス要素として当該葉ノードに対応するシーケンス要素の直後に挿入して構成されたシリアライズド・データを対象とし、検索条件を満たす複数のノードを特定する処理と、
特定された前記複数のノードに対応する前記シーケンス要素を全て含む一連のシーケンス要素で構成された第１シーケンス要素列を特定する処理と、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報および前記第１シーケンス要素列に含まれる各シーケンス要素に対応する各ノードの深さの最高値に基づいて、シーケンス要素に対応するノードの深さの加算値が、当該最高値を超えるように、当該第１シーケンス要素列の後に位置するシーケンス要素を含む第２シーケンス要素列を特定する処理と、
前記シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの前記木構造における深さの情報に基づいて、シーケンス要素に対応するノードの深さの加算値が、前記第１シーケンス要素列および前記第２シーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値に負号を付した値と等しくなるように、当該第１シーケンス要素列の前に位置するシーケンス要素を含む第３シーケンス要素列を特定する処理と、
前記第１シーケンス要素列、前記第２シーケンス要素列および前記第３シーケンス要素列に基づき、特定された前記複数のノードを全て含む部分木に対応するシーケンス要素列を特定する処理と、
を実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＸＭＬ文書等の木構造を有する構造化文書（データ）を処理し、所望の部分を抽出する装置、処理方法およびプログラムに関する。
【背景技術】
【０００２】
近年、ＸＭＬ等の構造化言語で記述された構造化文書（データ）が様々な用途で広く利用されている。この種のデータが用いられる情報システムには、外部からの検索要求を受け付け、データ中の検索条件に該当する部分を抽出して返すシステムがある。このようなシステムにおいて、検索結果として、元のデータが有する構造のうち、抽出対象であるデータ部分に対応する部分の情報も要求される場合がある。
【０００３】
例えば、木構造を有するＸＭＬ文書に対してキーワード検索を行う場合に、キーワードに該当するテキスト部分と共に、そのテキスト部分を含む木構造（部分木）を抽出することが要求される（以下、元のデータから抽出された部分データであって、該当部分の構造の情報を含むものを「部分文書」と呼ぶ）。従来、ＸＭＬ文書の中から所望の部分文書を抽出する手法が提案されている（例えば、非特許文献１参照）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】三木健士、横田治夫、「検索キーワードを含む最小ＸＭＬ部分文書抽出のための索引手法」、ＤＥＷＳ２００７論文集、[URL] http://www.ieice.org/~de/DEWS/DEWS2007/pdf/c1-4.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ネットワーク等を介して構造化文書を転送する場合、シリアライズ処理を行う必要がある。このとき、元のデータにおける構造の情報の一部が失われる。そのため、適切な部分文書を得るためには、シリアライズされたデータの他に、元のデータが持つ構造の情報に基づいて、部分文書に対応する部分の構造の情報を取得する手段が必要であった。
【０００６】
しかし、シリアライズされたデータの他に、元のデータの構造を表すデータ（マッピングデータ等）を転送することは、転送効率の向上を妨げる。
そこで、本発明は、シリアライズされたデータに基づいて木構造を復元することを可能とし、これにより、元のデータから木構造の情報を含む部分データの抽出を可能とすることを目的とする。
【課題を解決するための手段】
【０００７】
上記の目的を達成するため、本発明は、次のような装置として実現される。この装置は、木構造を有するデータを処理する装置において、検索部は、木構造の各ノードに対応するシーケンス要素を、この木構造を先行順で走査して得られたノードの順に配置し、葉ノードの次のノードを探索するために遡ったエッジの数に相当する数値をシーケンス要素として葉ノードに対応するシーケンス要素の直後に挿入して構成されたシリアライズド・データを対象とし、検索条件を満たす複数のノードを特定する。必須要素列特定部は、特定された複数のノードに対応するシーケンス要素を全て含む一連のシーケンス要素で構成されたシーケンス要素列である必須要素列を特定する。後部分特定部は、シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの木構造における深さの情報および必須要素列に含まれる各シーケンス要素に対応する各ノードの深さの最高値に基づいて、シーケンス要素に対応するノードの深さの加算値が、最高値を超えるように、必須要素列の後に位置するシーケンス要素を含むシーケンス要素列を特定する。前部分特定部は、シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの木構造における深さの情報に基づいて、シーケンス要素に対応するノードの深さの加算値が、必須要素列特定部により特定された必須要素列および後部分特定部により特定されたシーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値に負号を付した値と等しくなるように、必須要素列の前に位置するシーケンス要素を含むシーケンス要素列を特定する。部分木特定部は、必須要素列特定部により特定された必須要素列、後部分特定部により特定されたシーケンス要素列および前部分特定部により特定されたシーケンス要素列に基づき、検索部により特定された複数のノードを全て含む部分木に対応するシーケンス要素列を特定する。
【０００８】
上記構成において、処理対象のデータは、構造化言語で記述された構造化文書としても良い。そして、この装置は、部分木特定部により特定されたシーケンス要素列に基づいて部分木の木構造を復元し、構造化文書のうちで部分木に対応する部分である部分文書を生成する部分文書生成部をさらに備える構成とする。
【０００９】
また、処理対象のデータは、構造化言語で記述され、木構造のノードにテキスト・ノードが付加された構造化文書としても良い。そして、検索部は、キーワード検索によりテキスト・ノードの検索を行い、検索されたテキスト・ノードに対応する木構造におけるノードを特定する。
【００１０】
さらにまた、前部分特定部は、必須要素列特定部により特定された必須要素列および後部分特定部により特定されたシーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値が０である場合は、シーケンス要素列を特定する処理を行わないこととしても良い。
【００１１】
また、本発明は、コンピュータによる木構造を有するデータの処理方法としても実現される。この処理方法は、木構造の各ノードに対応するシーケンス要素を、この木構造を先行順で走査して得られたノードの順に配置し、葉ノードの次のノードを探索するために遡ったエッジの数に相当する数値をシーケンス要素として葉ノードに対応するシーケンス要素の直後に挿入して構成されたシリアライズド・データを対象とし、検索条件を満たす複数のノードを特定するステップと、特定された複数のノードに対応するシーケンス要素を全て含む一連のシーケンス要素で構成された第１シーケンス要素列を特定するステップと、シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの木構造における深さの情報および第１シーケンス要素列に含まれる各シーケンス要素に対応する各ノードの深さの最高値に基づいて、シーケンス要素に対応するノードの深さの加算値が、最高値を超えるように、第１シーケンス要素列の後に位置するシーケンス要素を含む第２シーケンス要素列を特定するステップと、シリアライズド・データに含まれる各シーケンス要素に対応する各ノードの木構造における深さの情報に基づいて、シーケンス要素に対応するノードの深さの加算値が、第１シーケンス要素列および第２シーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値に負号を付した値と等しくなるように、第１シーケンス要素列の前に位置するシーケンス要素を含む第３シーケンス要素列を特定するステップと、第１シーケンス要素列、第２シーケンス要素列および第３シーケンス要素列に基づき、特定された複数のノードを全て含む部分木に対応するシーケンス要素列を特定するステップと、を含む。
【００１２】
さらにまた、本発明は、コンピュータを制御して上述した装置の各機能を実現するプログラム、またはコンピュータに上記の方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【発明の効果】
【００１３】
本発明によれば、シリアライズされたデータに基づいて木構造を復元することを可能とし、これにより、元のデータから木構造の情報を含む部分データを抽出することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】ＸＭＬ文書の構成例およびシリアライズされたデータの例を示す図である。
【図２】図１に示すシリアライズされた木構造のデータを加工する様子を示す図である。
【図３】シリアライズにより木構造の情報の一部が失われる様子を説明する図である。
【図４】本実施形態で用いられる木構造における深さの概念を説明する図である。
【図５】葉ノードではないノードにテキスト・ノードが付加された木構造の例を示す図である。
【図６】図５（ａ）の木構造から得られるシリアライズド・データにおいて、本実施形態による加工を行った状態を示す図である。
【図７】図２（ｃ）の木構造のシリアライズド・データから抽出された必須要素列を含む最小部分木に対応するシーケンス要素列のイメージを示す図である。
【図８】図７（ｃ）に示したシーケンス要素列に基づいて、最小部分木の構成を示す図である。
【図９】本実施形態のシステム構成例を示す図である。
【図１０】シリアライズ処理部による木構造のシリアライズド・データに対する加工処理の例を示すフローチャートである。
【図１１】必須要素列特定部による必須要素列の特定処理の例を示すフローチャートである。
【図１２】後（右側）部分特定部による必須要素列の後（右側）部分のシーケンス要素列の特定処理の例を示すフローチャートである。
【図１３】前（左側）部分特定部による必須要素列の前（左側）部分のシーケンス要素列の特定処理の例を示すフローチャートである。
【図１４】本実施形態の検索システムを構成するのに好適なコンピュータのハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
本実施形態では、木構造を有するデータとしてＸＭＬ文書を用い、キーワード検索を行って、該当するテキスト（部分データ）を抽出すると共に、そのテキストを含む最小部分木を抽出する場合を例として説明する。以下、まず本実施形態による最小部分木の抽出方法について説明する。
【００１６】
＜対象データのシリアライゼーション＞
本実施形態では、検索対象となるＸＭＬ文書をシリアライズして格納する。このシリアライズは、ＸＭＬ文書の木構造とテキストを分けて行われる。また、ＸＭＬ文書の木構造のシリアライズは、先行順（pre-order）で走査することにより行われる。本実施形態では、さらに、シリアライズされた木構造のデータを加工し、元のＸＭＬ文書における木構造の情報を持たせる。以下、具体例を挙げて、本実施形態によるＸＭＬ文書のシリアライゼーションについて説明する。
【００１７】
図１は、ＸＭＬ文書の構成例およびシリアライズされたデータの例を示す図である。図２は、図１に示すシリアライズされた木構造のデータを加工する様子を示す図である。
図１（ａ）に示すＸＭＬ文書の構成は、ノードＲを根ノード（root node）とし、葉ノード（leaf node）（図示の例では、ノードｅ、ｆ、ｇ、ｋ）にテキストを表すテキスト・ノード（ノードＡ、Ｂ、Ｃ、Ｆ、Ｏ、Ｐ、Ｑ）を付加している。
なお、図１（ａ）に示す木構造においては、各葉ノードから、他のノードと同様にエッジが伸びて、テキスト・ノードが接続されている。しかし、テキスト・ノードは、他のノードとは異なり、木構造を特定するために用いられるノードではないので、ここでは、テキスト・ノード以外の子ノードを持たないノードを葉ノードとする。
【００１８】
図１（ａ）に示したＸＭＬ文書をシリアライズすることにより、図１（ｂ）に示すデータ（以下、シリアライズド・データと呼ぶ）が得られる。図１（ｂ）に示すように、シリアライズド・データには、木構造のシリアライズド・データとテキストのシリアライズド・データとが含まれる。木構造のシリアライズド・データは、図１（ａ）に示した木構造を先行順で走査し、得られたノード名をシーケンス要素として並べることにより生成される。図示の例では、「Ｒａｅｂｆｇｋａｅｂｆｇ」というデータが得られている。また、テキストのシリアライズド・データは、木構造の葉ノードに付加されているテキスト・ノードを、木構造を走査して葉ノードが得られた順に、シーケンス要素として並べることにより生成される。図示の例では、「ＡＢＣＦＯＰＱ」というデータが得られている。
【００１９】
ここで、図１（ｂ）に示した木構造のシリアライズド・データは、図１（ａ）に示したＸＭＬ文書の木構造が持つ情報の一部しか有していない。すなわち、図１（ｂ）に示した木構造のシリアライズド・データでは、異なる木構造が同じシリアライズド・データで表現される場合がある。
【００２０】
図３は、シリアライズにより木構造の情報の一部が失われる様子を説明する図である。
図３を参照すると、単純に、木構造を先行順で走査して得られたノードを並べるだけでは、図３（ａ）に示す木構造も、図３（ｂ）に示す木構造も、同じ内容のシリアライズド・データ（図示の例では、いずれも「ａｂｃ」）に変換されることがわかる。そこで、本実施形態では、木構造のシリアライズド・データを加工し、ＸＭＬ文書の木構造を復元するために必要となる情報をシリアライズド・データに付加する。具体的には、このシリアライズド・データに、木構造における各ノードの深さの情報を付加する。
【００２１】
図４は、本実施形態で用いられる木構造における深さの概念を説明する図である。
本実施形態では、木構造における深さ方向のエッジ数を、負号を付した数値で表すことにする。また、着目する木構造の最上位の親ノードの深さを−１とする。例えば、図１（ａ）に示した木構造において木全体に着目する場合、図４に示すように、ノードＲの深さｄがｄ＝−１となる。そして、ノードＲに対してノードａの深さ（ノード間距離）は−１である。また、ノードｅは、ノードａに対する深さ（ノード間距離）が−１、ノードＲに対する深さ（ノード間距離）が−２である。
【００２２】
図４に示した木構造の探索は、深さｄ＝０から深さｄ＝−１のノードＲに降りて、先行順でノードの探索を開始し、木の全てのノードの探索を終えて、ノードＲから上（深さｄ＝０）に上がったときに終了となる。
【００２３】
次に、図１（ａ）に示した木構造を例として、木構造のシリアライズド・データに各ノードの深さの情報を付加する手法について、図２を参照して説明する。図２（ａ）は、図１（ｂ）に示した木構造のシリアライズド・データと同様である。
木構造を先行順で走査していくと、次のノードへ進むたびに、原則として木構造における深さが１つ進む。また、先行順の走査で葉ノードに達した後は、未走査のエッジが残っているノードまで戻って、走査が行われる。例えば、図１（ａ）に示した木構造において、葉ノードであるノードｅから次のノードｂへ進むには、一度ノードａに戻ってからノードｂへ進むことになる。また、ノードｋから次のノードへ進むには、一度ノードＲに戻ってからノードａへ進むことになる。このとき、エッジを遡った分だけ木構造における深さが戻る。
【００２４】
そこで、本実施形態では、この深さの進退を表すために、
（１）木構造の各ノードに対応するシリアライズド・データの各シーケンス要素が、深さ情報として、−１という値を持つものとする。
（２）葉ノードへ到達した後に未走査のエッジへ移行するためにエッジを遡る場合、シリアライズド・データの該当箇所に、遡った分に相当する数（正数）を、シーケンス要素（以下、数値要素）として挿入する。
例えば、上記のノードｅからノードｂへ進む際には、ノードａに戻るために、エッジを一つ遡るので、シーケンス要素ｅの後ろに数値要素として数値１が挿入される。同様に、ノードｋから２つ目のノードａへ進む際には、ノードＲに戻るためにエッジを三つ遡るので、シーケンス要素ｋの後ろに数値要素として数値３が挿入される。
【００２５】
また、木構造に含まれる全てのノードを探索し、最後の葉ノードへ到達した後は、エッジを遡ってルートノードＲへ戻るが、未走査のエッジが存在しないため、ルートノードＲよりもさらに一つ上に上がり、深さｄ＝０となって探索を終了する。そこで、
（３）最後のシーケンス要素の後ろに、木構造全体における最後の葉ノードの深さｄ＝−Ｎに対応する正数値Ｎを、シーケンス要素（数値要素）として挿入する。
例えば、図１（ａ）の木構造では、最後の葉ノードｇの深さがｄ＝−４であるので、数値要素として数値４が挿入される。
以上のようにして、図２（ａ）のシリアライズド・データに数値要素を挿入した状態が、図２（ｂ）に示されている。
【００２６】
さて、上記（１）〜（３）に示したように加工されたシリアライズド・データにおいて、数値要素は、木構造の葉ノードに対応するシーケンス要素の後ろに挿入されている。言い換えれば、数値要素の直前のシーケンス要素は、木構造の葉ノードに対応しており、この葉ノードに付加されたテキスト・ノードに対応している。そこで、数値要素ごとにシリアライズド・データを区切ることにより、シリアライズド・データにおける、各テキスト・ノードに対応する位置を明確にすることができる。本実施形態では、上記のように数値要素を挿入したシリアライズド・データに対して、さらに、
（４）（３）で最後のシーケンス要素の後ろに付した数値要素以外の各数値要素の直後に、分離記号（セパレーター：Separator）を挿入する。
図２（ｂ）の状態のシリアライズド・データに対し、数値要素の直後に分離記号を挿入した状態が、図２（ｃ）に示されている。なお、分離記号の挿入は、形式的なものであるので、シリアライズド・データの書式等の仕様によっては省略できる場合がある。
【００２７】
図２（ｃ）に示す例において、図１（ａ）に示した木構造のテキスト・ノードＦに対応するシーケンス要素Ｆは、テキストのシリアライズド・データにおいて、左から４番目に位置する。そこで、木構造のシリアライズド・データにおける左から４番目の数値要素を見ると、数値３が挿入されている。したがって、その数値３の直前のシーケンス要素ｋに対応するノードｋが、図１（ａ）の木構造において、テキスト・ノードＦが付加されたノードであることがわかる。
【００２８】
＜ＸＭＬ文書の構造の限定＞
図１（ａ）に示したＸＭＬ文書の木構造では、テキスト・ノードが葉ノードに付加されていた。しかしながら、一般のＸＭＬ文書の木構造においては、葉ノード以外のノードに対してテキスト・ノードが直接付加される場合がある（そのような構造を取ることが許される）。
【００２９】
図５は、葉ノードではないノードにテキスト・ノードが付加された木構造の例を示す図である。
図５（ａ）〜（ｃ）に示す例では、ノードｂは、子ノードとしてノードｅおよびノードｆを持つ（葉ノードではない）。しかし、ノードｂには、テキスト・ノードＥが付加されている。図５（ａ）〜（ｃ）に示すように、葉ノードではないノードにテキスト・ノードが付加されている場合、本実施形態に適用できる木構造は、図５（ａ）に示すように、テキスト・ノードに至るエッジが他のノードに至るエッジよりも左側に存在する場合のみである。
【００３０】
そこで、本実施形態では、木構造において葉ノードではないノードにテキスト・ノードが付加されている場合、テキスト・ノードに至るエッジが他のノードに至るエッジよりも左側に位置するように、木構造を整形する。すなわち、図５（ｂ）や図５（ｃ）のような構造である場合には、図５（ａ）のような構造に変換する。なお、ＸＭＬ文書を扱うシステムにおいて一般的に扱われる、いわゆる正規化（normalize）されたＸＭＬ文書は、上記の条件を満たす。したがって、一般的な手法によりＸＭＬ文書を正規化処理した後に、本実施形態を適用するようにしても良い。
【００３１】
また、上記のように葉ノードではないノードにテキスト・ノードが付加されている場合、シリアライズド・データにおいては、
（５）そのノードに対応するシーケンス要素の直後に数値要素として数値０を挿入する。そして、数値０の直後に分離記号を挿入する。
このような操作を行うことにより、分離記号により区切られた数値要素である数値０の直前のシーケンス要素に対応するノードにテキスト・ノードが付加されていることが示される。そして、数値が０であるから、そのノードから次のノードへ移行するためにエッジを遡らない（木構造における深さは変わらない）ことが示される。
【００３２】
図６は、図５（ａ）の木構造から得られるシリアライズド・データにおいて、本実施形態による加工（上記（１）〜（５）に示した加工）を行った状態を示す図である。
図６に示す例において、テキスト・ノードＥに対応するシーケンス要素Ｅは、テキストのシリアライズド・データにおいて、左から３番目に位置する。そこで、木構造のシリアライズド・データにおける左から３番目の数値要素を見ると、数値０が挿入されている。したがって、その数値０の直前のシーケンス要素ｂに対応するノードｂが、図５（ａ）の木構造において、テキスト・ノードＥが付加されたノードであることがわかる。
【００３３】
＜最小部分木の抽出＞
次に、上記のようにして作成された木構造およびテキストのシリアライズド・データを用いて、所望のテキスト・ノードを含む範囲の最小部分木を抽出する手法について説明する。ここで、最小部分木とは、特定された二つのテキスト・ノードを含む木構造（部分木）のうちで、ノードの数が最小のものである。上記のように作成された木構造のシリアライズド・データには、各シーケンス要素に、木構造における深さの情報が含まれているので、最小部分木を構成するノードに対応するシーケンス要素を特定できれば、これに基づいて木構造を復元することができる。
【００３４】
本手法の概略的な手順としては、まず、テキストのシリアライズド・データにおいて、二つのシーケンス要素を特定し、これらに対応する、木構造のシリアライズド・データにおける二つのシーケンス要素を特定する。これら二つのシーケンス要素は、抽出しようとする最小部分木が含まなければならないノードの範囲を示す。すなわち、本実施形態による最小部分木の抽出は、これら二つのシーケンス要素に対応するノードを含む、部分木（木構造として成立している部分）を抽出する操作である。
【００３５】
次に、上記の二つのシーケンス要素および各シーケンス要素に付加されている深さの情報に基づいて、抽出しようとする最小部分木に含まれる全てのノードに対応するシーケンス要素を特定する。具体的には、まず、上記二つのシーケンス要素およびその間のシーケンス要素を特定する。そして、これらのシーケンス要素に対応するノードを全て含み、かつ木構造として成立するために必要な最低限のノードに対応するシーケンス要素を特定する。これにより、上記の二つのシーケンス要素に対応するノードを含む部分木のうちで、ノード数が最小である最小部分木が抽出される。
以下、この手順の各段階の処理について、詳細に説明する。
【００３６】
［１］二つのシーケンス要素およびその間のシーケンス要素の特定
本実施形態では、まず、テキストのシリアライズド・データにおける二つのシーケンス要素を特定する。すると、これらのシーケンス要素に基づいて、これらに対応する木構造のシリアライズド・データにおける二つのシーケンス要素が特定される。そして、木構造のシリアライズド・データにおけるこれら二つのシーケンス要素の間に位置するシーケンス要素が特定される。これにより、抽出しようとする最小部分木（木構造）が必ず含むシーケンス要素が確定される。
【００３７】
例えば、図２（ｃ）に示したテキストのシリアライズド・データにおいて、５番目のシーケンス要素Ｏと７番目のシーケンス要素Ｑとが特定されたものとする。これに対応する木構造のシーケンス要素を探すと、５番目の数値要素（数値１）の直前に位置するシーケンス要素ｅと、７番目の数値要素（数値４）の直前に位置するシーケンス要素ｇが見つかる。そして、これら二つのシーケンス要素に挟まれた一連のシーケンス要素を加えて、シーケンス要素列ｅ１，ｂｆ１，ｇが得られる。このシーケンス要素列に含まれる各シーケンス要素は、抽出される最小部分木に必ず含まれるノードに対応している（以下、このシーケンス要素列を必須要素列と呼ぶ）。
【００３８】
［２］最小部分木のノードに対応するシーケンス要素の特定
次に、［１］で特定された各シーケンス要素に付加されている木構造の深さの情報に基づいて、これらのシーケンス要素を全て含む最小部分木に対応するシーケンス要素列を特定する。
【００３９】
図７は、図２（ｃ）の木構造のシリアライズド・データから抽出された必須要素列を含む最小部分木に対応するシーケンス要素列のイメージを示す図である。
図７（ａ）に示すように、木構造のシリアライズド・データから部分木（木構造として成立する部分）を構成するシーケンス要素を抽出するには、必須要素列７０１に加えて、必須要素列の最後（右端）のシーケンス要素の後（右側）部分７０２と、必須要素列の最先（左端）のシーケンス要素の前（左側）部分７０３とに、必要なシーケンス要素を追加する。以下、具体的な手法について説明する。
【００４０】
［２−１］
まず、［１］で特定された必須要素列７０１の各シーケンス要素に付加されている深さの値を左端から順に加算していく。そして、全てのシーケンス要素の加算値を算出すると共に、加算する過程で現れる最高値ｍａｘを取得する。
【００４１】
上記の例では、図７に示す必須要素列７０１の各シーケンス要素ｅ１，ｂｆ１，ｇに付加されている深さの値を加算すると、
−１＋１−１−１＋１−１＝−２
である。また、左端から順に加算した際の値は、
−１＋１＝０
−１＋１−１＝−１
−１＋１−１−１＝−２
−１＋１−１−１＋１＝−１
−１＋１−１−１＋１−１＝−２
であるから、最高値ｍａｘは０である。この最高値ｍａｘは、必須要素列７０１の各シーケンス要素に対応するノード群を含む部分木の高さの最高値を示している。なお、最高値ｍａｘは、必須要素列７０１の左端のシーケンス要素ｅの深さを−１として得られる相対的な値であり、その値自体（上記の例では０という値）に特別な意味はない。
【００４２】
［２−２］
次に、必須要素列７０１の右端のシーケンス要素ｇの後（右側）部分７０２に、最小部分木を構成するために（木構造として成立させるために）必要なシーケンス要素を追加する。木構造を先行順で走査する場合、その木構造における深さの最も小さい（浅い）ノードよりも上に上がった時に、木の右側部分については走査が完了する。そこで、加算値が上記の最高値ｍａｘよりも値１だけ大きい値となるまで、シーケンス要素ｇの後（右側）部分７０２に位置するシーケンス要素を、順次追加する。
【００４３】
上記の例では、図２（ｃ）の木構造のシリアライズド・データにおいて、シーケンス要素ｇの直後には、数値要素（数値４）が存在している。ここで、数値４は、エッジを４回遡ることを示しており、数値１が四つ並んでいるとみなすこともできる。したがって、最大で４までの値を必要に応じて加算して良い。そこで、上記のシーケンス要素ｅからシーケンス要素ｇまでを加算した値が−２、最高値ｍａｘが０であるから、シーケンス要素ｇの後（右側）に追加される値は、３（＝０＋１−（−２））となる。
図７（ａ）に示した必須要素列７０１の後（右側）部分７０２に、数値要素（数値３）が付加された状態を、図７（ｂ）に示す。
【００４４】
［２−３］
次に、必須要素列７０１の左端のシーケンス要素ｅの前（左側）部分７０３に、最小部分木を構成するために（木構造として成立させるために）必要なシーケンス要素を追加する。木構造を先行順で走査する場合、最上位のノード（深さｄ＝−１）から初めて、全てのエッジおよびノードを探索して最上位のノードに戻り、その最上位のノードから上（深さｄ＝０）に上がったときに走査が終わる。したがって、木構造として成立する範囲のシーケンス要素の深さの値を全て加算すると値は０になる。
【００４５】
ここで、［２−１］、［２−２］から、必須要素列７０１に含まれるシーケンス要素の深さの値と後（右側）部分７０２に含まれるシーケンス要素の深さの値とを全て加算すると、（最高値ｍａｘ＋１）である。したがって、必須要素列７０１の前（左側）部分７０３に含まれるシーケンス要素の深さの値を加算して得られる値は、（−（最高値ｍａｘ＋１））となる。
【００４６】
なお、必須要素列７０１とその後（右側）部分７０２から得られる（最高値ｍａｘ＋１）の値が０である場合、必須要素列７０１の前（左側）部分７０３に含まれるシーケンス要素の深さの値を加算して得られる値も０である。したがって、この場合は、必須要素列７０１の前（左側）部分７０３に含まれるシーケンス要素は求めない。
【００４７】
上記の例では、図２（ｃ）の木構造のシリアライズド・データにおいて、シーケンス要素ｅの直前には、シーケンス要素ａが存在している。そこで、シーケンス要素ａから前方（左方）へ向かって、値（−（最高値ｍａｘ＋１））が得られるまで、シーケンス要素の深さの値を加算していく。［２−１］で求めたように、最高値ｍａｘの値は０であったので、求める値は−１（＝−（０＋１））である。ここで、シーケンス要素ａの深さの値は−１である。したがって、必須要素列７０１の前（左側）部分７０３に含まれるシーケンス要素は、シーケンス要素ａのみである。
図７（ｂ）に示した必須要素列７０１の前（左側）部分７０３に、シーケンス要素ａが付加された状態を、図７（ｃ）に示す。
【００４８】
以上のようにして、必須要素列７０１、後（右側）部分７０２、前（左側）部分７０３のそれぞれに含まれるシーケンス要素が特定された。すなわち、特定されたシーケンス要素列ａｅ１，ｂｆ１，ｇ３は、必須要素列７０１（ｅ１，ｂｆ１，ｇ）に対応するノードを含む最小部分木に対応するシーケンス要素列である。
【００４９】
＜木構造の復元＞
ここで、得られたシーケンス要素列ａｅ１，ｂｆ１，ｇ３に基づいて最小部分木を作成可能であることを示す。
シーケンス要素列ａｅ１，ｂｆ１，ｇ３の先頭は、シーケンス要素ａなので、これに対応するノードａが最小部分木における最上位のノードとなる。次のシーケンス要素は、シーケンス要素ｅなので、これに対応するノードｅがノードａの子ノードとなる。次のシーケンス要素は、数値要素（数値１）なので、ノードｅは葉ノードである。したがって、ノードｅにはテキスト・ノードＯが付加される。そして、１階層戻り、次のシーケンス要素ｂに対応するノードｂがノードａの二つ目の子ノードとなる。
【００５０】
さらに、シーケンス要素ｂの次のシーケンス要素ｆに対応するノードｆは、ノードｂの子ノードとなる。シーケンス要素ｆの次は、数値要素（数値１）なので、ノードｆは葉ノードであり、テキスト・ノードＰが付加される。そして、１階層戻り、次のシーケンス要素ｇに対応するノードｇがノードｂの二つ目の子ノードとなる。次のシーケンス要素は、数値要素（数値３）なので、ノードｇから３階層戻り、ノードａの上に上がるので、木構造が完成する。
【００５１】
図８は、図７（ｃ）に示したシーケンス要素列に基づいて、上記のように作成された最小部分木の構成を示す図である。
図１（ａ）に示した木構造と、図８に示した木構造とを比較すると、図８に示す木構造は、図１（ａ）に示す木構造のうち、ノードｅ、ｇ（テキスト・ノードＯ、Ｑ）を含む最小部分木となっていることがわかる。
【００５２】
＜システム構成例＞
次に、本実施形態による最小部分木の抽出方法を適用した、ＸＭＬ文書の検索システムについて説明する。
図９は、システム構成例を示す図である。
図９に示す検索システム１００は、データ取得部１１と、シリアライズ処理部１２と、検索部１３と、データ格納部２１と、を備える。また、最小部分木を抽出する手段として、必須要素列特定部３１と、後（右側）部分特定部３２と、前（左側）部分特定部３３と、最小部分木特定部４１と、部分文書生成部４２と、データ出力部５１と、を備える。
【００５３】
データ取得部１１は、例えば、外部装置２００から、検索対象となるＸＭＬ文書を取得する。また、データ取得部１１は、例えば、検索システム１００のユーザが使用する端末装置３００から、キーワード検索に用いられる検索キーワードを含んだ検索要求を取得する。外部装置２００や端末装置３００と検索システム１００とは、例えばネットワークを介して接続されている。
【００５４】
シリアライズ処理部１２は、図１、図２および図６を参照して説明したように、データ取得部１１により取得されたＸＭＬ文書に対してシリアライズを行い、木構造のシリアライズド・データを加工する。シリアライズ処理部１２により作成されたシリアライズド・データは、データ格納部２１に格納される。データ格納部２１は、格納されたＸＭＬ文書のシリアライズド・データ（木構造のシリアライズド・データおよびテキストのシリアライズド・データ）を、処理対象として保持する。
【００５５】
なお、シリアライズ処理部１２において処理対象のＸＭＬ文書からシリアライズド・データを生成するのではなく、外部装置において別途に本実施形態のシリアライズ処理を行って生成されたシリアライズド・データをデータ取得部１１により取得し、データ格納部２１に格納しても良い。この場合、検索システム１００において、シリアライズ処理部１２を設けなくても良い。
【００５６】
検索部１３は、データ取得部１１により取得された検索要求に含まれる検索キーワードを用いて、データ格納部２１に格納されているＸＭＬ文書に対し、キーワード検索を行う。検索対象はテキストのシリアライズド・データである。検索手法としては、プレーンテキストに対する既存の検索手法を用いることができる。この検索により、キーワードを含む（検索条件に該当する）テキスト・ノードが検出される。
【００５７】
必須要素列特定部３１は、検索部１３により検出されたテキスト・ノードに基づき、データ格納部２１に格納されている木構造のシリアライズド・データから、検出されたテキスト・ノードに対応するノードのシーケンス要素を特定する。そして、特定したシーケンス要素を全て含む一連のシーケンス要素で構成されたシーケンス要素列（必須要素列）を特定する。必須要素列特定部３１の処理の詳細は、後述する。
【００５８】
ここで、検索部１３により三つ以上のテキスト・ノードが検出された場合（検索キーワードを含むテキスト・ノードが三つ以上あった場合）について考える。この場合、検出されたテキスト・ノードのうち、シリアライズド・データにおける左端（最先）と右端（最後）のテキスト・ノード以外のテキスト・ノードは、これら両端のテキスト・ノードが含まれる最小部分木に必ず含まれる。したがって、検索部１３により三つ以上のテキスト・ノードが検出された場合は、検出されたテキスト・ノードのうち、シリアライズド・データにおける両端のテキスト・ノードに基づいて必須要素列を特定すれば良い。例えば、図２（ｃ）に示したテキストのシリアライズド・データにおいて、キーワード検索によりシーケンス要素Ｃ、Ｏ、Ｐが検索された場合、これらの中で左端のシーケンス要素であるＣと右端のシーケンス要素であるＰに基づいて、必須要素列が特定される。
【００５９】
後（右側）部分特定部３２は、図７を参照して説明したように、必須要素列特定部３１により特定された必須要素列と、木構造のシリアライズド・データの各シーケンス要素に付加された深さの情報とに基づいて、最小部分木を構成するために必要な必須要素列の後（右側）部分を特定する。ここで、後（右側）部分特定部３２は、必須要素列の後（右側）に位置するシーケンス要素に対応するノードの深さの情報に基づき、シーケンス要素に対応するノードの深さの加算値が必須要素列における深さの最高値を超えるように、後（右側）部分のシーケンス要素列を特定する。後（右側）部分特定部３２の処理の詳細は、後述する。
【００６０】
前（左側）部分特定部３３は、図７を参照して説明したように、必須要素列特定部３１により特定された必須要素列および後（右側）部分特定部３２により特定された必須要素列の後（右側）部分と、木構造のシリアライズド・データの各シーケンス要素に付加された深さの情報とに基づいて、最小部分木を構成するために必要な必須要素列の前（左側）部分を特定する。ここで、前（左側）部分特定部３３は、必須要素列の前（左側）に位置するシーケンス要素に対応するノードの深さの情報に基づき、シーケンス要素に対応するノードの深さの加算値が必須要素列および後（右側）部分のシーケンス要素列に含まれるシーケンス要素に対応するノードの深さの加算値に負号を付した値と等しくなるように、前（左側）部分のシーケンス要素列を特定する。前（左側）部分特定部３３の処理の詳細は、後述する。なお、求める最小部分木の構造によっては、上述したように、必須要素列の前（左側）部分が特定されない場合もある。
【００６１】
最小部分木特定部４１は、必須要素列特定部３１、後（右側）部分特定部３２および前（左側）部分特定部３３により特定された、必須要素列、後（右側）部分のシーケンス要素列および前（左側）部分のシーケンス要素列を合わせて、最小部分木に対応するシーケンス要素列を特定する。
【００６２】
部分文書生成部４２は、最小部分木特定部４１により特定された最小部分木に対応するシーケンス要素列に基づいて最小部分木の木構造を復元し、この木構造と、これに対応するテキスト・ノードとに基づいて、最小部分木に基づくＸＭＬ文書（部分文書）を生成する。図９を参照して説明したように、本実施形態では、木構造のシリアライズド・データから抽出したシーケンス要素列に基づいて、木構造（部分木）を生成することができる。したがって、元のＸＭＬ文書の書式を損なわずに部分文書が得られる。
【００６３】
データ出力部５１は、検索要求を送信した端末装置３００に、応答として、部分文書生成部４２により生成された部分文書を返送する。
なお、図９に示した構成例では、検索システム１００において、検索要求に基づく部分文書を生成することとしたが、本実施形態によれば、シリアライズド・データから木構造の復元は端末装置３００において行うことも可能である。この場合、部分文書生成部４２は設けられず、データ出力部５１は、最小部分木特定部４１により特定された木構造のシリアライズド・データおよびテキストのシリアライズド・データを端末装置３００に送信する。
【００６４】
＜シリアライズ処理部の動作＞
図１０は、シリアライズ処理部１２による木構造のシリアライズド・データに対する加工処理の例を示すフローチャートである。
シリアライズ処理部１２は、まず、処理対象のＸＭＬ文書の木構造を先行順で走査して探索し（ステップ１００１）、検知したノードに対応するシーケンス要素を順次並べ、シリアライズド・データを生成していく（ステップ１００２）。
【００６５】
ステップ１００２で検知したノードが葉ノードであった場合（ステップ１００３でＹｅｓ）、次にシリアライズ処理部１２は、未走査のエッジが存在するか否かを調べる。未走査のエッジが存在するならば（ステップ１００４でＹｅｓ）、その未走査のエッジのあるノードまで戻る際に通ったエッジの数を、数値要素としてシリアライズド・データに追加する（ステップ１００５）。また、追加した数値要素の直後に分離記号を付加する（１００６）。そして、ステップ１００１に戻り、ノードの探索を継続する。
【００６６】
ステップ１００２で検知したノードが葉ノードでない場合（ステップ１００３でＮｏ）、次にシリアライズ処理部１２は、未走査のエッジが存在するか否かを調べる。未走査のエッジが存在するならば（ステップ１００７でＹｅｓ）、ステップ１００１に戻り、ノードの探索を継続する。
未走査のエッジが存在しない場合は（ステップ１００４またはステップ１００７でＮｏ）、全てのノードの探索が終了したので、シリアライズ処理部１２は、処理を終了する。
【００６７】
＜必須要素列特定部、後（右側）部分特定部および前（左側）部分特定部の動作＞
次に、必須要素列特定部３１、後（右側）部分特定部３２および前（左側）部分特定部３３によるシーケンス要素列を特定する処理について説明する。
以下の説明において、特定される必須要素列をＳｍ〜Ｓｎ（シリアライズド・データにおける必須要素列の左端のシーケンス要素がＳｍ、右端のシーケンス要素がＳｎ）とし、シーケンス要素Ｓｘの深さをｄ（Ｓｘ）とする。ここで、ｘは、シーケンス要素の位置を表す変数（シリアライズド・データにおけるシーケンス要素の数をＸとすると、ｘ＝１〜Ｘ、また、１≦ｍ＜ｎ≦Ｘ）である。
【００６８】
図１１は、必須要素列特定部３１による必須要素列の特定処理の例を示すフローチャートである。
必須要素列は、シーケンス要素ＳｍおよびＳｎが特定されたことにより、すでに特定されている。したがって、以下では、後（右側）部分特定部３２の処理に必要となる深さの値に関する処理について説明する。
【００６９】
必須要素列特定部３１は、まず、Ｓｘ＝Ｓｍとして（ステップ１１０１、１１０２）、Ｓ（ｘ＋１）の深さの値を求める（ステップ１１０３）。ここでは、現在の深さの値ｄ（Ｓｘ）に、直後のシーケンス要素Ｓ（ｘ＋１）に付与されている深さの値を加算する。具体的には、シーケンス要素Ｓ（ｘ＋１）が木構造のノードに対応するシーケンス要素であるならば、現在の深さの値ｄ（Ｓｘ）に−１を加算する。一方、数値要素であるならば、現在の深さの値ｄ（Ｓｘ）に数値要素の値を加算する。
【００７０】
次に、必須要素列特定部３１は、現在までの深さの最高値ｄｍａｘと、シーケンス要素Ｓ（ｘ＋１）の深さｄ（Ｓ（ｘ＋１））とを比較する。そして、ｄ（Ｓ（ｘ＋１））＞ｄｍａｘでなければ（ステップ１１０４でＮｏ）、現在のｄｍａｘを維持し、ｄ（Ｓ（ｘ＋１））＞ｄｍａｘであれば（ステップ１１０４でＹｅｓ）、ｄｍａｘ＝ｄ（Ｓ（ｘ＋１））とする（ステップ１１０５）。初期的には、上記のようにｘ＝ｍなので、ｄ（Ｓ（ｍ＋１））＞ｄ（Ｓｍ）でなければ（ステップ１１０４でＮｏ）、ｄｍａｘ＝ｄ（Ｓｍ）となる。一方、ｄ（Ｓ（ｍ＋１））＞ｄ（Ｓｍ）であれば（ステップ１１０４でＹｅｓ）、ｄｍａｘ＝ｄ（Ｓ（ｍ＋１））となる（ステップ１１０５）。
【００７１】
次に、必須要素列特定部３１は、ｘ＋１をｘに置き換え、Ｓｘ＝Ｓ（ｘ＋１）、ｄ（Ｓｘ）＝ｄ（Ｓ（ｘ＋１））として（ステップ１１０６）、ステップ１１０２に戻り、Ｓｘ＝Ｓｎとなるまで上記の処理を繰り返す。そして、Ｓｘ＝Ｓｎとなったならば、必須要素列特定部３１による処理を終了し、後（右側）部分特定部３２による処理に移行する。
【００７２】
図１２は、後（右側）部分特定部３２による必須要素列の後（右側）部分のシーケンス要素列の特定処理の例を示すフローチャートである。
後（右側）部分特定部３２は、まず、現在の深さの値ｄ（Ｓｘ）が深さの最高値ｄｍａｘよりも１つ大きい値か否かを判断する（ステップ１２０１）。初期的には、ｄ（Ｓｘ）＝ｄ（Ｓｎ）なので、ｄ（Ｓｘ）＝ｄｍａｘ＋１ではない（ステップ１２０１でＮｏ）。
【００７３】
ｄ（Ｓｘ）≠ｄｍａｘ＋１の場合、後（右側）部分特定部３２は、図１１のステップ１１０３と同様にして、Ｓ（ｘ＋１）の深さの値を求める（ステップ１２０２）。ただし、Ｓ（ｘ＋１）が数値要素である場合は、必要に応じて、その数値を分解して、ｄ（Ｓ（ｘ＋１））＝ｄｍａｘ＋１となるように、数値を加算する。そして、後（右側）部分特定部３２は、ｘ＋１をｘに置き換え、Ｓｘ＝Ｓ（ｘ＋１）、ｄ（Ｓｘ）＝ｄ（Ｓ（ｘ＋１））として（ステップ１２０３）、ステップ１２０１に戻り、ｄ（Ｓｘ）＝ｄｍａｘ＋１となるまで上記の処理を繰り返す。
【００７４】
ｄ（Ｓｘ）＝ｄｍａｘ＋１となったならば、次に後（右側）部分特定部３２は、ｄ（Ｓｘ）の値が０か否かを判断する（ステップ１２０４）。ｄ（Ｓｘ）＝０であれば、前（左側）部分特定部３３による処理は必要ないので、ｘ＝ｎ＋１〜ｐ（ｐ：ｎ＋１≦ｐ≦Ｘ）のシーケンス要素Ｓ（ｎ＋１）〜Ｓｐを後（右側）部分のシーケンス要素列として特定し、処理を終了する（ステップ１２０５）。
一方、ｄ（Ｓｘ）≠０の場合は、後（右側）部分特定部３２による処理を終了し、前（左側）部分特定部３３による処理に移行する。
【００７５】
図１３は、前（左側）部分特定部３３による必須要素列の前（左側）部分のシーケンス要素列の特定処理の例を示すフローチャートである。
前（左側）部分特定部３３は、まず、シーケンス要素Ｓｘ＝Ｓ（ｍ−１）として（ステップ１３０１）、深さの値ｄ（Ｓｘ）が、−（ｄｍａｘ＋１）と等しいか否かを判断する（ステップ１３０２）。
【００７６】
ｄ（Ｓｘ）≠−（ｄｍａｘ＋１）の場合、前（左側）部分特定部３３は、シーケンス要素Ｓ（ｘ−１）の深さの値を求める（ステップ１３０３）。ここでは、現在の深さの値ｄ（Ｓｘ）に、直前のシーケンス要素Ｓ（ｘ−１）に付与されている深さの値を加算する。具体的には、シーケンス要素Ｓ（ｘ−１）が木構造のノードに対応するシーケンス要素であるならば、現在の深さの値ｄ（Ｓｘ）に−１を加算する。一方、数値要素であるならば、現在の深さの値ｄ（Ｓｘ）に数値要素の値を加算する。
【００７７】
次に、前（左側）部分特定部３３は、ｘ−１をｘに置き換え、Ｓｘ＝Ｓ（ｘ−１）、ｄ（Ｓｘ）＝ｄ（Ｓ（ｘ−１））として（ステップ１３０４）、ステップ１３０２に戻り、ｄ（Ｓｘ）＝−（ｄｍａｘ＋１）となるまで上記の処理を繰り返す。ｄ（Ｓｘ）＝−（ｄｍａｘ＋１）となったならば、ｘ＝ｑ〜ｍ−１（ｑ：１≦ｑ≦ｍ−１）のシーケンス要素Ｓｑ〜Ｓ（ｍ−１）を前（左側）部分のシーケンス要素列として特定し、処理を終了する。
【００７８】
以上のようにして、必須要素列Ｓｍ〜Ｓｎ、後（右側）部分のシーケンス要素列Ｓ（ｎ＋１）〜Ｓｐ、前（左側）部分のシーケンス要素列Ｓｑ〜Ｓ（ｍ−１）が得られた。最小部分木特定部４１は、これらのシーケンス要素列を合わせて、最小部分木に対応するシーケンス要素列Ｓｑ〜Ｓｐ（Ｓｑ〜Ｓ（ｍ−１）、Ｓｍ〜Ｓｎ、Ｓ（ｎ＋１）〜Ｓｐ）を特定する。
【００７９】
なお、上記の必須要素列特定部３１、後（右側）部分特定部３２および前（左側）部分特定部３３の動作は、例示に過ぎず、上記の処理手順に限定するものではない。例えば、必須要素列の各シーケンス要素の深さやその最高値の情報は、後（右側）部分特定部３２の処理において必要となるので、後（右側）部分特定部３２が計算するようにしても構わない。その他、本発明における技術思想上の本質を損なわない範囲で具体的な処理やその手順を変更したものは、本発明に含まれる。
【００８０】
＜ハードウェア構成例＞
図１４は、本実施形態の検索システム１００を構成するのに好適なコンピュータのハードウェア構成例を示す図である。
図１４に示すコンピュータは、演算手段であるＣＰＵ（Central Processing Unit）１１０ａと、主記憶手段であるメモリ１１０ｃを備える。また、外部デバイスとして、磁気ディスク装置（ＨＤＤ：Hard Disk Drive）１１０ｇ、ネットワーク・インターフェイス１１０ｆ、表示機構１１０ｄ、音声機構１１０ｈ、キーボードやマウス等の入力デバイス１１０ｉ等を備える。
【００８１】
図１４に示す構成例では、メモリ１１０ｃおよび表示機構１１０ｄは、システム・コントローラ１１０ｂを介してＣＰＵ１１０ａに接続されている。また、ネットワーク・インターフェイス１１０ｆ、磁気ディスク装置１１０ｇ、音声機構１１０ｈおよび入力デバイス１１０ｉは、Ｉ／Ｏコントローラ１１０ｅを介してシステム・コントローラ１１０ｂと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。
【００８２】
なお、図１４は、本実施形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎない。本実施形態は、ＸＭＬ文書等の木構造を有する構造化文書（データ）を処理する情報処理システムに広く適用できるものであり、図示の構成においてのみ本実施例が実現されるのではない。
【００８３】
図１４において、磁気ディスク装置１１０ｇにはＯＳやアプリケーション・ソフトのプログラムが格納されている。そして、これらのプログラムがメモリ１１０ｃに読み込まれてＣＰＵ１１０ａに実行されることにより、図９に示したシリアライズ処理部１２、検索部１３、必須要素列特定部３１、後（右側）部分特定部３２、前（左側）部分特定部３３、最小部分木特定部４１、部分文書生成部４２を含む各種の機能が実現される。また、磁気ディスク装置１１０ｇやメモリ１１０ｃ等の記憶手段により、データ格納部２１が実現され、ネットワーク・インターフェイス１１０ｆにより、データ取得部１１、データ出力部５１が実現される。
【００８４】
＜適用例＞
本実施形態の検索システムは、上記の説明において対象としたＸＭＬ文書に限定せず、同様の木構造を有する構造化文書（データ）を処理対象とし、その木構造における特定の複数のノードを含む最小部分木を抽出し、部分文書を生成する場合に、広く適用することができる。
【００８５】
また、上記の実施形態では、検索システムは、ＸＭＬ文書を処理対象とし、最小部分木を構成するノードとして、まずテキスト・ノードを特定し、これに対応する木構造のノード（主に葉ノード）を特定した。しかし、本実施形態の検索システムは、一般的に、木構造を有するデータから特定の複数のノードを含む最小部分木を抽出するシステムとして実現することができる。
【００８６】
さらに、本実施形態は、木構造を有する様々なデータにおいて、その木構造における特定の複数のノードに対する最低共通親（Lowest common ancestors）ノードを検出するような場合にも適用することができる。例えば、データファイルを階層的に管理するファイルシステムに本実施形態を適用すれば、適当な条件によって特定された複数のファイルが含まれる共通のフォルダのうち、最下層のフォルダを発見することが可能である。
【符号の説明】
【００８７】
１１…データ取得部、１２…シリアライズ処理部、１３…検索部、２１…データ格納部、３１…必須要素列特定部、３２…後（右側）部分特定部、３３…前（左側）部分特定部、４１…最小部分木特定部、４２…部分文書生成部、５１…データ出力部、１００…検索システム
【図１】
2014059757.tif 000003
【図２】
2014059757.tif 000004
【図３】
2014059757.tif 000005
【図４】
2014059757.tif 000006
【図５】
2014059757.tif 000007
【図６】
2014059757.tif 000008
【図７】
2014059757.tif 000009
【図８】
2014059757.tif 000010
【図９】
2014059757.tif 000011
【図１０】
2014059757.tif 000012
【図１１】
2014059757.tif 000013
【図１２】
2014059757.tif 000014
【図１３】
2014059757.tif 000015
【図１４】
2014059757.tif 000016