まず、実施形態のシステムのベースとなる、副本ショートカットを用いた文書利用管理システムについて説明する。
図1は、この文書利用管理システムの概略構成を示すブロック図である。このシステムは、インターネットやローカル・エリア・ネットワーク等のネットワーク30を介して接続された文書管理サーバ10とクライアント端末20−1,20−2,・・・(以下、クライアント端末20と総称する)から構成される。
このシステムでは、電子文書の正本を文書管理サーバ10で管理し、クライアント端末20には、電子文書そのもののファイルの代わりに、その電子文書にアクセスするための情報を含んだ副本ショートカット(以下「副本sc」と略す)と呼ぶファイルを持たせる。副本scには、例えば、副本IDと呼ぶ管理用の識別情報と、文書管理サーバ10のホスト名又は文書閲覧要求用のURL(Uniform Resource Locator)などのアクセス情報と、副本scの属性とが含まれる。副本scの含む情報の一例を以下に示す。
"id=1234567, host=foo.example.com,createDate=2005/05/24 11:12:34"
この例では、"id=1234567"が副本IDを、"host=foo.example.com"が文書管理サーバ10のホスト名を、"createDate=2005/05/24 11:12:34"がその副本scの属性の1つである作成日時を示す。副本ショートカットには、漏洩防止等のために、電子文書の実体は含めない。ただし、ユーザがどの電子文書の副本scかを識別できるよう、電子文書の一部例えば1ページ目だけの情報や、電子文書の各ページのサムネイル画像などのように、その電子文書の劣化バージョンを見本として副本scに含めてもよい。
なお、副本scに組み込むアクセス情報は、副本scを利用するクライアント端末20が、その副本scに対応する正本を管理する文書管理サーバ10にアクセスする際に用いられる。ただし、ネットワーク上に、副本IDから対応の正本を管理する文書管理サーバ10のアクセス情報を解決するサーバを設けるならば(そしてこのサーバのアドレスが副本scに含まれるか、或いはビューワ22にとって既知であれば)、副本scに文書管理サーバ10のアクセス情報を含める必要はない。
図2に示すように、クライアント端末20のファイルシステム24には、他のアプリケーションのファイルとともに、副本sc26のファイルも保存される。副本sc26は、例えばアドビ社が開発したPDF(Portable Document Format)や富士ゼロックス株式会社が開発したDocuWorks文書などのように、文書の実体データに加え、属性情報を保持できる形式のファイルとして作成する。この場合、副本sc26のファイルには副本IDやアクセス情報等が属性情報として組み込まれる。ユーザは、文書管理サーバ10上にある電子文書に対して閲覧その他の操作を行いたい場合、通常のショートカットファイルと同様の感覚で、その電子文書に対応する副本sc26をファイルシステム24や検索ソフトが提供するファイル一覧画面で選択し、操作を行う。すると、その副本sc26のファイル形式に関連づけられたビューワ22が起動し、そのビューワ22がその副本sc26内のアクセス情報及び副本IDを用いて文書管理サーバ10にアクセスして、その副本IDに対応する電子文書のコピーである副本文書のファイルを取得する。ビューワ22は、その副本ファイルを表示したり、ユーザの操作に応じてその副本ファイルに編集等の操作を加えたりする。ここで、副本ファイルには、そのファイルが副本であることを示す情報(例えば後述する更新用副本ID)が含まれており、ビューワ22は、その情報からそのファイルが副本であることを認識する。ビューワ22は、副本ファイルはファイルシステム24には保存しないようにしてもよい。この場合、副本ファイルは、クライアント端末20においてビューワ22が管理するメモリ領域の上で開かれるのみであり、ファイルシステム24には保存されない。ビューワ22としては例えばPDF形式に対応したアドビ社のAcrobat(登録商標)などを用いることができる。ここで、このシステム特有の副本scの取扱機能(その一部は既に説明したが、あとでも更に説明する)は、例えばプラグインの形でAcrobat等の既存ビューワに追加することができる。
このシステムでは、ユーザがクライアント端末20上の副本scを利用して文書管理サーバ10上の電子文書の正本に対して操作を行うたびに、文書管理サーバ10が更新用の副本IDを発行し、そのクライアント端末20上の副本sc内の副本IDを更新する。このようにすることで、このシステムでは、副本scを用いて電子文書に操作が行われるたびに、その副本sc内の副本IDが更新されるようにしている。例えば、あるユーザXが副本scを用いて電子文書の副本ファイルを文書管理サーバ10に要求し、副本ファイルを得て閲覧した場合、そのユーザXのクライアント端末20にあるその副本sc内の副本IDの値は、その閲覧の前後では変わってくる。したがって、そのユーザXが副本scのコピーを電子メール等に添付して他のユーザYに送った場合を考えると、閲覧の前に送ったのと閲覧のあとで送ったのとでは、ユーザYが受け取る副本scの副本IDが異なる。副本scを用いてユーザが電子文書の操作を要求する場合、その副本scに含まれる副本IDがクライアント端末20から文書管理サーバ10に送られるので、文書管理サーバ10は、その要求の元になった副本scがどの操作の段階に対応するものか(例えばユーザXが閲覧する前のものか閲覧したあとのものか)を、受け取った副本IDから識別することができる。また、副本IDを、その対象となる電子文書の正本の識別情報(「文書ID」と呼ぶ)及びその副本IDの発行の契機となった操作を行ったユーザのユーザID(或いはその副本IDの発行先のユーザID)と対応づけて文書管理サーバ10側で記録しておけば、その副本IDからどの文書に対するどのユーザの操作かを割り出すこともでき、電子文書の流通の様子を詳細に追跡することができる。
副本IDは、いわばユーザが電子文書に対して行った個々の操作に対応する、システム内で一意な識別情報である。副本IDとしては、例えば操作ごとにインクリメントされる通し番号を用いてもよいが、第三者の推測による攻撃を困難にするという観点からすれば、例えば十分に長い乱数値などのように、高い一意性を確保しつつも推測が困難な生成規則を用いて生成された値を用いることが好適である。また、副本IDの生成日時のように、副本ID発行の都度変化する属性情報のハッシュ値(十分に長い桁数のもの)や、そのような変化する属性情報に例えばその副本IDに対応する正本の識別情報などといった固定的な属性情報を組み合わせたもの(或いはこれに更に乱数値を組み合わせてもよい)のハッシュ値を、副本IDとして利用してもよい。
文書管理サーバ10は、図3に示すように、正本文書DB11,正本文書登録部13,副本sc提供部15,副本文書提供部17及びログ管理部19を備える。
正本文書DB11は、クライアント端末20からアップロードされた電子文書を、正本(原本)として保存し、管理するデータベースである。本システムの枠組みでは、正本文書DB11に保存された電子文書のみが正本として取り扱われる。この枠組みでは、仮にその電子文書のコピーがネットワーク上に存在しても、それは正本とは関係がないものとして扱うことができる。
正本文書登録部13は、クライアント端末20から正本として登録すべくアップロードされた電子文書を、正本文書DB11に登録する。このとき、正本文書登録部13は、登録する正本の電子文書ファイルに対し、「文書ID」と呼ぶ一意な識別情報を付与する。文書IDとしては、例えば十分に長い乱数値やその電子文書の十分に長いハッシュ値などを用いることができる。電子文書の登録という「操作」についての副本IDを生成し、この副本IDを、登録されたその電子文書(正本)の文書IDとして用いてもよい。
副本sc提供部15は、ユーザからの操作要求に応じ、正本文書DB11内の電子文書に対する副本scをそのユーザに対して発行する。副本文書提供部17は、ユーザからの操作要求に応じ、要求対象の電子文書の副本ファイルを作成し、そのユーザへと提供する。
ログ管理部19は、クライアント端末20を介したユーザからの操作要求に応じて文書管理サーバ10が処理を行った場合に、その操作に関する情報をイベントログとして記録する。ログ管理部19には、図4に示すように、個々の操作イベントごとに、その操作イベントにおいて副本IDを提供したユーザ(この場合、その操作のために文書管理サーバ10にアクセスしてきたユーザと同じ)のユーザID(宛先ユーザID)、そのイベントの操作種別、そのイベントの発生日時、そのイベントにおいてその宛先ユーザに提供した副本ID(「新副本ID」)、及びそのイベントの契機となる要求に含まれていた副本ID(「旧副本ID」)を、ログレコードとして記録する。「ログ番号」は、ログレコードを識別するための識別情報である。またこのログレコードを調べれば、副本IDに対し、文書の操作のためにこの旧副本IDを用いたアクセスに対して文書管理サーバ10が提供した新たな副本IDが対応づけられるので、操作による副本IDの変遷を把握することができる。このような副本IDの変遷は、旧副本IDから操作により新たな副本IDが派生するという関係である。副本IDの一意性から、異なる複数の旧副本IDから同じ副本IDが派生することはないので、この派生関係はツリー状となる。図4に例示したログデータが示す副本IDの派生関係を図5に示す。図5の例では、正本のファイルがクライアント端末20から文書管理サーバ10に登録された際に、クライアント端末20に提供した副本ID"a"を、その正本のIDとして用いている。
ここで、ログレコード中の「新副本ID」を、当該ログレコード自体の識別子として用いてもよい。1つのログレコード内の「旧副本ID」と「新副本ID」とのペアは、ログレコード同士の派生関係(親子関係とも呼ぶ)を表す。例えば、ログ番号4のレコードには、旧副本ID"c"と新副本ID"d"のペアが登録されているが、このペアは、ログ番号3のレコードが親で、ログ番号4のレコードが子である派生関係を表す。このような派生関係を遡ることにより、副本IDに対応する正本の電子文書を特定することができる。例えば、副本ID"e"が入力された場合、ログ番号5から4,4から3と順に派生関係を遡ることにより、その副本ID"e"に対応する正本の電子文書のID"a"が求められる。
文書管理サーバ10は、例えばウェブサーバとウェブアプリケーションを用いて構築することができる。この場合、文書管理サーバ10は、ユーザインタフェース画面としてウェブページをクライアント端末20に提供する。
次に、この文書利用管理システムの仕組みを具体的に示すために、図4に例示したログデータが形成された時のシステムの動作を、図6を参照して説明する。
まず、ユーザP01がクライアント端末20−P01から文書管理サーバ10に対し、電子文書"O"100の登録要求を行う。電子文書100は、クライアント端末20−P01のローカルのファイルシステム内にあるものでも、ネットワーク上のファイルサーバや文書サーバにあるものでもよい。この登録要求は、例えばビューワ22が提供するユーザインタフェースを介して行う。このユーザインタフェースは、例えばファイルシステムやネットワークファイルシステムのツリー状のディレクトリを表示するディレクトリ画面を提供し、このディレクトリ画面上でユーザP01から登録対象の電子文書の選択を受け付ける。また、ユーザインタフェースが検索画面を提供し、その検索画面に対しユーザが入力した検索条件に合致する電子文書をローカルのファイルシステム及び/又はネットワーク上のファイルサーバから検索してその検索結果をユーザに提示し、その中からユーザに登録対象の文書を選択させてもよい。クライアント端末20が発する登録要求には、ユーザP01を特定するユーザIDと、対象となる電子文書100(実体データ又はその実体データに対するリンク情報)が含まれる。ここで登録要求に含めるユーザIDとしては、クライアント端末20−P01又は本システムに対してユーザP01がログインした際に提示したユーザIDを用いることができる。
登録要求を受けた文書管理サーバ10では、正本文書登録部13が、その要求に含まれる電子文書100の実体データを取得し(要求に実体データへのリンクが含まれる場合は、そのリンクを用いて実体データを取得し)、その電子文書に一意な文書IDを付与して、その電子文書100の実体データを文書IDと対応づけて正本文書DB11に登録する。ここで、その文書IDとして、後述する副本sc提供部15が生成する副本ID"a"を用いても良い。クライアント端末20から送られてきた電子文書100が、このシステムの文書フォーマット(例えばPDF)でない場合は、文書管理サーバ10がその電子文書100をシステムの文書フォーマットに変換してから正本文書DB11に登録してもよい。
次に副本sc提供部15が、一意な副本ID"a"を生成し、その副本ID"a"及びその文書管理サーバ10のホスト名などを含んだ副本sc102を生成し、この副本sc102を、例えば登録要求に対する応答に含める形で、クライアント端末20−P01に送信する。また、文書管理サーバ10では、ログ管理部19が、以上の登録イベントについてのログレコードとして、図4に示したテーブルのログ番号1のレコードを記録する。このレコードでは、その操作イベントにおいて生成した新たな副本IDの宛先ユーザのIDは"P01"である。また、操作イベントの種類は"文書登録"であり、そのイベントの日時は"2006/03/03/10:00:00"である。また、そのイベントの結果として宛先ユーザに提供した新副本IDは"a"であり、旧副本IDは、このケースではその操作の要求に副本IDは含まれないので"NULL"(なし)である。
登録成功の応答と共に副本sc104を受けとったクライアント端末20−P01は、その副本sc104をファイルシステム24−P01に登録する。このとき、ファイルシステム24−P01内の元の電子文書100を削除し、この代わりに副本sc104のファイルを保存するようにしても良い。このようにすれば、電子文書100の正本の実体データは文書管理サーバ10にしか存在しないことになり、その正本の原本性が保証しやすくなる。
なお、ユーザがネットワーク上のファイルサーバにある電子文書100の登録を文書管理サーバ10に要求した場合、文書管理サーバ10は、副本sc102をそのファイルサーバへと送る。これを受けたファイルサーバは、自分が保持する電子文書100を削除し、その代わりに副本sc102を保管するようにしてもよい。この場合、ユーザP01は、ネットワークファイルシステムのディレクトリ画面などで、そのファイルサーバ上にある副本sc102を見ることができる。
ここで、ユーザP01が、電子文書"O"100の副本sc102を電子メールに添付するなどの方法でユーザP03に送信したとする。すると、ユーザP03のクライアント端末20−P03のファイルシステム24−P03には、電子文書"O"を指し示すショートカットとして副本sc102が保存される。ユーザP03が電子文書"O"を閲覧するために、ビューワ22で副本sc102をオープンし、閲覧の指示を入力すると、ビューワ22がその副本sc102から副本ID"a"と文書管理サーバ10のホスト名を取り出し、そのホスト名を用いて文書管理サーバ10にアクセスし、副本ID"a"を伴った閲覧要求104を送信する。この閲覧要求104には、ユーザP03のユーザIDが含まれる。以降の各段階でも、ユーザが文書管理サーバ10に要求その他のデータを送信する場合には、その要求にそのユーザのIDが含まれるか、あるいはその送信の以前にユーザが文書管理サーバ10にログインしているなどにより、文書管理サーバ10はどのユーザからのアクセスなのかを把握することができる。
閲覧要求104を受け取った文書管理サーバ10では、副本文書提供部17が起動する。副本文書提供部17は、その閲覧要求104に伴う副本ID"a"を、例えば「提供した副本ID」の値として持つレコードをログ管理部19から求め、そのレコードの文書ID"D01"が示す電子文書"O"の実体データを正本文書DB11から求め、そのコピーを作成する。そして、副本文書提供部17は、更新用の副本ID"b"を生成し、これをそのコピーのファイルの副本ID属性にセットすることで副本ファイル106を生成し、この副本ファイル106を、閲覧要求104に対する応答としてクライアント端末20−P03に返す。
またログ管理部19は、図4のテーブルの3行目(ログ番号2)のようなログレコードを作成して記録する。閲覧要求104には副本ID"a"が含まれ、それに応じて提供した副本ファイル106には副本ID"b"が含まれるので、このログレコードでは「旧副本ID」が"a"となり、「新副本ID」が"b"となる。また、ログレコードには、宛先ユーザIDとして"P03"が、イベント(操作種別)として"副本提供"が記録される。
クライアント端末20−P03のビューワ22は、送られてきた副本ファイル106中の文書の実体データを開いて表示する。ここで、その副本ファイル106には保存不可の属性が付されているので、ビューワ22はその副本ファイル106をファイルシステム24−P03には保存しない。例えばビューワ22は、その副本ファイル106の保存が選択できないようにしたユーザインタフェース画面を提供する。またビューワ22は、ファイルシステム24−P03中に保存された副本sc102の中の副本ID"a"を、その副本ファイル106に含まれる更新用の副本ID"b"に書き換えることで、電子文書"O"を指すショートカットを更新する。これにより、ファイルシステム24−P03中の副本sc102が、副本ID"b"を含んだ副本sc108に置き換えられる。
ユーザP03が電子文書"O"の副本scを他のユーザに送信する場合を考えると、その送信が副本106の閲覧の前であれば副本ID"a"の副本sc102が送信されるが、副本閲覧の後ならば副本ID"b"の副本sc108が送信されることになる。
次に、ユーザP04が文書管理サーバ10で管理された電子文書を取得する場合を考える。この場合、ユーザP04は、クライアント端末20−P04から文書管理サーバ10に対し、ディレクトリ画面又は検索画面を要求する。文書管理サーバ10は、正本文書DB11内に登録された電子文書群を選択するためのそれらディレクトリ画面又は選択画面を生成し、それをクライアント端末20−P04に返す。ユーザP04がそれらの画面を介して所望の電子文書"O"を見つけ、その取得を指示すると、クライアント端末20は、その電子文書"O"の識別情報(例えば文書ID"a")を伴う取得要求112を文書管理サーバ10に送る。これを受け取った文書管理サーバ10では、副本sc提供部15が新たな副本ID"c"を生成し、これを含んだ副本sc114を作成してクライアント端末20−P04に返す。そして、ログ管理部19が、このショートカット提供のイベントについてのレコード(ログ番号3)を作成して記録する。
クライアント端末20−P04は、受け取った副本sc114をファイルシステム24−P04に保存する。ユーザがこの副本sc114を選んで閲覧を指示すると、ビューワ22は副本ID"c"を伴った閲覧要求116を発行する。これに応じ文書管理サーバ10は、その副本ID"c"に対応する正本(すなわち文書ID"a"に対応する電子文書)のコピーを作成するとともに、更新用の副本ID"d"を生成してそのコピーのファイルの属性にセットすることで副本ファイル118を生成し、クライアント端末20−P04に返す。また、ログ管理部19は、図4のテーブルの5行目(ログ番号4)に示すようなログレコードを記録する。
クライアント端末20−P04のビューワ22は、その副本ファイル118を開いて表示すると共に、ファイルシステム24−P04内の副本sc114の副本IDを副本ファイル118に含まれる更新用の副本ID"d"へと変更する。これにより、クライアント端末20−P04が持つ電子文書"O"へのショートカットは副本sc120となる。
ユーザP04が電子文書"O"の副本閲覧後に副本sc120をユーザP08に送信し、ユーザP08がその副本sc120を用いて閲覧要求122を行うと、文書管理サーバ10は更新用の副本ID"e"を含む副本ファイル124をクライアント端末20−P08に提供し、図4のテーブルの6行目(ログ番号5)に示すログレコードを記録する。クライアント端末20−P08のビューワ22は、受け取った副本ファイル124を開いてユーザに提供し、ファイルシステム24−P08内の副本scの副本IDを、その更新用の副本ID"e"へと変更する。
図4に例示したログデータには、操作イベントにおける副本IDの提供先のユーザIDを記録したが、これに加え、そのイベントの契機となった要求を発したユーザIDを合わせて記録してもよい。以上の例では、イベントの契機となる要求を発したユーザと、そのイベントにおいて新たに生成した副本IDの提供先とは同一であるが、それらが異なる場合には、上述のように両者のユーザIDを記録することが好適である。
以上、実施形態のベースとなる文書利用管理システムの構成と処理内容について説明した。このシステムの特徴をまとめると以下のようになる。
・電子文書の正本が文書管理サーバに登録される。
・ユーザに対しては、電子文書の実体データの代わりに副本scが提供される。副本scには、副本IDが含まれる。
・文書管理サーバは、提供した副本scの副本IDと、それに対応する正本との対応関係を管理する。(上述の例では、副本IDから派生関係を遡ることにより、正本が文書管理サーバ10に登録されたことを示すログレコードに到達し、そのログレコードの新副本IDに対応づけて登録された電子ファイルを、正本として求めた。)
・文書管理サーバ上の文書に対して何らかの操作を行う際には、操作を行う端末が持つ副本scの副本IDがそのサーバに送られる。
・文書管理サーバは、端末から受け取った副本IDに対応する正本を副本ID−正本対応関係に基づき特定し、正本のコピーと新たな副本IDとを含んだ副本ファイルを提供する。副本ファイルを受け取ったクライアント端末は、副本sc内の副本IDを、受け取った副本ファイル内の新たな副本IDへと書き換える。
・文書管理サーバは、クライアント端末からの要求に含まれていた副本IDと、その要求に対して提供した副本ファイルに組み込んだ新たな副本IDとの対応関係を、副本ID間の派生関係として記録する。
・文書管理サーバは、クライアント端末から電子文書の閲覧など、電子文書の実体データを必要とする操作を指示された場合、正本のコピーである副本文書データを提供する。
以上の例では、文書管理サーバ10が記録するログレコードとして図4に示すものを例示したが、これは一例に過ぎない。例えば、ログレコードには、宛先ユーザIDに加え、又はこれに代えて、その宛先ユーザのユーザ名を記録してもよい。ユーザ名は、クライアント端末20から得ることができる。また、宛先ユーザの所属組織名を記録してもよい。所属組織名は、例えば、宛先ユーザの所属する企業や部署などの組織の名称である。所属組織名は、例えば、本システムに接続された組織情報管理データベースから得ることができる。組織情報管理データベースは、組織の各構成員の名前、所属部署、役職、連絡先などを管理する一種のディレクトリサーバである。企業内のシステムでは、このような組織情報管理データベースを備えることが多いので、そのデータベースから情報を取得すればよい。また、ユーザ名と所属組織名の情報として、ITU−Tが策定したX.509証明書の識別名(DN:Distinguished Name)を用いてもよい。DNは、例えばLDAP(Lightweight Directory Access Protocol)サーバなどから取得するようにしてもよい。また、ログレコードには、宛先ユーザが用いているクライアント端末20のIP(Internet Protocol)アドレスやMAC(Media Access Control)アドレスを記録してもよい。IPアドレスやMACアドレスは、クライアント端末20からのアクセスを受け付けるに当たって取得することができる。
また、上述の文書利用管理システムの例では、文書の登録や、副本scの取得、文書閲覧などといった操作を例示したが、これに限らず、正本の文書に関連する操作のうち、システムとして把握しておきたい操作の全てを、上記特徴的な処理の対象とすることができる。
なお、以上及び以下に示すシステムにおいて、閲覧その他の要求の際にクライアント端末20から文書管理サーバ10へと送るユーザIDその他の情報は、例えばHTTPリクエストヘッダに設定して送信してもよいし、XMLで記述したHTTPリクエストに組み込んで送信してもよい。クライアント端末20から文書管理サーバ10へ文書を送信する場合は、それらの送信情報は例えばその文書のメタデータの一部となる。
このようなシステムにおいて、また、クライアント端末20が、副本scを用いて操作を行った場合に、その操作についてのログレコードを生成し、文書管理サーバ10へこのログレコードを送信して登録してもよい。また、操作に対応する新副本IDをクライアント端末20が付与してもよい。
また、操作に対応するログレコード(ただし、「新副本ID」を除いたもの)に対し、SHA−256などの衝突耐性の高い暗号学的ハッシュ関数を適用して得られるハッシュ値を、当該操作に対応する「新副本ID」としてもよい。この場合、例えば、「新副本ID」を除くログレコードの内容を、「新副本ID」をキーとして、ログ管理部19に登録してもよい。すなわち、この場合、操作についてのログレコードには、例えば、その操作の種別、操作の日時、操作を指示したユーザに識別情報、その操作のためにユーザが提示した副本ID(旧副本ID)等の項目が含まれ、そのログレコードが、当該ログレコードのハッシュ値である新副本IDに対応づけて、ログ管理部19に保存される。クライアント端末20が、電子文書に対して操作を行った場合に、その操作についてのログレコードを生成し、そのログレコードのハッシュ値を新副本IDとして生成し、新副本IDとログレコードと操作結果の電子文書(もしあれば)とを文書管理サーバ10に送信して登録してもよい。
また、以上に例示したシステムでは、クライアント端末20が保持する副本scには、副本IDは含まれるが、電子文書の実体が含まれなかった。しかし、このかわりに、副本IDと電子文書の実体のコピーとを含んだ副本ファイルを、クライアント端末20に提供してもよい。この場合、クライアント端末20は、その副本ファイルをファイルシステムに保存したり、それを他のクライアント端末20に送信したりすることができる。また、その副本ファイルをクライアント端末20上のビューワ22で開き、編集などの操作を加えることができる。この場合、クライアント端末20が、その操作についてのログレコードと当該ログレコードのハッシュ値(新副本ID)を生成し、それらをその操作結果の電子文書とともに、文書管理サーバ10に送って登録してもよい。
また、以上の例では電子文書の管理を示したが、電子文書を印刷した場合に、その印刷についてのログレコードを生成し、ログ管理部19に登録すると共に、印刷結果の紙文書に対してそのログレコードの識別子(すなわち「新副本ID」)を埋め込んでもよい。識別子の埋め込みは、識別子をバーコード等のコード画像の形でその紙文書に印刷すればよい。また、RFID(Radio Frequency Identifier)タグなどように、情報の読み書きができる媒体を備えた用紙を用いる場合には、印刷結果の紙文書が備えるそのような媒体に対し、ログレコードの識別子を書き込んでもよい。例えば、ユーザがクライアント端末20で、ある副本scを用いて、その副本scに対応する電子文書のコピーをクライアント端末20上で開いた場合に、開いているコピー(或いはそれに対する編集を加えたもの)に対する印刷を指示したとする。この場合、その副本sc内の副本IDが、その印刷についてのログレコードの「旧副本ID」として記録される。これにより、印刷結果の紙文書が、正本文書についての操作の系譜に組み込まれることとなる。実際に印刷された文書の画像を表す、ページ記述言語等で表現された印刷データを、当該印刷操作のログレコードの一属性として記録してもよい。
また、識別子が埋め込まれた紙文書をスキャナで読み取った場合に、その読み取りについてのログレコードを記録してもよい。このログレコードの「旧副本ID」には、その紙文書から読み取られた識別子がセットされる。これにより、紙文書の読み取りが、正本から派生する操作の系譜に組み込まれる。読み取られた画像を、その読み取り操作のログレコードの一属性として記録してもよい。識別子が埋め込まれた紙文書を複写した場合も、同様に、その識別子を旧副本IDとして含んだログレコードを、複写操作のログレコードとして記録してもよい。この場合も、複写の際に読み取られた画像を、その複写操作のログレコードの一属性として記録してもよい。
また、識別子が埋め込まれていない紙文書をスキャナで読み取った場合に、その読み取りについてのログレコードを記録してもよい。この場合、読み取られた画像を、正本文書として文書管理サーバ10に登録すればよい。この場合、読み取りの操作が、その正本文書に関連する操作の木の根となる。識別子が埋め込まれていない紙文書を複写した場合も同様である。
以上の文書利用管理システムにおいて、文書管理サーバ10に登録された正本文書に対して、クライアント20のビューワ22にて編集を加え、編集結果の文書を、元の正本文書の更新版として文書管理サーバ10に登録することも可能である。この場合、ビューワ22は、ユーザが開いた副本scの副本ID"a"を文書管理サーバ10に送って副本ファイルを要求する。文書管理サーバ10は、その要求に応じ、その副本IDに対応する電子文書(正本)を特定し、その電子文書と更新用の副本ID"b"を含む副本ファイルをビューワ22に送る。ビューワ22では、その副本ファイルを開いてユーザから編集操作を受け付ける。そして、ユーザの編集が完了すると、ビューワ22は、編集結果の電子文書を、その副本ファイルに含まれていた副本ID"b"と対応づけて文書管理サーバ10に送る。文書管理サーバ10は、新たに生成した副本ID"c"を更新用の副本IDとしてビューワ22に返すと共に、この副本ID"c"を「新副本ID」とし、ビューワ22から受け取った副本ID"b"を「旧副本ID」とするログレコードを記録する。このログレコードには、操作イベントの種別として「文書更新」が登録される。また、このログレコードには、ビューワ22から受け取った更新版の電子文書(又はその電子文書を指す参照情報)が登録される。
また、ログ管理部19は、ログレコード群を、SGML文書やXML文書などの構造化文書として管理してもよい。この場合、個々のログレコードが1つの要素となり、ログレコード間の派生関係は、要素の入れ子構造により表現すればよい。
例えば図7に、XML文書として表現されたログレコード群の例を示す。この例では、操作の種類を要素名として用いている。例えば"archive"は文書管理サーバ10へ正本文書を新規に登録する操作を示し、"issue"は登録された正本に対応する副本scの発行を示す。また"retrieve"は、閲覧等の操作のためにサーバ10から副本ファイルを取得する操作(サーバから見れば副本ファイルの提供)を示し、"revise"は取得した副本ファイルに対する編集結果を更新版として文書管理サーバ10に登録する操作を示す。また、操作に応じて発行した新副本IDは、要素内の"documentID"属性の値として表され、その操作が行われた日時は要素内の"date"属性の値として表される。正本文書の新規登録操作の場合、正本文書DB11内のその正本文書を指し示す参照情報が"filename"属性の値として、当該操作のログレコードに組み込まれる。この例の場合、ログレコード内に「旧副本ID」の値は含まれない。この代わりに、当該ログレコードを、旧副本IDを"documentID"の値として持つログレコードの子として、XML文書内に組み込む。例えば、3行目の"retrieve"要素は2行目の"issue"要素の子であり、これは副本ID"elef4"のログレコードの子が副本ID"83690"のログレコードであることを表す。図7のXML文書のうち1行目から12行目までがID"elef4"の正本文書から派生するログレコード群を表す。この例は、2人のユーザが、副本ID"elef4"を持つ副本scを用いて、それぞれ副本ファイルを取得したことを示す。それぞれの取得操作には、新たな副本ID"83690"と"5b225"が付与されている。また、副本ID"5b225"に対応する取得操作で取得された副本ファイルに対してユーザが編集を行った結果が、更新版として文書管理サーバ10に登録され、その更新版登録に対して新たな副本ID"c2875"が付与されている。このように、文書管理サーバ10に登録された1つの正本文書から派生する各操作のログレコードは、正本登録という操作を表す"archive"要素の中に含まれることになる。図7に例示したXML文書は、この他にID"037cf"の正本文書から派生するログレコード群も含んでいる。
なお、以上の例では文書管理サーバ10が副本IDを発行すると説明したが、クライアント端末20が副本IDを発行してもよい。この場合、クライアント端末20が、発行した副本IDを文書管理サーバ10に送信し、文書管理サーバ10がそれを記録すればよい。またこの場合、その副本IDを含む副本scをクライアント端末20が生成してもよい。また、クライアント端末20が実行した操作についてのログレコードをクライアント端末20が生成し、文書管理サーバ10に登録するようにしてもよい。
以上のような文書利用管理システムでは、時間の経過に伴い、様々な操作についてのログレコードがログ管理部19に記録されるので、ログ管理部19の容量不足が生じる可能性がある。そこで、本システムでは、容量不足が生じる前に、ログレコードをログ管理部19から削除するか、或いは光ディスクなどの別の記憶装置に退避する。別の記憶装置に退避したログレコードは、ログ管理部19内に残っている場合よりも時間は掛かるものの、アクセスは可能である。ログレコードを単に削除する場合も、別の記憶装置に退避する場合も、退避したログレコードがログ管理部19から無くなる点では変わりがないので、以下ではそれら両者を「削除」と総称する。
このようなログ管理部19からのログレコードの削除を、従来一般的に行われている「古いレコードから順に削除する」という手順に従って削除した場合、副本IDから派生関係を親の方に遡ることができなくなる可能性がある。派生関係を遡れなくなる場合、その副本IDに対応する正本文書を特定できなくなる可能性がある。例えば、図4のログレコード群において、2006年3月3日10時30分以前のログレコードを削除した場合、ログ番号1〜4のログレコードが無くなる。この場合、ユーザが副本ID"e"に対応する正本のコピーを要求したとしても、ログ番号4,3,1のログレコードがないため、正本文書の登録イベントに到達することができず、副本ID"e"に対応する正本文書を特定することができない。
このような問題に対する文書管理サーバ10のログ保守について、以下に説明する。まず、ログ管理部19の内部構成について、図8を参照して説明する。ログDB(データベース)190は、図4又は図7に例示したようなログレコード群を記憶するデータベースであり、文書管理サーバ10がクライアント端末20からの要求を処理する際に参照されたり、その処理に伴って生成された新たなログレコードが登録されたりする。旧ログ保存部191は、ログDB190の容量確保等のために、ログDB190中の古いログレコードを退避する記憶装置である。旧ログ保存部191は、例えば光ディスクなどの大容量記憶媒体である。ログ登録部192は、ログレコードを生成し、ログDB190に登録する。ログ検索部193は、クライアント端末20からの要求を処理するために、ログDB190の検索を行う。例えば、要求に含まれる副本IDに対応する正本のコピーを含んだ副本ファイルをクライアント端末20に提供する場合、ログ検索部193は、ログDB190中の派生関係の情報を参照することで、その副本IDに対応する正本を特定する。DB保守部194は、ログDB190の応答性能の確保などのために、古いログレコードをログDB190から削除して、旧ログ保存部191へ移動させる処理を行う。DB保守部194は、定期的な処理タイミングや、ユーザ(典型的にはサーバ10の管理者)から明示的な保守実行を受けたときなど、所定のタイミングで、そのようなログレコードの削除・移動処理を実行する。DB保守部194は、個々のログレコードではなく、1つの正本から派生するログレコードの木全体を単位として、ログレコードの削除・移動を行う。条件設定部195は、DB保守部194がログDB190から削除対象とするログレコードを判定するための条件(以下、「削除条件」と呼ぶ)を設定するためのユーザインタフェース部である。削除条件は、正本の登録操作のログレコードを根とするログレコードの木を対象とする。なお、以下、このような木のことを、「正本を根とする木」または「正本から派生する木」などと略称する場合もある。正本の登録操作のログレコードには、正本文書自体が対応づけられているので、木をたどって正本登録のログレコードにたどり着けば、正本文書にもアクセスできる。
例えば、「最後にアクセスされてから所定日数が経過した文書(から派生したログレコードを削除対象とする)」という削除条件は、正本を根とする木に属するログレコード群の「日時」属性の値がすべて現在時刻より所定日数以上前であれば、その木に属するログレコード全体を一括削除する、という条件を表す。同様に「最終更新日時から所定日数が経過した文書」という条件は、正本を根とする木に属するログレコードのうち、「イベント(操作種別)」属性の値が「更新」であるレコードの「日時」属性値がすべて現在時刻より所定日数以上前であれば、その木に属するログレコード全体を一括削除する、という条件を表す。また、「最後にアクセスされた日時が最も古い文書」という削除条件は、正本を根とする木に属するログレコードの「日時」属性値のうち最も新しい日時をその正本文書の最新アクセス日時とした場合に、その最新アクセス日時が最も古い正本から派生する木を一括削除するという条件を表す。もちろん、最も古い文書1つについてのレコード群だけでなく、最も古いものから順に所定数の正本文書についてのレコード群を一括削除してもよい。同様に、「最終更新日時が最も古い文書」という削除条件も考えられる。また、「ログのサイズが所定サイズを超える文書」という削除条件は、正本を根とする木全体のログレコードの総データ量が所定サイズを超える場合に、その木全体を一括削除するという条件を表す。同様に、「ログのサイズが最大の文書」という削除条件も考えられる。また、「文書のアクセス回数が制限値を上回る文書」という削除条件は、正本を根とする木に属するログレコードのうちクライアント端末20が副本ファイルを取得したことを表すものが制限値を上回る場合に、その木全体を削除するという条件を表す。また「文書に対して指定された全ユーザが取得済みの文書」という削除条件は、正本に対して予め指定された配布対象ユーザのすべてが副本ファイルを取得した場合に、その正本を根とするログレコードの木を一括して削除するという条件を示す。この条件の判定には、ユーザが副本ファイルを取得したことを示すログレコードのユーザ属性を調べればよい。以上、削除条件の例をいくつか挙げたが、これらはあくまで例に過ぎない。
ユーザは、条件設定部195を用いて、これら複数の削除条件の中から所望のものを選択することができる。また、上に例示した削除条件におけるパラメータ(例えば古さの判定基準となる「所定日数」や、アクセス回数の制限値、配布対象のユーザなど)についても、条件設定部195から設定可能である。
ここでは、条件設定部195によりユーザが削除条件の種類やパラメータを選択する例を示したが、このような条件設定部195を設けず、DB保守部194が固定の削除条件に従ってログレコードの削除を行う構成であってももちろんよい。
DB保守部194の処理手順の一例を、図9に示す。この手順では、DB保守部194は、保守処理の実行タイミングが到来すると、文書管理サーバ10に登録された正本文書毎に、以下のステップS1〜S4の処理を行う。ログDB190中では、正本文書は、操作イベントの種別が文書登録であるログレコードに対応する。DB保守部194は、ログレコード群のうち、イベント属性が文書登録であるものを、正本に対応するログレコードとして検出することができる。ステップS1では、ログDB190を参照して、その正本から派生する木に属するすべてのログレコードを特定する。これは、正本文書DB11に登録された正本文書のIDを起点に、ログレコードの「旧副本ID」と「新副本ID」のペアが示す親子関係を順に下っていくことで実現できる。これにより、その正本を根とするログレコードの木が特定される。ステップS2でDB保守部194は、その木に属するログレコード群の内容を調べることで、それらレコード群が全体として削除条件を満足するか否かを判定する。満足すると判定されれば、ステップS3でDB保守部194は、ステップS3で、その木に属するすべてのログレコードを一括してログDB190から削除し、旧ログ保存部191に保存する。満足しないと判定された場合は、ステップS3はスキップされ、別の正本についての処理が行われる。
例えば、ログDB190が図10に示すようなログレコード群を記憶しており、削除条件が「2005年10月31日以前のログを削除する」ことを表していた場合を例に取る。このXML記述の1〜7行目の"archive"要素は、IDが"efe45"の正本から派生するログレコードの木全体を示しているが、この中に含まれるログレコードの中には"date"属性が2005年10月31日より後のものが存在するので、この"archive"要素は削除されない。一方、8〜12行目の"archive"要素は、IDが"037cf"の正本から派生するログレコードの木全体を示しているが、この木に属するログレコードの"date"属性はすべて2005年10月31日以前なので、この"archive"要素は削除条件を満足し、削除される。
以上の処理例では、木に属する各ログレコードの日時属性をすべて調べていたが、この処理を簡略化することも可能である。簡略化の1つの手法として、正本文書に対して最新操作日時の属性を持たせる手法がある。この手法では、副本IDを用いた操作が行われる毎に、その副本IDに対応する正本文書の最新操作日時属性をその操作の日時へと更新する。ログDB190において、その副本IDから派生関係を遡って到達する根に対応する文書が、その副本IDに対応する正本文書である。正本文書の最新操作日時属性は、例えば図11に示す例では、"archive"要素内の"lastAccessedDate"属性として表されている。この例では、DB保守部194は、保守処理の実行タイミングが到来すると、正本文書DB11に登録された各正本文書について、図12に示すステップS11〜S13を実行する。ステップS11では、DB保守部194は、当該正本文書の最新操作日時を取得する。次にステップS12では、取得した最新操作日時が削除条件を満たすか否かを判定する。満たす場合は、ステップS13にてその正本文書から派生するログレコードの木全体をログDB190から削除する。満たさない場合は、ステップS13はスキップする。以上、正本文書の最新操作日時を削除条件とする例を示したが、最終更新日時に関する削除条件についても、同様の処理が可能である。
また、以上の例では、日時に関する条件についての処理例を示したが、他の削除条件についても同様の処理が可能である。この場合、正本を根とする木に含まれるログレコード群についての要約情報を、その正本に対応づけて記憶する。この要約情報は、その正本を根とする木に属するログレコード群について、削除条件が成立するか否かの判定に用いる情報を集計した情報である。ログ登録部192がログDB190にログレコードを登録する際に、そのログレコードの属する木の根である正本文書に対応する要約情報を、そのログレコードに応じて更新する。これにより、正本に対応する要約情報は、その正本から派生する操作についてのログレコードを反映したものとなる。DB保守部194は、DB保守の実行タイミングが到来した場合、各正本について、要約情報が削除条件を満足するか否かを判定すればよい。例えば、ログサイズに関する削除条件を用いる場合は、正本文書に対してログサイズ属性を持たせ、副本IDを用いた操作が行われる毎に、その副本IDに対応する正本文書のログサイズ属性の値を、当該操作に対応して新たに追加したログレコードのサイズ分増加させればよい。また、削除条件が文書のアクセス回数に関する条件である場合、正本文書に対してアクセス回数属性を持たせ、副本IDを用いた操作が行われる毎に、その副本IDに対応する正本文書のアクセス回数属性の値を、当該操作に対応して1増加させればよい。また、「文書に対して指定された全ユーザが取得済みの文書」という削除条件の場合、正本文書に対してアクセス済みユーザリスト属性を持たせ、副本IDを用いた操作が行われる毎に、その副本IDに対応する正本文書のアクセス済みユーザリスト属性に対し、当該操作を行ったユーザの識別子を追加すればよい。
以上の例では、すべての正本文書に対して同一の削除条件が適用されたが、これは一例にすぎない。この代わりに、例えば、文書に対する操作を行うユーザに、当該文書に対する削除条件を指定させてもよい。この例では、ユーザから副本IDを含む要求を受けた場合、文書管理サーバ10は、その副本IDに対応する副本ファイルを提供すると共に、削除条件の設定用UI情報を提供する。クライアント端末20のビューワ22は、設定用UI情報を用いて削除条件設定用の画面を表示し、ユーザはその画面に対して、削除条件の種類又はパラメータを入力する。入力された削除条件に関する指定情報は文書管理サーバ10に渡され、文書管理サーバ10はその指定情報を、当該操作についてのログレコードの一項目(削除条件属性)としてログDB190に記録する。DB保守部194は、保守処理の実行タイミングが到来した場合、図13のような処理を行えばよい。図13の手順は、図9の手順に対応するものである。図13の手順では、ステップS1で正本文書から派生するログレコードの木を特定した後、ステップS21でその木に属する各ログレコードの削除条件属性を求める。木の中の複数のログレコードが削除条件属性値を有していた場合、DB保守部194は、それら複数の削除条件属性値を総合して、木全体に適用する削除条件を決定する(S22)。例えば、複数の削除条件属性値のうち、もっとも緩い条件を採用してもよい。削除条件属性値として文書の有効期限が設定される場合は、複数の有効期限のうちもっとも後のものを、木全体の削除条件として採用するなどである。この例では、ログ管理部19は、正本文書に対応する木全体の削除条件として採用した有効期限より、現在時刻の方が後であれば、その木全体のログレコード群を一括してログDB190から削除する。DB保守部194は、ステップS22のあとステップS2,及びS3を実行する。
また、実施形態の変形例として、以下のようなものもある。この変形例では、正本から派生する副本IDの値として、その正本のIDが一意に特定できるような値を与える。例えば、副本IDを、正本のIDの値を含んだものとするなどである。具体例を挙げると、正本のIDが"aaaa"である場合に、これから派生する副本IDを"aaaa-000001"とするなどである。この変形例では、ログ管理部19は、図14に示すように、ログ削除情報記憶部196を備える。DB保守部194は、正本を根とするログレコードの木全体を一括してログDB190から削除した場合、その正本のIDをログ削除情報記憶部196に登録する。そして、クライアント端末20から副本IDを含む要求を受けた場合、ログ検索部193は、図15に示すように、その副本IDの中から、対応する正本のIDを抽出する(S31)。そして、ログ検索部193は、その正本IDがログ削除情報記憶部196に記憶されているか否かを判定し(S32)、記憶されていれば、対象の文書が利用禁止であることを示す情報をクライアント端末20に返す(S33)。また、その正本IDがログ削除情報記憶部196に記憶されていなければ、正本文書DB11からその正本IDに対応する文書を検索し(S34)、見つかればその正本文書をクライアント端末20に提供する(S35)。ここで、正本文書DB11に、正本文書から派生した更新版の文書を、その正本文書のIDと対応づけて登録しておけば、正本文書の代わりに、あるいは正本文書と共に、これに対応する更新版の文書をクライアント端末20に提供することもできる。なお、ステップS34で、正本IDに対応する文書が検索できなければ、エラーコード(例えば不正なIDによるアクセスを示すコード)をクライアント端末20に返す(S36)。
この例では、ログ削除情報を記憶・管理することにより、クライアント端末20から提示された副本IDに対応する正本が元々存在しないものであるか、削除されたものであるかを判別することができる。これにより、ログ管理部19からログの削除を行った場合でも、不正なアクセスを検出することが可能になる。
以上では、正本を根とする派生関係の木に属するログレコードを一括して削除する例を示した。次に、ログレコードを単位として削除する場合の変形例を説明する。この例では、ログDB190内に残る他のログレコードの派生関係の情報を書き換えることにより、ログDB190内で派生関係がつながるようにする。
すなわち、この変形例では、削除条件は個々のログレコード単位に適用される内容の条件であり、DB保守部194は、ログDB190内のログレコードのうち、その削除条件を満たすものをログDB190から削除し、旧ログ保存部191に移動する。ただし、文書登録イベントのログレコードはログDB190内に残す。この削除・移動の際、DB保守部194は、IDすなわちログレコードの派生関係の木を生成し、その木の中で削除されるノード(ログレコード)と、削除されずに残る残留ノードを特定する。そして、残留ノードのうち最も根に近い各ノードについて、当該ノードの「旧副本ID」の値を、当該ノードから前述の木を遡っていったときに最初に到達する残留ノードの「新副本ID」に書き換える。
以下、具体例を用いて説明する。例えば、ログDB190のデータ内容が図16に示すようなものであったとする。このような状態で、操作の日時が2005年10月31日より古いログレコードをログDB190から旧ログ保存部191に移動するとする。図16の例では、ログ番号2,3,4が移動することになる。移動の結果、旧ログ保存部191のデータ内容は、図18に示すようなものとなる。一方、移動後のログDB190は、図17に示すようなものとなる。この例では、ログDB190に残るログ番号5と6のレコードは親と子の関係である。そのログ番号5のレコードの直系の先祖であるログ番号4,3,2のレコードが削除され、ログ番号2の親であるログ番号1のレコード(文書の登録イベント)が残るので、ログ番号5のレコードの旧副本IDを、ログ番号1のレコードの新副本IDの値へと書き換えられている。この書き換えにより、ログ番号5のレコードの親がログ番号1のレコードとなり、文書管理サーバ10は、ログ番号5,6に対応する操作で発行した新副本IDを含む副本scを用いた要求をクライアント端末20から受けた場合に、対応する正本を特定し、クライアント端末20に提供することができる。
なお、図19に示すように、正本文書の更新版の文書を当該正本文書の正本IDと対応づけて正本文書DB11に登録しておけば、クライアント端末20からの要求中の副本IDに対応する正本に対応する更新版を求め、その更新版をクライアント端末20に提供することもできる。図19に示すデータベース内容において、「登録ID」は、文書の新規登録(すなわち正本の登録)、又は更新版文書の登録に応じて発行された副本IDであり、「バージョン」は登録された正本又は更新版のバージョン番号(これは例えば登録したユーザが指定する)である。また「ファイル名」は、登録された正本又は更新版の文書のファイル名である。「ファイル名」の欄の値は、ファイル名そのものでなくても、その値を用いて当該文書の実体データにアクセス可能なものであれば、どのようなものでもよい。図19の例で、要求に対応する正本IDが例えば"efe45"と特定されたとすると、文書管理サーバ10は、その正本IDに対応する文書のエントリとして番号1,3,4のエントリを見つけ、その中で例えば最新の版であるバージョン1.2の文書「整備マニュアル1_2.pdf」を提供することができる。
なお、この変形例において、ログ検索部193が、クライアント端末20からの要求に含まれる副本IDに対応するログレコード(すなわちその副本IDを「新副本ID」の値として持つレコード)をログDB190から見つけることができなかった場合、ログ検索部193が更に旧ログ保存部191を検索してもよい。例えば要求に含まれる副本IDが"83690"であったとすると、ログ検索部193はその副本IDに対応するログレコードを図17の内容を持つログDB190から得ることはできない。そこでログ検索部193は更に図18に示す内容の旧ログ保存部191を検索する。これにより、旧ログ保存部191におけるログ番号2のレコードを得ることができる。ログ検索部193は、このレコードから旧ログ保存部191内で親子関係を先祖へと遡ることで、図18のログ番号1のレコードに到達する。ただし、このレコードは正本文書登録についてのものではないので、ログ検索部193は、更にログDB190において、そのレコードの先祖を探すことで、図17のログ番号1のレコードに到達する。このレコードに示される新副本IDが、この例では正本文書の正本IDである。
更に別の変形例を説明する。この変形例は、ログレコード群を図7の例のようにXMLで記述する例に関するものである。この変形例では、旧ログ保存部191に移動させたログレコードに含まれる副本IDは利用禁止とし、旧ログ保存部191へ格納したログレコードが移動前に存在していた位置(ログDB190内での位置)、および、ログレコードの内容に改ざんがないことを保証する。
ログDB190に記録するログレコードの例を図20に示す。この例において、"folder"要素はログレコードを「正本登録が行われた日時」で分類するための構造である。すなわち、この変形例では、ログ登録部192は、ログDB190内に日付ごとに"folder"要素を作成し、正本文書がサーバ10に登録されたときに、その登録を示す"archive"要素を、その登録時点の属する日付の"folder"要素内に追加する。"folder"要素の属性"g_date"は、当該"folder"要素の作成日を表す。"title"属性は、作成日を表す人間向けの表示などに用いることができる。もちろん、"folder"要素の単位は日に限らない。また、日単位及び月単位など、複数階層の"folder"要素を作成してもよい。
ここでは一例として、最終操作日時が「2005年10月31日」より古いログレコードを、旧ログ保存部191へ移動させるとする。正本に関係する全てのログレコードを一括して移動させる。図20の例では"documentId"属性値が "037cf" である"archive"要素(及びその要素内の子孫要素)が移動対象に該当する。
また、DB保守部194は、ログレコードの移動操作を行う前に以下の処理を実施する。すなわち、移動させるログレコードの先祖に位置する全ての"folder"要素について、ハッシュ値の算出をおこなう。例えば、「日」による分類を行う"folder"要素のハッシュ値は、以下の手順で得る。
S41: "folder"のn番目の子要素である"archive"要素を根とするXMLサブツリーのハッシュ値h_nを計算する。
S42: "folder"直下の全ての"archive"要素についてS41の計算を行う。
S43: S42で計算された全てのh_nを各"archive"要素の"hash"属性値として追加し、その結果得られる"folder"要素のXMLサブツリーのハッシュ値を計算する。計算結果のハッシュ値を、当該"folder"要素に"hash"属性値として追加する。
例えば、図20の例における最初の"archive"要素に対しこの手順により"hash"属性値を追加した結果を、図21に例示する。
"folder"要素が階層的に存在する場合は、最下位の"folder"要素に対して上述のステップS41〜S43の処理を実行する。この処理の後、その最下位の"folder"要素を含む1つ上位の"folder"要素のXMLサブツリーのハッシュ値を計算し、その計算結果を当該"folder"要素に"hash"属性値として追加する。下位から上位へと再帰的に以上の処理を繰り返す。
以上の処理は、DB保守部194がログレコードの一部を旧ログ保存部191へ移動させる直前に実行し、その処理結果を図22のように記録する。すなわち、ある正本に対する"archive"要素を一括して移動する場合、その移動の日時を「記録日時」の値として図22に例示したような削除記録テーブルに記録する。そして、移動対象の"archive"要素の上位の各"folder"要素のハッシュ値と、移動対象の"archive"要素以外の"archive"要素(移動対象の"archive"要素と同じ"folder"要素に属する兄弟の"archive"要素)のハッシュ値とを、その記録日時と対応づけて削除記録テーブルに記録する。そして、移動対象の"archive"要素については、タイムスタンプを付与してから旧ログ保存部191へ移動する。タイムスタンプは、例えばRFC3161(Time-Stamp Protocol)に示される方式を用いて付与すればよい。
このような削除記録を残しておくことで、旧ログ保存部191へ移動させた"archive"要素(正本を根とするログレコード群)が、移動前は確かにtitle属性値が「2005年1月10日」であるfolder要素の下位要素であり、移動させた後に改ざんがないことを示すことができる。
以上に説明した各例では、ログレコードをログDB190から旧ログ保存部191に移動させる処理について説明したが、正本を根とするログレコード群を一括して移動させる場合には、その正本自身を正本文書DB11から削除し、保存用の記憶装置(例えば旧ログ保存部191)に格納してもよい。
また以上の各例では、ログレコードをログDB190から旧ログ保存部191に移動させるとしたが、ログレコードをログDB190から単に削除してしまう場合にも、上記各例の手法は適用可能である。
以上に例示したシステムにおける文書管理サーバ10は、典型的には、汎用のコンピュータにて上述の文書管理サーバの各部の機能又は処理内容を記述したプログラムを実行することにより実現される。コンピュータは、例えば、ハードウエアとして、図23に示すように、CPU(中央演算装置)40、メモリ(一次記憶)42、各種I/O(入出力)インタフェース44等がバス46を介して接続された回路構成を有する。また、そのバス46に対し、例えばI/Oインタフェース44経由で、ハードディスクドライブ48やCDやDVD、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体を読み取るためのディスクドライブ50が接続される。このようなドライブ48又は50は、メモリに対する外部記憶装置として機能する。実施形態の処理内容が記述されたプログラムがCDやDVD等の記録媒体を経由して、又はネットワーク経由で、ハードディスクドライブ48等の固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがメモリに読み出されCPUにより実行されることにより、実施形態の処理が実現される。また、上記の各例におけるクライアント端末20についても同様である。
10 文書管理サーバ、11 正本文書DB、13 正本文書登録部、15 副本ショートカット提供部、17 副本文書提供部、19 ログ管理部、20 クライアント端末、22 ビューワ、24 ファイルシステム、26 副本ショートカット、30 ネットワーク、190 ログDB、191 旧ログ保存部、192 ログ登録部、193 ログ検索部、194 DB保守部、195 条件設定部。