(57)【特許請求の範囲】
【請求項１】
構造化文書を管理する構造化文書管理装置において、前記構造化文書中の各要素の属性情報及び内容情報を要素情報として登録する要素登録手段と、前記構造化文書中の各要素間の親子関係を並べたデータをバイナリ形式の構造情報として登録する構造情報登録手段と、前記要素登録手段により登録される前記要素情報をリレーショナルデータベースのレコードとして保持するとともに前記構造情報登録手段により登録されるバイナリ形式の前記構造情報を前記リレーショナルデータベースのレコードとして保持する情報保持手段と、前記情報保持手段に保持されている構造化文書に対して編集を行った後の構造化文書が入力されたとき編集前の構造化文書と編集後の構造化文書の間で要素ごとに対応させて差分を解析する差分解析手段を有し、前記差分解析手段で解析された差分について前記要素登録手段で要素情報を登録するとともに前記構造情報登録手段で差分を含む構造情報を生成して登録することを特徴とする構造化文書管理装置。
【請求項２】
さらに、入力された構造化文書の構造を設定されたタグあるいは属性を有する要素あるいは構造の深さに基づき分割して複数の部分構造に分解するとともに前記部分構造間の親子関係を部分構造ごとに並べたデータをバイナリ形式のグローバル構造情報として前記情報保持手段に登録する分解手段を有し、前記要素登録手段及び前記構造情報登録手段は、前記分解手段によって分解された部分構造ごとに各要素情報及び構造情報を前記保持手段に登録することを特徴とする請求項１に記載の構造化文書管理装置。
【請求項３】
前記要素登録手段は、前記差分解析手段による前記差分の解析によって削除されたことが判明した要素に対しては、要素登録手段に対して削除された要素に対応するレコードに編集前のバージョン情報を付与させるとともに該バージョン情報に対する索引を生成させ、前記バージョン情報が設定されていない要素を最新の構造化文書を構成する要素とする検索を可能としたことを特徴とする請求項１または請求項２に記載の構造化文書管理装置。
【請求項４】
構造化文書を管理する構造化文書管理方法において、前記構造化文書中の各要素の属性情報及び内容情報を要素情報として要素登録手段がリレーショナルデータベースのレコードとして情報保持手段に登録し、また、前記構造化文書中の各要素間の親子関係を並べたデータをバイナリ形式の構造情報として構造情報登録手段が前記リレーショナルデータベースのレコードとして前記情報保持手段に登録し、あらかじめ前記情報保持手段に保持されている構造化文書に対して編集を行った後の構造化文書が入力されたとき、編集前の構造化文書と編集後の構造化文書の間で要素ごとに対応させて差分を差分解析手段が解析し、解析された差分について要素情報を前記要素登録手段が前記情報保持手段に登録するとともに前記構造情報登録手段が差分を含む構造情報を生成して前記情報保持手段に登録することを特徴とする構造化文書管理方法。
【請求項５】
入力された構造化文書の構造を設定されたタグあるいは属性を有する要素あるいは構造の深さに基づき分割して複数の部分構造に分解手段が分解し、前記部分構造間の親子関係を部分構造ごとに並べたデータをバイナリ形式のグローバル構造情報として前記情報保持手段に保持するとともに、分解された部分構造ごとに各要素情報及び構造情報を前記要素登録手段及び前記構造情報登録手段が前記情報保持手段に登録することを特徴とする請求項４に記載の構造化文書管理方法。
【請求項６】
前記差分の解析によって削除されたことが解析された要素に対しては、前記要素登録手段は、削除された要素に対応するレコードに編集前のバージョン情報を付与するとともに、該バージョン情報に対する索引を生成させ、前記バージョン情報が設定されていない要素を最新の構造化文書を構成する要素とする検索を可能としたことを特徴とする請求項４または請求項５に記載の構造化文書管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、構造化された文書を、検索、編集可能に管理する構造化文書管理装置及び構造化文書管理方法に関するものである。
【０００２】
【従来の技術】
従来より、ＸＭＬなどの構造化文書をデータベース化し、内容や文書構造での検索や、部分的な再利用などの利用に供している。特に数ページ程度の小さな文書では、各文書をファイルとして保存しておいて文字列検索を行うだけでも十分利用できるが、大規模な文書になると、文書中の部分構造の検索や構造を構成する要素に付された属性情報の検索など、文書構造を利用した検索が有用である。また、部分構造をそのまま再利用したり、部分構造ごとの編集といったことも行われる。部分構造ごとの編集を行う場合、複数人が文書中のそれぞれの担当部分を編集してゆくといった共同編集環境の提供も考えられている。このような構造化文書の編集及び利用に対する各種の機能を提供するためにも、構造化文書をデータベース化しておくことが重要となる。
【０００３】
構造化文書をデータベース化する一つの方法として、例えば既存のリレーショナルデータベースを利用し、文書構造の各要素をそれぞれレコードとして構成する方法がある。この場合、レコード中のフィールドを用いて親子の関係を記述して文書構造を実現することになる。また、フィールド中には各種の属性情報を展開しておくことができる。リレーショナルデータベースでは、フィールドにより検索が可能であるため、フィールドを特定すれば属性情報やテキストなどの検索を高速に行うことができる。その反面、文書構造を検索してゆこうとすると、各要素の親子関係を示すフィールドを順にたぐってゆく必要があり、親または子の要素を参照するたびに新たなレコードを取得しなければならないためにデータベースへのアクセスが発生する。そのため、リレーショナルデータベースを利用して構造化文書をデータベース化した場合、文書構造の検索に非常に時間がかかり、効率が悪いという問題があった。
【０００４】
一方、文書構造をツリー構造とみなし、リンクドリストで表現することもできる。リンクドリストなどメモリ上に置くデータ構造をオブジェクトオリエンテッドデータベースによって永続化し、必要に応じてメモリに展開し、文書構造の検索などを行う方法も存在する。この場合、文書構造の検索は容易であり、しかも高速に行うことができる。しかし、各要素の属性情報や末端の要素に付加される内容等の情報は、各要素の親子関係を示す情報ともに保存しておくことになる。そのため、これらの情報を検索する際には、それぞれの要素ごとに付加されている情報を参照しながら文書構造をたぐってゆかなければならい。そのため、属性情報や内容による検索は非常に効率が悪く、時間がかかってしまう。
【０００５】
さらにいずれの場合にも、部分的に文書を編集した場合、要素間の親子関係の変化が文書全体の先祖・子孫の関係に影響することがあり、従って多くのインデクスの書き換えが発生するため、上述のように大規模な文書を複数人が共同して編集作業を行うような環境では編集に対する応答に長時間を要していた。特に文書構造をツリー構造やリンクドリストなどバイナリ形式のインデクスで保持する構成では、構造の変更はインデクス全体を再構築する必要があり、このような用途に利用することはできなかった。
【０００６】
【発明が解決しようとする課題】
本発明は、上述した事情に鑑みてなされたもので、構造化された文書を管理するとともに、属性情報及び文書構造のいずれによる検索も高速に行うことができ、また編集に対する更新を高速化して複数人により共同編集を可能とし、さらに更新された文書の版管理を容易に行うことができる構造化文書管理装置及び構造化文書管理方法を提供することを目的とするものである。
【０００７】
【課題を解決するための手段】
本発明は、構造化文書を管理する構造化文書管理装置及び構造化文書管理方法において、構造化文書中の各要素の属性情報及び内容情報を要素情報として、リレーショナルデータベースのレコードとして管理し、また、各要素間の親子関係を並べたデータをバイナリ形式の構造情報として、リレーショナルデータベースのレコードとして管理し、あらかじめ保持されている構造化文書に対して編集を行った後の構造化文書が入力されたとき、編集前の構造化文書と編集後の構造化文書の間で要素ごとに対応させて差分を解析し、解析された差分について要素情報を登録するとともに、差分を含む構造情報を生成して登録することを特徴とするものである。
【０００８】
このような構成によって、例えば属性情報に対する検索はリレーショナルデータベースにおけるフィールドの検索によって高速に行うことができ、また構造の検索はバイナリ形式の構造情報をメモリ上で検索することができるので高速に行うことができる。なお、バイナリ形式の構造情報についてもリレーショナルデータベースで管理するので、構造化文書のすべての情報をリレーショナルデータベースで一元管理することが可能になる。また、編集された差分だけが蓄積されてゆき、少ない容量で版を管理することが可能となる。
【０００９】
また本発明では、入力された構造化文書の構造を設定されたタグあるいは属性を有する要素あるいは構造の深さに基づき分割して複数の部分構造に分解し、部分構造間の親子関係を部分構造ごとに並べたデータをバイナリ形式のグローバル構造情報として保持するとともに、分解された部分構造ごとに各要素情報及び構造情報を保持するように構成することができる。これによって、例えば構造が変更されるような編集が行われてもその編集の影響を１ないし数個の部分構造内の要素情報及び構造情報の変更にとどめることができる。例えば複数人によって共同して文書の編集を行っている場合、各人に異なる部分構造の編集を割り当てておけば、各人がそれぞれ編集結果による更新を行っても、他の人の部分構造に影響を与えずに更新することができ、共同編集環境を提供することができる。
【００１０】
また、例えば削除された要素については、削除された要素に対応するレコードに編集前のバージョン情報を付与するとともに、該バージョン情報に対する索引を生成させるように構成することができる。これによって、バージョン情報が設定されていない要素を取り出せば、最新の構造化文書を構成する要素を容易に検索することができ、版管理を行いながら、最新の構造化文書を容易にかつ高速に取り出すことができる。
【００１１】
【発明の実施の形態】
図１は、本発明の実施の一形態を示すブロック図である。図中、１は文書入力部、２はファイル管理部、３はディスパッチャ、４は検索部、５は文書処理部、６は文書解析部、７は文書分解部、８は編集単位処理部、９は文書解析部、１０は差分解析部、１１は要素情報登録部、１２は構造情報登録部、１３はリレーショナルデータベースである。文書入力部１は、構造化文書をファイル管理部２に対して入力する。このとき、ここでは分解前の構造化文書であるか、分解された部分構造であるかを示すコンテントタイプも入力するものとする。また文書入力部１は、ファイル管理部２の検索部４に対して構造化文書あるいは構造化文書の部分構造の取り出しを要求し、これらを受け取る。受け取った構造化文書あるいはその部分構造に対して編集を行った結果を再びファイル管理部２に対して入力することができる。このほか、構造化文書に対する各種の検索などを要求することも可能である。
【００１２】
ファイル管理部２は、文書入力部１との間で構造化文書あるいはその部分構造の受け渡しを行う。ファイル管理部２は、ディスパッチャ３及び検索部４を有している。ディスパッチャ３は、文書入力部１から渡される構造化文書あるいはその部分構造を受け取り、そのコンテントタイプに従って、部分構造への分解前の構造化文書の場合には、その構造化文書を文書処理部５に渡す。また、分解された部分構造を受け取った場合には、その部分構造を編集単位処理部８へ渡す。さらに、文書処理部５で分解された部分構造を受け取って編集単位処理部８へ渡す。検索部４は、文書入力部１から要求された構造化文書あるいはその部分構造をリレーショナルデータベース１３から取り出し、文書入力部１へ渡す。
【００１３】
文書処理部５は、ファイル管理部２のディスパッチャ３から渡される構造化文書を解析して、部分構造に分解する。文書処理部５は、構造化文書を解析する文書解析部６と、リレーショナルデータベース１３から読み込んだ設定に従って構造化文書を複数の部分構造に分解する文書分解部７を有している。大規模な構造化文書では、分解された部分構造が編集単位となる。分解された部分構造には部分構造であることを示すコンテントタイプが付加され、ファイル管理部２に入力される。また、部分構造間の関係をバイナリ形式のグローバル構造情報として、リレーショナルデータベース１３に登録する。
【００１４】
編集単位処理部８は、ファイル管理部２から渡される部分構造をリレーショナルデータベース１３に格納する。このとき、編集された部分構造については編集前の部分構造との差分をリレーショナルデータベース１３に格納し、版管理の利用に供する。編集単位処理部８は、文書解析部９、差分解析部１０、要素情報登録部１１、構造情報登録部１２を有している。文書解析部９は、ファイル管理部２から渡された部分構造を解析する。差分解析部１０は、文書解析部９による解析結果に従い、リレーショナルデータベース１３に保持されている編集前の部分構造と編集後の部分構造の差分を抽出してリレーショナルデータベース１３への登録対象とする。なお、新規の構造化文書の部分構造である場合には、部分構造全体をリレーショナルデータベース１３への登録対象とする。
【００１５】
要素情報登録部１１は、新規の登録の場合には、部分構造中の各要素について、それぞれの属性情報や内容をフィールド値とするレコードをリレーショナルデータベース１３に登録する。また、差分の要素の場合には、追加される要素については新規の登録を行い、変更及び削除されたことが判明した要素については、変更及び削除前のレコードに対して編集直前の時点でのバージョン情報を付与するとともに、そのバージョン情報に対する索引を生成し、リレーショナルデータベース１３に格納する。これによって、バージョン情報が付加されていないレコードが最新のバージョンのレコードとなり、最新の構造化文書を参照する際には検索が容易となる。また、以前のバージョンの構造化文書を参照する際には、所望のバージョンの索引を参照して各要素を検索すればよい。
【００１６】
構造情報登録部１２は、ファイル管理部２から渡された部分構造について、各要素間の関係をバイナリ形式の構造情報として生成し、リレーショナルデータベース１３に登録する。なお、部分構造に対して編集が行われた場合には、その部分構造の構造情報を再構築し、新たに登録する。以前のバージョンの構造化文書を参照する際には、当該バージョンにおいて生成された構造情報を参照することになる。構造情報は、このように編集が行われると再構築が必要となるが、分解された部分構造ごとに行うので、他の部分構造には影響を与えずに更新することが可能である。また高速に構造情報の再構築を行うことができる。
【００１７】
リレーショナルデータベース１３は、一般的なリレーショナルデータベースであり、構造化文書の各要素の要素情報と、部分構造間の関係を示すグローバル構造情報と、部分構造内の各要素間の関係を示す構造情報をそれぞれレコードとして格納し、これらの情報によって構造化文書を保持する。
【００１８】
次に、上述の本発明の実施の一形態における概括的な動作の一例を説明する。図２は、構造化文書の構造の一例の説明図、図３は、グローバル構造情報及び要素情報と構造情報の一例の説明図である。ここでは図２（Ａ）に示すように３階層の構造化文書が入力される場合を考える。このような部分構造への分解は、指定されたタグあるいは属性によるか、あるいは構造の深さによって自動的に行う。本実施の形態では前者の方法を採っている。各要素を○印で示しており、数字は各要素を特定するシーケンス番号（ＳＮｏ）である。
【００１９】
文書入力部１から図２（Ａ）に示すような構造化文書（及びコンテントタイプ）が入力されると、ディスパッチャ３は、入力された構造化文書のコンテントタイプに応じ、ここでは文書処理部５へ入力された構造化文書を渡す。
【００２０】
文書処理部５では、文書解析部６で構造化文書を解析し、文書分解部７でリレーショナルデータベース１３から読み込んだ設定に従い、文書を複数の部分構造に分解する。例えば図２（Ａ）において三角形で示した部分ごとに構造化文書を分解する。これによって図２（Ｂ）に示すように３つの部分構造となる。分解された部分構造は、再びファイル管理部２のディスパッチャ３に渡される。
【００２１】
このように部分構造への分解を行ったときに、各部分構造の関係を示すグローバル構造情報をバイナリ形式で生成してリレーショナルデータベース１３に格納する。図２（Ｂ）に示すように分解した３つの部分構造にそれぞれグローバルＩＤ（ＧＩＤと略す）として０，１，２と振り、構造を示す情報として、説明を簡単にするため親のＧＩＤを保持するとすれば、図３（Ａ）に示すようなそれぞれの部分構造の親のＧＩＤを並べたデータが得られる。このようなメモリイメージをそのままリレーショナルデータベース１３のレコード中のフィールドとして埋め込み、ここでは文書を一意に特定するための文書ＩＤとともにリレーショナルデータベース１３に格納する。
【００２２】
なお、部分構造へ分解する際に、下位の部分構造の頂点の要素が、その上位の部分構造にも含まれることになる。例えば図２に示した例では、ＳＮｏが２、５の要素については複数の部分構造にまたがる。このような場合には、上位の部分構造にダミーの要素を付加しておく。この例ではＧＩＤが０の部分構造に、ＳＮｏが２の要素の代わりにＳＮｏ９の要素を、ＳＮｏが５の要素の代わりにＳＮｏ１０の要素を仮想的に付加している。
【００２３】
文書分解部７で分解された部分構造を受け取ったディスパッチャ３では、今度は部分構造を編集単位処理部８に渡す。編集単位処理部８では、文書解析部９で部分構造を解析し、差分解析部１０に渡す。ここでは新規の構造化文書であるので、差分解析部１０は部分構造を要素情報登録部１１及び構造情報登録部１２に渡す。
【００２４】
要素情報登録部１１では、部分構造中のそれぞれの要素に関する情報を要素情報としてリレーショナルデータベース１３に登録する。例えば図２（Ｂ）に示したＧＩＤが‘２’の部分構造の場合、‘５’〜‘８’として示した各要素の情報をリレーショナルデータベース１３に登録することになる。図３（Ｂ）に要素情報の一例を示しており、この例では各要素を特定するＳＮｏとともに、部分構造中で要素を特定するローカルナンバ（ＬＮｏ）、要素名、属性値、削除バージョン、追加バージョンをフィールド値としている。もちろん、フィールドの構成は任意である。この要素情報では各要素間の親子関係などは含まれていないが、例えば属性値の検索など、フィールド値による高速な検索が可能である。また、後述する構造情報とは、例えばＬＮｏやＳＮｏによって対応づけることができる。
【００２５】
構造情報登録部１２では、部分構造中の各要素間の関係を示す構造情報をバイナリ形式で生成する。バイナリ形式の構造情報は、どのようなデータ構造であってもよいが、図３（Ｃ）に示す例では、それぞれの要素の親のＬＮｏを並べたデータとして構成している。さらにここでは、このような構造情報のメモリイメージをそのままリレーショナルデータベース１３のレコード中のフィールドとして埋め込み、さらに部分構造を一意に特定するためのクラスタＩＤとともにリレーショナルデータベース１３に格納する。クラスタＩＤは図３（Ｄ）に示すようなバージョンテーブルによってＧＩＤとリンクされる。後述するように、編集などによって構造情報を再構築した場合にも、別のクラスタＩＤを利用してＧＩＤとリンクさせることによってグローバル構造情報の変更を防いでいる。
【００２６】
なお、図３（Ｂ）、（Ｃ）には、ＧＩＤが２の部分構造における要素情報及び構造情報のみを示しているが、同様の要素情報及び構造情報がＧＩＤ０，１についても作成され、リレーショナルデータベース１３に登録される。
【００２７】
リレーショナルデータベース１３に登録されている構造化文書を編集する際には、それぞれの部分構造が編集単位となる。部分構造の取り出しをファイル管理部２に要求することによって、検索部４が編集すべき部分構造をリレーショナルデータベース１３から読み出して出力する。そして、部分構造の編集後、再びファイル管理部２に入力する。
【００２８】
ファイル管理部２に入力された編集後の部分構造（及びコンテントタイプ）は、ディスパッチャ３によって編集単位処理部８へ送られる。編集単位処理部８では、文書解析部９で部分構造を解析し、差分解析部１０に渡す。差分解析部１０では、リレーショナルデータベース１３に登録されている編集前の部分構造と文書解析部９から受け取った編集後の部分構造を比較し、その差分を抽出する。要素の編集としては、内容や属性値の変更の他、新たな追加、あるいは要素の削除などがある。要素情報登録部１１では、新たに追加された要素については、要素情報をリレーショナルデータベース１３に登録する。このとき、追加時のバージョン情報を付加してもよい。また、削除された要素については、当該要素に対応する要素情報に削除されたバージョン情報を付加する。変更の場合には、編集前の要素情報を削除、編集後の要素情報を追加する処理を行えばよい。
【００２９】
図４は、部分構造の編集後の要素情報の一例の説明図である。図２（Ｂ）にＧＩＤ２として示す部分構造について、図４（Ａ）に示すようにＳＮｏ７の要素が変更された場合、編集後の要素をＳＮｏ１１として追加し、編集前のＳＮｏ７を削除する。すなわち、図４（Ｂ）に示すようにＳＮｏ７の要素情報の削除バージョンに編集前のバージョン番号を付加し、ＳＮｏ１１の要素情報の追加バージョンに現在のバージョン番号を付加する。また、図４（Ｃ）に示すように、クラスタＩＤとＧＩＤ、バージョン情報を対応づけたバージョンテーブルを索引として作成しておく。このバージョンテーブルによって、グローバル構造情報中の各部分構造の情報と、それぞれのバージョンで変化してゆく部分構造内の情報とをリンクさせる。
【００３０】
このように差分のみを登録してゆくことによって、リレーショナルデータベース１３のデータ量の増大を抑えることができる。また、削除された要素情報に削除バージョンを付加してゆくことによって、最新版の構造化文書（あるいは部分構造）を取り出す際には、削除バージョンが付加されていない要素情報を取り出せばよい。これによって、容易に、しかも高速に最新版の構造化文書を取り出すことができる。
【００３１】
部分構造に対する編集が行われた場合、要素情報の更新だけでなく、構造情報の更新も必要となる。構造情報の更新は、構造情報登録部１２において部分構造全体の構造情報の再構築を行う。この場合、再構築する構造情報は部分構造の範囲内だけでよく、構造化文書全体の構造情報を再構築する場合に比べて格段に少ない処理で済み、高速に実行することができる。また、他の部分構造に影響しないので、他の部分構造を他人が編集中であっても全く問題なく更新の処理を行うことができる。
【００３２】
なお、図３，図４に示したグローバル構造情報、要素情報、構造情報のデータ構造は一例であり、リレーショナルデータベース１３の設計時に任意に取り決めておくことができる。例えば以下に示す具体例においては、図３，図４に示したデータ構造とは一部異なるデータ構造を用いている。
【００３３】
以下、具体例を用いながら上述の動作についてさらに詳細に説明してゆく。図５は、具体例におけるデータ構造の一例の説明図である。以下に説明する具体例では、図５に示すようなデータ構造を用いてグローバル構造情報、要素情報、構造情報をリレーショナルデータベース１３に登録し、利用する。
【００３４】
まずグローバル構造情報は、図５（Ａ）に示すように、それぞれの部分構造ごとに、最大ＧＩＤ、親ＧＩＤ、親の接続ＩＤ、編集単位ＩＤなどの情報を有し、これらの部分構造ごとのデータをＧＩＤの順に並べて構成されている。ＧＩＤは、ルートノードから深さ優先、左優先で探索される部分構造に対して順に振られたＩＤである。このＧＩＤの振り方は、後述する部分構造内の構造情報において各要素に振るノードオーダーと同様であり、後述するノードオーダーの振り方の説明によりＧＩＤの振り方の説明に代える。最大ＧＩＤは、当該部分構造よりも下位の部分構造のＧＩＤのうち最大のＧＩＤである。深さ優先でＧＩＤを振っているので、当該部分構造の下位の部分構造には、当該部分構造のＧＩＤから最大ＧＩＤまでのＧＩＤが振られている。また、最大ＧＩＤよりも大きいＧＩＤは、当該部分構造の下位には存在しないことが保証されている。親ＧＩＤは、当該部分構造の親となる部分構造のＧＩＤである。親の接続ＩＤは、例えば図２（Ｂ）に示す例ではＧＩＤが１の部分構造は、ＧＩＤが０の部分構造において仮想的に付加した要素のうちのいずれに接続されるかを示すものである。編集単位ＩＤは、当該部分構造をシステム全体で一意に識別するためのＩＤである。これらの情報がＧＩＤの数だけ並べられ、そのようなデータをバイナリ形式でレコード中の１つのフィールド値とする。このレコードは、そのほかに文書ＩＤなどのフィールドを有し、文書中の部分構造間の関係がリレーショナルデータベース１３に保持される。具体的には、グローバル構造情報は、バイナリ形式のデータのままバイナリを格納できるデータ型であるＢＬＯＢ（Ｂｉｎａｒｙ  Ｌａｒｇｅ  ＯＢｊｅｃｔ）型データとして、文書ＩＤと対応づけてリレーショナルデータベース１３に登録することができる。
【００３５】
要素情報は、図５（Ｂ）に示すように、ノードテーブル、属性テーブル、テキストテーブルによって構成される。要素のうち、リーフとなる要素についてはテキストテーブルの情報を持ち、その他の要素についてはノードテーブル及び属性テーブルの情報を持つことになる。例えばノードテーブルと属性テーブルを一つのテーブルにするなど、変形は任意である。
【００３６】
ノードテーブルは、上述のＳＮｏ、ＬＮｏ、編集単位ＩＤ、要素名、文書ＩＤ、追加バージョン情報、削除バージョン情報、マウントポイント数などのフィールドを有している。ＳＮｏはシステム全体において一意に要素に振られたＩＤである。ＬＮｏは、部分構造内で一意に要素に振られたＩＤである。このＬＮｏは、文書構造とは無関係である。編集単位ＩＤは、当該要素を含んでいる部分構造を特定するＩＤである。要素名は、文書中の要素の名前である。文書ＩＤは、当該要素を含んでいる文書を特定するＩＤである。追加バージョン情報は、当該要素が追加されたバージョンを示す情報である。新規に文書が登録された時点では１となる。削除バージョン情報は、当該要素が削除される直前のバージョンを示す情報である。新規に文書が登録された時点ではＮＵＬＬであり、例えば最初の更新で削除されれば１となる。マウントポイント数は、当該要素の下位（子孫）に接続されるマウントポイントの数を示す。マウントポイントとは、例えば図２（Ｂ）に示すＧＩＤが０の部分構造のように、仮想的な設けられた要素であり、ＳＮｏが１の要素ではマウントポイント数は２となる。また属性テーブルは、ＳＮｏ、属性名、属性値などのフィールドを有している。ＳＮｏはノードテーブルと同様である。属性名は当該要素の属性に付された名前であり、その値が属性値として格納される。
【００３７】
テキストテーブルは、ＳＮｏ、ＬＮｏ、編集単位ＩＤ、要素値、文書ＩＤ、追加バージョン情報、削除バージョン情報などのフィールドを有している。要素値には、リーフとなる要素が有している文書内容が格納される。また、例えば図２（Ｂ）に示す例においてＧＩＤが０の部分構造に仮想的に付加した要素は、その部分構造においてはリーフとなる要素である。この場合には、要素値として接続ＩＤが格納される。他のフィールドについては上述の通りである。
【００３８】
構造情報は、図５（Ｃ）に示すように、部分構造内の各要素ごとにＬＮｏ、ノードオーダー、最大ノードオーダーなどのデータが並べられている。ＬＮｏは上述の通りである。ノードオーダーは、部分構造内のルートとなる要素から深さ優先、左優先で探索される要素に対して順に振られたＩＤである。最大ノードオーダーは、部分構造中で当該要素よりも下位の要素のノードオーダーのうち最大のノードオーダーである。深さ優先でノードオーダーを振っているので、当該要素の下位の要素には、当該要素のノードオーダーから最大ノードオーダーまでのＩＤが振られている。また、最大ノードオーダーよりも大きいＩＤは、当該要素の下位には存在しないことが保証されている。これらの情報が部分構造内に存在する要素の数（仮想的に設けた要素も含めて）だけ並べられ、そのようなデータをバイナリ形式でレコード中の１つのフィールド値とする。このレコードは、そのほかにクラスタＩＤなどのフィールドを有し、文書中の部分構造間の関係がバイナリ形式のファイルとしてリレーショナルデータベース１３に保持される。なお、クラスタＩＤは、上述の編集単位ＩＤと同様に部分構造を特定するＩＤであるが、構造情報は文書の編集などにより版が変わったときに再構築されるので、版が変わるごとに新たなクラスタＩＤが付与される。
【００３９】
バージョンテーブルは、図５（Ｄ）に示すように、クラスタＩＤ、編集単位ＩＤ、バージョン情報、文書ＩＤなどによって構成されている。このバージョンテーブルによって、グローバル構造情報において部分構造に付した編集単位ＩＤと、バージョンごとに異なる部分構造内の文書構造を示す構造情報とを結びつけている。なお、別途、各文書について最新のバージョンを示す情報が保持されており、最新の文書を取り出す際にはその最新バージョン情報からバージョンテーブルを検索することによって、各部分構造についての最新の構造情報を得ることができる。なお、属性情報については、上述のように削除バージョン情報がＮＵＬＬのレコードを取り出せば、最新の要素情報を取り出すことができる。
【００４０】
図６は、入力される構造化文書の具体例の説明図である。ここでは、ＸＭＬによって記述された、図６（Ａ）に示すような構造化文書が文書入力部１から入力されるものとする。この構造化文書の文書構造をツリー表現すると図６（Ｂ）に示すようになる。なお、図６（Ｂ）において○は要素を示し、内部の数字はＳＮｏを示している。
【００４１】
このような構造化文書が文書入力部１から入力されると、ディスパッチャ３は、入力された構造化文書を文書処理部５へ渡す。文書処理部５では、文書解析部６で構造化文書を解析し、文書分解部７でリレーショナルデータベース１３から読み込んだ設定に従い、文書を複数の部分構造に分解する。ここではＰＡＲＴ、ＣＨＡＰＴＥＲで分解することとする。
【００４２】
図７〜図９は、分解された部分構造ごとの文書の具体例の説明図である。各図において、分解された文書の記述を（Ａ）として示し、分解された部分構造のツリー表現を（Ｂ）として示している。以下の説明では図７に示す部分構造を編集単位ＩＤ＝０、図８に示す部分構造を編集単位ＩＤ＝１、図９に示す部分構造を編集単位ＩＤ＝２とする。また、この編集単位ＩＤとは別に、各部分構造にはＧＩＤが振られる。ここでは、図７に示す部分構造にＧＩＤ＝０、図８に示す部分構造にＧＩＤ＝１、図９に示す部分構造にＧＩＤ＝２を振るものとする。
【００４３】
図７に示す部分構造では、部分構造への分解の際に、図６（Ｂ）に示すＳＮｏ＝３の要素に対応する仮想的な要素（ＳＮｏ＝１２）を付加している。図７（Ａ）に示す文書の記述では、分解により他の部分構造に移した記述の部分を“＆Ｅ００１；”という記述に置き換えている。これが接続ＩＤとなる。図８に示す部分構造についても同様であり、図６（Ｂ）に示すＳＮｏ＝６の要素に対応する仮想的な要素（ＳＮｏ＝１４）を付加している。図８（Ａ）に示す文書の記述では、分解により他の部分構造に移した記述の部分を“＆Ｅ００２；”という接続ＩＤに置き換えている。
【００４４】
図１０は、グローバル構造情報の具体例の説明図である。上述のように構造化文書を部分構造に分解すると、その時点で各部分構造間の関係がわかる。各部分構造間のツリー表現を図１０（Ｂ）に示している。図１０（Ｂ）において、各部分構造を三角形で表している。三角形の中の数字はＧＩＤである。
【００４５】
この部分構造間の関係をグローバル構造情報としてリレーショナルデータベース１３に登録する。この具体例では、グローバル構造情報は例えば図１０（Ａ）に示すようになる。なお、ＧＩＤ＝１の部分構造は、ＧＩＤ＝０の部分構造中の仮想的に設けた要素（ＳＮｏ＝１２）に接続されるので、その接続ＩＤ（“＆Ｅ００１；”）のうちの数値部分のみを親の接続ＩＤとしてグローバル構造情報中に含めている。ＧＩＤ＝２の部分構造についても同様であり、親の接続ＩＤとしてＧＩＤ＝１の部分構造中の仮想的に設けた要素（ＳＮｏ＝１４）の接続ＩＤ（“＆Ｅ００２；”）のうちの数値部分のみを親の接続ＩＤとしてグローバル構造情報中に含めている。
【００４６】
このようなグローバル構造情報は、例えば上述のようにバイナリ形式のデータのままバイナリを格納できるデータ型であるＢＬＯＢ型データとして、文書ＩＤと対応づけてリレーショナルデータベース１３に登録する。また、図７（Ａ）、図８（Ａ）、図９（Ａ）に示した、分解された部分構造の記述は、再びファイル管理部２に戻される。ファイル管理部２のディスパッチャ３は、これらの分解された部分構造の記述を編集単位処理部８に渡す。編集単位処理部８では、文書解析部９で各部分構造の記述を解析し、差分解析部１０に渡す。差分解析部１０では、新規の構造化文書であるので、文書解析部９による部分構造の解析結果を要素情報登録部１１及び構造情報登録部１２に渡す。
【００４７】
要素情報登録部１１では、各部分構造の記述から、要素情報を生成する。図５（Ｂ）に示した要素情報のデータ構造に従い、リーフに対応する要素（仮想的に付加した要素を含む）についてはテキストテーブルを生成し、それ以外の要素についてはノードテーブル及び属性テーブルを生成する。図１１、図１２は、要素情報の具体例の説明図である。図１１（Ａ）はノードテーブル、図１１（Ｂ）は属性テーブル、図１２はテキストテーブルを示している。ＳＮｏは、図７〜図９では説明のためにすでに振られているが、実際には編集単位処理部８に各部分構造の記述が入力されて解析することによって、要素の出現順に振られる。ＬＮｏについても、各部分構造内で文書構造には関係なく振られる。追加バージョンには、新規登録時には１が格納される。また削除バージョンには、新規登録時には‘ＮＵＬＬ’が格納される。マウントポイント数には、仮想的な要素（ＳＮｏ＝１２，１４）が下位に接続されているＳＮｏ＝０，３の要素について‘１’となり、他の要素については０となる。このような要素情報がリレーショナルデータベース１３に登録される。
【００４８】
構造情報登録部１２では、部分構造中の各要素間の関係を示す構造情報をバイナリ形式で生成する。図５（Ｃ）に示した構造情報のデータ構造に従い、それぞれの要素のＬＮｏ、ノードオーダー、最大ノードオーダーを求めて格納してゆく。図１３は、構造情報を生成する処理の一例を示すフローチャートである。ここではＸＭＬのタグ及びテキストが順次切り出され、そのたびにそれぞれの処理を行うものとし、またＬＮｏについても別途付与されるものとして説明する。なお、処理を進めるためにＬＮｏ及びインデックスの値を格納するためのスタックを用いる。
【００４９】
Ｓ２１において、初期設定としてインデックスを０にセットしておく。Ｓ２２において、タグまたはテキストの切出を検知し、ＬＮｏを取得する。Ｓ２３において、タグまたはテキストが存在していたか否かを判定し、タグまたはテキストを切り出すことができず、部分構造の記述が終了していればこの処理を終了する。
【００５０】
Ｓ２４において、切り出された要素がテキストか否かを判断し、切り出された要素がタグであればさらにＳ２５において開始タグか終了タグかを判定する。切り出された要素が開始タグの場合には、Ｓ２６において、Ｓ２２で取得したＬＮｏと現在のインデックスをスタックに積む。そしてＳ２７において、インデックスの値を１だけ増加させる。
【００５１】
切り出された要素がテキストの場合には、Ｓ２８において、現在のインデックスの値をノードオーダー及び最大ノードオーダーとし、Ｓ２２で取得したＬＮｏに対応する構造情報の位置に、ＬＮｏ、ノードオーダー、最大ノードオーダーを格納する。
【００５２】
切り出された要素が終了タグの場合には、Ｓ２９において、スタックからＬＮｏ及びインデックスを取り出し、Ｓ３０において、ノードオーダーとしてスタックから取り出したインデックスの値、最大ノードオーダーとして現在のインデックスの値をセットし、スタックから取り出したＬＮｏに対応する構造情報の位置に、ＬＮｏ、ノードオーダー、最大ノードオーダーを格納する。
【００５３】
このような処理を行うと、ノードオーダーとして、それぞれの要素には深さ優先、左優先で探索された順に番号付けが行われる。図１４は、編集単位ＩＤが２の部分構造における構造情報生成過程の一例の説明図である。図１１（Ａ）、（Ｃ）に示したように、各要素にはＬＮｏが振られている。このＬＮｏは文書構造とは関係なく振られている。図９（Ａ）に示すような編集単位ＩＤが２のＸＭＬによる記述をもとに、図１３に示した処理を実行する。なお、図１４において矩形で囲んだ３つ組の数値は、左からＬＮｏ、ノードオーダー、最大ノードオーダーである。
【００５４】
ＬＮｏ＝０，１，２についてはＬＮｏとそのときのインデックス（０，１，２）がスタックに積まれる。ＬＮｏ＝５のリーフノードの要素において、ＬＮｏ＝５、ノードオーダー＝３、最大ノードオーダー＝３が構造情報として格納される。スタックからＬＮｏ＝２とインデックス＝２が取り出され、ＬＮｏ＝２、ノードオーダー＝２、最大ノードオーダー＝３が構造情報として格納される。さらにスタックからＬＮｏ＝１とインデックス＝１が取り出され、ＬＮｏ＝１、ノードオーダー＝１、最大ノードオーダー＝３が構造情報として格納される。
【００５５】
次にＬＮｏ＝３，４についてはスタックに当該ＬＮｏとインデックス＝４，５が積まれる。ＬＮｏ＝６のリーフノードの要素において、ＬＮｏ＝６、ノードオーダー＝６、最大ノードオーダー＝６が構造情報として格納される。スタックからＬＮｏ＝４とインデックス＝５が取り出され、ＬＮｏ＝４、ノードオーダー＝５、最大ノードオーダー＝６が構造情報として格納される。さらにスタックからＬＮｏ＝３とインデックス＝４が取り出され、ＬＮｏ＝３、ノードオーダー＝４、最大ノードオーダー＝６が構造情報として格納される。さらにまた、スタックからＬＮｏ＝０とインデックス＝０が取り出され、ＬＮｏ＝０、ノードオーダー＝０、最大ノードオーダー＝６が構造情報として格納される。
【００５６】
図１５は、構造情報の具体例の説明図である。上述のような処理によって、各部分構造ごとに図１５（Ａ）〜（Ｃ）に示すような構造情報が得られる。特に編集単位ＩＤが２の部分構造においては、図１４を用いて詳述したような処理によって、図１５（Ｃ）に示すような構造情報が得られることになる。図１５では構造情報をテーブル形式で表現しているが、これらのデータはバイナリ形式でいわゆるＢＬＯＢ型のデータとして扱い、クラスタＩＤが付されてリレーショナルデータベース１３に登録される。
【００５７】
図１６は、バージョンテーブルの具体例の説明図である。バージョンテーブルでは、バージョンごとに各編集単位ＩＤとクラスタＩＤとを対応づける。この時点では新規の登録のため、図１６に示すように、各部分構造ごとにバージョン情報が１の３つのレコードが生成され、リレーショナルデータベース１３に登録される。
【００５８】
以上説明したようにして、図６に示した構造化文書は、図７に示したように部分構造に分割され、部分構造の間の関係を示すグローバル構造情報と、各要素の情報を格納した要素情報と、部分構造内の各要素間の関係を示す構造情報、それに編集時に備えてバージョンテーブルが生成され、リレーショナルデータベース１３に登録される。
【００５９】
次に、構造化文書の編集を行った場合の動作の具体例について説明してゆく。編集作業は部分構造ごとに行われるものとする。例えば検索部４に対して編集単位ＩＤを指定することによってリレーショナルデータベース１３に登録されている編集単位ＩＤに対応する要素情報及び構造情報を取り出し、例えばＸＭＬ形式に変換して編集作業者に提供する。編集作業者は、取り出した部分構造に対する編集作業を行い、編集後の部分構造をファイル管理部２に再び入力する。
【００６０】
図１７は、編集後の文書内容の具体例の説明図である。ここでは図８（Ａ）に示した編集単位ＩＤが１の部分構造に対して編集を行ったものとする。図８（Ａ）と同様の編集前の記述を図１７（Ａ）に示している。この編集前の記述を、図１７（Ｂ）に示すように編集したとする。タグ“ＴＩＴＬＥ”の属性値と、タイトル名を示すテキストが変更されている。
【００６１】
図１７（Ｂ）に示す編集後の部分構造の記述がファイル管理部２に入力されると、ディスパッチャ３はその記述を編集単位処理部８に渡す。渡された編集後の部分構造の記述は、文書解析部９で解析され、差分解析部１０に渡される。そして差分解析部１０において、編集前の部分構造と編集後の部分構造の各要素について対応付けを行い、挿入された要素と削除された要素を差分として抽出し、要素情報登録部１１及び構造情報登録部１２に要素情報及び構造情報、バージョンテーブルの修正を行わせる。
【００６２】
図１８は、差分解析部１０における差分管理処理の一例を示すフローチャートである。ここでは、文書解析部９においてタグあるいはテキストが１つずつ切り出されて差分解析部１０に渡されるものとする。Ｓ４１において、文書解析部９において切り出されたタグあるいはテキストを取得する。なお、記述が終了していてタグあるいはテキストが取得できなかった場合には、Ｓ４２においてこれを検出する。
【００６３】
Ｓ４１でタグまたはテキストを取得したら、そのタグまたはテキストが、対応する編集前のバージョンのタグまたはテキストとして存在しているか否かをＳ４３で検索する。このとき、例えばタグ及びテキストからハッシュコードを求め、得られたハッシュコードをもとに検索を行うことによって、検索を高速化することができる。
【００６４】
Ｓ４４において、Ｓ４１で取得したタグまたはテキストが編集前の旧バージョンに存在したか否かを判定する。編集前の旧バージョンに存在していた場合には、そのタグまたはテキストは編集されていないものとし、Ｓ４５において、編集前の旧バージョンの当該タグまたはテキストをチェックしておく。これによって二重の対応付けを防止するとともに、削除されたタグ及びテキストの抽出に利用することができる。チェック後、Ｓ４１へ戻って次のタグまたはテキストの処理を続ける。
【００６５】
Ｓ４１で取得したタグまたはテキストが編集前の旧バージョンに存在していないとＳ４４で判定された場合には、Ｓ４６において、Ｓ４１で取得したタグまたはテキストは新規に挿入されたものとして挿入処理を行う。挿入処理は、新たに要素情報を生成して登録することによって行われる。このとき、追加バージョン情報として新たなバージョンの情報を登録する。挿入処理後、Ｓ４１へ戻って次のタグまたはテキストの処理を続ける。
【００６６】
入力された編集後の部分構造の記述について、すべてのタグ及びテキストについて上述のような処理を終了したら、Ｓ４７において、編集前の旧バージョンにおいてチェックが施されていない要素を削除されたものとして、削除処理を行う。削除処理は、当該要素情報の削除バージョン情報として旧バージョンの情報を登録する。この削除処理では、実際に要素情報が削除されてなくなることはない。
【００６７】
このようにして、部分構造に対して編集が加えられた場合、旧バージョンとの差分を抽出し、その差分だけの情報をリレーショナルデータベース１３に登録することになる。
【００６８】
図１９は、文書編集による要素情報の変化の一例の説明図である。なお、図１９には編集単位ＩＤ＝１の部分構造に含まれる要素についてのみの要素情報を示している。上述のように、例えば図１７（Ａ）に示した部分構造の記述を図１７（Ｂ）に示すように変更すると、タグ“ＴＩＴＬＥ”に対応する要素情報と、タイトル名に対応する要素情報が新規に登録され、これらの要素の編集前の要素情報に対して削除の処理がなされる。すなわち、ノードテーブルにはＳＮｏ＝１７として修正された要素に対応する要素情報が追加され、ＳＮｏ＝４の要素情報中、削除バージョンの欄がＮＵＬＬから‘１’に書き換えられている。また属性テーブルにおいても、追加されたＳＮｏ＝１７の要素の属性情報が追加されている。さらにテキストテーブルにはＳＮｏ＝１８として、編集後のテキストに対応する要素情報が追加され、ＳＮｏ＝１３の要素情報中、削除バージョンの欄がＮＵＬＬから‘１’に書き換えられている。
【００６９】
図２０は、文書編集による構造情報の変化の一例の説明図、図２１は、文書編集によるバージョンテーブルの変化の一例の説明図である。このようにして部分構造に対して編集が行われた場合、構造情報登録部１２は当該部分構造に対する構造情報を再構築する。構造情報の再構築の方法は、上述の新規登録の場合と同様である。これによって編集単位ＩＤが１の部分構造に対応する構造情報として、図２０に示すような構造情報が生成され、リレーショナルデータベース１３に登録される。このとき、旧バージョンの構造情報とは異なるクラスタＩＤが付与される。ここではクラスタＩＤとして３を付与している。
【００７０】
上述のように構造情報はバイナリ形式で保持しているため、部分構造に対して編集が加えられると、構造情報を再構築する必要がある。しかし、構造情報の再構築を、構造化文書全体を分解した部分構造内にとどめることができるため、全体への影響を最小限にとどめるとともに、再構築に要する時間を格段に短縮することができる。
【００７１】
文書編集によって新バージョンが登録されると、バージョンテーブルも更新される。図２１に示すように、バージョンテーブルには、新バージョンと、新バージョンで生成された構造情報に対応するクラスタＩＤとを対応づけたレコードが追加される。
【００７２】
上述のようにして、部分構造ごとに行われる編集に対して、要素情報及び構造情報の更新によって対応することができる。また、各要素については追加されたバージョンと削除されたバージョンの情報を保持しているので、どのバージョンの部分構造でも、任意に取り出すことが可能である。特に、最新バージョンについては、削除バージョンがＮＵＬＬの要素情報を取り出すだけでよい。すなわち、リレーショナルデータベース１３に対して「削除バージョンのフィールド値がＮＵＬＬである」という条件を検索条件に追加するだけでよく、非常に簡単かつ高速に最新バージョンの要素を取り出すことができる。最新バージョンの取り出しは、非常によく行われる処理であるため、この処理が高速化されることによって利用者の利便性を大きく向上させることができる。
【００７３】
以上、構造化文書を部分構造に分解し、部分構造間の関係を示すバイナリ形式のグローバル構造情報と、各要素の情報である要素情報と、部分構造内の要素の関係を示すバイナリ形式の構造情報とによって構造化文書をリレーショナルデータベース１３に登録して管理する構成及び方法について説明した。本発明は、上述のように構造化文書を部分構造に分解せず、要素情報とバイナリ形式の構造情報によって管理するだけでも、属性や内容による検索と文書構造の検索の両者の高速化を実現できるという、本発明に特有の効果を奏するものでる。
【００７４】
また、上述の例ではバイナリ形式の構造情報（及びグローバル構造情報）についてもリレーショナルデータベース１３に登録するものとして説明した。しかしこれに限らず、バイナリ形式の構造情報（及びグローバル構造情報）については別のデータベースに登録するように構成することもできる。
【００７５】
上述の実施の形態では部分構造への分解は１段のみであったが、さらに大規模な文書については部分構造への分解を多段に行い、複数のグローバル構造情報を組み合わせて文書の管理や検索を行うように構成することもできる。
【００７６】
【発明の効果】
以上の説明から明らかなように、本発明によれば、構造化文書中のそれぞれの要素の情報と、各要素間の関係とを分け、各要素の情報をそれぞれリレーショナルデータベースのレコードとして管理するとともに、各要素間の関係をバイナリ形式の構造情報として管理する。これによって、構造化された文書を管理するとともに、属性情報や内容を検索する場合も、文書構造を検索する場合も、いずれも容易にかつ高速に行うことができる。バイナリ形式の構造情報についてもリレーショナルデータベースのレコードとして登録することもでき、その場合には構造化文書をリレーショナルデータベースで一元管理することが可能である。
【００７７】
また、構造化文書を部分構造に分解して、部分構造ごとにバイナリ形式の構造情報を生成して管理することができる。これによって、文書の編集が行われた場合でも、構造情報の再構築を部分構造内にとどめることができ、構造情報の再構築に要する時間を短縮することができる。また、他の部分構造には影響を与えないため、例えば複数人により共同編集を行う場合でも、部分構造ごとに編集を行えば並行して複数人が編集を行うことができる。
【００７８】
さらに、編集が行われた場合には、編集された差分のみを登録するとともに、削除された要素については、編集前のバージョン情報を設定することによって、バージョン情報が設定されていない状態から設定されている状態に変化させる。これによって、バージョン情報が設定されていない要素を最新バージョンに含まれる要素であると見なすことができ、最新バージョンの文書の取得処理を簡単かつ高速に行うことができるという効果がある。
【図面の簡単な説明】
【図１】  本発明の実施の一形態を示すブロック図である。
【図２】  構造化文書の構造の一例の説明図である。
【図３】  グローバル構造情報及び要素情報と構造情報の一例の説明図である。
【図４】  部分構造の編集後の要素情報の一例の説明図である。
【図５】  具体例におけるデータ構造の一例の説明図である。
【図６】  入力される構造化文書の具体例の説明図である。
【図７】  分解された部分構造ごとの文書の具体例（編集単位ＩＤ＝０）の説明図である。
【図８】  分解された部分構造ごとの文書の具体例（編集単位ＩＤ＝１）の説明図である。
【図９】  分解された部分構造ごとの文書の具体例（編集単位ＩＤ＝２）の説明図である。
【図１０】  グローバル構造情報の具体例の説明図である。
【図１１】  要素情報（ノードテーブル及び属性テーブル）の具体例の説明図である。
【図１２】  要素情報（テキストテーブル）の具体例の説明図である。
【図１３】  構造情報を生成する処理の一例を示すフローチャートである。
【図１４】  編集単位ＩＤが２の部分構造における構造情報生成過程の一例の説明図である。
【図１５】  構造情報の具体例の説明図である。
【図１６】  バージョンテーブルの具体例の説明図である。
【図１７】  編集後の文書内容の具体例の説明図である。
【図１８】  差分解析部１０における差分管理処理の一例を示すフローチャートである。
【図１９】  文書編集による要素情報の変化の一例の説明図である。
【図２０】  文書編集による構造情報の変化の一例の説明図である。
【図２１】  文書編集によるバージョンテーブルの変化の一例の説明図である。
【符号の説明】
１…文書入力部、２…ファイル管理部、３…ディスパッチャ、４…検索部、５…文書処理部、６…文書解析部、７…文書分解部、８…編集単位処理部、９…文書解析部、１０…差分解析部、１１…要素情報登録部、１２…構造情報登録部、１３…リレーショナルデータベース。
【図１】
0004045399.tif 000002
【図２】
0004045399.tif 000003
【図３】
0004045399.tif 000004
【図４】
0004045399.tif 000005
【図５】
0004045399.tif 000006
【図６】
0004045399.tif 000007
【図７】
0004045399.tif 000008
【図８】
0004045399.tif 000009
【図９】
0004045399.tif 000010
【図１０】
0004045399.tif 000011
【図１１】
0004045399.tif 000012
【図１２】
0004045399.tif 000013
【図１３】
0004045399.tif 000014
【図１４】
0004045399.tif 000015
【図１５】
0004045399.tif 000016
【図１６】
0004045399.tif 000017
【図１７】
0004045399.tif 000018
【図１８】
0004045399.tif 000019
【図１９】
0004045399.tif 000020
【図２０】
0004045399.tif 000021
【図２１】
0004045399.tif 000022