(57)【要約】【課題】  テンプレートを用いて圧縮されたＸＭＬ文書のデータ構造をテンプレートにより再圧縮して効率よく圧縮する。【解決手段】  データ圧縮装置１０１は、型と値をそれぞれ有する複数の頂点と頂点間の参照情報とを有する入力データ１０８を分離手段１０７により、頂点間の参照情報を有する相互参照関係データと頂点群のデータとに分離して、その分離された頂点群のデータを第２の出力データ１１０として出力し、特定のパターンを有する相互参照関係データを頂点間の参照情報が共有可能なテンプレートとしてテンプレート蓄積手段１０２に蓄積し、分離された相互参照関係データから、蓄積されているテンプレートに対応する一致箇所を一致箇所検出手段１０３により検出し、一致箇所をテンプレート置換手段１１１により置換する際に、置換箇所を示す指示付き頂点を設けて、テンプレートによる再置換を可能にする。【選択図】  図１
2005202507.tif 000002
【特許請求の範囲】
【請求項１】
型と値をそれぞれ有する複数の頂点と、該頂点間の参照情報とを有する入力データを、前記頂点間の参照情報を有する相互参照関係データと、前記型と値を有する複数の頂点からなる頂点群とに分離し、その分離された前記頂点群のデータを出力する分離手段と、
特定のパターンを有する前記頂点間の参照情報を、前記頂点間の参照情報が共有可能なテンプレートとして蓄積するテンプレート蓄積手段と、
前記分離手段により分離された前記相互参照関係データから、前記テンプレート蓄積手段に蓄積されているテンプレートに対応する一致箇所を検出するテンプレート一致箇所検出手段と、
前記分離手段により分離された前記相互参照関係データのうち、前記テンプレート一致箇所検出手段により検出された前記一致箇所を前記テンプレートで置換する際に、該テンプレートによる置換箇所を示す指示付頂点を設けて、前記テンプレートによる再置換を可能にするテンプレート置換手段とを有し、
前記頂点間の参照情報を参照可能な状態で、前記テンプレート置換手段により置換された相互参照関係データを出力する出力手段とを有することを特徴とするデータ圧縮装置。
【請求項２】
前記テンプレート一致箇所検出手段は、前記入力データが根付木構造を有するときは前記テンプレート蓄積手段に蓄積されているテンプレートに対応する一致箇所を検出するときに、葉頂点を含む一致箇所のみを検出することを特徴とする請求項１記載のデータ圧縮装置。
【請求項３】
特定のパターンを有する複数の頂点間の参照情報を、前記頂点間の参照情報が共有可能なテンプレートとして蓄積するテンプレート蓄積手段と、
前記頂点間の参照情報を有して、前記テンプレートにより置換された圧縮済みの相互参照関係データを入力し、該圧縮済みの相互参照関係データを前記テンプレートを用いて展開し、その展開した相互参照関係データが、前記テンプレートで置換された頂点間の参照情報を有するときに、前記展開した相互参照関係データを前記テンプレートを用いて展開する再展開を繰り返し行い、前記圧縮済みの相互参照関係データから圧縮前の相互参照関係データを復元する展開手段と、
前記複数の頂点からなる頂点群のデータを入力し、該頂点群のデータと、前記展開手段により復元された前記圧縮前の相互参照関係データとを合成して、該合成されたデータを出力する合成手段とを有することを特徴とするデータ復元装置。
【請求項４】
前記展開手段は、前記相互参照関係データの中で参照すべき頂点が指定されたときに、該参照すべき頂点の参照に必要な前記テンプレートを用いて前記再展開を行うことを特徴とする請求項３記載のデータ復元装置。
【請求項５】
複数の頂点と、該頂点間の参照情報とを有する根付木構造のデータを入力し、入力データを取得する入力データ取得手段と、
該手段により取得される前記入力データにおける前記各頂点間の参照情報に含まれる根付木構造の参照情報をテンプレート候補として検出するテンプレート候補検出手段と、
該手段により取得される前記テンプレート候補と、前記入力データにおける前記テンプレート候補の出現頻度を記憶するテンプレート候補蓄積手段と、
該手段に蓄積されている前記テンプレート候補により、前記入力データを置換するテンプレート置換手段と、
前記テンプレート候補蓄積手段に記憶されているテンプレート候補から、前記出現頻度をもとに前記テンプレート候補を選択し、その選択されたテンプレート候補を出力するテンプレート選択手段とを有することを特徴とするテンプレート生成装置。
【請求項６】
前記テンプレート選択手段は、前記テンプレート候補を選択する際に、前記テンプレート置換手段が前記入力データの置換に用いた前記テンプレート候補のみを選択することを特徴とする請求項５記載のテンプレート生成装置。
【請求項７】
前記テンプレート候補検出手段は、前記入力データにおける根頂点から最も浅い葉頂点と同じ深さの頂点すべてを含む最小木構造を有する部分の参照情報を前記テンプレート候補として検出することを特徴とする請求項５または６記載のテンプレート生成装置。
【請求項８】
前記入力データにおける前記テンプレート候補検出手段により検出されなかった箇所の根付木構造を有する部分の参照情報が、前記テンプレート候補検出手段に入力されることを特徴とする請求項５〜７のいずれか一項記載のテンプレート生成装置。
【請求項９】
前記テンプレート候補検出手段は、前記入力データの根頂点から深さ優先探索で最初に遭遇する葉頂点を起点とし、該起点となる頂点と、その親頂点とを有する根付木構造部分の参照情報を前記テンプレート候補とし、前記参照情報に頂点を一つ追加して得られる根付木構造部分の参照情報を新たなテンプレート候補とする拡張候補検出を繰り返すことを特徴とする請求項５または６記載のテンプレート生成装置。
【請求項１０】
前記テンプレート候補検出手段は、前記新たなテンプレート候補の検出を頂点数によって制限することを特徴とする請求項９記載のテンプレート生成装置。
【請求項１１】
前記テンプレート候補検出手段は、前記根付木構造部分の参照情報の高さにより、前記新たなテンプレート候補の検出を制限することを特徴とする請求項９記載のテンプレート生成装置。
【請求項１２】
前記テンプレート候補検出手段が、前記拡張候補検出を行う際に、前記起点となる頂点との深さの差が所定値よりも大きい新頂点への拡張は行わず、前記新頂点を起点として、前記拡張候補検出を繰り返すことを特徴とする請求項９〜１１のいずれか一項記載のテンプレート生成装置。
【請求項１３】
型と値をそれぞれ有する複数の頂点と、該頂点間の参照情報とを有する第１の入力データを圧縮するデータ圧縮システムであって、
前記第１の入力データと同様の構造を有する第２の入力データから抽出した前記頂点間の参照情報を有する相互参照関係データを入力し、前記頂点間の参照情報が共有可能なテンプレートを生成する請求項５〜１２のいずれか一項記載のテンプレート生成装置と、
前記テンプレート生成装置によって生成された前記テンプレートを蓄積するテンプレート蓄積手段を備えた請求項１または２記載のデータ圧縮装置と、
前記頂点間の参照情報を参照可能な状態で、前記テンプレート蓄積手段に蓄積されたテンプレートにより置換された相互参照関係データを第１の出力データとして出力し、前記第１の入力データから分離された前記型と値をそれぞれ有する複数の頂点からなる頂点群のデータを第２の出力データとして出力する出力手段とを有することを特徴とするデータ圧縮システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子データの圧縮装置、復元装置、テンプレート生成装置およびデータ圧縮システムに関する。
【背景技術】
【０００２】
近年、ＷＷＷ(World  Wide  Web)の普及により、ＨＴＭＬ(Hyper  Text  Markup  Language)やＸＭＬ(Extensible  Markup  Language)等、構造化文書を用いたデータ交換が増加している。特に、ＸＭＬはＨＴＭＬを補う次世代の言語として注目を集めており、今後インターネットにおける情報交換の場において最も普及していくことが予想される。
【０００３】
ＸＭＬは要素の階層構造を表すデータ表現形式を伴った言語であり、ＸＭＬを用いた文書（ＸＭＬ文書）は、例えば図３２のように記述される。図３２は、ＸＭＬ文書１０を示す図である。図３２に示すとおり、ＸＭＬは大きくマークアップとテキスト情報に分けられる。図３２に示すＸＭＬ文書１０では、マークアップは、要素開始記号（開始タグ）Ｍａ、要素終了記号（終了タグ）Ｍｂ、空要素記号（空要素タグ）Ｍｃからなっている。図３２では、<book>、<title>、<authors>、<author>、<contents>および<chapter>が要素開始記号Ｍａを表している。また、</book>、</title>、</authors>、</author>、</contents>および</chapter>が要素終了記号Ｍｂを表し、<misc/>が空要素記号Ｍｃを表している。これらの要素開始記号Ｍａから対応する要素終了記号Ｍｂまでの領域、または空要素記号Ｍｃが要素（ＸＭＬの基本となる情報単位）を表している。
【０００４】
要素開始記号Ｍａと要素終了記号Ｍｂの間には、別な要素記号の他、テキスト情報を記述することができる。例えば、図３２に示すＸＭＬ文書１０では、要素<title>には、文字列“ＸＭＬの基礎”が、要素<authors>の中に現れる最初の要素<author>には、文字列“山田  太郎”がそれぞれテキスト情報として定義されている。
【０００５】
要素やテキスト情報の間には、親子関係、兄弟関係が定義されている。図３２に示すＸＭＬ文書１０の場合、要素開始記号Ｍａが<book>で始まり、要素終了記号Ｍｂが</book>
で終了する要素（要素<book>）の中に、要素開始記号Ｍａが<title>で始まり、要素終了
記号Ｍｂが</title>で終了する要素（要素<title>）が含まれている。このとき、要素<book>は要素<title>の親要素であるといい、要素<title>は要素<book>の子要素であるという。これが要素の親子関係である。
【０００６】
また、要素<title>と要素<authors>とは、同一の親要素<book>を持ち、かつ連続している。このとき、要素<title>と要素<authors>とは兄弟であるといい、要素<title>は要素
<authors>の前兄弟、要素<authors>は要素<title>の次兄弟であるという。これが要素の
兄弟関係である。
【０００７】
一般に、ＸＭＬは、コンピュータ間で通信を行う際や、ハードディスク装置やフラッシュメモリに蓄積する際には、図３２に示すＸＭＬ文書１０ようにテキスト形式で表現されている。一方、コンピュータ内部で検索や修正用に利用するときは、解析されてコンピュータ内部に適したデータ構造に変換されている。
【０００８】
図３３は、図３２に示すＸＭＬ文書１０を解析し、コンピュータの内部利用に適した形式に変換したデータ構造１１を示す図である。図３３では、各要素及びテキスト情報が型および値を有する頂点３０１〜３１７として記述されている。型は各頂点３０１〜３１７の左側に記述され、“Ｅ”であれば要素を表し、“Ｔ”であればテキスト情報を表している。例えば、頂点３０１では型３０１ａは“Ｅ”である。また、値は頂点の右側に記述され、例えば、頂点３０１では値３０１ｂは“ｂｏｏｋ”である。そして、頂点が要素を表す場合は値に要素の名称（要素名）が記述され、テキスト情報を表す場合は文字列が記述される。例えば、頂点３０２では要素名<title>を表し、頂点３０６ではテキスト情報“ＸＭＬの基礎”を表している。
【０００９】
また、各頂点３０１〜３１７は、もとの（変換前の）ＸＭＬ文書１０の親子関係および兄弟関係を表現するため、親参照、子参照、次兄弟参照および前兄弟参照の４つの参照を表す参照情報を有している。上述のＸＭＬ文書１０の場合、要素<title>は要素<book>の子要素であり、要素<book>は要素<title>の親要素であるから、図３３に示すデータ構造１１では、例えば、頂点３０１、３０２については、それぞれ、<book>から<title>への子参照Ｐ１と、<title>から<book>への親参照Ｐ２を有し、それらが矢印によって表現されている。また、要素<book>は<title>の次の子要素として要素<authors>も有している。この場合、頂点３０２、３０３については、要素<title>から要素<authors>への次兄弟参照Ｐ３、要素<authors>から要素<title>への前兄弟参照Ｐ４が保持されている。なお、データ構造１１の場合、兄弟関係にある要素では、先頭の子要素（例えば要素<title>）以外は親参照を直接に有しないようになっている。
【００１０】
データ構造は、各頂点間の参照情報と、要素名やテキスト情報とを分離して管理することができ、例えば、そのそれぞれを図３４（ａ）、図３４（ｂ）のように表現することができる。ここで、図３４（ａ）は各頂点間の参照情報を有する相互参照関係データ４００を示す図であり、図３４（ｂ）は要素とテキスト情報のいずれかに設定される型と値を有する複数の頂点の集合（頂点群ともいう）を示すテーブル４５０を示す図である。
【００１１】
しかしながら、メモリ等の記憶装置の容量は有限であるため、データ構造を蓄積するときは、そのデータ構造を効率的に圧縮して蓄積することが求められる。この点に関し、非特許文献１には、図３４（ｂ）に示すような要素名やテキスト情報を圧縮する方法が開示されている。非特許文献１では、各頂点が保持する要素名やテキスト情報を辞書として別途蓄積し、各頂点には辞書のインデックスを持たせ、同じ文字列を複数蓄積しないようにすることで、圧縮する方法が開示されている。
【００１２】
一方、非特許文献２には、ＸＭＬ文書中の部分的な構造を再利用することで、ＸＭＬ文書を圧縮する方法が開示されている。この方法は元のＸＭＬ文書を構造、要素名情報、テキスト情報の３つに分離したのち、そのそれぞれをＬＺ７７等の一般的な圧縮アルゴリズムで圧縮するというものである（ＬＺ７７について詳しくは、Jacob Ziv、Abraham Lempel:A Universal Algorithm for Sequential Data Compression。IEEE Transactions on Information Theory 23(3):337-343(1977)を参照）。
ここで、非特許文献２に開示されている圧縮方法について説明する。この圧縮方法ではまず、要素開始記号や空要素記号をそれぞれ「＃１」、「＃２」のような短い要素名で置換し、要素終了記号を「／」で置換する。また、テキスト情報は「Ｃ」で置換する。
以上の圧縮方法を分離したＸＭＬ文書１０に適用すると、分離後のデータ構造１２、要素名情報１３およびテキスト情報１４はそれぞれ図３５、図３６、図３７のように表現される。
【００１３】
また、非特許文献２に記載の圧縮方法では、ＬＺ７７等に代表される圧縮アルゴリズムを用いてそれぞれを独立に圧縮するが、ここではその圧縮アルゴリズムの概要について説明する。ＬＺ７７等の圧縮アルゴリズムは元の入力情報に含まれる部分的なパターンを発見し、それをテンプレートとして繰り返し再利用することにより、圧縮を行う。例えば、図３５に示すデータ構造１２の圧縮について説明すると、テンプレートとして、テンプレートＸ、Ｙ、Ｚ、Ｗ、Ｖを用いるとし、それぞれのテンプレートの割り当てを、Ｘ＝“＃１  ＃２  Ｃ  ／  ＃３”、Ｙ＝“＃４Ｃ  ／”、Ｚ＝“／  ＃５”、Ｗ＝“＃６  Ｃ／”、Ｖ＝“／  ＃７  ／  ／”のように設定すると、図３５に示したデータ構造１２は“Ｘ  Ｙ  Ｙ  Ｙ  Ｚ  Ｗ  Ｗ  Ｖ”のように表せる。これは一部の文書構造をあらわすテンプレートとして、Ｙ、Ｗを複数回利用している。このように、テンプレートが繰り返し利用でき、元の文書を少ないテンプレートで表現することができれば、元のＸＭＬ文書を表す情報量が少なくて済むから圧縮が可能になる。
【００１４】
【非特許文献１】Mathias Neumuller and John N． Wilson:“Compact In-Memory Representation of XML”Internal Report of University of strathclyde
【非特許文献２】Hartmut Liefke and Dan Suciu．:“XMill: An Efficient Compressor for XML Data”、In proceedings of ACM SIGMOD International Conference on Management of Data、2000
【発明の開示】
【発明が解決しようとする課題】
【００１５】
しかしながら、従来の技術では、メモリ量の制約などにより、利用できるテンプレートが限られている場合、十分な圧縮を行うことができなかった。そのため、テンプレートを用いて圧縮されたデータ構造に対しても再圧縮を行い、その再圧縮で効率的に圧縮されたデータを復元できるようにすることが望ましい。
【００１６】
そこで、本発明は上記課題を解決するためになされたもので、ＸＭＬ文書のデータ構造をテンプレートにより効率的に圧縮し、効率的に圧縮されたデータをテンプレートにより復元して、効率的な圧縮および復元を可能にする構成を備えたデータ圧縮装置、その圧縮されたデータ構造を復元するデータ復元装置、その圧縮に用いるテンプレートを生成するテンプレート生成装置およびデータ圧縮システムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記課題を解決するため、本発明は型と値をそれぞれ有する複数の頂点と、その頂点間の参照情報とを有する入力データを、頂点間の参照情報を有する相互参照関係データと、型と値を有する複数の頂点からなる頂点群とに分離し、その分離された頂点群のデータを出力する分離手段と、特定のパターンを有する頂点間の参照情報を、頂点間の参照情報が共有可能なテンプレートとして蓄積するテンプレート蓄積手段と、分離手段により分離された相互参照関係データから、テンプレート蓄積手段に蓄積されているテンプレートに対応する一致箇所を検出するテンプレート一致箇所検出手段と、分離手段により分離された相互参照関係データのうち、テンプレート一致箇所検出手段により検出された一致箇所をテンプレートで置換する際に、そのテンプレートによる置換箇所を示す指示付頂点を設けて、テンプレートによる再置換を可能にするテンプレート置換手段とを有し、頂点間の参照情報を参照可能な状態で、テンプレート置換手段により置換された相互参照関係データを出力する出力手段とを有するデータ圧縮装置を特徴とする。
このデータ圧縮装置は、置換箇所を頂点と同様の構成で表現することができ、再帰的にテンプレートを適用することができるから、少ないテンプレートで高い圧縮効率を実現することができる。
【００１８】
また、テンプレート一致箇所検出手段が、入力データが根付木構造を有するときはテンプレート蓄積手段に蓄積されているテンプレートに対応する一致箇所を検出するときに、葉頂点を含む一致箇所のみを検出することが好ましい。
これにより、圧縮された相互参照関係データを復元し、その復元された相互参照関係データの一部の頂点を参照する際に、その頂点の参照に必要なテンプレートのみを展開し、頂点の参照が高速に行える。
【００１９】
本発明は、特定のパターンを有する複数の頂点間の参照情報を、頂点間の参照情報が共有可能なテンプレートとして蓄積するテンプレート蓄積手段と、頂点間の参照情報を有して、テンプレートにより置換された圧縮済みの相互参照関係データを入力し、その圧縮済みの相互参照関係データをテンプレートを用いて展開し、その展開した相互参照関係データが、テンプレートで置換された頂点間の参照情報を有するときに、展開した相互参照関係データをテンプレートを用いて展開する再展開を繰り返し行い、圧縮済みの相互参照関係データから圧縮前の相互参照関係データを復元する展開手段と、複数の頂点からなる頂点群のデータを入力し、その頂点群のデータと、展開手段により復元された圧縮前の相互参照関係データとを合成して、その合成されたデータを出力する合成手段とを有するデータ復元装置を提供する。
このデータ復元装置は入力される相互参照関係データについてテンプレートを用いた再展開を繰り返し行うため、再帰的にテンプレートの適用が行われ、少ないテンプレートを用い、高い圧縮率で圧縮された相互参照関係データを展開して復元することができる。
【００２０】
また、展開手段は、相互参照関係データの中で参照すべき頂点が指定されたときに、その参照すべき頂点の参照に必要なテンプレートを用いて再展開を行うとよい。
これにより、参照すべき頂点の参照に必要なテンプレートのみを展開するようにでき、圧縮された相互参照関係データから高速にデータを参照することができる。
【００２１】
そして、本発明は、複数の頂点と、その頂点間の参照情報とを有する根付木構造のデータを入力し、入力データを取得する入力データ取得手段と、その手段により取得される入力データにおける各頂点間の参照情報に含まれる根付木構造の参照情報をテンプレート候補として検出するテンプレート候補検出手段と、その手段により取得されるテンプレート候補と、入力データにおけるテンプレート候補の出現頻度を記憶するテンプレート候補蓄積手段と、その手段に蓄積されているテンプレート候補により、入力データを置換するテンプレート置換手段と、テンプレート候補蓄積手段に記憶されているテンプレート候補から、出現頻度をもとにテンプレート候補を選択し、その選択されたテンプレート候補を出力するテンプレート選択手段とを有するテンプレート生成装置を提供する。
このテンプレート生成装置は、入力データに含まれる根付木構造の参照情報をテンプレート候補として検出してテンプレート候補蓄積手段に蓄積し、このテンプレート候補を用いて入力データを置換する。また、蓄積されているテンプレート候補から、出現頻度をもとにテンプレート候補を選択し、それをテンプレートとして出力する。
【００２２】
また、テンプレート選択手段は、テンプレート候補を選択する際に、テンプレート置換手段が入力データの置換に用いたテンプレート候補のみを選択することができる。
こうすると、与えられた入力データのうち、必要な部分の参照情報をテンプレート候補として出力することができる。
また、テンプレート候補検出手段は入力データにおける根頂点から最も浅い葉頂点と同じ深さの頂点すべてを含む最小木構造を有する部分の参照情報をテンプレート候補として検出することができる。
さらに、入力データにおけるテンプレート候補検出手段により検出されなかった箇所の根付木構造を有する部分の参照情報が、テンプレート候補検出手段に入力されるようにしてもよい。
このようにしてテンプレート生成装置を構成すると、入力データから根頂点のみが接続情報を有する根付木構造をテンプレートとして生成できるようになるから、再帰的な圧縮に効果的なテンプレートを生成することができる。
【００２３】
そして、テンプレート候補検出手段は入力データの根頂点から深さ優先探索で最初に遭遇する葉頂点を起点とし、その起点となる頂点と、その親頂点とを有する根付木構造部分の参照情報をテンプレート候補とし、参照情報に頂点を一つ追加して得られる根付木構造部分の参照情報を新たなテンプレート候補とする拡張候補検出を繰り返すこともできる。
このようにしてテンプレート生成装置を構成すると、テンプレートと入力データの一致確認を逐次行うことなく、入力データの構造解析を行うことにより、テンプレートとの一致を検証することができるため、テンプレートを高速に生成することができる。
また、テンプレート候補検出手段は、新たなテンプレート候補の検出を頂点数によって制限するとよく、根付木構造部分の参照情報の高さにより、新たなテンプレート候補の検出を制限してもよい。
これらのようにすると、生成されるテンプレートの大きさを制限し、出現頻度の低い大きなテンプレートの生成を抑制することができる。
【００２４】
さらに、テンプレート候補検出手段が、拡張候補検出を行う際に、起点となる頂点との深さの差が所定値よりも大きい新頂点への拡張は行わず、新頂点を起点として、拡張候補検出を繰り返すことが好ましい。
このようにしてテンプレート生成装置を構成すると、生成されるテンプレートの大きさを制限することができるだけでなく、起点とする頂点と深さの差が所定値よりも大きい頂点の子孫となる頂点が別のテンプレートにより置換されて、すべて葉頂点として扱うことが可能になる。入力データから、根頂点のみが接続情報を有する根付木構造をテンプレートとして生成することが可能になるから、再帰的な圧縮に効果的なテンプレートを動的に生成することが可能になる。
【００２５】
そして、本発明は、型と値をそれぞれ有する複数の頂点と、その頂点間の参照情報とを有する第１の入力データを圧縮するデータ圧縮システムであって、第１の入力データと同様の構造を有する第２の入力データから抽出した頂点間の参照情報を有する相互参照関係データを入力し、頂点間の参照情報が共有可能なテンプレートを生成する上記いずれか一項記載のテンプレート生成装置と、テンプレート生成装置によって生成されたテンプレートを蓄積するテンプレート蓄積手段を備えた上記いずれかのデータ圧縮装置と、頂点間の参照情報を参照可能な状態で、テンプレート蓄積手段に蓄積されたテンプレートにより置換された相互参照関係データを第１の出力データとして出力し、第１の入力データから分離された型と値をそれぞれ有する複数の頂点からなる頂点群のデータを第２の出力データとして出力する出力手段とを有するデータ圧縮システムを提供する。
このようにしてデータ圧縮システムを構成すると、与えられた入力データの圧縮に適したテンプレートを動的に生成しながら、その生成されたテンプレートを用いて入力データを圧縮することができるため、圧縮効果の高いデータ圧縮を実現することができる。
【発明の効果】
【００２６】
本発明によれば、ＸＭＬ文書のデータ構造を少ないテンプレートを用いて再帰的に効率良く圧縮し、その効率よく圧縮されたデータ構造を復元することができる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の実施形態について図面を用いて詳細に説明する。
【００２８】
データ圧縮装置の実施の形態
（第１の実施の形態）
図１は、本実施の形態に係るデータ圧縮装置１０１の構成を示すブロック図である。図１に示すように、データ圧縮装置１０１はテンプレート蓄積手段１０２、テンプレート一致箇所検出手段１０３、分離手段１０７、テンプレート置換手段１１１および切り替え手段１０４を有している。このデータ圧縮装置１０１は、型と値をそれぞれ有する複数の頂点（頂点群）と、その各頂点間の参照情報とを有する入力データ１０８を入力し、第１の出力データ１０９と第２の出力データ１１０とを出力するようになっている。
【００２９】
本実施の形態では、図２に示すＸＭＬ文書２０を圧縮する手順をもって発明の詳細を説明する。図２（ａ）は、ＸＭＬ文書２０のテキスト表現の一例を示す図である。ＸＭＬ文書２０は既知の手法（例えばhttp://xml.apache.org/xerces2-j/において示されるXercesなど）により、図２（ｂ）に示すようなコンピュータの内部利用に適したデータ構造２１に変換可能である。そこで、以下では、ＸＭＬ文書２０を図２（ｂ）に示すデータ構造２１に変換した後の圧縮工程について説明する。このデータ構造２１は、型と値をそれぞれ有する複数の頂点（頂点群）と、その各頂点間の参照情報とを有している。
【００３０】
データ圧縮装置１０１は、分離手段１０７が図２（ｂ）に示すデータ構造２１を入力データ１０８として入力し、その入力データ１０８を各頂点間の参照情報を有する相互参照関係データＲｄと、型と値を有する複数の頂点からなる頂点群のデータＴｄとに分離している。すなわち、分離手段１０７は次のようにして、図３に示す相互参照関係データ１０００と、図４に示すテーブル９００を生成し、そのテーブル９００を型と値を有する頂点１００１〜１００７の集合（頂点群）とすることによって、データ構造２１を分離している。その相互参照関係データ１０００は各頂点を一意に識別可能なＩＤ（頂点ＩＤ）を各頂点１００１〜１００７に順に割り振って生成する。また、テーブル９００はその割り振った頂点ＩＤと、対応する頂点１００１〜１００７がもともと有していた型および値との組を列記して生成する。各頂点１００１〜１００７への頂点ＩＤの割り振り方には、幅優先探索や、深さ優先探索等があるが、ここでは深さ優先探索を用いている。また、分離手段１０７は、分離して得られる頂点群のデータを第２の出力データ１１０として出力する。
【００３１】
ＸＭＬ文書２０から分離された相互参照関係データ１０００、およびテーブル９００はそれぞれ図３，図４に示す通りである。ここで、図４に示すテーブル９００は頂点ＩＤ９０１、型９０２および値９０３を一行とする形式で表現されている。
テンプレート蓄積手段１０２は、圧縮に先立ちあらかじめテンプレートとテンプレート実体を蓄積している。このとき、テンプレート蓄積手段１０２は、テンプレートやテンプレート実体として、例えば、あらかじめ高い頻度で適用されることが分かっている高頻度のものや、後述するテンプレート生成装置１６０１で生成されたテンプレートを蓄積している。このようなテンプレートとテンプレート実体としては、例えば、図５（ａ），図５（ｂ）に示すテンプレート１１０５とテンプレート実体１１０９とがある。
【００３２】
テンプレート１１０５は、テンプレートＩＤ１１０６、接続情報１１０７およびパターン情報１１０８を有している。テンプレートＩＤ１１０６はテンプレート蓄積手段１０２に複数のテンプレートが蓄積された際に、それら各テンプレートを一意に識別するために用いられる。パターン情報１１０８はそのテンプレートによって表現される頂点間の参照情報のパターンを表し、複数の頂点とそれら相互の参照情報とを有している。パターン情報１１０８に含まれる頂点間の参照情報には、親参照、子参照、次兄弟参照、前兄弟参照の４種類の参照が設けられている。なお、接続先の頂点がない参照のうち、後述するようにしてテンプレートを適用し、相互参照関係データ１０００を圧縮する際に利用されない参照については、その旨がパターン情報１１０８に記述されている。これは、例えば、無効な頂点を定義しておき、その頂点への参照とすることで実現可能である。接続情報１１０７にはテンプレート１１０５を実際に適用し、相互参照関係データ１０００を圧縮する際における他のテンプレートや頂点との接続を示す情報が列挙されている。
【００３３】
このようなテンプレート１１０５は、接続情報１１０７と、参照情報を有するパターン情報１１０８とを区別して構成しているから、異なるテンプレート１１０５同士でパターン情報１１０８を共有することができる。つまり、接続情報１１０７を異ならせることにより、接続され得る頂点や他のテンプレートを異ならせ、パターン情報１１０８が同じでも、別テンプレートのようにして利用することができる。すると、テンプレート内に含まれる頂点間の参照情報が省略可能となり、テンプレート蓄積手段１０２のメモリ使用量（記憶領域）を効率よく利用することが可能となる。
【００３４】
また、図５（ａ）において、テンプレートＩＤ１１０６には具体的な値として“Ｔ１”が設定されている。パターン情報１１０８は４つの頂点１１０１〜１１０４と、それらの間の参照を示す参照情報とにより構成され、参照は矢印で記述されている。なお、参照の種類は矢印に対して、親参照はｐ、子参照はｃ、次兄弟参照はｎｓ、前兄弟参照はｐｓとして記述されている。例えば、頂点１１０１の子参照ｃは頂点１１０２を指定しており、頂点１１０３の次兄弟参照ｎｓは頂点１１０４を指定している。
【００３５】
また、テンプレートを適用し、相互参照関係データ１０００を圧縮した際に利用されないことを示す参照は、端点を「×」で記述し、テンプレートを適用し相互参照関係データ１０００を圧縮する際に他のテンプレートや頂点と接続されることを示す参照は端点を「○」で記述している。後者に該当する４つの参照、すなわち、頂点１１０１の親参照、頂点１１０２、頂点１１０３、頂点１１０４の子参照については、接続情報１１０７に頂点のＩＤと参照の種類が列挙されている。
【００３６】
図５（ｂ）に示すテンプレート実体１１０９は、入力データ１０８に対し、相互参照関係データ１０００を圧縮する際に、テンプレートを適用したこと（テンプレート適用済み）を表すために用いられる。このテンプレート実体１１０９は、テンプレート実体ＩＤ１１１０と、適用するテンプレートを表す利用テンプレートＩＤ１１１１と、実体接続情報１１１２と、実体情報１１１３とを有している。
テンプレート実体ＩＤ１１１０は、テンプレートＩＤ１１１１で示されるテンプレート１１０５を適用して相互参照関係データ１０００を圧縮した際、そのテンプレート１１０５の適用箇所を一意に特定するために用いられる。実体接続情報１１１２は、テンプレート１１０５を適用し相互参照関係データ１０００を圧縮した際に接続する先の頂点が列挙されている。実体情報１１１３はテンプレート１１０５を適用し、相互参照関係データ１０００を圧縮した際に、テンプレート１１０５に内包されている頂点のＩＤ（頂点ＩＤ）が蓄積されている。実体接続情報１１１２と実体情報１１１３に入る具体的な値については後述する。
【００３７】
テンプレート一致箇所検出手段（以下「一致箇所検出手段」という）１０３は図３に示す相互参照関係データ１０００から、テンプレート蓄積手段１０２に蓄積されているテンプレートに対応する一致箇所を検出する。テンプレート蓄積手段１０２には、テンプレート１１０５のほか、複数のテンプレートが蓄積されることが予想されるため、一致箇所検出手段１０３による検出結果は複数通り存在すると考えられる。ただし、例えば図１２に示す一致箇所検出手順によれば検出結果は一意に定まる。
なお、図１２に示す一致箇所検出手順は以下のとおりである。
処理開始後ステップ１で、テンプレート蓄積手段に蓄積されたテンプレートから、頂点の数が多い順に１つずつ選択し、以下の処理を繰り返す。
選択したテンプレートをＰｊとし、ステップ２に進む。
続くステップ２では、相互参照関係データに含まれる頂点から、選択したテンプレートＰの頂点の数と一致する頂点を選択する組み合わせをＸ１，Ｘ２，Ｘｍとし、その中から１つずつ選択して、以下を繰り返す。
選択した組み合わせをＸｋとする。
次に、ステップ３に進み、Ｘｋに含まれる頂点はすべて置換済みマークが無いか否かを判断し、無ければステップ４に進み、そうでなければｋがｍに達するまでステップ３からステップ５を繰り返す。
ステップ４に進むと、ＸｋがＰｊと同型か否かを判断し、同型であればステップ５に進み、そうでなければｋをひとつ進め、ステップ３に戻る。
ステップ５に進むと、テンプレートＰｊ，Ｘｋを一致箇所としてパターン一致情報に登録し、Ｘｋに含まれる頂点は置換済みとしてマークする。
【００３８】
本実施の形態では、テンプレート蓄積手段１０２にテンプレート１１０５のみが蓄積されているとき、相互参照関係データ１０００に対して、図１２に示す一致箇所検出手順により求めた一致箇所を示す。そのテンプレートの一致箇所は、例えば図１１（ａ）に示す一致箇所情報１７０１のように、利用したテンプレートを示すテンプレートＩＤ１７０２と、テンプレートの頂点から元の相互参照関係データ１０００の頂点への割り当てを示す頂点対応情報１７０３とにより表すことができる。
ここで、相互参照関係データ１０００のうち、テンプレートに対応する一致箇所を検出した結果の一例として、一致箇所情報１７０４を図１１（ｂ）に示す。この一致箇所情報１７０４はテンプレート蓄積手段１０２にテンプレート１１０５のみが蓄積されているときに、図１２に示す一致箇所検出手順により、相互参照関係データ１０００のうち、テンプレート１１０５に対応する一致箇所を検出した結果であり、一致箇所は１つであったことを示している。この一致箇所情報１７０４は、一致箇所検出手段１０３からテンプレート置換手段１１１に入力される。
【００３９】
テンプレート置換手段１１１は、一致箇所検出手段１０３から一致箇所情報１７０４（図１に示す一致箇所情報Ｕｄ）を入力し、該当する頂点を起点としてテンプレートのパターン情報に内包されている頂点に対応する頂点の集合をすべてテンプレート実体１１０９に置換し、その置換結果を圧縮済の相互参照関係データＣｄとして出力する。この置換は例えば図１２に示す一致箇所検出手順で実現することができる。
ここで、その置換結果を図６に示す。図６では、テンプレート実体としてテンプレート実体１２０２が存在している。テンプレート実体１２０２はテンプレート実体ＩＤ１２０３と、利用テンプレートＩＤ１２０４と、実体接続情報１２０５と、実体情報１２０６とを有している。テンプレート実体ＩＤ１２０３には“Ｘ１”が設定され、利用テンプレートＩＤ１２０４には、“Ｔ１”が設定されている。これにより、テンプレート実体１２０２は図５（ａ）に示すテンプレート１１０５が適用されたことを示している。
【００４０】
実体情報１２０６は、利用したテンプレート（のパターン情報）に内包されている頂点と、テンプレートを適用する前の相互参照関係データ１０００の頂点との対応を示している。例えば、テンプレート実体１２０２の場合、テンプレート１１０５の頂点１１０１，１１０２，１１０３，１１０４がそれぞれ圧縮前の相互参照関係データ１０００の頂点１００１，頂点１００２，頂点１００６，頂点１００７に対応していることを示している。
実体接続情報１２０５は、そのテンプレート実体における他のテンプレート実体や頂点との接続情報を示している。ここで、上述したとおり、テンプレート実体１２０２が適用しているテンプレートはテンプレート１１０５であるが、そのテンプレート１１０５は外部と接続できる参照を４つ保持していることが、テンプレート１１０５における接続情報１１０７に記述されている（図５（ａ）参照）。
【００４１】
そして、テンプレート実体１２０２には、これらの参照先がどの頂点なのかが記述されている。すなわち、頂点１１０２の子参照が頂点１００３へ接続されるように記述され、頂点１１０１の親参照、頂点１１０３の子参照および頂点１１０４の子参照はいずれの頂点にも接続されないことが記述されている。
テンプレート置換手段１１１は置換する際に、テンプレート実体１２０２へ置換されたことを示す情報を頂点と同様の構成で表現することによって、テンプレートで置換した後の相互参照関係データ１０００を再圧縮が可能なデータとしている。
【００４２】
本実施の形態では、テンプレート置換手段１１１が相互参照関係データ１０００について、テンプレート１１０５を用いた置換を行うときに、テンプレート１１０５の適用を示すテンプレート実体１２０２で置換するのではなく、次のようにしている。すなわち、テンプレート置換手段１１１は、図６に示すように、テンプレート実体ＩＤ１２０３に設定されている実体ＩＤ（Ｘ１）を示すポインタ付頂点（指示付頂点）１２０７を設けることによって、テンプレート実体１２０２による置換が行われたことを示す一方、ポインタ付き頂点１２０７以外の頂点、すなわち頂点１００３、頂点１００４、頂点１００５が圧縮前と同様にそれぞれの参照を有するようにして、テンプレート１１０５を用いた置換を行っている。これにより、テンプレート実体１２０２への置換を表すポインタ付き頂点１２０７はテンプレート１１０５により置換されていない他の頂点（頂点１００３、頂点１００４、頂点１００５）と同様の構成となり、テンプレート実体１２０２を頂点の１つとして表現できるようになる。こうして、テンプレート置換手段１１１は、相互参照関係データ１０００について、テンプレートによる圧縮後の再圧縮を実現可能にしている。
【００４３】
切り替え手段１０４は、圧縮前の相互参照関係データ１０００に対する圧縮が行われた圧縮済の相互参照関係データ１２０１（図１に示すＣｄ）を第１の出力データとして出力するか、一致箇所検出手段１０３に入力して再圧縮を行うか（出力または再圧縮）を切り替え、両者を選択できるように構成されている。この切り替え手段１０４は再圧縮の余地があるか否か（再圧縮余地の有無）の判定結果や、予め指定しておいた再圧縮の回数（以下「指定回数」という）等を用いて、出力または再圧縮を選択し得るようになっている。再圧縮余地の有無は、一致箇所検出手段１０３が出力するテンプレート一致箇所情報Ｕｄが空か否かで行える。
【００４４】
本実施の形態では、指定回数を利用して出力または再圧縮を選択することとしている。入力データとしては、図２（ｂ）に示すＸＭＬ文書のデータ構造２１を与え、テンプレート蓄積手段１０２に、図５に示すテンプレート１１０５のみが蓄積されている場合の動作を例にとって説明する。
切り替え手段１０４は、指定回数を利用して、圧縮済みの相互参照関係データ１２０１の出力または再圧縮を選択する。ここでは、例えば指定回数がＮであり、今回の圧縮がｎ回目であるとする。
【００４５】
ｎ≧Ｎであるときは出力が選択される。このとき、切り替え手段１０４は、相互参照関係データ１２０１を第１の出力データ１０９として出力する。
ｎ＜Ｎであるときは再圧縮が選択される。このとき、切り替え手段１０４は、相互参照関係データ１２０１を一致箇所検出手段１０３に入力する。相互参照関係データ１２０１は、テンプレート実体１２０２の適用を頂点と同様の構成で表現しているため、テンプレートの適用箇所を一つの頂点とみなし、例えば図１２に示す一致箇所検出手順で一致箇所情報を導出することができる。図６に示した相互参照関係データ１２０１が一致箇所検出手段１０３に入力されるとき、検出された一致箇所検出情報は図１１（ｃ）に示す一致箇所情報１７１０となる。
【００４６】
図７は図６に示す相互参照関係データ１２０１を再圧縮した相互参照関係データ１３０１を示す図である。テンプレート置換手段１１１は、図６に示した相互参照関係データ１２０１のうち、一致箇所検出情報に示された頂点１２０７を起点として、テンプレート１２０５のパターン情報と対応する頂点群、すなわち、頂点１２０７、頂点１００３、頂点１００４および頂点１００５を、テンプレート実体１３０２を用いて置換する。この置換の結果、図７に示すとおり、単一の頂点１３０７のみからなる相互参照関係データ１３０１が得られる。本実施の形態では、例えば頂点１３０７がテンプレート実体１３０２のテンプレート実体ＩＤ１３０３を保持して、テンプレート実体１３０２を参照することを示し、他のテンプレートにより置換されていない頂点と同一の構成としている。
【００４７】
なお、テンプレートの接続情報の数が頂点の有する接続情報の数（親参照、子参照、次兄弟参照、前兄弟参照をそれぞれ１つずつ）よりも多くなる場合が考えられるが、接続情報の数が多い頂点については、一致箇所検出手段１０３において、一致箇所検出の対象から除外してもよい。
以上のように、データ圧縮装置は、一致箇所検出手段１０３により検出された一致箇所をテンプレートで置換する際に、そのテンプレートによる置換箇所を示す指示付き頂点１２０７を設けてテンプレートによる再置換を可能とし、再帰的にテンプレートを適用できるようにしている。そのため、同一のテンプレートを複数回適用することができ、より少ないテンプレートで高い圧縮率を実現できるようになっている。
【００４８】
（第２の実施の形態）
上述のような再圧縮を行うことにより、型と値をそれぞれ有する複数の頂点と、各頂点間の参照情報とを有する相互参照関係データにおける頂点の一部を参照するときは、圧縮された相互参照関係データに対し、テンプレートを用いて繰返し展開処理を行い、復元処理を再帰的に行う必要がある。そのため、再圧縮の回数が増えるにしたがい、頂点の参照に重大な時間を要するおそれがある。したがって、頂点の参照に要する時間が可能な限り短縮できることが好ましい。
そのためには、入力データとして提供される相互参照関係データが根付木構造を有するときに、その木構造を有する元の相互参照関係データの最も浅い位置にある頂点（根頂点）から最も深い位置にある頂点（葉頂点）へと順次復元することが可能となれば、すなわち、テンプレートが復元された相互参照関係データにおける葉頂点に存在するようになれば、復元が必要な箇所のみを選択しながら復元することが可能となる。そのため、参照に要する時間を短縮できると考えられる。
【００４９】
これは、例えば、一致箇所検出手段１０３が一致箇所の検出において、木構造の葉頂点を含む一致箇所のみを検出し、その一致箇所をテンプレート置換手段１１１がテンプレートに置換する処理を再帰的に行うことによって実現することができる。
ここで、例えば、図３に示した相互参照関係データ１０００が一致箇所検出手段１０３に入力され、テンプレート蓄積手段１０２に図５に示すテンプレート１１０５が蓄積されているとする。このとき、一致箇所検出手段１０３は一致箇所の検出で葉頂点を優先するため、葉頂点１００５から一致箇所を検出していく。そして、葉頂点１００５を含む一致箇所として、頂点１００２が検出されるので、一致箇所検出手段１０３は、一致箇所情報Ｖｄとして、頂点１００２をテンプレート置換手段１１１に入力する。
【００５０】
そして、テンプレート置換手段１１１は、入力する一致箇所情報Ｖｄを用いて、頂点１００２を起点としてテンプレート１１０５のパターン情報１１０８に対応する頂点群、すなわち頂点１００２、頂点１００３、頂点１００４および頂点１００５を再圧縮可能となるようにテンプレートで置換する。
一方、切り替え手段１０４は、テンプレートで置換された圧縮後の相互参照関係データの出力または再圧縮を選択する。ここでは、再圧縮が選択されたとすると、切り替え手段１０４はテンプレートで置換された相互参照関係データを一致箇所検出手段１０３に入力する。
【００５１】
図８は、上述の要領で葉頂点を優先する再圧縮（優先圧縮）を行ったときの相互参照関係データ１４０１を示す図である。この相互参照関係データ１４０１を、図７に示すようにして再圧縮の順序を考慮せずに再圧縮を行った相互参照関係データ１３０１と比較すると、以下の点で相違がある。後者の相互参照関係データ１３０１は、テンプレートを元の相互参照関係データへ完全に復元しなければ圧縮前の相互参照関係データ１０００の根頂点、すなわち頂点１００１を復元することができない。そのため、復元した箇所が元の相互参照関係データ１０００におけるどの位置に存在していたかが不明である。これに対して、前者の相互参照関係データ１４０１は、テンプレートを相互参照関係データへ１回復元するだけで（根）頂点１００１を復元することができるため、元の相互参照関係データ１０００における位置を確認しながら復元することが可能となる。したがって、上述の要領で優先圧縮を行うと、頂点の参照に要する時間を短縮できるようになる。
【００５２】
（第３の実施の形態）
データ圧縮装置１０１から出力される第１の出力データ１０９は、テンプレートの適用を示すテンプレート実体を頂点として表現しているため、圧縮前の相互参照関係データと同様、一致箇所検出手段１０３に入力することができる。そのため、複数のデータ圧縮装置を直列に接続することにより、相互参照関係データの再圧縮を行うことができる。ここで、図１５は、複数のデータ圧縮手段を直列に接続したデータ圧縮装置２１０４の構成を示すブロック図である。図に示すように、データ圧縮装置２１０４は一致箇所検出手段２１０７およびテンプレート置換手段２１０８を有する第１の圧縮手段２１０１と、第２の圧縮手段２１０２と、・・・、第Ｎの圧縮手段２１０ｎを連続して直列に接続している。第１〜第Ｎまでの各圧縮手段２１０１〜２１０ｎは、いずれも同一のテンプレート蓄積手段２１０９を参照するようになっている。また、各圧縮手段２１０１〜２１０ｎは、それぞれ相互参照関係データを入力し、その相互参照関係データをテンプレートを用いて圧縮し、圧縮済みの相互参照関係データを出力データとして出力するようになっている。このような構成を有するデータ圧縮装置２１０４により、相互参照関係データの再圧縮が行える。
【００５３】
データ復元装置の実施の形態
図９は、本発明の実施の形態に係るデータ復元装置１５０１の構成を示すブロック図である。データ復元装置１５０１は、テンプレート蓄積手段１５０２と、テンプレート展開手段１５０５と、切り替え手段１５０３および合成手段１５０４を有している。このデータ復元装置１５０１は圧縮済みの相互参照関係データを第１の入力データ１５０６とし、型と値を有する頂点群のデータを第２の入力データ１５０７とし、その第１の入力データ１５０６から圧縮前の相互参照関係データを復元し、それを第２の入力データ１５０７として入力される頂点群のデータと合成して、出力データ１５０８を出力するようになっている。本実施の形態では、データ復元装置１５０１に対し、第１の入力データ１５０６として、図７に示す相互参照関係データ１３０１を入力し、第２の入力データ１５０７として、図３に示すテーブル９００を入力するとし、テンプレート蓄積手段１５０２に図５に示すテンプレート１１０５のみが蓄積されている場合を例にとって、データ復元装置１５０１について説明する。
【００５４】
テンプレート展開手段１５０５は第１の入力データ１５０６として与えられた相互参照関係データ１３０１（のテンプレート適用箇所）をテンプレート蓄積手段１５０２に蓄積されているテンプレート１１０５を用いて展開する。その展開は、例えば図１３に示す置換手順により行うことができる。
なお、置換手順は以下のとおりである。
置換手順は、処理開始後、ステップ６に進みｉに０をセットして、ステップ７に進む。
ステップ７では、テンプレート一致箇所情報に含まれるすべての一致箇所について、それぞれ１つづつステップ８およびステップ９の処理を繰り返す。
ステップ８では、テンプレート実体を一つ作成し、実体ＩＤ＝ｉとする。このテンプレート実体をＯｉとし，以下の処理を行う
利用テンプレートＩＤを一致箇所Ｍｉの利用テンプレートＩＤより複製する。
実体情報をＭｉの頂点対応情報より複製する。実体接続情報は実体情報に記述された対応関係より、元の参照をそのまま代入する。
ステップ９では、ｉ＝ｉ＋１を計算する、
ステップ７の実行により、ステップ８およびステップ９を繰り返した後、ステップ１０では、作成済のテンプレート実体を１つずつ選択し、以下の処理を繰り返す。選択したテンプレート実体をＯｉとする。
次にステップ１１に進み、実体接続情報に記述された参照の接続先頂点が他のテンプレート実体に含まれる場合はテンプレート実体ＩＤとテンプレートの頂点の組に置換する。
相互参照関係データ１３０１を図１４に示す復元手順により展開すると、図６に示す相互参照関係データ１２０１のようになる。
なお、復元手順は以下のとおりである。
図１４において、開始後のステップ１２で、圧縮済みの相互参照関係データに含まれるすべてのテンプレート実体をＸ１，Ｘ２，Ｘｎとし、すべてについて以下を行う。
選択したテンプレート実体をＸｉとする。
次にステップ１３に進み、テンプレート実体Ｘｉが利用するテンプレートが持つ頂点間の参照情報を複製し、テンプレート実体Ｘｉの実体情報に記述される頂点のＩＤを割り振る。
次いでステップ１４に進み、テンプレート実体Ｘｉの実体接続情報に記述された頂点が他のテンプレート実体Ｘｍに含まれる頂点の場合、テンプレート実体Ｘｍに記述される頂点ＩＤで置換する。
【００５５】
切り替え手段１５０３は展開された相互参照関係データ１２０１の中に、更なるテンプレートの適用箇所が有るか否か（再適用箇所の有無）を判断する。そして、切り替え手段１５０３は再適用箇所が有ると判断すると、更なる展開を行うため、展開した結果の相互参照関係データをテンプレート展開手段１５０５に入力する。また、切り替え手段１５０３は、再適用箇所が無いと判断すると、展開した結果の相互参照関係データの出力先を合成手段１５０４へと切り替える。なお、再適用箇所は、例えば、全頂点のうち、テンプレート実体への参照を有する頂点を検出することによって、検出可能である。
テンプレート展開手段１５０５と、切り替え手段１５０３は、適用箇所がなくなるまで上述した展開を繰り返し実行する。
本実施の形態の場合、テンプレート１１０５を用いた１回目の展開結果は図６に示す相互参照関係データ１２０１のようになる。この相互参照関係データ１２０１は、テンプレート実体１２０２への参照を有しているため（ポインタ付き頂点１２０７が有るため）、まだ再適用箇所を有している。そのため、切り替え手段１５０３は展開した結果の相互参照関係データ１２０１をテンプレート展開手段１５０５に入力し、テンプレート展開手段１５０５がその再適用箇所を再び展開する。すると、図３に示す相互参照関係データ１０００が復元され、相互参照関係データ１０００が切り替え手段１５０３へ入力される。相互参照関係データ１０００は再適用箇所を含まないので、切り替え手段１５０３は出力先を合成手段１５０４へと切り替える。
【００５６】
合成手段１５０４は入力された相互参照関係データ１０００と、第２の入力データ１５０７として入力されたテーブル９００とを合成する。図４に示したテーブル９００には、各頂点に対応する頂点ＩＤ９０１が割り振られている。そのため、合成手段１５０４は相互参照関係データ１０００における頂点ＩＤ９０１が一致する各頂点に、型９０２と値９０３に設定されている情報を当て嵌めていくことにより、相互参照関係データ１０００とテーブル９００とを合成する。この合成を行うことにより、型と値をそれぞれ有する頂点群のデータと、各頂点間の参照情報とを有するデータ構造２１を復元することができる。
【００５７】
なお、図９において、データ復元装置１５０１は各手段が一体化された単一の装置として構成されているが、必ずしも単一の装置として実現される必要はなく、複数の装置を図示しない通信手段により接続して実現することも可能である。例えば、データ復元装置１５０１からテンプレート蓄積手段１５０２を分離した上で、テンプレート蓄積手段１５０２を別な単一装置として実現し、両装置間を図示しない通信手段により接続する構成にしてもよい。そうすると、テンプレート蓄積手段１５０２を有しない複数のデータ復元装置間でテンプレート蓄積手段１５０２を共有するといったことも可能になる。
また、本実施の形態では、切り替え手段１５０３がテンプレート展開手段１５０５への入力と合成手段１５０４への出力を切り替えることにより、テンプレート展開手段１５０５におけるテンプレートの展開処理を繰り返し実行している。その他にも、展開された相互参照関係データを常にテンプレート展開手段１５０５に入力し、テンプレートの展開が終了した段階で、合成手段１５０４に出力させるような切り替え手段を用いてもよい。
【００５８】
さらに、切り替え手段１５０３に対して、相互参照関係データの参照位置やテンプレートの展開回数等のデータをデータ復元装置１５０１の外部から与えるように構成してもよい。こうすると、テンプレート展開手段１５０５が、テンプレートの適用箇所を展開することにより入手可能な型と値をそれぞれ有する頂点群のデータと、各頂点間の参照情報とを有するデータ構造のうち、参照すべき（参照する必要がある）頂点の参照に必要なテンプレートを用いた展開のみを行うことが可能になる。
【００５９】
テンプレート生成装置の実施の形態
（第１の実施の形態）
図１０は、本実施の形態に係るテンプレート生成装置１６０１の構成を示すブロック図である。テンプレート生成装置１６０１はテンプレート候補検出手段１６０２と、テンプレート置換手段１６０３と、入力データ取得手段１６０４と、テンプレート候補蓄積手段１６０５と、テンプレート選択手段１６０６とを有している。このテンプレート生成装置１６０１は、入力データ群１６０７を入力し、出力データ（テンプレート群）１６０８を出力するようになっている。
【００６０】
入力データ群１６０７は根付木構造を有する複数の相互参照関係データにより構成されている。本実施の形態では、図２１に示すＸＭＬ文書３０および図２２に示すＸＭＬ文書４０からそれぞれ分離された図２３および図２４に示す２つの相互参照関係データ２９００，３０００を入力データ群１６０７として、テンプレート生成装置１６０１について説明する。
なお、図２１、図２２に示すＸＭＬ文書３０、４０から、相互参照関係データ２９００，３０００を分離するためには、第１の実施の形態と同様にして行えばよい。すなわち、この分離は、各頂点を一意に識別可能な頂点ＩＤを各頂点に順に割り振って相互参照関係データ２９００，３０００を生成し、その割り振った頂点ＩＤと、対応する頂点がもともと有していた型および値との組を列記してテーブルを生成し、そのテーブルを頂点群とすることで容易に行うことができる。
【００６１】
本発明を実現するための手順として複数の手順が考えられる。本実施の形態では、図２５、図２６、図２７に示すテンプレート生成の第１〜第３の手順を用いるものとする。
まず、図２５に示すテンプレート生成の第１の手順について説明する。テンプレート生成装置１６０１は、第１の手順の処理開始後、ステップ３０に進み、入力データ取得手段１６０４がテンプレート生成装置１６０１に与えられた入力データ群１６０７から相互参照関係データを１つ取り出し、その相互参照関係データをテンプレート候補検出手段１６０２に入力する。テンプレート候補検出手段１６０２は、入力する相互参照関係データを次の相互参照関係データが入力されるまで保持データＤに設定する。なお、テンプレート候補検出手段１６０２への相互参照関係データの選択順はいずれでもよいが、本実施の形態では、相互参照関係データ２９００，３０００の順に入力されるものとする。
【００６２】
（中間手順１）
次にステップ３１に進み、テンプレート生成装置１６０１は保持データＤの根頂点を引数として、第２の手順の呼び出しを行う。ここでは、相互参照関係データ２９００の根頂点２９０１を引数に設定して第２の手順の呼び出しを行う。続くステップ３２では、入力データ群１６０７に相互参照関係データが有るか否かを判断し、相互参照関係データが有ればステップ３０に戻り、無ければステップ３３に進む。このステップ３２により、テンプレート生成装置１６０１は入力データ群１６０７に相互参照関係データがある限り、各相互参照関係データ（の根頂点）を引数とする第２の手順の呼び出しを繰り返し行う。
一方、入力データ群１６０７に相互参照関係データが無くなると、それを入力データ取得手段１６０４が検知してテンプレート選択手段１６０６に通知する。テンプレート生成装置１６０１では、この通知があるとステップ３３に進み、テンプレート選択手段１６０６がテンプレート候補蓄積手段１６０５に蓄積されているテンプレート候補の中からテンプレートを選択し、選択したテンプレートをテンプレート群１６０８として出力する。
【００６３】
次に、第２の手順について説明する。第２の手順では、保持データＤの頂点を第１の手順または第３の手順から取得して引数cursorに設定する。この引数cursorは、第２の手順において、保持データＤのどの位置を辿っているかを表している。
ここでは、上述の中間手順１に示すとおり、第２の手順を呼び出すときの引数に保持データＤの根頂点２９０１が設定されている。
図２６に示すように、第２の手順を開始すると、ステップ４０に進み、保持データＤにおいて、引数cursorを根とする木構造を形成する部分参照情報をＴに設定する。ここでは引数cursorに保持データＤの根頂点２９０１が設定されているので、部分参照情報Ｔは保持データＤ（ここでは相互参照関係データ２９００）と一致している。
【００６４】
次に、ステップ４１に進み、引数cursorの値を変数Ｒに設定する。この変数Ｒは、保持データＤの部分参照情報Ｔの根頂点を示している。
続いてステップ４２に進み、変数Ｒの示す頂点を起点として、深さ優先探索で部分参照情報Ｔにおける木構造を形成する頂点を探索し、最初に遭遇する（葉）頂点を引数cursorに設定する。この段階で、引数cursorに頂点２９０４が設定される。変数Ｒは頂点２９０１を示す。
【００６５】
次に、ステップ４３では引数cursorに親となる頂点があるか否かを判断する。ここでは引数cursorが示す頂点２９０４は頂点２９０３を示す親参照を有しているため、ステップ４４に進む。このとき、テンプレート生成装置１６０１はテンプレート候補検出手段１６０２により、引数cursorが示す頂点と引数cursorの親参照が示す頂点とを有するパターンとなる候補パターンを設定し、この候補パターンが保持データＤに存在するか否かを検出する。ここでは、頂点２９０４と頂点２９０３とを有するパターンが候補パターンに設定される。
そして、テンプレート生成装置１６０１は、ステップ４４において、引数cursorとその親参照が示す頂点とで構成される候補パターンを第１の引数に設定し、変数Ｒ、引数cursorをそれぞれ第２の引数、第３の引数に設定して、第３の手順を呼び出す。なお、第３の手順では、第１の引数をＣ、第２の引数、第３の引数をそれぞれＲ、cursorとして表現する。
【００６６】
（中間手順２）
テンプレート生成装置１６０１は第３の手順を呼び出すと、図２７に示すステップ５０に進み、第３の引数cursorをデータＳに設定して保存する。なお、このステップ５０は必ずしも必要ではないが、本実施の形態では、データＳを後述するステップ５７におけるテンプレート候補検索の中断条件の判定に利用している。
そして、テンプレート生成装置１６０１はステップ５１に進み、第１の引数Ｃが示すパターン（候補パターンＣ）を有するテンプレート候補がテンプレート候補蓄積手段１６０５に蓄積されているか否かを判断する。ここでは、候補パターンＣを有するテンプレート候補はテンプレート候補蓄積手段１６０５に蓄積されていないので、テンプレート生成装置１６０１はステップ５３に進み、候補パターンＣを有するテンプレート候補を通過回数（出現回数）に“１”を設定してテンプレート候補蓄積手段１６０５に保存する。
【００６７】
なお、テンプレート候補蓄積手段１６０５へのテンプレート候補の蓄積方法は、様々な方法があるが、本実施の形態では、図２８に示すような形式で木構造を構築しながら蓄積する。
ここで、テンプレート候補の構成について図２８を用いて説明する。図２８に示すテンプレート候補３４０１は、パターン情報３４０２と、各テンプレート候補を一意に識別するための識別ＩＤ３４０３と、通過回数３４０５と、置換回数３４０６とを有している。通過回数３４０５は、テンプレート生成装置１６０１に入力された相互参照関係データ内における置換可能なテンプレート候補を探索する過程でカウントされるテンプレート候補により置換可能な延べ回数を示している。この通過回数３４０５は、テンプレートを蓄積するときに“１”に初期化されている。置換回数３４０６は、実際にそのテンプレートを適用した回数を示している。この置換回数３４０６は、テンプレートを蓄積するときに“０”に初期化されている。
【００６８】
テンプレート生成装置１６０１は、テンプレート候補蓄積手段１６０５内にテンプレート候補を複数蓄積している。本実施の形態では、図２９に示すように、複数のテンプレート候補を各テンプレート候補が頂点となる木構造で蓄積している。図２９において、各テンプレート候補間の矢印は、あるテンプレート候補に対し頂点を一つ加えることにより、その矢印が示すテンプレート候補と同じ構造になることを示している。矢印に添えられたラベルＮ（Ｍ）は頂点Ｍに対し、参照Ｎで頂点を加えることを意味している。参照Ｎは親参照ｐ，子参照ｃ，次兄弟参照ｎｓの３種類で記述している。なお、テンプレート候補の通過回数および置換回数は刻々と変化するため、図２９では図示を省略している。
【００６９】
テンプレート生成装置１６０１は、初めて第３の手順を呼び出したときはステップ５３に進む。そして、図２９に示すように、候補パターンＣがテンプレート候補３５０１のパターン情報と一致することから、テンプレート候補３５０１をテンプレート候補蓄積手段１６０５に追加する。この時、候補パターンＣは第３の引数cursorが示す保持データＤの頂点において置換可能であることを示すため、テンプレート候補３５０１の通過回数は“１”に設定される。
【００７０】
テンプレート生成装置１６０１はステップ５４に進むと、候補パターンＣを有するテンプレート候補に対する停止条件の成立可否を判断し、停止条件に基づき、テンプレート候補をこれ以上生成するか否かを判定する。停止条件は複数考えられるが、本実施の形態では、頂点のうち、第２の引数Ｒに対応する頂点（頂点Ｒ）が木構造の根頂点になる部分参照情報におけるすべての頂点がテンプレート候補により置換されたことを停止条件とすることができる。これは、第３の引数cursorが頂点Ｒ以下の部分木の最後の頂点であるか否かを確認することにより判定することができる（停止条件１）。また、テンプレート候補蓄積手段１６０５の記憶容量が限られているので、テンプレート候補の検出をテンプレート候補内の頂点数や木の高さ等で止めることを停止条件にしてもよい（停止条件２）。この停止条件２は、テンプレート候補の候補パターンＣに含まれる頂点数が５以上であるか否かにすることができるが、これには限られない。
（中間手順３）
ここでは、候補パターンＣはテンプレート候補３５０１のパターン情報と一致し、テンプレート候補内の頂点数は“２”である。また、第２の引数Ｒは頂点２９０１を示すが、
候補パターンＣは第２の引数Ｒ以下の頂点をすべて含んでいないため、停止条件２（テンプレート候補の候補パターンＣに含まれる頂点数が５以上であること）および停止条件１のいずれの停止条件も成立しない。そのため、テンプレート生成装置１６０１の処理はステップ５５に進む。
【００７１】
テンプレート生成装置１６０１はステップ５５で、第３の引数cursorより、保持データＤを深さ優先探索でトレースし、そのときに遭遇する次の頂点を候補パターンＣに追加して、追加後のパターンを候補パターンＣに設定する。これにより、テンプレート生成装置１６０１は候補パターンＣに頂点を一つ加えて新たなテンプレート候補検出を行う。これにより、本発明における拡張候補検出が行われる。ここでは、第３の引数cursorは頂点２９０４を示している。また、候補パターンＣはテンプレート候補３５０１のパターンと形状が一致し、保持データＤ上では頂点２９０３および頂点２９０４に一致している。そのため、深さ優先探索により、第３の引数cursorの示す頂点（頂点２９０４）の次の頂点である頂点２９０５を候補パターンＣに加えた構造、すなわち図２９に示すテンプレート候補３５０２のパターンと同一のパターンがテンプレート候補検出手段１６０２により検出され、その検出されたパターンが新たに候補パターンＣに設定される。
【００７２】
さらにステップ５６に進み、保持データＤにおける新たに追加された頂点を第３の引数cursorに設定する。ここでは、第３の引数cursorに頂点２９０５が設定される。
次に、ステップ５７に進み、候補パターンＣを有するテンプレート候補に対する中断条件の成立可否を判断する。中断条件が成立すればステップ５８に進み、未成立ならばステップ５１に戻る。このステップ５７の中断条件の判定と、ステップ５８の処理を加えることにより、テンプレートの大きさを制限し、出現頻度の低いテンプレートの生成を抑制することができる。中断条件としては、保持データＤにおける第３の引数cursorが示す頂点の高さと、データＳが示す頂点（頂点Ｓ）の保持データＤにおける高さの差がＮ以上であるとか、候補パターンＣに含まれる頂点の数がＮ以下である等、複数の方法やその組み合わせを用いることが可能である。
【００７３】
（中間手順４）
本実施の形態では、ステップ５７の中断条件は次のようにしている。すなわち、保持データＤにおける第３の引数cursorが示す頂点の高さと、データＳが示す頂点の高さとが同じであり、かつ第３の引数cursorが示す頂点が子頂点を有していることを中断条件に設定している。
この中断条件が成立するとステップ５８に進み、第３の引数cursorを引数に設定して上述した第２の手順を呼び出す。第２の手順が終了するとステップ５５に戻る。このように中断条件が成立するとステップ５８に進み、第３の引数cursorを起点として別なテンプレート候補（候補パターン）の検出を繰返し行う。これにより、テンプレート候補検出手段１６０２は、検出するテンプレート候補の大きさを制限している。
【００７４】
ここでは、図２３に示すように、第３の引数cursorが頂点２９０５を示し、頂点２９０５は子頂点を有していない。そのため、中断条件は成立せず、テンプレート生成装置１６０１はステップ５７からステップ５１に戻る。この時点での候補パターンＣは図２９に示すテンプレート候補３５０２のパターンと一致している。また、テンプレート候補蓄積手段１６０５には、テンプレート候補３５０１のみが蓄積されている。そのため、テンプレート生成装置１６０１は、ステップ５１からステップ５３に進み、テンプレート候補検出手段１６０２が候補パターンＣを有するテンプレート候補３５０２を出現回数に“１”を設定して、テンプレート候補蓄積手段１６０５に追加する。また、テンプレート候補検出手段１６０２は、この追加の際、テンプレート候補３５０１とテンプレート候補３５０２の間に矢印を設け、頂点３６０２の次兄弟参照として、パターンに頂点を追加したことを表すラベルｎｓ（３６０２）を付する。
【００７５】
そして、テンプレート生成装置１６０１はステップ５４からステップ５７までを上記同様に繰り返し実行する。このとき、テンプレート候補３５０３のパターンと同様の構造を候補パターンＣとして取得してステップ５１からステップ５３までを実行する。これにより、テンプレート候補蓄積手段１６０５にテンプレート候補３５０３が追加され、テンプレート候補３５０２とテンプレート候補３５０３の間に矢印が設定され、ラベルｎｓ（３６０３）が付される。
【００７６】
この段階におけるテンプレート候補蓄積手段１６０５には、図２９に示す各テンプレート候補のうち、テンプレート候補３５０１、テンプレート候補３５０２、テンプレート候補３５０３のみが蓄積されている。また、各テンプレート候補３５０１、テンプレート候補３５０２、テンプレート候補３５０３のそれぞれの通過回数はいずれも“１”である。
（中間手順５）
そして、ステップ５４〜５６を実行してステップ５７に進むと、第３の引数cursorが頂点２９０６を示し、中間手順４に示す中断条件が成立する。そこで、テンプレート生成装置１６０１はテンプレート検出を中断してステップ５８に進み、第３の引数cursorを引数に設定して、第２の手順を呼び出す。
【００７７】
（中間手順６）
ここでは、引数に頂点２９０６が設定されて第２の手順が呼び出される。これにより、頂点２９０６を根とする保持データＤの部分木に対して、テンプレート候補の探索が行われる。
テンプレート生成装置１６０１は、第２の手順を呼び出すと、図２６に示すステップ４０からステップ４３までを上記同様に実行する。そして、ステップ４４に進み、テンプレート候補３５０１のパターンと同様の構造を第１の引数に設定し、頂点２９０６を第２の引数に設定し、頂点２９０７を第３の引数に設定して第３の手順を呼び出す。
【００７８】
そして、第３の手順の呼び出しにより、テンプレート生成装置１６０１は、候補パターンＣとしてテンプレート候補３５０１に含まれるパターンと同様のパターンを取得する。また、第２の引数Ｒとして頂点２９０６を取得し、第３の引数cursorとして、頂点２９０７を取得する。
ここで、候補パターンＣは既にテンプレート候補蓄積手段１６０５にテンプレート候補３５０１として蓄積されていることから、テンプレート生成装置１６０１は、図２７におけるステップ５１からステップ５２に進み、テンプレート候補３５０１の通過回数に“１”を加算して“２”にする。
【００７９】
また、テンプレート生成装置１６０１は、ステップ５４からステップ５７までの処理を実行するとステップ５１に戻るが、このとき、候補パターンＣはテンプレート候補３５０２のテンプレート候補と合致し、第３の引数cursorは頂点２９０８を示している。このとき、テンプレート生成装置１６０１は、テンプレート候補３５０２の通過回数に“１”を加算して、“２”にする。
この時点で、第３の引数cursorが頂点２９０８を示す。このことは、中間手順３に示した上述の停止条件１、すなわち引数cursorが頂点Ｒ以下の部分木の最後の頂点であることを満たしている。そのため、テンプレート生成装置１６０１の処理はステップ５４からステップ５９に進む。
【００８０】
（中間手順７）
テンプレート生成装置１６０１は、ステップ５９に進むと、候補パターンＣを有するテンプレート候補による置換がそのまま可能であるか否かを判定する。置換可能と判定したときはステップ６０に進み、そうでなければステップ６２に進む。
ここで、候補パターンＣによる置換が可能であるか否かは、候補パターンＣにおける根頂点Ｘの子頂点の数と、候補パターンＣを保持データＤに合致させたとき、根頂点Ｘに合致する保持データＤにおける頂点Ｙの子頂点の数とが一致するか否かによって判定することができる（以下「置換判定基準」という）。ここでは、候補パターンＣは、テンプレート候補３５０２のパターンと同様の構造を有し、その根頂点３６０１の子頂点は、頂点３６０２と頂点３６０３の２つであり、保持データＤにおける頂点２９０６の子頂点は頂点２９０７と頂点２９０８の２つである。したがって、根頂点３６０１の子頂点数は、頂点２９０６における子頂点数と一致する。そのため、テンプレート生成装置１６０１はステップ５９からステップ６０に処理を進める。
【００８１】
（中間手順８）
テンプレート生成装置１６０１は、ステップ６０に進むと、保持データＤにおける該当箇所をテンプレート候補により置換して、その適用箇所を頂点で表現し、その結果得られるデータを入力データ取得手段１６０４に入力する。すなわち、テンプレート置換手段１６０３により、保持データＤの頂点を候補パターンＣと同様の構造を有するテンプレート候補で置換し、その置換した結果を入力データ取得手段１６０４に入力する。
テンプレート候補による置換は、第１の実施の形態におけるテンプレートによる置換と同様にテンプレート実体を用いて行うが、本実施の形態では、説明を簡単にするため、便宜上、「候補置換」と表現する。
【００８２】
ステップ６２に進むと、テンプレート候補蓄積手段１６０５に蓄積されたテンプレート候補の中で、最新のテンプレート候補から木構造を上方向に辿り、最初に遭遇する親参照または子参照接続のテンプレート候補を用いて保持データＤを置換して頂点で表現し、その結果得られるデータを入力データ取得手段１６０４に入力する。
入力データ取得手段１６０４は置換された保持データＤが頂点一つで表されていない限り、さらにテンプレートの適用が可能と判断し、テンプレート候補検出手段１６０２に保持データＤを入力してテンプレート候補の検出を継続する。このとき、テンプレート候補蓄積手段１６０５に蓄積された候補パターンＣと合致するテンプレート候補、すなわち、テンプレート候補３５０２の置換回数に“１”を加算して“１”とする。
【００８３】
置換結果は図２３に示す相互参照関係データ２９００から、頂点２９０７、頂点２９０８を除いて、第１の実施の形態と同様に、頂点２９０６をテンプレート候補３５０２による置換を表す頂点（指示付頂点）で表現することができる。また、テンプレート候補３５０２による置換のため、引数cursorが参照していた頂点２９０８は存在しなくなる。そのため、引数cursorは置換後の頂点２９０６を参照するように設定する。
【００８４】
ステップ６１では、第３の引数cursorと第２の引数Ｒとが異なるか否かを判定する。ここで、両者が一致していると第３の手順が終了し、異なればステップ６３に進む。上述の中間手順８に示すようにしてテンプレート候補により置換すると第２の引数Ｒ以下の頂点がすべて含まれる。そのため、第３の引数cursorと第２の引数Ｒとは、ともに頂点２９０６を参照し、一致することになる。よって、テンプレート生成装置１６０１はステップ６１からステップ６３を実行することなく第３の手順を終了する。
一方、第３の手順の呼び出しは、上述の中間手順６に示すように、第２の手順におけるステップ４４から再帰的に行われているが、第２の手順におけるステップ４４の処理が修了した後、その第２の手順の呼び出し元となる第３の手順のステップ５８、すなわち、上述の中間手順５で中断したテンプレート検出を再開することになる。
このとき、復帰後における値はそれぞれ候補パターンＣはテンプレート候補３５０３と一致し、第３の引数cursorは頂点２９０６を示し、第２の引数Ｒは頂点２９０１を示し、データＳは頂点２９０４を示している。
【００８５】
テンプレート生成装置１６０１は、ステップ５５に戻ると、テンプレート候補検出手段１６０２により、候補パターンＣに頂点を追加し、新たなテンプレート候補を検出しようとする。しかし、第３の引数cursorが示す頂点２９０６は、上述のとおり既にテンプレート候補による置換が行われ、子参照も、次兄弟参照も有していないことから、頂点の追加は第３の引数cursorにおける親頂点の更に親参照方向に向かって行われる。この頂点の追加により、候補パターンＣはテンプレート候補３５０５のテンプレート候補と同様の構造を取得し、ステップ５６により第３の引数cursorは頂点２９０２に移動する。
【００８６】
第３の引数cursorが示す頂点２９０２は、上述の中間手順２で保存され、始点となるデータＳの示す頂点（頂点Ｓ）、すなわち、頂点２９０４と高さが異なるため、中間手順４に示した中断条件が成立しない。よって、テンプレート生成装置１６０１の処理は、ステップ５７からステップ５１に戻り、さらにステップ５３に進み、テンプレート候補３５０５をテンプレート候補蓄積手段１６０５に出現回数を“１”にして蓄積する。
ステップ５４に進むと、候補パターンＣがテンプレート候補３５０５のパターンと一致し、頂点数が“５”であり、中間手順３に示した停止条件が成立している。よって、テンプレート生成装置１６０１の処理はステップ５９に進む。
【００８７】
ステップ５９では、候補パターンＣを有するテンプレート候補による置換がそのまま可能か否かを判断する。ここでは、上述した中間手順７に示した置換判定基準を適用し、テンプレート候補３５０５により置換可能であると判断する。
さらに、テンプレート生成装置１６０１は続くステップ６０において、テンプレート置換手段１６０３を用いてテンプレート候補３５０５により保持データＤの頂点を置換し、その置換結果を入力データ取得手段１６０４に入力する。
【００８８】
入力データ取得手段１６０４は置換された保持データＤが頂点１つで表されていない限り、更にテンプレートの適用が可能と判断し、テンプレート候補検出手段１６０２に保持データＤを入力し、テンプレート候補の検出を継続する。
この時点で、候補パターンＣはテンプレート候補３５０５のパターンと一致するため、テンプレート候補３５０５の通過回数に“１”を加算して、“１”とする。
【００８９】
この時、第３の引数cursorは置換後の頂点２９０２を示すが、第２の引数Ｒは頂点２９０１を示す。そのため、ステップ６１において、第３の引数cursorと第２の引数Ｒとが異なると判断され、ステップ６３に進み、第２の引数Ｒを引数として第２の手順が呼び出される。これは既にテンプレート候補により置換された元の保持データＤに対し、テンプレート候補の検出を試みることを意味している。
本実施の形態のこれまでの説明の中で、保持データＤに対しては、既にテンプレート置換が２回行われており、この段階で保持データＤは、図２３におけるエリア２９１２および２９１５に属する頂点のみを有している。
【００９０】
テンプレート生成装置１６０１はこれまでと同様、第２の手順と第３の手順を再帰的に呼び出しながら、保持データＤのテンプレート候補による置換を更に進め、最終的に第１の手順を終了し、保持データＤを一つの頂点で表す。入力データ取得手段１６０４は、保持データＤが一つの頂点で表されたことを検出すると、入力データ群１６０７から、次の相互参照関係データ３０００を取得する。
図２３に示す相互参照関係データ２９００について、テンプレート候補による置換が終了した段階におけるテンプレート候補蓄積手段１６０５の状況は図３０に示すとおりである。
【００９１】
そして、入力データ取得手段１６０４は、図２３に示す保持データＤの入力が終了したため、図２４に示す相互参照関係データ３０００の入力を開始する。図２４に示す相互参照関係データ３０００についても、図２３に示す相互参照関係データ２９００と同様の手順を繰り返す。ここで、引数cursorは頂点３００６に一致し、変数Ｒが頂点３００８に一致し、候補パターンＣが図２９のテンプレート候補３５１０に一致するとき、候補パターンＣの頂点数が“５”であることから、上述の中間手順３に示す停止条件２が成立する。
【００９２】
そのため、テンプレート生成装置１６０１は、処理をステップ５９に進め、テンプレート候補３５１０がそのまま適用可能であるか否かを判定する。図２４に示すように、頂点３００６には、次兄弟頂点３００７が存在するため、テンプレート候補３５１０による置換は不可能であり、ステップ６２に進む。
よって、テンプレート生成装置１６０１はテンプレート候補蓄積手段１６０５の中で、テンプレート候補３５１０の位置から木構造を上方向に辿り、最初に遭遇する親参照または子参照接続のテンプレート候補を発見する。この時、辿った経路上に存在する、テンプレート候補の通過回数から“１”を減算していく。
【００９３】
本実施の形態の場合、これは図２９に示すテンプレート候補３５０１となり、そのテンプレート候補３５０１により、保持データＤの頂点を置換する。これ以降の処理は、相互参照関係データ２９００にテンプレート置換を施した場合と同様にして進める。
相互参照関係データ３０００についても、最終的には頂点１つで表現することが可能である。頂点１つで表現された段階で、入力データ取得手段１６０４がこれ以上入力がないことを検知し、テンプレート選択手段１６０６にその旨を入力する。
【００９４】
図２３、図２４に示す相互参照関係データ２９００，３０００の入力が終了した時点におけるテンプレート候補蓄積手段１６０５の状況を図３１に示す。符号３７０１〜３７０９はパターンを示している。
テンプレート選択手段１６０６はテンプレート候補蓄積手段１６０５に蓄積されたテンプレート候補の中からテンプレートを選択して出力する。このとき、テンプレートの選択方法は複数通り考えられるが、本実施の形態では、テンプレート候補の置換回数が“０”でないものを選択するものとする。この時、テンプレート候補からパターンを抽出し、その抽出したパターンをテンプレートにするが、これは、第１の実施の形態に示すようにして、テンプレートを構成すれば容易に可能である。
【００９５】
このようにして、テンプレート生成装置１６０１は、テンプレート候補蓄積手段１６０５から、テンプレート選択手段１６０６を用いてパターン３７０１、パターン３７０２、パターン３７０４、パターン３７０５、パターン３７０９を抽出し、抽出した各パターンをそれぞれテンプレートに変換し、変換された各テンプレートを出力データ１６０８として出力する。
以上に示す手順により、テンプレート生成装置１６０１はテンプレートを生成することができる。
【００９６】
（第２の実施の形態）
上述のとおり、本発明ではテンプレートの再帰的な適用によるデータ圧縮、すなわち、テンプレートを適用し、そのテンプレートを新たな頂点として表現することにより、再帰的にデータ圧縮を行っている。このことを考慮すると、テンプレートはそのテンプレート内の頂点がテンプレート外の頂点との間で保有される参照情報を接続情報として保持するが、その接続情報の種類および数はもとの相互参照関係データの頂点が有している参照情報の種類および数（木構造の頂点であれば、親参照１つ、子参照１つ、前兄弟参照１つ、次兄弟参照１つ）を超えないことが望ましい。
【００９７】
また、テンプレートは接続情報の種類および数が多くなるほど、それを用いた置換による圧縮の効率が悪化するため、テンプレートはできるだけ接続情報が少なくなるように設けられていることが望ましい。
そこで、本実施の形態では、次のようにして、できるだけ接続情報が少なくなるようして、テンプレートを生成している。すなわち、データ圧縮の対象として入力される相互参照関係データ（入力データ）が根付木構造を有するときに、テンプレート生成装置において、入力データからテンプレート候補を検出する際に、入力データのある頂点を根頂点として、その頂点が有する子孫頂点で形成される部分木構造を抽出すべきテンプレート候補のパターン情報に設定している。
【００９８】
このようにして生成されたテンプレートは、テンプレート外部と相互に接続している頂点が根頂点のみとなる根付木構造になるため、再圧縮を行ったときにテンプレートをひとつの頂点とみなしても、テンプレートの接続情報の種類および数が、もとの入力データにおける各頂点が有する参照情報の種類および数を越えることはない。しかも、テンプレート内の根頂点のみがテンプレートの外部と相互に接続しているため、入力データを再圧縮する際、入力データの木構造で最も深い位置にある頂点（葉頂点）から順にテンプレートに置換していくと、頂点として表現されたテンプレートが必ずそのテンプレートを適用した箇所の上位の頂点よりも深い位置の頂点（葉頂点）となる。そのため、テンプレート候補検出手段１６０２において検出されたテンプレート候補をすべてテンプレートとして利用したときは、最終的に入力データを１つの頂点で表現することが可能となる。
【００９９】
図１６はテンプレート候補検出手段１６０２における動作手順を示すフローチャートである。テンプレート候補検出手段１６０２は根付木構造を有する入力データを入力し、テンプレート候補として、その入力データの根頂点から数えて最も浅い位置にある葉頂点と同一の深さを有する頂点すべてを含む最小木構造の部分参照情報を検出する。
その葉頂点と同一の深さを有する頂点のうち、子孫頂点を有する頂点があるときは、その頂点を根頂点とし、その頂点が有する子孫頂点で形成される根付木構造の部分参照情報をテンプレート候補検出手段に再度入力することにより、別途テンプレート候補を検出する。
【０１００】
ここで、例えば、図１７に示す相互参照関係データ２００８からテンプレート候補を検出するとする。幅優先探索を行って最初に遭遇する葉頂点は頂点２００６である。テンプレート候補検出手段１６０２は、根頂点２００１から頂点２００６の深さまでに存在する頂点群で形成される部分参照情報、すなわち、頂点２００１、頂点２００２、頂点２００６、頂点２００７で形成される根付木構造の部分参照情報をテンプレート候補として抽出し、テンプレート候補蓄積手段１６０５に蓄積する。
【０１０１】
頂点２００２は根頂点２００１から頂点２００６と同一の深さに存在し、子孫頂点を有する頂点である。この場合は、頂点２００２を根頂点として、これとその子孫頂点とで形成される部分参照情報、すなわち、頂点２００２、頂点２００３、頂点２００４、頂点２００５で形成される根付木構造を有する部分参照情報を引数として、テンプレート候補検出手段１６０２を再帰的に呼び出す。その結果、得られるテンプレート候補は、図１８、図１９に示す第１のテンプレート候補２００９、第２のテンプレート候補２０１０のようになる。
【０１０２】
本実施の形態では、相互参照関係データ２００８の根頂点から数えて最も浅い位置にある葉頂点を基準にしてテンプレート候補を抽出しているが、深さ優先探索で最初に遭遇する葉頂点を基準にしてその葉頂点より浅いか同じ深さにある頂点すべてを含む最小木構造の部分参照情報をテンプレート候補として検出しても良い。また、根頂点から数えた深さを予め設定しておき、その設定された深さにある頂点をすべて含む最小木構造の部分参照情報をテンプレート候補にしても良い。
【０１０３】
また、相互参照関係データ２００８の木構造のうち最も深い位置にある頂点を基準の頂点とし、その頂点と同一の深さにある頂点すべてを含む最小木構造の部分参照情報をテンプレート候補として検出しても良い。この場合、テンプレート候補として検出された部分参照情報は、その部分参照情報の根頂点のみで表し、その根頂点の子孫頂点は基準となる頂点の探索範囲としない。また、最も深い位置にある頂点から数えた深さ（設定深さ）を予め設定しておき、最も深い位置に存在する頂点から、その設定深さの中に存在している頂点までに存在する頂点で形成される根付木構造の部分参照情報群をそれぞれテンプレート候補としてもよい。
【０１０４】
データ圧縮システムの実施の形態
図２０は、本発明の実施の形態に係るデータ圧縮システム２６０１のシステム構成図である。データ圧縮システム２６０１はテンプレート生成装置２６０２と、データ圧縮装置２６０３とを有し、第１の入力データ２６０５と第２の入力データ２６０４を入力してデータ圧縮を行う。そして、データ圧縮システム２６０１では、テンプレートにより置換されたテンプレート適用済みの相互参照関係データを第１の出力データ２６０６として出力し、入力する相互参照関係データから分離された複数の頂点を有する頂点群のデータを第２の出力データ２６０７として出力する。
【０１０５】
テンプレート生成装置２６０２は、型と値をそれぞれ有する複数の頂点と、各頂点間の参照関係が根付木構造を有する参照情報とを有する相互参照関係データを第２の入力データ２６０４として入力する。この第２の入力データ２６０４は、データ圧縮装置２６０３における圧縮に用いられるテンプレートの生成用として入力する。
また、テンプレート生成装置２６０２は、第２の入力データの各頂点間の参照情報に含まれる根付木構造の部分参照情報から、その部分参照情報をパターンに設定したときの出現頻度およびテンプレートにしたときの圧縮効果に応じた部分参照情報をテンプレートとして出力する。つまり、テンプレート生成装置２６０２は、出現頻度が高く、しかも圧縮効果が高い部分参照情報をテンプレートとして出力する。
【０１０６】
そして、例えば、図２（ｂ）に示したデータ構造２１を入力し、これを圧縮する際、第２の入力データ２６０４として、データ構造２１から分離手段１０７によって分離された相互参照関係データ２００８がテンプレート生成装置２６０２に入力される。ここで、出現頻度が高く圧縮効果が高い部分参照情報が、図１９に示した第２のテンプレート候補２０１０であったとすると、テンプレート生成装置２６０２は第２のテンプレート候補２０１０をテンプレートとして出力する。出力されたテンプレートはデータ圧縮装置２６０３のテンプレート蓄積手段１０２に蓄積される。このテンプレートは、他の相互参照関係データが入力された際に共通に利用されることになる。
【０１０７】
データ圧縮装置２６０３は、第１の入力データ２６０５として、第２の入力データ２６０４と同様の構造を有するデータを入力する。このデータ圧縮装置２６０３は、図１に示すデータ圧縮装置１０１と同様の構成を有している。すなわち、データ圧縮装置２６０３は、分離手段１０７と、テンプレート蓄積手段１０２と、一致箇所検出手段１０３と、テンプレート置換手段１１１および切り替え手段１０４を有している。テンプレート蓄積手段１０２はテンプレート生成装置２６０２から出力されるテンプレートを蓄積している。一致箇所検出手段１０３は入力される相互参照関係データから、木構造の葉頂点を含む一致箇所のみを検出し、テンプレートへ置換する再置換を行う。
【０１０８】
一致箇所検出手段１０３は、図１７に示す相互参照関係データ２００８に含まれる頂点のうち、テンプレート蓄積手段１０２に蓄積されているテンプレートに対応する一致箇所を検出する。この際、一致箇所検出手段１０３は、葉頂点を含むテンプレートの一致箇所のみを検出したとすると、頂点２００２、頂点２００３、頂点２００４および頂点２００５で形成される部分参照情報を一致箇所として検出する。
【０１０９】
テンプレート置換手段１１１は、検出された一致箇所にテンプレートを適用する。この際、テンプレートを新たな頂点として表現し、テンプレート適用済みの相互参照関係データを出力する。また、切り替え手段１０４により出力が選択されると、テンプレート適用済みの相互参照関係データが第１の出力データ２６０６として出力される。切り替え手段１０４により再圧縮が選択されると、再圧縮を行うため、そのテンプレート適用済みの相互参照関係データが再帰的に一致箇所検出手段１０３に入力され、再度テンプレートの適用が行われる。第１の出力データ２６０６は、図８に示した相互参照関係データ１４０１のようになる。
【０１１０】
このようにデータ圧縮システム２６０１を構成することにより、与えられた入力データの圧縮に適したテンプレートを動的に生成し、その生成されたテンプレートを用いて、入力データを圧縮することができる。そのため、データ圧縮システム２６０１によると圧縮効果の高いデータ圧縮を実現できる。
【図面の簡単な説明】
【０１１１】
【図１】本発明の実施の形態に係るデータ圧縮装置の構成を示すブロック図である。
【図２】（ａ）はＸＭＬ文書の一例を示す図、（ｂ）は（ａ）のＸＭＬ文書のデータ構造を示す図である。
【図３】圧縮前の相互参照関係データを示す図である。
【図４】頂点の集合のテーブルを示す図である。
【図５】（ａ）はテンプレートの構成を示すブロック図、（ｂ）はテンプレート実体の構成を示すブロック図である。
【図６】図５（ｂ）に示すテンプレートを用いて圧縮した相互参照関係データを示す図である。
【図７】図５（ｂ）に示すテンプレートを用いてさらに圧縮した相互参照関係データを示す図である。
【図８】図５（ｂ）に示すテンプレートを用いてさらに圧縮した別の相互参照関係データを示す図である。
【図９】本発明の実施の形態に係るデータ復元装置の構成を示すブロック図である。
【図１０】本発明の実施の形態に係るテンプレート生成装置の構成を示すブロック図である。
【図１１】（ａ）は一致箇所情報の構成を示すブロック図、（ｂ）は図６に対応する一致箇所情報の構成を示すブロック図である、（ｃ）は別の一致箇所情報の構成を示すブロック図である。
【図１２】一致箇所検出手順の一例を示す図である。
【図１３】置換手順の一例を示す図である。
【図１４】復元手順の一例を示す図である。
【図１５】別のデータ圧縮装置の構成を示すブロック図である。
【図１６】テンプレート候補検出手段の動作手順の一例を示すフローチャートである。
【図１７】圧縮前の別の相互参照関係データを示す図である。
【図１８】第１のテンプレート候補の構成を示す図である。
【図１９】第２のテンプレート候補の構成を示す図である。
【図２０】データ圧縮システムのシステム構成図である。
【図２１】別のＸＭＬ文書を示す図である。
【図２２】さらに別のＸＭＬ文書を示す図である。
【図２３】図２１のＸＭＬ文書から分離された相互参照関係データを示す図である。
【図２４】図２２のＸＭＬ文書から分離された相互参照関係データを示す図である。
【図２５】テンプレート生成の第１の手順を示すフローチャートである。
【図２６】テンプレート生成の第２の手順を示すフローチャートである。
【図２７】テンプレート生成の第３の手順を示すフローチャートである。
【図２８】テンプレート候補の構成を示すブロック図である。
【図２９】テンプレート候補蓄積手段の内部構成を示す図である。
【図３０】テンプレート候補蓄積手段の別の内部構成を示す図である。
【図３１】テンプレート候補蓄積手段のさらに別の内部構成を示す図である。
【図３２】ＸＭＬ文書の別の一例を示す図である。
【図３３】図３２のＸＭＬ文書のデータ構造を示す図である。
【図３４】（ａ）は図３３のＸＭＬ文書から分離された相互参照関係データを示す図、（ｂ）は頂点の集合のテーブルを示す図である。
【図３５】図３２のＸＭＬ文書から分離されたデータ構造を示す図である。
【図３６】図３２のＸＭＬ文書から分離された要素名情報を示す図である。
【図３７】図３２のＸＭＬ文書から分離されたテキスト情報を示す図である。
【符号の説明】
【０１１２】
２０，３０，４０…ＸＭＬ文書
２１，３１…データ構造
１０１，２１０４，２６０３…データ圧縮装置
１０２，１５０２…テンプレート蓄積手段
１０３，２１０７…一致箇所検出手段
１０７，２１０６…分離手段
１０８，２１０５…入力データ
１０９，２１１０，２６０６…第１の出力データ
１１０，２１１１，２６０７…第２の出力データ
１１１，１６０３，２１０８…テンプレート置換手段
１０００，１２０１…相互参照関係データ
１３０１，１４０１，２００８…相互参照関係データ
１００１，１００２，１００３，１００４…頂点
１００５，１００６，１００７…頂点
９００…テーブル、１１０５…テンプレート
１１０９，１２０２，１３０２…テンプレート実体
１５０１…データ復元装置、１５０４…合成手段
１５０５…テンプレート展開手段
１５０６，２６０５…第１の入力データ
１５０７，２６０４…第２の入力データ
１５０８…出力データ
１６０１，２６０２…テンプレート生成装置
１６０２…テンプレート候補検出手段
１６０４…入力データ取得手段
１６０５…テンプレート候補蓄積手段
１６０６…テンプレート選択手段
１６０７…入力データ群、１６０８…出力データ
２００９…第１のテンプレート候補
２０１０…第２のテンプレート候補
２１０１…第１の圧縮手段
２１０９…テンプレート蓄積手段
２６０１…データ圧縮システム
２９００，３０００…相互参照関係データ
３４０１…テンプレート候補
【図１】
2005202507.tif 000003
【図２】
2005202507.tif 000004
【図３】
2005202507.tif 000005
【図４】
2005202507.tif 000006
【図５】
2005202507.tif 000007
【図６】
2005202507.tif 000008
【図７】
2005202507.tif 000009
【図８】
2005202507.tif 000010
【図９】
2005202507.tif 000011
【図１０】
2005202507.tif 000012
【図１１】
2005202507.tif 000013
【図１２】
2005202507.tif 000014
【図１３】
2005202507.tif 000015
【図１４】
2005202507.tif 000016
【図１５】
2005202507.tif 000017
【図１６】
2005202507.tif 000018
【図１７】
2005202507.tif 000019
【図１８】
2005202507.tif 000020
【図１９】
2005202507.tif 000021
【図２０】
2005202507.tif 000022
【図２１】
2005202507.tif 000023
【図２２】
2005202507.tif 000024
【図２３】
2005202507.tif 000025
【図２４】
2005202507.tif 000026
【図２５】
2005202507.tif 000027
【図２６】
2005202507.tif 000028
【図２７】
2005202507.tif 000029
【図２８】
2005202507.tif 000030
【図２９】
2005202507.tif 000031
【図３０】
2005202507.tif 000032
【図３１】
2005202507.tif 000033
【図３２】
2005202507.tif 000034
【図３３】
2005202507.tif 000035
【図３４】
2005202507.tif 000036
【図３５】
2005202507.tif 000037
【図３６】
2005202507.tif 000038
【図３７】
2005202507.tif 000039