(57)【要約】【課題】  利用者側でドキュメントに対する変更操作の履歴を生成する必要なく、変更履歴つきのドキュメントを提供できるサーバ装置を提供する。【解決手段】  前記ドキュメントのうち処理対象となった変更前ドキュメントに対して変更操作を行って得られた変更後ドキュメントを受け入れ、変更前ドキュメントと変更後ドキュメントとの差分の情報を生成し、この差分の情報に基づいて、変更後ドキュメントを変更操作の種類ごとのデータフラグメントに分割し、当該分割して得られたデータフラグメントのうち、その内容がそのまま変更前ドキュメントに含まれているデータフラグメントについては、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけて当該データフラグメントをデータベースに登録する。【選択図】        図１
2005275565.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一つのドキュメントを保持するデータベースにアクセス可能に接続されたサーバ装置であって、
前記ドキュメントのうち処理対象となった変更前ドキュメントに対して変更操作を行って得られた変更後ドキュメントを受け入れる受入手段と、
前記変更前ドキュメントと変更後ドキュメントとの差分の情報を生成する差分情報生成手段と、
前記差分の情報に基づいて、前記変更後ドキュメントを、前記変更前ドキュメントからの変更操作の種類ごとのデータフラグメントに分割する分割手段と、
前記差分の情報に基づいて、前記分割して得られたデータフラグメントのうち、その内容がそのまま前記変更前ドキュメントに含まれているデータフラグメントについては、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけて当該データフラグメントを前記データベースに登録する登録手段と、
を含むことを特徴とするサーバ装置。
【請求項２】
請求項１に記載のサーバ装置であって、
前記登録手段は、前記分割手段により得られたデータフラグメントのうち、その内容が前記変更前ドキュメントに含まれておらず、変更後ドキュメントに追加されたデータフラグメントについては、当該追加の変更操作に関する操作関係情報に関連づけて当該データフラグメントを前記データベースに登録することを特徴とするサーバ装置。
【請求項３】
請求項１または２に記載のサーバ装置であって、
前記登録手段は、前記分割手段により得られたデータフラグメントのうち、その内容が前記変更前ドキュメントに含まれ、変更後ドキュメントで削除されたデータフラグメントについては、当該削除の変更操作に関する操作関係情報に関連づけて当該データフラグメントを前記データベースに登録することを特徴とするサーバ装置。
【請求項４】
請求項２または３に記載のサーバ装置であって、
前記操作関係情報には、前記変更操作を行った利用者を特定する情報と、前記変更操作が行われた日時に関する情報とを含むことを特徴とするサーバ装置。
【請求項５】
請求項１から４のいずれか一項に記載のサーバ装置であって、
前記ドキュメントから分割して得られたデータフラグメントをクライアント装置側に提供する提供手段を含み、
前記提供手段が、当該ドキュメントを分割して得られたデータフラグメントごとに、当該データフラグメントに係る変更操作の種類ごとに異なる情報を関連づけて、前記クライアント装置側に提供することを特徴とするサーバ装置。
【請求項６】
少なくとも一つのドキュメントを保持するデータベースにアクセス可能に接続されたサーバ装置を制御する方法であって、
前記ドキュメントのうち処理対象となった変更前ドキュメントに対して変更操作を行って得られた変更後ドキュメントを受け入れさせる工程と、
前記変更前ドキュメントと変更後ドキュメントとの差分の情報を生成させる工程と、
前記差分の情報に基づいて、前記変更後ドキュメントを、前記変更前ドキュメントからの変更操作の種類ごとのデータフラグメントに分割させる工程と、
前記差分の情報に基づいて、前記分割して得られたデータフラグメントのうち、その内容がそのまま前記変更前ドキュメントに含まれているデータフラグメントについては、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけて当該データフラグメントを前記データベースに登録させる工程と、
を含むことを特徴とするサーバ装置の制御方法。
【請求項７】
少なくとも一つのドキュメントを保持するデータベースにアクセス可能に接続されたサーバ装置を制御するプログラムであって、
前記ドキュメントのうち処理対象となった変更前ドキュメントに対して変更操作を行って得られた変更後ドキュメントを受け入れる手順と、
前記変更前ドキュメントと変更後ドキュメントとの差分の情報を生成する手順と、
前記差分の情報に基づいて、前記変更後ドキュメントを、前記変更前ドキュメントからの変更操作の種類ごとのデータフラグメントに分割する手順と、
前記差分の情報に基づいて、前記分割して得られたデータフラグメントのうち、その内容がそのまま前記変更前ドキュメントに含まれているデータフラグメントについては、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけて当該データフラグメントを前記データベースに登録する手順と、
をサーバ装置に実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ウエブサーバ等、ドキュメントをクライアント側装置に提供するサーバ装置に関する。
【背景技術】
【０００２】
従来から、一つのドキュメントを多数の利用者によって生成する場合に、各利用者によって行われた改訂の履歴を保持させるプログラム等が知られている（非特許文献１）。
【０００３】
なお、ハッシュ値を用いてリストデータを管理する方式のLisp言語について非特許文献２に、ハッシュ値を用いたデータ管理について特許文献１にそれぞれ記載がある。
【非特許文献１】エクスメディア著、「超図解（Ｒ）Word 2000 forWindows（Ｒ） 応用編」、初版、２００２年８月１０日、１５２ページから１５３ページ
【非特許文献２】E.Goto、"Monocopy andAssociate Algorithms in an Extended Lisp", Report TR 74-3, May 1974, University of Tokyo
【特許文献１】米国特許第5978792号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記従来のプログラム等では、利用者の改訂操作を常に監視し、改訂操作の内容を順次記録しているため、例えばサーバ装置上に保持されているドキュメントを改訂する際には、改訂操作を行うクライアント側で改訂操作の履歴を生成しておき、これをドキュメントとともにサーバ装置側にアップロードする必要があったため、改訂履歴つきのドキュメントを提供できるようにするには、利用者側の環境が、改訂操作の履歴を生成できる環境に限定されてしまうという問題点があった。
【０００５】
本発明は上記実情に鑑みて為されたもので、利用者側で改訂操作（ドキュメントに対する変更操作）の履歴を生成する必要なく、改訂履歴つきのドキュメントを提供できるサーバ装置を提供することを、その目的の一つとする。
【課題を解決するための手段】
【０００６】
上記従来例の問題点を解決するための本発明は、少なくとも一つのドキュメントを保持するデータベースにアクセス可能に接続されたサーバ装置であって、前記ドキュメントのうち処理対象となった変更前ドキュメントに対して変更操作を行って得られた変更後ドキュメントを受け入れる受入手段と、前記変更前ドキュメントと変更後ドキュメントとの差分の情報を生成する差分情報生成手段と、前記差分の情報に基づいて、前記変更後ドキュメントを、前記変更前ドキュメントからの変更操作の種類ごとのデータフラグメントに分割する分割手段と、前記差分の情報に基づいて、前記分割して得られたデータフラグメントのうち、その内容がそのまま前記変更前ドキュメントに含まれているデータフラグメントについては、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけて当該データフラグメントを前記データベースに登録する登録手段と、を含むことを特徴としている。
【０００７】
このように、差分の情報から変更操作の内容を特定するので、利用者側でドキュメントに対する変更操作の履歴を生成する必要なく、改訂履歴つきのドキュメントを提供できる。
【０００８】
また前記登録手段は、前記分割手段により得られたデータフラグメントのうち、その内容が前記変更前ドキュメントに含まれておらず、変更後ドキュメントに追加されたデータフラグメントについては、当該追加の変更操作に関する操作関係情報に関連づけて当該データフラグメントを前記データベースに登録することとしてもよい。
【０００９】
これによって、ドキュメントに対する新たな記述の追加等の変更操作が特定され、利用者側でドキュメントに対する変更操作の履歴を生成する必要なく、改訂履歴つきのドキュメントを提供できる。
【００１０】
さらに前記登録手段は、前記分割手段により得られたデータフラグメントのうち、その内容が前記変更前ドキュメントに含まれ、変更後ドキュメントで削除されたデータフラグメントについては、当該削除の変更操作に関する操作関係情報に関連づけて当該データフラグメントを前記データベースに登録することとしてもよい。
【００１１】
これによって、ドキュメントの一部を削除する等の変更操作が特定され、利用者側でドキュメントに対する変更操作の履歴を生成する必要なく、改訂履歴つきのドキュメントを提供できる。
【００１２】
ここで前記操作関係情報には、前記変更操作を行った利用者を特定する情報と、前記変更操作が行われた日時に関する情報とを含むこととしてもよい。
【００１３】
これにより、変更操作をした利用者やその日時を特定する情報を提供できるようになる。
【００１４】
さらに前記ドキュメントから分割して得られたデータフラグメントをクライアント装置側に提供する提供手段を含み、前記提供手段が、当該ドキュメントを分割して得られたデータフラグメントごとに、当該データフラグメントに係る変更操作の種類ごとに異なる情報を関連づけて、前記クライアント装置側に提供することとしてもよい。
【００１５】
これにより、改訂履歴つきのドキュメントを提供できる。
【００１６】
また、上記従来例の問題点を解決するための本発明は、少なくとも一つのドキュメントを保持するデータベースにアクセス可能に接続されたサーバ装置を制御する方法であって、前記ドキュメントのうち処理対象となった変更前ドキュメントに対して変更操作を行って得られた変更後ドキュメントを受け入れさせる工程と、前記変更前ドキュメントと変更後ドキュメントとの差分の情報を生成させる工程と、前記差分の情報に基づいて、前記変更後ドキュメントを、前記変更前ドキュメントからの変更操作の種類ごとのデータフラグメントに分割させる工程と、前記差分の情報に基づいて、前記分割して得られたデータフラグメントのうち、その内容がそのまま前記変更前ドキュメントに含まれているデータフラグメントについては、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけて当該データフラグメントを前記データベースに登録させる工程と、を含むことを特徴としている。
【００１７】
このように、差分の情報から変更操作の内容を特定するので、利用者側でドキュメントに対する変更操作の履歴を生成する必要なく、改訂履歴つきのドキュメントを提供できる。
【００１８】
さらに上記従来例の問題点を解決するための本発明は、少なくとも一つのドキュメントを保持するデータベースにアクセス可能に接続されたサーバ装置を制御するプログラムであって、前記ドキュメントのうち処理対象となった変更前ドキュメントに対して変更操作を行って得られた変更後ドキュメントを受け入れる手順と、前記変更前ドキュメントと変更後ドキュメントとの差分の情報を生成する手順と、前記差分の情報に基づいて、前記変更後ドキュメントを、前記変更前ドキュメントからの変更操作の種類ごとのデータフラグメントに分割する手順と、前記差分の情報に基づいて、前記分割して得られたデータフラグメントのうち、その内容がそのまま前記変更前ドキュメントに含まれているデータフラグメントについては、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけて当該データフラグメントを前記データベースに登録する手順と、をサーバ装置に実行させることを特徴としている。
【００１９】
このように、差分の情報から変更操作の内容を特定するので、利用者側でドキュメントに対する変更操作の履歴を生成する必要なく、改訂履歴つきのドキュメントを提供できる。
【発明を実施するための最良の形態】
【００２０】
本発明の実施の形態について図面を参照しながら説明する。本実施の形態に係るサーバ装置は、例えばウエブサーバ１として実装でき、図１に示すように、制御部１１と記憶部１２と通信部１３とを含んで構成され、データベースサーバ２とクライアント装置３とにネットワークを介して接続されている。なお、データベースサーバ２に対してはネットワークを介さずに直接接続されてもよい。
【００２１】
ウエブサーバ１の制御部１１は、記憶部１２に格納されているプログラムに従って動作しており、基本的にはクライアント装置３からネットワークを介して受信される要求に応答して、当該要求に係るドキュメントを要求元のクライアント装置３に送信する動作を行っている。また、この制御部１１は、提供したドキュメントを変更前ドキュメントとし、これに対して変更処理を施した変更後ドキュメントを受け入れて、変更前ドキュメントと変更後ドキュメントとを関連付する所定処理（履歴管理処理）を行う。さらに本実施の形態においては、この制御部１１は、ドキュメントを提供する際に、当該ドキュメントに関連づけられている変更前ドキュメントに関する情報を併せて提供する処理（情報提供処理）を行っている。これら履歴管理処理や情報提供処理については後に詳しく述べる。
【００２２】
記憶部１２は、制御部１１によって実行されるプログラムを格納するハードディスクデバイスと、制御部１１の実行中に生成されるデータを格納するメモリ装置とを含んでなる。通信部１３は、制御部１１からの指示に従ってデータをネットワークを介して送信する。またこの通信部１３は、ネットワークを介して到来するデータを受信して制御部１１に出力している。
【００２３】
本実施の形態においてデータベースサーバ２は、ウエブサーバ１が提供するドキュメントを保持している。このデータベースサーバ２に格納されているドキュメントは、フラグメントの列として表現される。例えばあるドキュメントが「これはドキュメントの一例です。」という文字列を含むとき、この文字列を「これはドキュメントの」とのフラグメントと、「一例です」とのフラグメントとの２つのフラグメントに分割され、データベースサーバ２は、各フラグメントの文字列を含むフラグメントデータと、フラグメントの列を規定するドキュメントデータｄ＝［ｆ１，ｆ２］として表現されたドキュメントとを格納している。ここで、ｆ１，ｆ２などは、フラグメントを特定するポインタとなっている。また、このデータベースサーバ２は、利用者名と時刻情報とを含む操作関係情報をヘッダデータとして格納している。
【００２４】
ここでデータベースサーバ２に格納されたフラグメントデータは、さらに各フラグメントデータの生成や削除の操作に関係した利用者及びその操作時刻の時刻情報を含むヘッダデータを特定するポインタと、当該フラグメントが表示可能な状態にあるか否かを表すフラグ（可視フラグ）に関連づけられている。本実施の形態では、これらドキュメントデータと、フラグメントデータと、ヘッダデータとを図２に示すようなデータフォーマットで管理している。
【００２５】
このデータフォーマットには、ドキュメントデータ、フラグメントデータ、ヘッダデータのいずれかを含むデータ部分（Ｄ）と、ポインタ部分（Ｐ）とが含まれる。ここでデータベースサーバ２は、このデータフォーマットで表される各データに基づいて、ハッシュ値など特徴量を演算して各データに関連づけて保持し（図３）、この特徴量としてのハッシュ値をポインタとして用いることとしてもよいので、以下、ポインタがハッシュ値である場合を例として説明する。なお、ハッシュ値を用いる場合は、各データが互いに識別できる程度のデータ長さ（例えば２０バイト程度）としておく。
【００２６】
つまり概念的には図４に示すように、ドキュメントｄ１が、ドキュメントデータ［ｆ１，ｆ２］と、ハッシュ値ｈとを関連づけたものとなり、そのハッシュ値は「ｄ１」であるとする。そしてハッシュ値ｆ１に対応するフラグメントは、フラグメントデータとしての文字列「これはドキュメントの」と、ハッシュ値ｈとを関連づけたものとなり、ハッシュ値ｆ２に対応するフラグメントは、フラグメントデータとしての文字列「一例です」と、ハッシュ値ｈとを関連づけたものとなる。なお、当初はこれらのフラグメントデータに対応する可視フラグは「表示可能」である旨を表す値（例えば「True」）に設定されている。
【００２７】
また、ハッシュ値ｈに対応する操作関係情報には、利用者名「ａａａａ」と、操作の行われた時刻「ｔ」とを含み、この操作関係情報にはポインタとして「何もない」状態を表す「ｎｉｌ」が関連づけられている。なおここでの例において、「これはドキュメントの一例です」とのドキュメントが新規に登録される場合、これら文字列全体をフラグメントデータとし、ハッシュ値ｈにを関連づけられたデータが生成されてもよい（その場合ドキュメントデータは、当該フラグメントへのハッシュ値［ｆ］となる）が、ここでは以下の説明の便宜のため、フラグメントが２つに分割された場合を例示している。
【００２８】
クライアント装置３は、一般的なパーソナルコンピュータで構わない。このパーソナルコンピュータにはウエブクライアントとしてのブラウザプログラムがインストールされている。
【００２９】
ここで制御部１１によって実行される履歴管理処理と情報提供処理とについて説明する。制御部１１によって実行されるこれらの処理のためのプログラムは例えばＣＧＩ（Common Gateway Interface）を介して起動されるプログラムとして実装されてもよい。
【００３０】
まず、履歴管理処理について説明する。制御部１１は、クライアント装置３側から変更操作の対象となるドキュメントを提供するべき旨の指示（この指示には、対象となるドキュメントの格納場所を特定する情報（ＵＲＬ（Uniform Resource Locator）等）が含まれる）を受け入れると、当該指示を行う利用者名を入力させるウエブページを配信する。ここで利用者名が受信されると、制御部１１は、変更操作の対象となったドキュメントをデータベースサーバ２から取り出して、ＨＴＭＬ（Hyper Text Markup Language）ドキュメントとして配信する。なお、ここで利用者名を用いて認証を行うこととしてもよい。
【００３１】
具体的に図４に概念的に示したドキュメント（そのハッシュ値はｄ１であるとする）が変更操作の対象となった場合、制御部１１は、当該ドキュメントをデータベースサーバ２から読み出す。このドキュメントには、既に述べたように、ドキュメントデータとしてのフラグメントへのハッシュ値の組が含まれている。制御部１１は、この組に含まれるハッシュ値を順番に読出して、各ハッシュ値に対応するフラグメントをデータベースサーバ２から取得し、それぞれを連結して、編集可能な状態でクライアント装置３に対して送信する。
【００３２】
つまり、この例では、ドキュメントデータとしてフラグメントへのハッシュ値ｆ１，ｆ２が含まれているので、制御部１１は、このハッシュ値に対応するフラグメントをデータベースサーバ２から順次取得する。ここではハッシュ値ｆ１，ｆ２に対応するフラグメントに文字列「これはドキュメントの」及び「一例です」が含まれるので、これらを連結して「これはドキュメントの一例です」を得る。そして制御部１１は、この文字列を編集可能な状態とするため、例えばＨＴＭＬのテキストエリア（TEXTAREA）タグ中のデフォルト文字列としてこの文字列を設定し、当該ＨＴＭＬ記述部分を含むＨＴＭＬ文書を生成して、クライアント装置３に送信する。
【００３３】
また、制御部１１は、クライアント装置３から当該送信した文字列の変更結果が送信されると、当該変更結果（変更後ドキュメント）と、上記フラグメントデータに含まれる文字列を連結して得た変更前ドキュメントとを比較して、差分の情報を生成する。
【００３４】
ここで差分の情報は、例えばＵＮＩＸ（登録商標）において広く用いられているｄｉｆｆコマンドを用いて生成してもよいが、一般的なｄｉｆｆコマンドでは行単位の差分となるので、粒度を高めたい場合には、単語単位（形態素解析処理を用いて単語ごとに分離した状態）での差分を生成するｄｉｆｆコマンドや、文字単位での差分を生成するｄｉｆｆコマンドが知られているので、それらを利用してもよい。
【００３５】
例えば文字単位での差分を生成するｄｉｆｆを用いる場合に、上に例示した「これはドキュメントの一例です」を、「これらはドキュメントの例です」と変更した場合には、差分の出力結果は、図５に示すような状態とすることができる。ここで変更を受けた部分のうち、変更後ドキュメントで新たに追加された「ら」の前には「＋」記号が付され、変更後ドキュメントで削除された「一」の前には「−」記号が付されている。
【００３６】
制御部１１は、この出力の各行を新たなフラグメントとする。つまり（１）追記された部分、（２）削除された部分、（３）変更されていない部分のそれぞれ互いに異なる変更操作に対応する連続部分に分割して新たなフラグメントを定めるのである。ここでは、「これ」、「ら」、「はドキュメントの」、「一」、「例です」の５つのフラグメントに分離される。そして、変更されていないフラグメントについては、変更前のフラグメントのハッシュ値を関連づける。ここでは「これ」及び「はドキュメントの」は、変更前の「これらはドキュメントの」（ハッシュ値：ｆ１）に対応するので、文字列「これ」とハッシュ値ｆ１とを関連づけたフラグメントデータと、文字列「はドキュメントの」とハッシュ値ｆ１とを関連づけたフラグメントデータとを生成し、これらのフラグメントデータに対するハッシュ値を演算し（ｆ′１及びｆ′３とする）、各ハッシュ値に関連づけてフラグメントデータをデータベースサーバ２に登録する。つまり、これら変更のないデータフラグメントの部分は、当該データフラグメントに対応する部分を含む変更前ドキュメントの少なくとも一部を特定する情報に関連づけてデータベースサーバ２に登録しておく。
【００３７】
なお、追記・削除されたデータに関するフラグメントについては、どちらの変更操作であったかを表す情報をさらに関連づけておいてもよい。例えば「ら」の前に「＋」記号を付しておく等とすればよい。
【００３８】
また、「ら」のように追記等、変更された部分がある場合は、変更を行った利用者名（最初に取得した利用者名）と変更後ドキュメントを受信した日時の情報とを合わせて操作関係情報を生成し、これに「ｎｉｌ」を関連づけて、ヘッダデータとし、さらにこのヘッダデータのハッシュ値を演算し（ここではｈ２とする）、このハッシュ値ｈ２とヘッダデータとを関連づけてデータベースサーバ２に登録する。
【００３９】
一方、制御部１１は、上記追記部分について、その文字列「ら」と当該文字列の変更を行った利用者名を含む操作関係情報に係るハッシュ値（ｈ２）とを関連づけて新たなフラグメントデータとし、このフラグメントデータのハッシュ値（ｆ′２とする）を演算して、当該フラグメントデータとハッシュ値とを関連づけてデータベースサーバ２に登録する。なお、削除部分である文字列「一」についても当該文字列の変更を行った利用者名を含む操作関係情報に係るハッシュ値（ｈ２）を関連づけて新たなフラグメントデータとし、このフラグメントデータのハッシュ値（ｆ′４とする）を演算して、当該フラグメントデータとハッシュ値とを関連づけてデータベースサーバ２に登録する。この削除されたフラグメントデータについては、その可視フラグを、表示可能でないことを表す値（「false」）に設定する。
【００４０】
また「例です」の部分は、変更がないので、元のフラグメントのハッシュ値ｆ２に関連づけられてフラグメントデータが生成され、このフラグメントデータに対するハッシュ値（ｆ′５とする）が演算されて、この当該フラグメントデータとハッシュ値とを関連づけてデータベースサーバ２に登録されることになる。
【００４１】
そして制御部１１は、これらｆ′１からｆ′５を配列したドキュメントデータを生成し、このドキュメントデータに元のドキュメントデータに対するハッシュ値ｄ１を関係づけたデータを生成する。そしてこのデータに対するハッシュ値を演算し（ｄ２とする）、この演算したハッシュ値とデータとを関連づけて、データベースサーバ２に登録する。
【００４２】
これにより、図４に対応するデータの関係は、図６に示すようになる（なお、変更を行った利用者名は「ｂｂｂｂ」、変更に関する日時は「ｔ′」であるとする）。
【００４３】
次に情報提供処理について説明する。制御部１１は、クライアント装置３からドキュメントを要求する指示としてドキュメントに関連するハッシュ値の入力を受けて、次のように動作する。入力されたハッシュ値に関連するデータをデータベースサーバ２から取得し、当該データに含まれるドキュメントデータとしてのフラグメントのハッシュ値を取得し、各フラグメントのハッシュ値に対応するフラグメントデータをデータベースサーバ２からさらに取得し、各フラグメントデータに含まれる文字列を連結して、クライアント装置３に提供する。
【００４４】
具体的に図４に示したデータがデータベースサーバ２に格納されているときに、クライアント装置３からハッシュ値ｄ１のドキュメントの要求が受け入れられると、このハッシュ値ｄ１に対応するデータがデータベースサーバ２から読み出される。ここでデータにはドキュメントデータとしてフラグメントへのハッシュ値ｆ１，ｆ２が含まれているので、制御部１１は、このハッシュ値に対応するフラグメントをデータベースサーバ２から順次取得する。ここではハッシュ値ｆ１，ｆ２に対応するフラグメントに文字列「これはドキュメントの」及び「一例です」が含まれるので、これらを連結して「これはドキュメントの一例です」を得る。そして制御部１１は、この文字列を含むＨＴＭＬ文書を生成して、クライアント装置３に送信する。
【００４５】
なお、制御部１１はこのとき、各データ（ここではフラグメントデータ）に含まれているハッシュ値ｈを読み出して、このハッシュ値ｈに関連づけられているヘッダデータをデータベースサーバ２から取得し、当該ヘッダデータに含まれる利用者名や日時の情報をＨＴＭＬ文書に含めてもよい。この場合、例えばクライアント装置３側で各フラグメントデータに対応する文字列部分にマウスカーソルを重ね合わせたときに、これら利用者名や日時の情報が提供されるようにするため、特殊なタグ（SPANタグなど）を利用することができる。
【００４６】
つまり制御部１１は、取得したデータに含まれるハッシュ値がｎｉｌになるまで、当該ハッシュ値に関連づけられたデータをデータベースサーバ２から読み出す処理を繰り返し、ハッシュ値がｎｉｌとなったところで、当該ハッシュ値ｎｉｌに関連づけられた情報を読み出すことで、利用者名や日時といった操作関係情報（ヘッダデータに含まれる情報）を取得することができる。
【００４７】
さらに図６に示したようなデータがデータベースサーバ２に格納されているときに、クライアント装置３からハッシュ値ｄ２のドキュメントの要求が受け入れられると、このハッシュ値ｄ２に対応するデータがデータベースサーバ２から読み出される。ここでデータにはドキュメントデータとしてフラグメントへのハッシュ値ｆ′１からｆ′５が含まれているので、制御部１１は、これらのハッシュ値に対応するフラグメントをデータベースサーバ２から順次取得する。ここではハッシュ値ｆ′１からｆ′５に対応するフラグメントに文字列「これ」「ら」「はドキュメントの」及び「一」「例です」が含まれるので、これらを連結して「これらはドキュメントの一例です」を得る。そして制御部１１は、この文字列を含むＨＴＭＬ文書を生成して、クライアント装置３に送信する。
【００４８】
本実施の形態において特徴的なことの一つは、制御部１１が、各フラグメントに関する変更操作の種類ごとに異なる情報を関連づけてこのＨＴＭＬ文書を生成することである。具体的に本実施の形態において制御部１１は、ドキュメントのハッシュ値ｄ２に対応するヘッダデータを取り出すべく、ｄ２→ｄ１→ｈと辿って、ドキュメントの元の生成者である利用者名ａａａａ、及びその日時ｔを取得する。
【００４９】
一方、ハッシュ値ｆ′１に対応するフラグメントについては、文字列「これ」に関するヘッダデータを取得するため、対応付けられているハッシュ値ｆ１を読み出し、データベースサーバ２からハッシュ値ｆ１に対応するデータ（フラグメントデータ）を読み出し、それに含まれるハッシュ値がｎｉｌではなくｈであるので、さらにハッシュ値ｈに対応するデータ（ヘッダデータ）を取得して、利用者名「ａａａａ」等を取得し、これを例えばSPANタグのタイトル属性として関連づける。
【００５０】
また、ハッシュ値ｆ′２に対応するフラグメントについては、文字列「ら」が追記されたものであり、また、それに含まれるハッシュ値ｈ２にはヘッダデータとして利用者名「ｂｂｂｂ」を含むものが関連づけられているので、利用者名「ｂｂｂｂ」等を取得し、INSタグ等を用いて文字列「ら」を第１の方法で強調表示（例えば太字、下線など）するとともに、利用者名等をその属性として関連づける。
【００５１】
さらにハッシュ値ｆ′４に対応するフラグメントについては、文字列「一」に関連付けられた可視フラグが「表示可能でない」ことを表す値に設定されているので、DELタグなどを用いて文字列「一」を第２の方法で強調表示（例えば打ち消し線などで打ち消す表示）をする。また、このハッシュ値ｆ′４に対応するフラグメントに含まれるハッシュ値ｈ２には、ヘッダデータとして利用者名「ｂｂｂｂ」を含むものが関連づけられているので、利用者名「ｂｂｂｂ」等を取得し、利用者名等をその属性として関連づける。
【００５２】
そうして生成されたＨＴＭＬ文書は、例えば図７に示すようなものとなり、この図７に示されたＨＴＭＬ文書を受信したクライアント装置３がこれを表示すると、そのブラウザの機能にも依存するが、一般的には図８に示すような状態となって、追記部分に下線が引かれるとともに、削除部分に「Ｘ」マークが重ね合わせられるか、又は打消し線が引かれる。またブラウザの機能によっては、利用者がこれらの文字列のうち、「これ」や「はドキュメントの」や「例です」など、SPANタグで囲まれた部分にマウスカーソルを重ねると、「ａａａａ，ｔ」などと、関連づけられている利用者名や変更日時の情報が提供される。同様に、追記部分や削除部分にマウスカーソルを重ねると、「ｂｂｂｂ，ｔ′」といったように、CITEやDATETIME属性で関連づけられた情報が提供される。
【００５３】
このように本実施の形態によると、利用者側でドキュメントに対する変更操作の履歴を生成する必要なく、変更履歴つきのドキュメントを提供できる。
【００５４】
なお、本実施の形態の説明では、ヘッダデータに含める情報として利用者名と変更に係る日時としていたが、これに限らず、変更者のコメントなど、他の情報を含めても構わない。また、ここではウエブサーバ１とデータベースサーバ２とを別体の装置であるように記載しているが、これらは一体の装置であっても構わない。さらに、ここではウエブサーバを例として説明したが、本発明のサーバ装置は、他のサーバ装置、例えば一般的なファイルサーバなどであってもよい。
【実施例】
【００５５】
上記実施の形態に記載した制御部１１によって実行される処理について、具体的に既読判定処理、ドキュメント更新処理、ドキュメント表示処理に分けて説明する。まず、既読判定処理について説明する。既読判定の処理では、注目フラグメントｆについて利用者が過去に閲覧したか否かを判定する。すなわち制御部１１は、利用者が過去に閲覧したフラグメントの配列Ｆ（利用者ごとに例えば利用者側のクライアント装置にクッキーとして登録しておく）を取得して、図９に示す処理を開始し、当該注目フラグメントｆがフラグメント配列Ｆに含まれているか否かを調べる（Ｓ１）。そして注目フラグメントｆがフラグメント配列Ｆに含まれているならば（Ｙｅｓならば）、「既読である」旨を表す値「true」を出力して処理を終了する（Ｓ２）。
【００５６】
また、注目フラグメントｆがフラグメント配列Ｆに含まれていなければ（Ｎｏならば）、次に注目フラグメントｆに関連付けられたハッシュ値（参照；Reference）があるか否かを調べ（Ｓ３）、参照を有していなければ（Ｎｏならば）、「既読でない」旨を表す値「false」を出力して処理を終了する（Ｓ４）。
【００５７】
一方、処理Ｓ３で参照を有してれば（Ｙｅｓならば）、参照によって特定されるフラグメントを新たな注目フラグメントｆとして（ｆを参照に置換；Ｓ５）、処理Ｓ１に戻って処理を続ける。
【００５８】
また、ドキュメントが更新されたときには制御部１１は、図１０に示す処理を開始し、ｄoldを元のドキュメント、ｈnewを更新者や更新日時を表す情報、ｔnewを更新されたテキストとして、元ドキュメントにおいて可視と設定されているフラグメントを取り出し、取り出したフラグメント内のテキストを連結して、変更前のテキストｔoldを生成する（Ｓ１１）。
【００５９】
そして、ｔoldと、ｔnewとの差分配列Ｄを生成する（Ｓ１２）。ここで差分配列Ｄの要素は、（１）追記された部分、（２）削除された部分、（３）変更されていない部分を特定する情報要素を含み、例えば追記された部分については「＋」符号を付して、[+,テキスト］のようなデータを生成し、削除された部分については「−」符号を付して、［-,テキスト］のようなデータを生成し、変更されていない部分については符号を付さずにnilとして、［nil,テキスト］のようなデータを生成する。
【００６０】
次に制御部１１は、元のドキュメントｄoldを構成するフラグメント配列Ｆoldを取得する（Ｓ１３）。これはデータベースサーバ２から取得することができる。そしてＦoldと、差分配列Ｄとの共通細分Ｆnewを生成する（Ｓ１４）。ここで共通細分とは次のようなものである。すなわち、元のドキュメントｄoldは「これはドキュメントの一例です」であり、そのフラグメント配列としては、「これは」とのフラグメントｆ１と、「ドキュメントの一例です」とのフラグメントｆ２との２つのフラグメントを含むことになる（Ｆold＝［ｆ１，ｆ２］の場合）。
【００６１】
ここで、変更後のテキストｔnewが「これらはドキュメントの例です」である場合、変更前のテキストｔold「これはドキュメントの一例です」との間の差分配列Ｄは、
[nil,これ]
[+,ら]
[nil,はドキュメントの]
[-,一]
[nil,例です]
の５つの要素を含むものとなる。
【００６２】
ここでもとのフラグメント配列Ｆoldと、差分配列Ｄとの分割位置をすべて含む、最小の分割を共通細分として生成すると、Ｆoldでは、「これは」と、「ドキュメント」との間で分割されているので、当該位置での分割を含め、
[nil,これ]
[+,ら]
[nil,は]
[nil,ドキュメントの]
[-,一]
[nil,例です]
の６つの要素を含むものとなる。
【００６３】
また、元のフラグメント配列Ｆoldが「これはドキュメントの」と、「一例です」とに分けられていた場合、差分配列Ｄとの共通細分は、
[nil,これ]
[+,ら]
[nil,はドキュメントの]
[-,一]
[nil,例です]
の５つの要素を含むものとなる。
【００６４】
制御部１１は、こうして生成した共通細分Ｆnewをデータ部に含み、元のドキュメントのハッシュ値（参照）を参照部に含むドキュメントｄnewを生成して（Ｓ１５）、処理を終了する。
【００６５】
さらに制御部１１は、ドキュメントの表示処理として、図１１に示す処理を開始する。ここでは指定されたドキュメントｄnewから、利用者が既に閲覧した（既読の）ドキュメントｄoldを見いだす（ｄnewから順に参照を辿りつつ、利用者側にクッキーなどとして登録した情報から、利用者が過去に閲覧したドキュメントを見つけ出す）。
【００６６】
そして、ｄoldからフラグメント配列Ｆoldを取り出し、ｄnewからフラグメント配列Ｆnewを取り出す（Ｓ２１）。そしてＦnewに未処理のフラグメントがあるか否かを調べる（Ｓ２２）。当初はすべてのフラグメントが未処理になっている。この処理Ｓ２２において、未処理のフラグメントがなければ（Ｎｏならば）、処理を終了する。また未処理のフラグメントがあれば（Ｙｅｓならば）、未処理のフラグメントの一つを注目フラグメントｆとして取り出す（Ｓ２３）。そして、注目フラグメントｆのヘッダｈを取り出す（Ｓ２４）。次に、注目フラグメントｆが、Ｆold（利用者が過去に閲覧したフラグメントの配列）に含まれ、既に閲覧されたものであるか否かを判断する（Ｓ２５）。この処理Ｓ２５の判断において、図９に示した既読判定の処理が行われる。処理Ｓ２５において、注目フラグメントｆがＦoldに対して既読であった（既に閲覧された）と判断された場合（Ｙｅｓの場合）、注目フラグメントｆが可視であるか否かを判断し（Ｓ２６）、可視でなければ（Ｎｏならば）、処理Ｓ２２に移行して処理を続ける。
【００６７】
一方、処理Ｓ２６において注目フラグメントｆが可視であれば（Ｙｅｓならば）、注目フラグメントｆのテキストにヘッダｈを付与して出力（テキストを囲むspanタグの属性として付与する）し（Ｓ２７）、処理Ｓ２２に移行する。
【００６８】
また、処理Ｓ２５が注目フラグメントｆがＦoldに対して既読でなかった（未だ閲覧されていない）と判断されると（Ｎｏであると）、次に注目フラグメントｆが可視であるか否かを判断し（Ｓ２８）、可視でなければ（Ｎｏならば）、注目フラグメントｆのテキストにヘッダｈを付与し、削除されたことを表す強調修飾を行って出力（テキストを囲むdelタグを設定し、その属性とヘッダの情報を付与する）し（Ｓ２９）、処理Ｓ２２に移行する。
【００６９】
一方、処理Ｓ２８において注目フラグメントｆが可視であれば（Ｙｅｓならば）、注目フラグメントｆのテキストにヘッダｈを付与し、追記されたことを表す強調修飾を行って出力（テキストを囲むinsタグを設定し、その属性としてヘッダの情報を付与する）し（Ｓ３０）、処理Ｓ２２に移行する。
【００７０】
これにより、ドキュメントを、利用者が過去に参照してからの変更状況に応じて、図８に示したような状態で提示できるようになる。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施の形態に係るサーバ装置の構成とそのネットワーク接続例を表すブロック図である。
【図２】データベースサーバ内で管理されるデータ構造の一例を表す説明図である。
【図３】データベースサーバが管理するテーブルの一例を表す説明図である。
【図４】データベースサーバ内で管理されるデータ間の関係の例を表す説明図である。
【図５】ドキュメントの差分を生成した例を表す説明図である。
【図６】データベースサーバ内で管理されるデータ間の関係の別の例を表す説明図である。
【図７】サーバ装置が生成するＨＴＭＬ文書の一部の例を表す説明図である。
【図８】サーバ装置から提供されるＨＴＭＬ文書を表示した例を表す説明図である。
【図９】本発明の実施例に係るプログラムの実例を表すフローチャート図である。
【図１０】本発明の実施例に係るプログラムの実例を表すフローチャート図である。
【図１１】本発明の実施例に係るプログラムの実例を表すフローチャート図である。
【符号の説明】
【００７２】
１  ウエブサーバ、２  データベースサーバ、３  クライアント装置、１１  制御部、１２  記憶部、１３  通信部。
【図１】
2005275565.tif 000003
【図２】
2005275565.tif 000004
【図３】
2005275565.tif 000005
【図４】
2005275565.tif 000006
【図５】
2005275565.tif 000007
【図６】
2005275565.tif 000008
【図７】
2005275565.tif 000009
【図８】
2005275565.tif 000010
【図９】
2005275565.tif 000011
【図１０】
2005275565.tif 000012
【図１１】
2005275565.tif 000013