(57)【特許請求の範囲】
【請求項１】
階層構造を持つノードによって構成される形式のデータを管理するデータ管理装置であって、
各ノードについて固有の整数値からなる識別情報と、当該ノードの直上位の親ノードの前記識別情報とをノード情報として記憶する手段と、
前記各ノードについて、当該ノードよりも下位であり且つ当該ノードの上位ノードを経由せずに辿れるノードである子孫ノードの各々の前記識別情報を、当該ノードの前記識別情報と１対１で対応づけてノード階層情報として記憶する手段と、
前記ノード情報をもとに、任意のノードの子孫ノードの前記識別情報を全て収集した第１の子孫ノードデータを作成する第１の子孫ノードデータ作成手段と、
前記ノード階層情報をもとに、前記任意のノードの子孫ノードの前記識別情報を全て収集した第２の子孫ノードデータを作成する第２の子孫ノードデータ作成手段と、
前記第１の子孫ノードデータ作成手段によって作成された第１の子孫ノードデータを、該第１の子孫ノードデータに含まれる子孫ノードの前記識別情報に従い、該識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第１の変換手段と、
前記第２の子孫ノードデータ作成手段によって作成された第２の子孫ノードデータを、該第２の子孫ノードデータに含まれる子孫ノードの前記識別情報に従い、該識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第２の変換手段と、
前記第１の変換手段によって変換されたビットマップ形式の第１の子孫ノードデータと前記第２の変換手段によって変換されたビットマップ形式の第２の子孫ノードデータとの排他的論理和を求めることにより、前記第１の子孫ノードデータと前記第２の子孫ノードデータとを比較する比較手段とを有することを特徴とするデータ管理装置。
【請求項２】
請求項１記載のデータ管理装置であって、
前記比較手段による比較が不一致だった場合に、その比較結果に基づいて前記ノード階層情報を修正する修正手段を有することを特徴とするデータ管理装置。
【請求項３】
コンピュータを、階層構造を持つノードによって構成される形式のデータを管理するデータ管理手段と、
各ノードについて固有の整数値からなる識別情報と、当該ノードの直上位の親ノードの前記識別情報とをノード情報として記憶する手段と、
前記各ノードについて、当該ノードよりも下位であり且つ当該ノードの上位ノードを経由せずに辿れるノードである子孫ノードの各々の前記識別情報を、当該ノードの前記識別情報と１対１で対応づけてノード階層情報として記憶する手段と、
前記ノード情報をもとに、任意のノードの子孫ノードの前記識別情報を全て収集した第１の子孫ノードデータを作成する第１の子孫ノードデータ作成手段と、
前記ノード階層情報をもとに、前記任意のノードの子孫ノードの前記識別情報を全て収集した第２の子孫ノードデータを作成する第２の子孫ノードデータ作成手段と、
前記第１の子孫ノードデータ作成手段によって作成された第１の子孫ノードデータを、該第１の子孫ノードデータに含まれる子孫ノードの前記識別情報に従い、該識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第１の変換手段と、
前記第２の子孫ノードデータ作成手段によって作成された第２の子孫ノードデータを、該第２の子孫ノードデータに含まれる子孫ノードの前記識別情報に従い、該識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第２の変換手段と、
前記第１の変換手段によって変換されたビットマップ形式の第１の子孫ノードデータと前記第２の変換手段によって変換されたビットマップ形式の第２の子孫ノードデータとの排他的論理和を求めることにより、前記第１の子孫ノードデータと前記第２の子孫ノードデータとを比較する比較手段として機能させるためのプログラム。
【請求項４】
請求項３記載のプログラムであって、
コンピュータを、前記比較手段による比較が不一致だった場合に、その比較結果に基づいて前記ノード階層情報を修正する修正手段として機能させるためのプログラムをさらに含むプログラム。
【請求項５】
請求項３又は４記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、階層構造を持つノードによって構成され、各ノードが固有の識別情報とその親ノードの識別情報とを有する形式のデータを管理するデータ管理装置、コンピュータをこのようなデータ管理装置として機能させるためのプログラム及び、このようなプログラムを記録した記録媒体に関する。
【０００２】
【従来の技術】
従来から、ファイル管理装置や文書管理装置等のデータ管理装置（あるいはシステム）において、データに階層構造を持たせて管理することが行われている。そして、このような階層構造は、各階層にデータの配置単位としてノードを設け、各ノードに固有のＩＤ番号等の識別情報とその親ノードの識別情報とを持たせることにより、ノード自身のデータ量をさほど増加させることなく表現できる。なお、あるノードの親ノードとは、そのノードの直上位に位置するノードのことである。逆に、あるノードの直下位に位置するノードをそのノードの子ノード、子ノードの直下位に位置するノードを孫ノード等と呼ぶ。そして、あるノードより下位にあり、かつそのノードから上位ノードを経由することなく辿れるノードを、そのノードの子孫ノードと呼ぶ。
【０００３】
このような階層構造のデータを管理する場合、各ノードについてあらかじめそのノードの子孫ノードを調べ、親ノードとその子孫ノードとの対応データを階層情報として記憶しておくことが考えられる。このようにすることにより、ある特定のノードの子孫ノードすべてを取得する、といったような操作の高速化を図ることができる。
【０００４】
ところで、このような方式を採用した場合、通常は実際の階層構造とこの階層情報との間に不整合が生じることはないが、予期しないトラブル等によって不整合が生じてしまうことも考えられる。そして、不整合が生じてしまうとその部分についてはデータへのアクセスが正常に行えなくなる場合があるので、この不整合が生じていないかどうかを必要に応じて検査し、生じていた場合にはその修復を行わなければならない。
このような不整合の検出や修復に関連する技術としては、例えば特開平１１−１２００５８号公報に開示されているファイル管理装置や、特開２０００−２８４９９５号公報に開示されているデータ処理装置が挙げられる。ただし、これらの装置は、ファイルシステムの復旧に関するものであり、階層構造と階層情報との不整合を高速に検出するものではない。
【０００５】
【発明が解決しようとする課題】
階層構造と階層情報との不整合を検出する方式としては、例えば、実際の階層構造を辿って検出を行うノードの子孫ノードの情報を取得すると共に、記憶してある階層情報からも同じノードの子孫ノードの情報を取得し、取得したこれらの子孫ノードの情報をそれぞれ配列して、その配列間に差があるか否かを調べる方式が考えられる。
しかし、この方式において、配列間の差の有無を調べる処理、さらには配列の一方にあって一方にない要素を特定する処理は、単純に配列の要素をスキャンしたのでは時間がかかるという問題があった。
この発明は、このような問題を解決し、階層構造を持つノードによって構成され、各ノードが固有の識別情報とその親ノードの識別情報とを有する形式のデータを管理する場合において、実際の階層構造と記憶してある階層情報との整合性を高速に検査できるようにすることを目的とする。
【０００６】
【課題を解決するための手段】
上記の目的を達成するため、この発明は、階層構造を持つノードによって構成される形式のデータを管理するデータ管理装置において、各ノードについて固有の整数値からなる識別情報と、そのノードの直上位の親ノードの上記識別情報とをノード情報として記憶する手段と、上記各ノードについて、そのノードよりも下位であり且つそのノードの上位ノードを経由せずに辿れるノードである子孫ノードの各々の上記識別情報を、そのノードの上記識別情報と１対１で対応づけてノード階層情報として記憶する手段と、上記ノード情報をもとに、任意のノードの子孫ノードの上記識別情報を全て収集した第１の子孫ノードデータを作成する第１の子孫ノードデータ作成手段と、上記ノード階層情報をもとに、上記任意のノードの子孫ノードの上記識別情報を全て収集した第２の子孫ノードデータを作成する第２の子孫ノードデータ作成手段と、上記第１の子孫ノードデータ作成手段によって作成された第１の子孫ノードデータを、その第１の子孫ノードデータに含まれる子孫ノードの上記識別情報に従い、その識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第１の変換手段と、上記第２の子孫ノードデータ作成手段によって作成された第２の子孫ノードデータを、その第２の子孫ノードデータに含まれる子孫ノードの上記識別情報に従い、その識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第２の変換手段と、上記第１の変換手段によって変換されたビットマップ形式の第１の子孫ノードデータと上記第２の変換手段によって変換されたビットマップ形式の第２の子孫ノードデータとの排他的論理和を求めることにより、上記第１の子孫ノードデータと上記第２の子孫ノードデータとを比較する比較手段とを有することを特徴とする。
【０００７】
このようなデータ管理装置において、上記比較手段による比較が不一致だった場合に、その比較結果に基づいて上記ノード階層情報を修正する修正手段をさらに設けるとよい。
【０００８】
また、この発明のプログラムは、コンピュータを、階層構造を持つノードによって構成される形式のデータを管理するデータ管理手段と、各ノードについて固有の整数値からなる識別情報と、そのノードの直上位の親ノードの上記識別情報とをノード情報として記憶する手段と、上記各ノードについて、そのノードよりも下位であり且つそのノードの上位ノードを経由せずに辿れるノードである子孫ノードの各々の上記識別情報を、そのノードの上記識別情報と１対１で対応づけてノード階層情報として記憶する手段と、上記ノード情報をもとに、任意のノードの子孫ノードの上記識別情報を全て収集した第１の子孫ノードデータを作成する第１の子孫ノードデータ作成手段と、上記ノード階層情報をもとに、上記任意のノードの子孫ノードの上記識別情報を全て収集した第２の子孫ノードデータを作成する第２の子孫ノードデータ作成手段と、上記第１の子孫ノードデータ作成手段によって作成された第１の子孫ノードデータを、その第１の子孫ノードデータに含まれる子孫ノードの上記識別情報に従い、その識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第１の変換手段と、上記第２の子孫ノードデータ作成手段によって作成された第２の子孫ノードデータを、その第２の子孫ノードデータに含まれる子孫ノードの上記識別情報に従い、その識別情報の値に対応する位置のビットを立てたビットマップ形式のデータに変換する第２の変換手段と、上記第１の変換手段によって変換されたビットマップ形式の第１の子孫ノードデータと上記第２の変換手段によって変換されたビットマップ形式の第２の子孫ノードデータとの排他的論理和を求めることにより、上記第１の子孫ノードデータと上記第２の子孫ノードデータとを比較する比較手段として機能させるためのものである。
このようなプログラムにおいて、コンピュータを、上記比較手段による比較が不一致だった場合に、その比較結果に基づいて上記ノード階層情報を修正する修正手段として機能させるためのプログラムをさらに含むようにするとよい。
この発明の記録媒体は、上記の各プログラムを記録したコンピュータ読み取り可能な記録媒体である。
【０００９】
【発明の実施の形態】
以下、この発明の好ましい実施の形態を図面を参照して説明する。
〔第１の実施形態：図１乃至図１０〕
初めに、この発明のデータ管理装置の第１の実施形態である文書管理サーバについて説明する。まず、その概略構成について、図１乃至図６を用いて説明する。図１はその文書管理サーバにおけるこの発明の特徴部分の機能構成を示す機能ブロック図、図２はその文書管理サーバの概略構成を示すブロック図、図３はその文書管理サーバにおけるデータの管理方式について説明するための図、図４は同じく子孫ノードデータの作成について説明するための図、図５は同じく子孫ノードデータの比較について説明するための図、図６は同じく子孫ノードデータのビットマップ形式への変換について説明するための図である。
【００１０】
この文書管理サーバ１０は、ハードウェア構成としては公知のサーバ装置を用いて構成することができる。すなわち、文書管理サーバ１０は、図２に示すように、ＣＰＵ１１，ＲＯＭ１２，ＲＡＭ１３，ハードディスクドライブ（ＨＤＤ）１４，ネットワークインタフェース（Ｉ／Ｆ）１５，データ蓄積手段１６を備え、これらがシステムバス１７によって接続されている。
ＣＰＵ１１は、この文書管理サーバ１０全体を制御する制御部であり、ＲＯＭ１２やＨＤＤ１４に格納された各種制御プログラムやアプリケーションプログラムを実行して装置の制御、クライアント装置２０によるデータへのアクセスの制御、データの管理等の動作を行う。
【００１１】
ＲＯＭ１２は、主に装置の制御プログラムを記憶する記憶手段である。そして、ＲＡＭ１３はＣＰＵ１１のワークメモリや一時的なデータの記憶に用いる記憶手段である。
ＨＤＤ１４は、各種アプリケーションプログラムやデータを記憶する記憶手段である。
ネットワークＩ／Ｆ１５は、文書管理サーバ１０をインターネットやローカルエリアネットワーク（ＬＡＮ）等のネットワークに接続するためのインタフェースであり、文書管理サーバ１０はこのネットワークＩ／Ｆ１５を介してパーソナルコンピュータ（ＰＣ）等のクライアント装置２０とのデータの授受を行う。
【００１２】
データ蓄積手段１６は、文書データ等の大量のデータを蓄積・記憶することのできる不揮発性記憶手段であるが、データ蓄積手段１６については、ＨＤＤ１４がこの役割を兼ねるようにしてもよい。
なお、図２には操作部や表示部を示していないが、キーボードやマウス等による操作部や、液晶やブラウン管（ＣＲＴ）による表示部を設け、ユーザからの入力の受付や動作結果の表示を行うことができるようにしてもよい。
【００１３】
このような文書管理サーバ１０は、データ蓄積手段１６に蓄積した文書データの管理を行い、クライアント装置２０からの要求に応じて管理下の文書データを送信する装置である。そして、この文書管理サーバ１０においては、管理対象である文書データは、図３（ａ）に示すように階層構造を持つノードの集合として、データ蓄積手段に記憶されている。ここで、ノードとは、データにアクセスする際の所定の単位であり、一般的なファイルシステムにおいてはファイルやフォルダに相当する単位であるが、これより細かい単位をノードとして扱うようにしてもよい。また、この管理動作は、ＲＯＭ１２やＨＤＤ１４に記憶された所要のデータ管理プログラムを実行してデータ管理手段として機能するＣＰＵ１１が行う。
【００１４】
データ蓄積手段１６には、これらのノードの階層構造を管理するためのデータとして、ノードデータとノード階層データとがそれぞれテーブルの形で記憶されている。
ノードデータはノードデータであり、図３（ｂ）に示すように、ノード毎に、固有の整数値からなる識別情報であるノードＩＤと、ノードの名称と、そのノードの直上位に位置する親ノードのノードＩＤとで構成されている。この文書管理サーバ１０は、このノードデータを参照することによって各ノードの配置を把握することができ、このノードデータはノードの階層構造を定義するための基本的なデータである。
【００１５】
一方、ノード階層データは、ノード階層情報であり、図３（ｃ）に示すように、ノードの親子関係に整数値のデータＩＤを付して記憶させたものである。そして、ノードの親子関係は、親ノードのノードＩＤと子ノードのノードＩＤの組み合わせとして記憶される。また、親ノードの直下位の子ノードだけでなく、さらに下位の孫ノード、ひ孫ノード等、親ノードより下位にあり、かつそのノードから上位ノードを経由することなく辿れる子孫ノードは、全てその親ノードの子ノードであるとして親子関係を記憶させている。
このようなノード階層データは、ノードの親子関係及び子孫関係の情報を、ノードデータに含まれる各ノードの親ノードの識別情報を参照して収集することによって作成できる。そして、このようなデータを予め作成して記憶しておくことにより、あるノードの下位に位置する全てのノードを抽出する処理を高速に行うことができるようになり、範囲を限定したノードの検索や、ノード階層構造の組換え等の処理を高速に行うことができる。
【００１６】
これらのノードデータとノード階層データは、通常は整合性が保たれるように管理されているが、予期しないトラブル等によって不整合が生じてしまうことがある。このような場合にはノードの階層構造が正しく認識できなくなり、文書管理動作に支障を来すことになるので、この不整合が生じていないかどうかを必要に応じて検査しなければならない。この検査を高速に行うことができるようにした点がこの発明の特徴である。
【００１７】
この高速な検査の処理は、ＣＰＵ１１にＲＯＭ１２あるいはＨＤＤ１４等に記憶している所要のプログラムを実行させ、図１に示した各部の機能を果たさせることによって実現している。ここで、その機能について説明する。
まず、整合性検査要求受付部１０１は、所定の時間毎、所定のイベントが生じる毎、あるいはユーザの指示等により整合性検査処理が要求された場合、その要求を受け付ける。そして、ノード抽出部１０２にその旨を伝達する機能を有する。
【００１８】
ノード抽出部１０２は、整合性検査要求受付部１０１から検査処理要求が伝達された場合、ノードデータテーブル１１１からノードＩＤを順次抽出し、検査対象ノードとして階層情報再作成部１０３及び階層情報抽出部１０４に伝達する機能を有する。
階層情報再作成部１０３は、検査対象ノードの子孫ノードのノードＩＤをノードデータテーブル１１１を参照して全て収集し、図４（ａ）に示すように配列の形式にまとめて検査対象ノードの子孫ノードを示す第１の子孫ノードデータを作成する機能を有する。この収集は例えば、まず対象ノードを親ノードとするノードを全て抽出し、次に抽出したノードを親ノードとするノードを全て抽出し・・・、という工程を、抽出できるノードがなくなるまで行うことによって実現できる。
【００１９】
階層情報抽出部１０４は、検査対象ノードの子孫ノードのノードＩＤを、ノード階層データテーブル１１２を参照して全て収集し、図４（ｂ）に示すように配列の形式にまとめて検査対象ノードの子孫ノードを示す第２の子孫ノードデータを作成する機能を有する。この収集は例えば、ノード階層データテーブル１１２において対象ノードを親ノードとする親子関係（子孫関係）を全て抽出することによって実現できる。
ビットマップ化処理部１０５は、階層情報再作成部１０３の作成した第１の子孫ノードデータおよび階層情報抽出部１０４の作成した第２の子孫ノードデータを、それぞれ配列形式のデータからビットマップ形式のデータに変換する機能を有する。ここで、ビットマップ形式のデータとは、所定の個数の０又は１の値を持つデータ（ビット）によって構成されるデータのことである。そして、ビットマップ形式への変換は、例えば図６に示すように、ノードＩＤの最大値の数だけ０のビットを持つビットマップを用意し、配列に含まれるノードＩＤ番目（図の例では２番目，３番目，４番目）のビットに１をセットすることによって行うことができる。なお、ここでは、図で左側のビットから順に、１番目，２番目，・・・としている。
【００２０】
ビットマップ比較部１０６は、ビットマップ化処理部１０５によって変換されたビットマップ形式の第１の子孫ノードデータとビットマップ形式の第２の子孫ノードデータとを比較する機能を有する。この比較は、２つのビットマップについての排他的論理和を求めることによって行うことができる。
排他的論理和は、対応するビットが同じであれば０、異なれば１になるので、図４及び図６に示したようにノードデータとノード階層データに不整合がない場合には、両者から得た子孫ノードデータは一致し、表１（ａ）に示すように排他的論理和は全てのビットで０となる。一方、不整合が起きている場合には、両者から得た子孫ノードデータには異なる部分があるので、表１（ｂ）及び（ｃ）に示すように、その部分のビットで排他的論理和が１となる。
【００２１】
【表１】
0004137493.tif 000002
【００２２】
結果表示・記憶部１０７は、ビットマップ比較部１０６による比較結果を表示手段に表示させたり記憶手段に記憶させたりする機能を有する。すなわち、例えば不整合があった場合にその旨や箇所を知らせるメッセージを表示させたり、ログにその旨を記録したりする。不整合がなかった場合でも、その旨のメッセージを表示させるようにしてもよい。
以上の各部により、ノード抽出部１０２が抽出した全てのノードについて第１の子孫ノードデータと第２の子孫ノードデータとを比較することにより、ノード階層構造全体について、ノードデータとノード階層データとの間で不整合が生じていないか否かを検査することができる。
【００２３】
ここで、この検査処理を高速で行うために、第１の子孫ノードデータと第２の子孫ノードデータとの比較処理を高速で行うことが重要となる。
単純にこれらを配列形式のデータのままで比較することを考えてみると、例えば図５に示すように、第１の子孫ノードデータの配列に含まれる要素の１つ１つについて、第２の子孫ノードデータの配列の要素と順次比較（スキャン）し、同じ要素がある（ヒットする）か否かを確認しなければならない。その処理に必要な時間は、最悪の場合、（第１の子孫ノードデータの配列の要素数）×（第２の子孫ノードデータの配列全体のスキャンにかかる時間）に比例する。
【００２４】
また、第２の子孫ノードデータの配列に第１の子孫ノードデータに含まれない余計なデータがあるか否かを確認するためには、両者の立場を入れ替えて再度スキャンを行うか、第２の子孫ノードデータの配列をスキャンした時にヒットした要素を何らかの手段で記憶しておき、あとで全ての要素がヒットしているか否かを確認する必要がある。
このように、配列形式のデータのままで比較処理を行うと、比較に多くの処理が必要になる。
【００２５】
これに対しこの発明では、図６に示すように、配列形式の子孫ノードデータを一旦ビットマップ形式のデータに変換してから比較を行うようにしている。ビットマップ形式への変換は、配列の各要素を一度ずつ参照するだけで行うことができる。そして、ビットマップ同士の比較はコンピュータシステムの基礎となっているビット演算によって排他的論理和を求めることによって行うことができるので、ハードウェアでの高速動作が実現可能である。従って、配列形式のデータのままで比較を行う場合に比べて処理量をおよそ配列の要素数分の１に低減できるので、高速に比較を実行でき、ひいては整合性の検査も高速に行うことができる。
【００２６】
次に、図７乃至図１０のフローチャートも用いて、この文書管理サーバにおけるノードデータとノード階層データとの整合性検査の処理について、さらに詳しく説明する。図７乃至図１０は、この整合性検査の処理を示すフローチャートである。
整合性検査処理の要求があると、ＣＰＵ１１はその要求を受け付ける。この処理要求の受け付けは、ＣＰＵ１１がＲＯＭ１２あるいはＨＤＤ１４等に記憶しているデータ管理プログラムの一部を実行することによって常に行っている。
そして、この要求を受けると、ＣＰＵ１１は、データ管理プログラムの他の部分も実行し、図７のフローチャートに示す処理を開始する。すなわちＣＰＵ１１は、データ管理プログラムに含まれる適当なプログラムを実行することにより、以下に説明する各手段として機能する。
【００２７】
まず、ステップＳ１でノードデータを参照して初めのノードのノードＩＤを取得し、そのノードを検査対象とする。ここで、どのノードを初めとしてもよいが、例えば、ノードＩＤの最も小さいものとすればよい。
次のステップＳ２では、ノードがあったか否か判断するが、通常初めはノードがあるので、次のステップＳ３に進み、検査対象のノードについての第１の子孫ノードデータ作成処理を行う。この処理は、図８に示すものであるが、詳細については後述する。ここでは、ＣＰＵ１１が第１の子孫ノードデータ作成手段として機能する。
【００２８】
次に、ステップＳ４で、検査対象のノードについての第２の子孫ノードデータ作成処理を行う。この処理は、図９に示すものであるが、詳細については後述する。ここでは、ＣＰＵ１１が第２の子孫ノードデータ作成手段として機能する。これらのステップＳ３とステップＳ４で作成された第１及び第２の子孫ノードデータは、配列形式のデータであるが、次のステップＳ５では、これらのデータをそれぞれビットマップ形式のデータに変換する。この変換処理は、図１０に示すものであるが、詳細については後述する。ここでは、ＣＰＵ１１が第１及び第２の変換手段として機能する。
【００２９】
次に、ステップＳ６に進み、変換後の第１の子孫ノードデータと変換後の第２の子孫ノードデータとを比較する。この比較は、既に述べたように２つのデータの排他的論理和を求めることによって行うことができる。ここでは、ＣＰＵ１１が比較手段として機能する。
そして、ステップＳ７に進んで相違があるか否か判断し、相違があればステップＳ８に進んでその相違を表示手段に表示させたり記憶手段に記憶させたりする。すなわち、例えば不整合があった場合にその旨や箇所を知らせるメッセージを表示させたり、ログにその旨を記録したりする。不整合がなかった場合でも、その旨のメッセージを表示させるようにしてもよい。
【００３０】
その後、ステップＳ９に進む。ステップＳ７で相違がなければ、そのままステップＳ９に進む。
ステップＳ９では、ノードデータを参照して次のノードのノードＩＤを取得し、そのノードを検査対象とする。ここで、次に取得すべきノードは、任意の基準で定めればよい。
そして、ステップＳ２に戻り、取得するノードがあったか否か判断する。あれば、ステップＳ３以降の処理を繰り返し、なければ、全てのノードについて整合性の検査が終了したものと判断して処理を終了する。
【００３１】
次に、図７のステップＳ３における第１の子孫ノードデータ作成処理について、図３に示した構成のノードにおいてノードＡが検査対象のノード（対象ノード）である場合の処理例も交えて説明する。
第１の子孫ノードデータ作成処理は、図８のフローチャートに示す処理であり、まずステップＳ１１で、ノードデータを検索して対象ノードを親ノードとするノードのノードＩＤを抽出する。この抽出は、ノードデータがＳＱＬ（Structured Query Language）に対応したデータベーステーブルに記憶されている場合には、例えば表２に示したスキーマ定義と検索文とを用いて行うことができる。そして、図３に示した例でノードＡが対象であると、ノードＢとノードＣのノードＩＤとして「２」と「３」が抽出される。
【００３２】
【表２】
0004137493.tif 000003
【００３３】
次に、ステップＳ１２でノードＩＤが抽出できたか否か判断する。そして、できていれば、ステップＳ１３に進んで抽出結果から初めのノードＩＤを選択する。ここでも、初めにどのノードＩＤを選択してもよいが、例えば、ノードＩＤの最も小さいものを選択すればよい。ここでは「２」となる。
次に、ステップＳ１４でノードＩＤが選択できたか否か判断する。そして、できていれば、ステップＳ１５で第１の子孫ノードデータの配列に選択したノードＩＤをセット（追加）する。そして、ステップＳ１６に進み、選択したノードＩＤのノードを対象ノードとして第１の子孫ノードデータ作成処理、すなわちこの図８のフローチャートの処理を再帰的に実行する。
【００３４】
この再帰実行は再びステップＳ１１から開始するが、ここでは対象ノードはノードＢ（ＩＤ「２」）であるので、ノードＤのノードＩＤとして「４」が抽出される。そして、ステップＳ１２，Ｓ１３と進んでこの「４」が選択され、ステップＳ１５でこの値が第１の子孫ノードデータの配列にセットされる。なお、第１の子孫ノードデータの配列は１つであり、初めの実行時も再帰実行時も、同一の配列に対してセットが行われる。ただし、新たに図７のステップＳ３の処理を開始する場合にリセットすることは、もちろんである。
そしてステップＳ１６では、今度は対象ノードをノードＤ（ＩＤ「４」）として第１の子孫ノードデータ作成処理を再度再帰実行する。
【００３５】
この再帰実行は再びステップＳ１１から開始するが、ここでは対象ノードはノードＤ（ＩＤ「４」）であるので、これを親ノードとするノードはなく、ステップＳ１１ではノードＩＤが抽出されない。
従って、ステップＳ１２の判断はＮＯになるので、元の処理に戻る。すなわち、１段階前のノードＢを対象ノードとする第１の子孫ノードデータ作成処理のステップＳ１６に戻り、ステップＳ１７に進む。
【００３６】
このステップＳ１７では、ステップＳ１１での抽出結果から次のノードＩＤを選択する。ここで、次に抽出すべきノードは任意の基準で定めればよいが、ノードＢを対象ノードとする処理においては、ステップＳ１１で抽出したノードＩＤは「４」のみである。従って、選択対象がないことになる。
そこで、そのままステップＳ１４に戻るが、ここでの判断はＮＯになり、再度元の処理に戻る。すなわち、１段階前のノードＡを対象ノードとする第１の子孫ノードデータ作成処理のステップＳ１６に戻り、ステップＳ１７に進む。
【００３７】
このステップＳ１７では、ステップＳ１１での抽出結果から次のノードＩＤを選択するが、ノードＡを対象ノードとする処理においてはステップＳ１１で抽出したノードＩＤは「２」と「３」であるので、まだ選択していない「３」を選択することになる。
そして、ステップＳ１４に戻り、ここでの判断はＹＥＳとなるのでステップＳ１５に進んで選択した「３」を第１の子孫ノードデータの配列にセットする。
ステップＳ１６では、今度は対象ノードをノードＣ（ＩＤ「３」）として第１の子孫ノードデータ作成処理を再帰実行するが、この処理で抽出されるノードＩＤはないので、説明を省略する。
【００３８】
そしてステップＳ１７に進むが、もう選択すべきノードＩＤはないのでそのままステップＳ１４に戻り、ここでの判断がＮＯになるので、元の処理に戻る。すなわち、第１の子孫ノードデータ作成処理を終了して図７の処理に戻る。
説明に用いた例の場合、処理の終了時に第１の子孫ノードデータの配列には「２」，「３」，「４」がセットされており、これがこの処理によって作成された第１の子孫ノードデータである。なお、このデータは最終的にはビットマップ形式に変換して用いるので、この時点でのノードＩＤの配列順は、どのような順番であっても構わない。
【００３９】
次に、図７のステップＳ４における第２の子孫ノードデータ作成処理について、図３に示した構成のノードにおいてノードＡが対象ノードである場合の処理例も交えて説明する。
第２の子孫ノードデータ作成処理は、図９のフローチャートに示す処理であり、まずステップＳ２１で、ノード階層データを検索して対象のノードを親ノードとする組み合わせの子ノードＩＤを抽出する。この抽出は、ノード階層データがＳＱＬ（Structured Query Language）に対応したデータベーステーブルに記憶されている場合には、例えば表３に示したスキーマ定義と検索文とを用いて行うことができる。そして、図３に示した例でノードＡが対象であると、ノードＩＤ「１」を親ノードとする子ノードのＩＤとして「２」，「３」，「４」が抽出される。
【００４０】
【表３】
0004137493.tif 000004
【００４１】
そして、ステップＳ２２で第２の子孫ノードデータの配列に抽出したノードＩＤをセット（追加）する。以上で第２の子孫ノードデータ作成処理は終了し、元の処理すなわち図７の処理に戻る。ノード階層データには、直接の親子関係だけでなく、子孫関係のデータも含まれているので、ノードデータを参照する場合の用に再帰的な検索を行う必要がなく、このような簡単な処理で子孫ノードデータを作成できるのである。
説明に用いた例の場合、処理の終了時に第２の子孫ノードデータの配列には「２」，「３」，「４」がセットされており、これがこの処理によって作成された第２の子孫ノードデータである。なお、このデータについても、最終的にはビットマップ形式に変換して用いるので、この時点でのノードＩＤの配列順は、どのような順番であっても構わない。
【００４２】
次に、図７のステップＳ５における変換処理について、図６に示した子孫ノードデータを変換する場合の処理例も交えて説明する。
変換処理は、図１０のフローチャートに示す処理であり、まずステップＳ３１で、変換対象の子孫ノードデータの配列から初めの要素（ノードＩＤ）を取得する。
そして、ステップＳ３２に進んで取得できたか否か判断する。あれば、ステップＳ３３に進み、ビットマップの取得したノードＩＤ番目のビットに「１」をセットする。例えば取得したノードＩＤが「２」であれば２番目、「３」であれば３番目のビットに「１」をセットする。なお、ビットマップの初期値としては、第１及び第２の子孫ノードデータの配列に含まれる最大のノードＩＤの数だけ「０」のビットを並べたデータを用意しておくものとする。例えば、図６に示す例の場合には、最大のノードＩＤは「４」であるので、４個の「０」を並べたデータを用意しておく。
【００４３】
次に、ステップＳ３４に進み、配列の次の要素を取得してステップＳ３２に戻る。ステップＳ３４で要素を取得できた場合には、ステップＳ３２の判断がＹＥＳとなるのでステップＳ３３以降の処理を繰り返すが、次の要素がなくて取得できなかった場合には、ＮＯとなるので、全ての要素についての処理が終了したものとして変換処理を終了し、もとの処理に戻る。
ここで、図７のステップＳ５では、第１の子孫ノードデータと第２の子孫ノードデータのそれぞれについて、図１０の変換処理を実行するものとする。
また、この変換処理においては、配列の要素をどのような順で取得しても、最終的には各要素に対応したビットに「１」をセットしたデータを生成することができる。従って、配列形式の状態で各要素がどのような順で並んでいても、同じ要素によって構成されていれば、生成されるビットマップは同一になる。
【００４４】
この文書管理サーバ１０は、以上のような処理を行い、配列形式の子孫ノードデータを一旦ビットマップ形式のデータに変換してから比較を行うようにしたことにより、上述のように、配列形式のデータのままで比較を行う場合に比べて処理量をおよそ配列の要素数分の１に低減できるので、高速に比較を実行でき、ひいてはノードデータとノード階層データとの整合性すなわち実際の階層構造と記憶してある階層情報と整合性の検査も高速に行うことができる。
なお、図７のフローチャートの処理において、ステップＳ３乃至ステップＳ５の処理は必ずしもこの順で行う必要はない。例えば、第２の子孫ノードデータを先に作成するようにしてもよいし、作成した子孫ノードデータをただちに変換処理に供するようにしてもよい。
【００４５】
〔第２の実施形態：図１１乃至図１５〕
次に、この発明のデータ管理装置の第２の実施形態である文書管理サーバについて説明する。図１１はその文書管理サーバにおけるこの発明の特徴部分の機能構成を示す機能ブロック図、図１２及び図１３はその文書管理サーバにおける誤りのあるノード階層データの例を示す図、図１４及び図１５はこの文書管理サーバにおけるノードデータとノード階層データとの整合性検査の処理を示すフローチャートである。
この実施形態の文書管理サーバは、機能構成としてはノード階層データ修正部１０８を設けた点が異なるのみであり、ＣＰＵ１１による処理もこの点に伴って変更が加えられたのみであり、他の点は第１の実施形態の文書管理サーバ１０と同様であるので、相違点以外の説明は簡単にするか省略する。また、第１の実施形態の文書管理サーバ１０と対応する構成には同一の符号を用いる。
【００４６】
この実施形態の文書管理サーバにおけるノード階層データ修正部１０８は、ビットマップ比較部１０６における比較結果とビットマップ形式の第１の子孫ノードデータとに基づいてノード階層データの修正を行う機能を有する。
具体例を挙げると、例えば図３に示したノード階層構成において、ノード階層データが図１２に示すものであった場合、データＩＤが「４」のデータは、実際の階層構成と対応しておらず、誤ったデータである。このような状態で整合性検査を行うと、ノードＩＤが「１」のノードＡを対象としたとき、表４に示すように、ノードデータを参照して作成する第１の子孫ノードデータは「０１１１０」に、ノード階層データを参照して作成する第２の子孫ノードデータは「０１１１１」になるので、比較結果の排他的論理和に１のビットが出現し、不整合が検出される。
【００４７】
【表４】
0004137493.tif 000005
【００４８】
ここで、１のビットは５番目であることから、ノードＩＤが「５」のノードについての子孫関係に不整合があることがわかる。一方、第１の子孫ノードデータの５番目のビットは「０」であるので、必然的に第２の子孫ノードデータの５番目のビットは「１」であり、実際にはノードＩＤが「５」のノードはノードＡの子孫ノードではなく、ノード階層データに余分なデータが含まれているのだということがわかる。従って、ノード階層データ修正部１０８は、親ノードＩＤが「１」，子ノードＩＤが「５」であるノード階層データを削除する修正を行うことにより、不整合を解消することができる。この修正は、例えばノード階層データが、ＳＱＬに対応し、表３に示したスキーマ定義を用いたデータベーステーブルに記憶されている場合には、
delete NodeHierarchyData where ParentID = 1 and ChildID = 5
のようなコマンドによって実行できる。
【００４９】
別の例として、例えば図３に示したノード階層構成において、ノード階層データが図１３に示すものであった場合、親ノードＩＤが「１」，子ノードＩＤが「４」であるデータが不足している。このような状態で整合性検査を行うと、ノードＩＤが「１」のノードＡを対象としたとき、表５に示すように、ノードデータを参照して作成する第１の子孫ノードデータは「０１１１」に、ノード階層データを参照して作成する第２の子孫ノードデータは「０１１０」になるので、やはり比較結果の排他的論理和に１のビットが出現し、不整合が検出される。
【００５０】
【表５】
0004137493.tif 000006
【００５１】
ここで、１のビットは４番目であることから、ノードＩＤが「４」のノードについての子孫関係に不整合があることがわかる。一方、第１の子孫ノードデータの４番目のビットは「１」であるので、必然的に第２の子孫ノードデータの４番目のビットは「０」であり、実際にはノードＩＤが「４」のノードはノードＡの子孫ノードであるのに、ノード階層データに対応するデータが含まれていないことがわかる。従って、ノード階層データ修正部１０８は、親ノードＩＤが「１」，子ノードＩＤが「４」であるノード階層データを追加する修正を行うことにより、不整合を解消することができる。この修正は、例えばノード階層データが、ＳＱＬに対応し、表３に示したスキーマ定義を用いたデータベーステーブルに記憶されている場合には、
insert into NodeHierarchyData (ID, ParentID, ChildID) values (4, 1, 4)のようなコマンドによって実行できる。
【００５２】
このように、ノード階層データ修正部１０８は、比較結果の排他的論理和で「１」が立っているビットの位置によって不整合に係る子孫ノードのＩＤを取得し、第１の子孫ノードデータの対応するビットを参照することによってノード階層データに追加が必要か削除が必要かを判断して、適切な修正を行うことができる。
なお、ノードデータを修正しないのは、このデータがノードの階層構造を定義するための基本的なデータであり、このデータを変更すると、階層構造そのものを変更することになってしまうためである。一方、ノード階層データは、ノードデータを参照して作成されたものであり、階層構造を効率よく把握するためのデータであるので、こちらを変更しても階層構造を変更することにはならない。
【００５３】
次に、この文書管理サーバにおけるノードデータとノード階層データの整合性検査の処理について、フローチャートも用いてさらに詳しく説明する。
整合性検査処理の要求があると、ＣＰＵ１１はその要求を受け付ける。この処理要求の受け付けは、ＣＰＵ１１がＲＯＭ１２あるいはＨＤＤ１４等に記憶しているデータ管理プログラムの一部を実行することによって常に行っている。
そして、この要求を受けると、ＣＰＵ１１は、データ管理プログラムの他の部分も実行し、図１４のフローチャートに示す処理を開始する。すなわちＣＰＵ１１は、データ管理プログラムに含まれる適当なプログラムを実行することにより、以下に説明する各手段として機能する。
【００５４】
図１４のフローチャートに示す処理は、ステップＳ７で相違があった場合にステップＳ８の処理の次にステップＳ４１のノード階層データ修正処理を行う点を除き、第１の実施形態で図７乃至図１０のフローチャートを用いて説明した処理と同様であるので、このノード階層データ修正処理についてのみ説明する。この処理においては、ＣＰＵ１１が修正手段として機能する。
【００５５】
ノード階層データ修正処理は、図１５のフローチャートに示す処理である。
ここでは、まずステップＳ５１で、比較結果の排他的論理和のビットマップから初めのビットを取得する。
そして、ステップＳ５２で最後のビットを越えたか否か判断する。超えていなければ、ステップＳ５３に進み、取得したビットが１であるか否か判断する。１であれば、そのビットに対応するノードについて不整合があったと判断してステップＳ５４に進み、第１の子孫ノードデータのビットマップの対応ビットを参照する。
【００５６】
次に、ステップＳ５５でそのビットが０であるか判断する。０であれば、ノード階層データに余分なデータが含まれていたものと判断し、ステップＳ５６に進む。そして、ノード階層データから、その時点での検査対象ノードを親ノードとし、ステップＳ５４で参照したビットに対応するノード（例えばその時点で参照しているビットが４番目のビットであれば、ノードＩＤが「４」のノード）を子孫ノードとするデータを削除する。そして、ステップＳ５８に進んで比較結果の排他的論理和のビットマップから次のビットを取得してステップＳ５２に戻り、処理を繰り返す。
【００５７】
ステップＳ５５で０でなければ、ノード階層データに必要なデータが不足していたものと判断し、ステップＳ５７に進む。そして、ノード階層データに、その時点での検査対象ノードを親ノードとし、ステップＳ５４で参照したビットに対応するノードを子孫ノードとするデータを追加する。そして、ステップＳ５８に進んで比較結果の排他的論理和のビットマップから次のビットを取得してステップＳ５２に戻り、処理を繰り返す。
ステップＳ５３で１でなかった場合には、そのままステップＳ５８に進んで比較結果の排他的論理和のビットマップから次のビットを取得し、ステップＳ５２に戻って処理を繰り返す。
ステップＳ５２で最後のビットを越えていれば、現在の検査対象ノードについて必要な修正は全て完了したと判断し、元の図１４の処理に戻る。
【００５８】
この実施形態の文書管理サーバは、以上のような処理を行い、比較結果のビットマップを参照してノード階層データの不整合箇所を特定して修正を行うようにしたので、実際の階層構造と記憶してある階層情報との整合性の検査のみならず、不整合箇所の修正も高速に行うことができる。
【００５９】
なお、以上説明した各実施形態において、データ蓄積手段１６に蓄積した文書データの管理を行う文書管理サーバ１０を例として説明したが、ＨＤＤ１４等に格納したデータも一括して管理するようにしてもよいことはもちろんであり、外部の装置のものも含め、複数の記憶手段に記憶しているデータを一括して管理するようにしてもよい。これ以外にも、この発明のデータ管理装置は文書管理サーバに限られるものではもちろんなく、階層構造を持つノードによって構成される何らかのデータを管理する装置であればどのようなものにでも適用できることは、もちろんである。
【００６０】
また、上述した文書管理サーバ１０のＣＰＵ１１を上述した各手段として機能させるためのプログラムは、予め文書管理サーバ１０のＨＤＤ１４等に記憶させておくほか、記録媒体であるＣＤ−ＲＯＭあるいは光磁気（ＭＯ）ディスク，ミニディスク（ＭＤ），ＤＶＤ（Digital Versatile Disk），フレキシブルディスク，磁気テープ，ＨＤＤ等の不揮発性記録媒体（メモリ）にプログラムソースや実行形式のバイナリデータとして記録して提供することもできる。そのメモリに記録されたプログラムを文書管理サーバ１０にインストールしてＣＰＵ１１に実行させるか、ＣＰＵ１１にそのメモリからこのプログラムを読み出して実行させることにより、上述した各手段として機能させることができる。
さらに、このプログラムを記録した記録媒体を備える外部機器あるいはこのプログラムを記憶手段に記憶した外部機器からダウンロードして実行させることも可能である。
【００６１】
【発明の効果】
以上説明してきたように、この発明のデータ管理装置によれば、ノードの階層構造と記憶してある階層情報との整合性の検査を簡単な処理で行うことができるので、高速に検査を行うことができる。
また、この発明のプログラムによれば、コンピュータを上記のようなデータ管理装置として機能させることができる。
また、この発明の記録媒体によれば、上記のプログラムを記憶していないコンピュータにそのプログラムを記憶させ、その実行によって上記のようなデータ管理装置として機能させることができる。
【図面の簡単な説明】
【図１】この発明のデータ管理装置の第１の実施形態である文書管理サーバにおけるこの発明の特徴部分の機能構成を示す機能ブロック図である。
【図２】その文書管理サーバの概略構成を示すブロック図である。
【図３】その文書管理サーバにおけるデータの管理方式について説明するための図である。
【図４】同じく子孫ノードデータの作成について説明するための図である。
【図５】同じく子孫ノードデータの比較について説明するための図である。
【図６】同じく子孫ノードデータのビットマップ形式への変換について説明するための図である。
【図７】この発明のデータ管理装置の第１の実施形態である文書管理サーバにおける整合性検査の処理を示すフローチャートである。
【図８】図７のフローチャートに示した第１の子孫ノードデータ作成処理の内容を示すフローチャートである。
【図９】図７のフローチャートに示した第２の子孫ノードデータ作成処理の内容を示すフローチャートである。
【図１０】図７のフローチャートに示した変換処理であるビットマップ化処理の内容を示すフローチャートである。
【図１１】この発明のデータ管理装置の第２の実施形態である文書管理サーバにおけるこの発明の特徴部分の機能構成を示す機能ブロック図である。
【図１２】その文書管理サーバにおける誤りのあるノード階層データの例を示す図である。
【図１３】その別の例を示す図である。
【図１４】この発明のデータ管理装置の第２の実施形態である文書管理サーバにおける整合性検査の処理を示すフローチャートである。
【図１５】図１４のフローチャートに示したノード階層データ修正処理の内容を示すフローチャートである。
【符号の説明】
１０：文書管理サーバ      １１：ＣＰＵ
１２：ＲＯＭ              １３：ＲＡＭ
１４：ＨＤＤ              １５：ネットワークＩ／Ｆ
１６：データ蓄積手段      １７：システムバス
１０１：整合性検査要求受付部  １０２：ノード抽出部
１０３：階層情報再作成部  １０４：階層情報抽出部
１０５：ビットマップ化処理部
１０６：ビットマップ比較部
１０７：結果表示・記憶部
１０８：ノード階層データ修正部
１１１：ノードデータテーブル
１１２：ノード階層データテーブル
【図１】
0004137493.tif 000007
【図２】
0004137493.tif 000008
【図３】
0004137493.tif 000009
【図４】
0004137493.tif 000010
【図５】
0004137493.tif 000011
【図６】
0004137493.tif 000012
【図７】
0004137493.tif 000013
【図８】
0004137493.tif 000014
【図９】
0004137493.tif 000015
【図１０】
0004137493.tif 000016
【図１１】
0004137493.tif 000017
【図１２】
0004137493.tif 000018
【図１３】
0004137493.tif 000019
【図１４】
0004137493.tif 000020
【図１５】
0004137493.tif 000021