(57)【要約】【課題】電子バインダシステムにおいて、効率的にページを管理する。【解決手段】バインダを構成するページを従来広く用いられているテーブルによる管理ではなく、個々のページが独立して存在して、それぞれがページ番号等必要なデータとその処理方法を持っており、メッセージ伝達によってバインダを構成するページを表す。【選択図】        図１
2006252295.tif 000002
【特許請求の範囲】
【請求項１】
複数の電子ドキュメントを管理する文書管理システムで、複数の電子ドキュメントをページ単位に分割する手段と、分割された電子ドキュメントの各ページから特定のページを抽出して新たな統合電子ドキュメントを生成する手段と、前記統合電子ドキュメントをページ単位で削除、並び替えを行う編集手段を持つ、電子ドキュメント操作システム（電子バインダシステム）において、バインダ文書内で任意の各ページが独立して存在し、メッセージ交換によってページ管理を行うことを特徴とするページ管理システム。
【請求項２】
請求項１に記載の電子バインダシステムにおいて、独立して存在し、メッセージ交換可能な複数のページを束ねる実体を持つことを特徴とするページ管理システム。
【請求項３】
請求項１に記載の電子バインダシステムにおいて、独立して存在し、メッセージ交換可能な複数のページを束ねる実体を持つことを特徴とし、他のバインダをメッセージ交換可能な複数のページを束ねる実体として自バインダ内に持つことを特徴とするページ管理システム。
【請求項４】
請求項２に記載の電子バインダシステムにおいて、ページやページを束ねたものに対して拡張領域を持つことを特徴とするページ管理システム。
【請求項５】
請求項３に記載のページ管理システムにおいて、タイトルを拡張領域に持つことを特徴とするページ管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子的な文書管理システムに係わるページ管理システムに関するものである。
【背景技術】
【０００２】
企業では文書管理システムを導入し、文書の再利用を推進しようとしている。初期の製品は紙の文書をスキャナで画像として取り込み、登録保存うるようなものであったが、最近はパソコンで作られた文書が多くなり、それも登録保存できるようになってきた。また、複写機等の画像読取り装置から直接文書管理システムにスキャンされた画像を自動的に登録する装置、システムがあり、文書管理システムが広く用いられてきている。
【０００３】
さらに、最近では登録されている複数の文書から任意のページを抜き出してバインダのように綴じて一つの文書のようにすることもできるようになっている。それをここでは電子バインダと呼ぶ（例えば、特許文献１参照。）。
【０００４】
特許文献１の電子バインダシステムにおいては、バインダ内でファイル（文書）単位に順序をつけて一つのファイル（文書）として扱っており、さらに個々の文書についてのページに対してのページ操作は与えられていない。
【０００５】
また、特許文献２の「書類作成保管方法及び書類作成保管システム」においても、文書ファイルをプリンタドライバを用いて印刷して、統一フォーマットとして一つの（バインダ）文書として扱うことが述べられているが、内部で保持している文書単位に扱い、ページ単位に並べ替え、削除等の編集操作については言及されていない。
【０００６】
ページめくりのためのテーブルを保持するものとして、特許文献３があるが、これにおいても、文書単位に管理テーブルを持ち、そのテーブルに対する文書単位の操作について述べられており、ページ単位の編集操作については記されていない。
【０００７】
他の電子バインダシステムでは、綴じられた各ページを削除したり、並べ替えたりすることができる。また、さまざまなアプリケーションからの文書が入っており、それらの文書単位にバインダに綴じて、一つの単位として扱うこともできるものもある。
【０００８】
たとえば、電子バインダシステムにワードプロセッサ文書、プレゼンテーション文章が入っている場合、それらの順序を変更したり、あるいは、新たな文書を追加することができる。文書単位で扱うことは、ユーザが操作する際に、個々のページで扱うよりも容易に移動・削除等の編集ができる。
【０００９】
このようにバインダ内のページの管理については、様々なことが要求され複雑・煩雑化してきている。ページ管理を行う際に管理テーブルを用いてページを管理したり、リスト構造を用いてページを管理する方法がある。
【特許文献１】特開２００１−０３４５１１号公報
【特許文献２】特開２００１−２２９１５９号公報
【特許文献３】特開２０００−１２２７８２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、ページに様々な情報が与えられ、複雑になったページ構造を従来までのテーブル等による管理を行うには、拡張性が低く、例えばページの一部を他のバインダへ移すことが困難であったり、ページに対しての情報が追加になった場合に、テーブルの構築のやり直しが必要などの問題がある。
【００１１】
本発明は、以上の点に着目して成されたもので、効率的にページを管理するページ管理システムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、
複数の電子ドキュメントを管理する文書管理システムで、複数の電子ドキュメントをページ単位に分割する手段と、分割された電子ドキュメントの各ページから特定のページを抽出して新たな統合電子ドキュメントを生成する手段と、前記統合電子ドキュメントをページ単位で削除、並び替えを行う編集手段を持つ、電子ドキュメント操作システム（電子バインダシステム）において、バインダ文書内で任意の各ページが独立して存在し、メッセージ交換によってページ管理を行うことを特徴とするページ管理システムであるので、ページに様々な情報が与えられ、複雑になったページ構造を従来までのテーブル等による管理を行うには、拡張性が低くなる、という問題が解消される。
【発明の効果】
【００１３】
本発明によれば、
複数の電子ドキュメントを管理する文書管理システムで、複数の電子ドキュメントをページ単位に分割する手段と、分割された電子ドキュメントの各ページから特定のページを抽出して新たな統合電子ドキュメントを生成する手段と、前記統合電子ドキュメントをページ単位で削除、並び替えを行う編集手段を持つ、電子ドキュメント操作システム（電子バインダシステム）において、バインダ文書内で任意の各ページが独立して存在し、メッセージ交換によってページ管理を行うことを特徴とするページ管理方式であるので、ページに様々な情報が与えられ、複雑になったページ構造を従来までのテーブル等による管理を行うには、拡張性が低くなる、という問題が解消される。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して本発明を説明する。
【実施例１】
【００１５】
本発明は、異なるアプリケーションソフトで作成した電子文書を同一のページの綴りとして扱う事を可能とした電子バインダにおいて、バインダのページ保持方式に対する発明である。
【００１６】
バインダ文書とは、異なるアプリケーションで作成した電子文書を作成したアプリケーションの違いを意識すること無しに扱うことのできる形態のフォーマットである。単純にアプリケーションのデータファイル（素材文書）を束ねただけのフォーマットもあるが、本実施例では、素材文書をページ確定させ、その確定させたページから必要なページを集めて、生成電子文書とする。ページを確定させるのは、例えばプレーンテキスト文書など文書のページ区切りが明確でないものがあるため、インポートされた時点でページを確定させる必要がある。ページを確定させる方法は、アプリケーションの印刷機能を利用し、例えば、Ａｄｏｂｅ社のＰＤＦであるとか、Ｗ３Ｃ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ  Ｃｏｎｓｏｒｔｉｕｍ）で定められたＳＶＧ（Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ）など表示・印刷可能なアプリケーションに依らない統一的なフォーマットに変換し、ページを確定する。ページを確定させ、統一的なフォーマットを持たせることにより、素材文書を作成したアプリケーションが無い環境でも閲覧、印刷でき、また、アプリケーションが存在する環境でもアプリケーションの設定により、ページ位置がずれる可能性があるが、そのような位置ずれを回避できるメリットがある。
【００１７】
バインダ文書を扱うことが可能なアプリケーションでは、バインダ文書に新規にページを挿入、既存のページの削除、移動が行える。また、任意の連続したページを束ねたり、束ねられたものを解除したり、束ねられたものを２つに分割することができる。
【００１８】
以下、図を利用して本発明の実施例を説明する。
【００１９】
図１は、文書管理システムのバインダ文書に関するブロック図を表す。１０１がデータベースであり、バインダ文書をはじめ、他の種類の文書や、文書に関するメタデータ、あるいは検索に必要なデータ等が格納される。１０２は１０１データベースに格納されるためのバインダデータ（バインダ文書）である。１０３は、必要な情報を元にバインダデータを生成し、また、データベースから取り出したバインダデータの情報を管理するバインダデータ生成管理部である。１０５は、バインダデータ内部に含まれるファイルを管理するバインダ内部ファイル管理部である。１０６は、バインダ文書のページ構成を管理するバインダページ管理部である。１０７は、データベースアクセスユーザインターフェイス部であり、ユーザのバインダ文書に対する操作によって、１０５バインダ内部ファイル管理部や１０６バインダページ管理部に制御を依頼する。
【００２０】
具体的にバインダ文書に対してユーザが操作をした場合について述べる。バインダ文書に、他の文書を追加する処理が行われた場合、バインダ内部ファイル管理部が当該文書からページ毎に分割したイメージを生成する。なお、このイメージとは、先に述べたページを確定させるフォーマットであり、画像、Ａｄｏｂｅ社のＰＤＦ、Ｗ３ＣのＳＶＧ等のことを表す。１０５バインダ内部ファイル管理部は、追加された文書をバインダデータ生成部に通知し、更に、１０６バインダページ管理部に対して、分割されたページ情報を通知する。バインダデータ生成部に必要なページに関する情報を渡し、１０３バインダデータ生成管理部が１０２バインダデータを生成し、１０１データベースに登録する。文書を削除の場合も同様に、バインダ内部ファイル管理部で持つ文書を削除し、それに関するページイメージを削除した旨をバインダページ管理部に通知する。バインダページ管理部では、束ねページ情報管理部に指定されたページが削除されたことを通知し、その区間の束ね情報の削除を行う。バインダデータ生成管理部で、バインダデータを生成し、データベースに登録する。
【００２１】
本発明においては、各ページはバインダページ管理部１０６に存在しており、その内部でメッセージをやり取りしている。
【００２２】
本発明のバインダシステムにおいて、ページを表す実体が独立して存在する。ここで、その実体をπとする。πは、ページを表わすので、ｎページ目の実体をπｎとする。また、バインダを表わす実体をβとする。バインダは、一つしか存在しないため、ページのようなサフィックスは無い。
【００２３】
ここで、バインダβについての特徴を述べる。
１．バインダは、ゼロ個以上のページπを持つ。
２．バインダは、ページπからのメッセージを受け取る。
３．バインダは、特定のページπへメッセージを送信する。
４．バインダは、全てのページπへメッセージを送信する。
５．バインダは、バインダ総ページ数を知っている。
【００２４】
１．について、バインダβがページπを持たない場合は、空のバインダを表わすことになる。また、４．については、バインダβが知っているのは総ページ数だけであり、個々のページの情報については関知していない。このため、バインダ自身のページ管理が煩雑になることは無い。
【００２５】
なお、バインダβについては、保持しているページ数を表わす場合、例えばｎページのバインダの場合、β１−ｎと表わすものとする。
【００２６】
次に、ページπについての特徴を挙げる。
１．ページπは、それ以下に何も持たない。
２．ページπは、バインダβからメッセージを受け取る。
３．ページπは、隣接するページπからメッセージを受け取る。
４．ページπは、バインダβへメッセージを送信する。
５．ページπは、隣接するページπへメッセージを送信する。
６．ページπは、自分自身のページ番号だけを知っている。
【００２７】
１．については、ページπはバインダの構造上末端に位置し、その下位に構造を持たないことを示している。３．と５．は、ページπｎに対して、πｎ−１やπｎ＋１からメッセージを受け取ったり、送ることを意味している。なお、隣接ページへのメッセージは、特別な指示が無い限り、正順に送られる。例えば、ページπｎが隣接するページにメッセージを送る場合は、πｎ＋１に送られることになる。
【００２８】
具体的に図示したものが図２である。この例では、バインダβが４ページを持ち、バインダβ以下に個々のページπを持つ構造となっている。
【００２９】
まず、新規にバインダを作成した際は、図３に示すように、総ページ数０のバインダβが作成される。ここで、ページπの挿入について考えると、次の３つのパターンがある。
（１）先頭に挿入
（２）末尾に挿入
（３）特定のページに挿入
【００３０】
空のバインダに対しては、上記のどの処理でも同じである。更に一般化して考えるために、図４に示すようにバインダβが４ページの場合に、２ページ目と３ページ目の間に新たなページπｎｅｗを挿入する場合について、具体的に述べる。
【００３１】
まず、ページπｎｅｗがバインダβに対して、「３ページ目として挿入したい」メッセージを送る。本実施例におけるメッセージは、明示していなくても、送信元を特定できる情報が含まれているものとする。バインダβは、メッセージを受け取ると自身の状態を判断し、他のメッセージを処理中でなければ、π３に対して、「ページ番号を１ページ増やす」ように指示するメッセージが送られる。その結果、π３はページ番号をずらして４として、π４に同様に１ページ増やすように指示するメッセージを送る。π４はページ番号をずらして５とするが、これ以上メッセージを送る相手がいないため、バインダβに対して「『ページ番号を１ページ増やす』メッセージが末端まで到達」したことを表わすメッセージを送信する。バインダβがこのメッセージを受け取ると、、πｎｅｗに挿入の許可を与えるメッセージを送る。πｎｅｗは自分自身のページ番号を３とし、バインダβは、バインダの総ページ数を１増やし、挿入処理は完了する。尚、最初にπｎｅｗから受け取ったメッセージから最後にπ４から受け取るメッセージまでは、バインダβ自身はロック状態にあり、他のメッセージを受け付けない。メッセージを受け付けない方式として、メッセージを拒否して、送信側で再度送り直す方法と、バインダβ自身にメッセージキューを持ち、そこにメッセージを溜める方法がある。
【００３２】
このメッセージ伝達について、図５に示す。詳細については、先に説明した通りである。
【００３３】
ここで、先の挿入の３つのパターンに戻ると、以上の説明は、（３）特定のページに挿入に相当する。
【００３４】
以下、本実施例のフローチャートでは、ページπｎは処理が終了するまで変化しないものとする。例えば、４ページ目を表わすπ４が前後のページの削除処理や挿入処理が行われたとしても、当該処理が終了するまでは、π４のままである。
【００３５】
ページの挿入のフローチャートついて、図６−１，図６−２を用いて説明する。まず、前提条件として、バインダβがｎページ持ち、ページπｎｅｗをｘページ目に挿入するものとする。Ｓ６０１で、ページπｎｅｗがバインダβに対して、メッセージ“Ｉｎｓｅｒｔ（ｘ）”を送る。ここで、“Ｉｎｓｅｒｔ（ｘ）”は、ｘページ目に挿入したいことを示すメッセージを表わす。Ｓ６０２で、このメッセージをバインダβが受信する。ここで、本実施例においては、以降のフローチャートの説明でもメッセージに関するエラー処理については、フローチャートが煩雑になるため明記していない。タイムアウト処理などのメッセージに対する基本的な処理については、明記されていないが行われているものとする。
【００３６】
Ｓ６０３で、Ｓ６０２で受信したメッセージが許可可能か判断する。これは、バインダβがメッセージを受け付けない状態にあるときや、メッセージとして送られてきたページｘが範囲外などの場合に許可されない。許可されない場合は、Ｓ６０４でエラー処理が行われる。メッセージを許可できる場合は、Ｓ６０５でバインダβが他のメッセージを受け付けないように、メッセージに関してロックを掛ける。
【００３７】
Ｓ６０９で、ｍにｘを代入し、Ｓ６１０で、ｍ≦ｎかどうか判定し、Ｙｅｓならば、Ｓ６１１へ進む。Ｓ６１１では、ページπｍにメッセージ“Ｓｈｉｆｔ（１）”を送る。Ｓ６１２では、ページπｍがメッセージを受信し、Ｓ６１３でπｍのページ番号をｍ＋１とする。Ｓ６１４でｍを１だけ増やし、Ｓ６１０に戻る。ここで、Ｓ６１１の送信元はメッセージを直前に受信しているものである。具体的には、最初は、ページπｎｅｗであり、以降“Ｓｈｉｆｔ（１）”メッセージを受信したものとなる。
【００３８】
Ｓ６１０で、ｍがｎを越える場合は、Ｓ６１５へ進み、バインダβに対して、メッセージ“Ｆｉｎｉｓｈ（Ｓｈｉｆｔ（１））”を送る。なお、“Ｆｉｎｉｓｈ（ｍｅｓｓａｇｅ）”は、末端のページまでメッセージｍｅｓｓａｇｅが行き渡り、これ以上メッセージを伝播できないときに、送られるメッセージである。また、このメッセージは、メッセージ処理にロックが掛けられていても、受信することのできる特殊なメッセージである。Ｓ６１６で、バインダβはこのメッセージを受け取り、Ｓ６０６は、Ｓ６０２のメッセージの送信元ページπｎｅｗに対して、“Ａｌｌｏｗ（Ｉｎｓｅｒｔ（ｘ））”のメッセージを送る。ここで、“Ａｌｌｏｗ（ｍｅｓｓａｇｅ）”は、メッセージｍｅｓｓａｇｅを許可することを意味する。尚、拒否した場合は、“Ｒｅｊｅｃｔ（ｍｅｓｓａｇｅ）”が送信元に送られる。これは、Ｓ６０４のエラー処理内で送られている。
【００３９】
Ｓ６０７では、ページπｎｅｗがＳ６０６のメッセージを受信し、ページの挿入が許可されたので、Ｓ６０８でページπｎｅｗのページ番号をｘとする。Ｓ６１７でバインダの総ページ数を１増やす。ページの挿入処理が完了したので、Ｓ６１８でＳ６０５でロックされたメッセージ処理が解除される。
【００４０】
図６−１，図６−２のフローチャートは、指定したページｘへの挿入処理についてであるが、バインダの先頭に挿入する場合はｘ＝０、末尾に挿入する場合はｘ＝ｎ＋１として、上記の説明を適用すればよい。
【００４１】
次に、バインダからページを削除する例について述べる。図７は５ページからなるバインダであり、この中の３ページ目を削除するとする。
【００４２】
まず、ページπ３がバインダβに対して、「自分自身を削除したい」旨のメッセージを送る。バインダβは、メッセージを受け取ると自身の状態を判断し、他のメッセージを処理中でなければ、バインダβはπ４に対して、「ページ番号を１ページ減らす」ように指示するメッセージが送り、π４はページ番号をずらして３として、π５に同様にページ番号を１ページ減らすように指示するメッセージを送る。π５はページ番号をずらして４とするが、これ以上メッセージを送る相手がいないため、バインダβに対して「『ページ番号を１ページ減らす』メッセージが末端まで到達」したことを表わすメッセージを送信する。バインダβがこのメッセージを受け取ると、π３に削除の許可を与えるメッセージを送る。π３は自分自身を消滅させる。バインダβは総ページ数を１減らし、削除処理は完了する。尚、最初にπ３から受け取ったメッセージから最後にπ５から受け取るメッセージまでは、バインダβ自身はロック状態にあり、他のメッセージを受け付けない。
【００４３】
このメッセージ伝達について、図８に示す。詳細については、先に説明した通りである。
【００４４】
ページの削除のフローチャートついて、図９−１，図９−２を用いて説明する。まず、前提条件として、バインダβがｎページ持ち、ページπｘをｘページ目から削除するものとする。Ｓ９０１で、ページπｘがバインダβに対して、メッセージ“Ｄｅｌｅｔｅ（ｘ）”を送る。ここで、“Ｄｅｌｅｔｅ（ｘ）”は、ｘページ目を削除したいことを示すメッセージを表わす。Ｓ９０２で、このメッセージをバインダβが受信する。
【００４５】
Ｓ９０３で、Ｓ９０２で受信したメッセージが許可可能か判断する。これは、バインダβがメッセージを受け付けない状態にあるときや、メッセージとして送られてきたページｘが範囲外などの場合に許可されない。許可されない場合は、Ｓ９０４でエラー処理が行われる。メッセージを許可できる場合は、Ｓ９０５でバインダβが他のメッセージを受け付けないように、メッセージに関してロックを掛ける。
【００４６】
Ｓ９０８で、ｍにｘを代入し、Ｓ９０９で、ｍ＜ｎかどうか判定し、Ｙｅｓならば、Ｓ９１０へ進む。Ｓ９１０では、ページπｍ＋１にメッセージ“Ｓｈｉｆｔ（−１）”を送る。Ｓ９１１では、ページπｍ＋１がメッセージを受信し、Ｓ９１２でπｍ＋１のページ番号をｍとする。Ｓ９１３でｍを１だけ増やし、Ｓ９０９に戻る。
【００４７】
Ｓ９０９で、ｍ＝ｎの場合は、Ｓ９１５へ進み、バインダβに対して、メッセージ“Ｆｉｎｉｓｈ（Ｓｈｉｆｔ（−１））”を送る。Ｓ９１６で、バインダβはこのメッセージを受け取り、Ｓ９０６は、Ｓ９０２のメッセージの送信元ページπｘに対して、“Ａｌｌｏｗ（Ｄｅｌｅｔｅ（ｘ））”のメッセージを送る。尚、拒否した場合は、“Ｒｅｊｅｃｔ（ｍｅｓｓａｇｅ）”が送信元に送られる。これは、Ｓ９０４のエラー処理内で送られている。Ｓ９０７では、ページπｘがＳ９０６のメッセージを受信して、Ｓ９１４へ進み、ページπｘ自身を消滅させる。
【００４８】
Ｓ９１７でバインダの総ページ数を１減らす。ページの削除処理が完了したので、Ｓ９１８でＳ９０５でロックされたメッセージ処理が解除される。
【００４９】
次に、ページの移動に関する例について述べる。図１０（Ａ）は５ページからなるバインダであり、この中の４ページ目を２ページ目に移動するとする。
【００５０】
まず、ページπ４がバインダβに対して、「２ページ目に移動したい」旨のメッセージを送る。バインダβは、メッセージを受け取ると自身の状態を判断し、他のメッセージを処理中でなければ、まず、π５に隣接するページからのメッセージを拒絶するようにメッセージを送る。これによって、π５に隣接するページからのメッセージが送られてきた場合、指示に従わないで、隣接するページからメッセージがあったことをバインダβに伝えるようになる。次いで、バインダβは、π２に対して、「ページ番号を１ページ増やす」ように指示するメッセージが送る。その結果、π２はページ番号をずらして３として、π３に同様にペー｀ジ番号を１ページ増やすように指示するメッセージを送る。π３はページ番号をずらして４とする。π３も同様にページ番号を１ページ増やすように指示するメッセージを隣接しているページに送るが、π４は自ら移動するために、バインダβに対して「『ページ番号を１ページ増やす』メッセージが送られてきた」したことを拒絶するメッセージを送信する。バインダβがこのメッセージを受け取ると、π５に対してメッセージの拒絶を解除の指示を送り、π５が実際に解除する。最後にバインダβは、π４に移動の許可を与えるメッセージを送る。π４は自分自身のページ番号を２として、移動処理は完了する。尚、最初にπ４から受け取ったメッセージから最後にπ５から受け取るメッセージまでは、バインダβ自身はロック状態にあり、他のメッセージを受け付けない。
【００５１】
このメッセージ伝達について、図１１に示す。詳細については、先に説明した通りである。
【００５２】
図１０（Ｂ）は同じく５ページからなるバインダであり、この中の２ページ目を４ページ目に移動する例である。この場合は、ページの移動のメッセージが「ページ番号を１ページ減らす」となる。また、この場合は移動したいページ以降のページにメッセージを送るため、バインダβからメッセージをブロックするように指示されたπ５がメッセージを拒絶する。
【００５３】
このメッセージ伝達について、図１４に示す。詳細については、先に説明した通りである。
【００５４】
ページの移動のフローチャートついて、図１２−１，図１２−２を用いて説明する。まず、前提条件として、バインダβがｎページ持ち、ページπｘをｘページ目からｙページ目に移動するものとする。Ｓ１２０１で、ページπｘがバインダβに対して、メッセージ“Ｍｏｖｅ（ｘ，ｙ）”を送る。ここで、“Ｍｏｖｅ（ｘ，ｙ）”は、ｘページ目をｙページ目に移動たいことを示すメッセージを表わす。Ｓ１２０２で、このメッセージをバインダβが受信する。
【００５５】
Ｓ１２０３で、Ｓ１２０２で受信したメッセージが許可可能か判断する。これは、バインダβがメッセージを受け付けない状態にあるときや、メッセージとして送られてきたページｘ、ページｙが範囲外などの場合に許可されない。許可されない場合は、Ｓ１２０４でエラー処理が行われる。メッセージを許可できる場合は、Ｓ１２０５でバインダβが他のメッセージを受け付けないように、メッセージに関してロックを掛ける。
【００５６】
Ｓ１２０６では、メッセージとして送られてきたｘ、ｙの大小について比較される。ｘがｙより真に小さい場合は、Ｓ１２０７でｌｉｍｉｔにｙ＋１が代入される。Ｓ１２０６でｙがｘより等しいか大きい場合は、Ｓ１２０８でｌｉｍｉｔにｘ＋１が代入される。Ｓ１２０９では、πｌｉｍｉｔ＋１が存在するか否かを確認する。存在していれば、Ｓ１２１０へ進み、存在していなければ、Ｓ１２１６へ進む。Ｓ１２１０では、πｌｉｍｉｔにメッセージ“ＤｏＢｌｏｃｋＭｅｓｓａｇｅ（）”を送る。なお、“ＤｏＢｌｏｃｋＭｅｓｓｓａｇｅ（）”が送られたページは、“ＣａｎｃｅｌＢｌｏｃｋＭｅｓｓａｇｅ（）”が送られてくるまで、隣接するページからのメッセージを拒絶する。メッセージを拒絶したときは、送り元であるバインダβにメッセージを拒絶した旨のメッセージ“ＢｌｏｃｋＭｅｓｓａｇｅ（ｍｅｓｓａｇｅ）”を送る。
【００５７】
Ｓ１２１１でπｌｉｍｉｔがＳ１２１０で送られたメッセージを受信する。Ｓ１２１２では、送信元であるバインダβに、メッセージ“ＳｔａｒｔＢｌｏｃｋＭｅｓｓｇｅ（）”を送る。Ｓ１２１３で、バインダβが受信する。
【００５８】
Ｓ１２１６では、ｘがｙより真に小さいか確認する。小さい場合は、Ｓ１２１７へ、そうでない場合は、Ｓ１２１９へ進む。尚、以下のＳ１２１７、Ｓ１２１８、Ｓ１２１９、Ｓ１２２０については、Ｓ１２０６の条件判断以下に移してもよい。Ｓ１２１７では、ｍにｘ＋１を代入し、Ｓ１２１８でｖａｌに−１を確認し、Ｓ１２２２へ進む。また、Ｓ１２１９では、ｍにｘを代入、Ｓ１２２０でｖａｌに１を代入する。Ｓ１２２２では、ページπｍにメッセージ“Ｓｈｉｆｔ（Ｖａｌ）”を送る。Ｓ１２２３でページπｍがこのメッセージを受信する。
【００５９】
Ｓ１２２４で、ページπｍがＳ１２１０でバインダβからブロックするように指示が出されているか、もしくは、ｘとｙが等しいか判定し、ブロックしていればＳ１２２８へ、していなれければＳ１２２５へ進む。Ｓ１２２５では、ページπｍのページ番号にｖａｌを加える。Ｓ１２２６では、ｍをｍ＋１として、Ｓ１２２７で、ページπｍが存在するか確認し、存在していればＳ１２２２へ戻り、存在してなければＳ１２１４へ進む。Ｓ１２２４でメッセージをブロックしている場合、Ｓ１２２８でバインダβにメッセージ“ＢｌｏｃｋＭｅｓｓａｇｅ（Ｓｈｉｆｔ（Ｖａｌ））”を送る。Ｓ１２２９で、バインダβがメッセージを受け取ると、Ｓ１２１０でメッセージブロックを指示したページπｌｉｍｉｔにメッセージブロック解除の指示“ＣａｎｃｅｌＢｌｏｃｋＭｅｓｓａｇｅ（）”を送り、Ｓ１２１４へ進む。Ｓ１２１４は、Ｓ１２０２のメッセージの送信元ページπｘに対して、“Ａｌｌｏｗ（Ｍｏｖｅ（ｘ，ｙ））”のメッセージを送る。Ｓ１２１５で、ページπｘがそのメッセージを受信する。Ｓ１２２１では、ページπｘのページ番号をｙに変更する。
【００６０】
ページの移動処理が完了したので、Ｓ１２３０でＳ１２０５でロックされたメッセージ処理が解除される。
【００６１】
以上、説明してきたフローチャートは全体の流れを表わすものであったが、本発明の場合、ここのページが自律的にメッセージをやりとりして処理を行う。
【００６２】
ここでは、その一例として図５、図６−１，図６−２で説明したページの挿入処理についてメッセージ伝達の観点から説明する。まず、バインダβ、ページπ１、ページπ２、ページπ３、ページπ４が独立して存在している。
【００６３】
ページはページ番号と元となる親のＩＤを持ち、バインダはページから派生したものでありページの特徴に総ページ数という属性を持つ。ただし、本実施例ではバインダのページ番号は使われない。全てのページ（バインダ）には、一意なＩＤが付けられるとする。
【００６４】
まず、挿入されるページπｎｅｗが作成される。作成時には、ページ番号は無効な値が、ＩＤにはバインダβに対応する値が挿入される。ここで、ページπｎｅｗが自身に持っているＩＤを使い、バインダβに対して“Ｉｎｓｅｒｔ（３）”のメッセージを送る。なお、メッセージには送り元を特定できる情報が付随している。バインダβは、このメッセージを受け取ると、処理可能かバインダβが自律的に判断する。可能であると、ページ番号３と自身のＩＤを設定してメッセージ“Ｓｈｉｆｔ（１）”を全てのページに向けてブロードキャストする。
【００６５】
ここで、メッセージの送り方として、２つの方法がある。直接送り先のＩＤを指定する方法と親のＩＤとページ番号を指定する方法がある。前者は、ページπｎｅｗからバインダβへ送られるときのメッセージ、後者は先に述べたバインダから送られるメッセージである。
【００６６】
各ページは、受け取ったメッセージを判定を独自に判断し、処理を行う。自分宛のメッセージでなければ、処理は行わない。ページπ３は、メッセージを確認すると、送り先にページ番号４、同一のバインダのＩＤを指定して、Ｓｈｉｆｔ（１）を送る。すると、ページπ４が自分宛のメッセージと判断する。ページ番号４は、更に、ページ番号５であるページへ向けてバインダのＩＤとともに指定してメッセージＳｈｉｆｔ（１）を送る。ここで、バインダβは、自身へのメッセージでは無いが、バインダβが内部で持っている総ページ数以上のページ番号にメッセージを送っているので、ページπ４に最大以上のページ番号を指定した旨のメッセージをページπ４向けに送り返す。ページπ４がこのメッセージを受け取ると、自身が最終ページであることを理解し、ページ番号を５にする、つまり、ページ番号４にメッセージで送られてきたＳｈｉｆｔ（１）の１を加える。更に、ページπ４がメッセージを受理したことを表わすメッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））をページπ３に返す。ページπ３でも同様に、ページ番号を４として、最初のメッセージの呼び出し元であるバインダβにメッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））を返す。バインダβは、既存のページの更新処理が終了したことを知り、Ｉｎｓｅｒｔ（３）を送ってきたページπｎｅｗにＡｌｌｏｗ（Ｉｎｓｅｒｔ（３））を送り、最終的に、ページπｎｅｗのページ番号を３とする。
【００６７】
尚、図６−１，図６−２等のフローチャート上でバインダβにメッセージ“Ｆｉｎｉｓｈ（Ｓｈｉｆｔ（１））”を送ると書いているが、実際には上記のようにメッセージが伝達されてバインダβに伝わる。
【００６８】
このように各ページが自律して存在しており、ページ自身がメッセージが送られてきたときの処理を理解して、それに応じた処理が実行されるため、ページ管理テーブルのようなページを管理するために別のデータを用意する必要が無くなる。
【実施例２】
【００６９】
第２の実施例では、実施例１に加えて、複数のページをまとめた状態を維持できる「ページ群」を導入する。
【００７０】
ページ群θについての特徴を挙げる。
１．ページ群θは、複数のページπをまとめたものである。
２．ページ群θは、ページπの存在できる位置に存在できる。
３．ページ群θは、１ページでも構わない。
４．ページ群θは、ページπと同等のメッセージを送れる。
５．ページ群θがまとめている末端は、必ずページπとなる。
【００７１】
１．については、ページπはバインダの構造上末端に位置し、その下位に構造を持たないことを示している。３．と５．は、ページπｎに対して、πｎ−１やπｎ＋１からメッセージを受け取ったり、送ることを意味している。なお、隣接ページへのメッセージは、特別な指示が無い限り、正順に送られる。例えば、ページπｎが隣接するページにメッセージを送る場合は、πｎ＋１に送られることになる。
【００７２】
１．については、ページ群θは、複数のページをまとめていることを表わし、２．はページπを派生したものであることを意味している。また、３．は、１ページだけしか対象としていなくても、ページ群となり得ることを示している。４．は、ページπの派生であるので、同等のメッセージが送れる。５．は、２．から分かるように、ページ群θはページの存在できる位置に存在できるので、ページ群でまとめられているものの中にページ群が入ることができる。しかし、ページ群θを辿っていくと、最終的には必ずページでなければならないことを表わす。
【００７３】
ページ群がまとめているページ数がｍページからｎページのときは、ページ群θｍ−ｎと記載することにする。
【００７４】
具体的には、図１３のように表わすことができる。図１３では、バインダβは、ページとして１４０１、１４０２、１４０３を持ち、更にページを束ねたものとしてページ群１４０４を持つ。ページ群は、その内部にページ１４０５、１４０６を持ち、ページ群１４０７を持つ。ページ群１４０７は、唯一のページ１４０８から成る。このように、ページ群は、内部にページ、あるいはページ群を持つ構造を表わす。
【００７５】
ここで、ページ群はメッセージ空間を持つ。メッセージ空間は、ページ群がメッセージを送れる範囲であり、このメッセージ空間内にあるページに対して、メッセージを送り、処理を指示させることができる。メッセージを送ることができるのは、一階層分だけである。即ち、図１３の例では、バインダは、ページ群の一種であるので、バインダから直接メッセージを送るのことの出来るものは、１４０１、１４０２、１４０３、１４０４だけである。ページ群である１４０４が受け取ったメッセージを判断し、必要であれば更に内部の１４０５、１４０６、１４０７にそのメッセージ、もしくはページ群１４０４で加工されたメッセージを通知する。同様に１４０７も行う。
【００７６】
先に実施例１において、図５、図６−１，図６−２で説明したページの挿入処理についてのメッセージ伝達の観点から説明をする。まず、バインダβは図１３のような６ページから成り、３ページから５ページが束ねられている。更に、４ページ目がページ群に属しているとする。ここで、ページπ１、ページπ２、ページπ３、ページπ４、ページπ５、ページπ６、ページ群θ３−５、ページ群θ４−４が独立して存在している。
【００７７】
但し、先に説明したように、バインダβ、ページ群θ３−５、ページ群θ４−４はメッセージ空間を持つ。バインダβは、ページπ１、ページπ２、ページπ６、ページ群θ３−５を自身のメッセージ空間に持ち、ページ群θ３−５は、ページπ３、ページπ５、ページ群θ４−４を自身のメッセージ空間に持つ。ページ群θ４−４は、ページπ４だけを自身のメッセージ空間に持つ。
【００７８】
ページはページ番号と元となる親のＩＤを持ち、バインダはページから派生したものでありページの特徴に総ページ数という属性を持つ。ただし、本実施例ではバインダのページ番号は使われない。全てのページ（バインダ）には、一意なＩＤが付けられるとする。ページ群には、自身のメッセージ空間に持つページの範囲を属性に持つ。例えば、ページ群θ３−５であれば、「ページ３からページ５」が属性として保有している。
【００７９】
まず、バインダβのメッセージ空間に挿入されるページπｎｅｗが作成される。作成時には、ページ番号は無効な値が、ＩＤにはバインダβに対応する値が挿入される。ここで、ページπｎｅｗが自身に持っているＩＤを使い、バインダβに対して“Ｉｎｓｅｒｔ（３）”のメッセージを送る。なお、メッセージには送り元を特定できる情報が付随している。バインダβは、このメッセージを受け取ると、処理可能かバインダβが自律的に判断する。可能であると、ページ番号３と自身のＩＤを設定してメッセージ“Ｓｈｉｆｔ（１）”をバインダβのメッセージ空間内の全てのページに向けてブロードキャストする。
【００８０】
ここで、メッセージの送り方として、２つの方法がある。直接送り先のＩＤを指定する方法と親のＩＤとページ番号を指定する方法がある。前者は、ページπｎｅｗからバインダβへ送られるときのメッセージ、後者は先に述べたバインダから送られるメッセージである。
【００８１】
各ページは、受け取ったメッセージを判定を独自に判断し、処理を行う。自分宛のメッセージでなければ、処理は行わない。ページ群θ３−５は、自身の管理しているメッセージ空間内にページπ３があることが、その属性より分かるので、自身のメッセージ空間宛に、ページ番号３と自身のＩＤを設定してメッセージ“Ｓｈｉｆｔ（１）”を転送する。
【００８２】
ページ群θ３−５のメッセージ空間内の各ページは、受け取ったメッセージを判定を独自に判断し、処理を行う。自分宛のメッセージでなければ、処理は行わない。ページπ３は、メッセージを確認すると、送り先にページ番号４、ページ群θ３−５のＩＤを指定して、Ｓｈｉｆｔ（１）を送る。すると、ページ群θ４−４が自分宛のメッセージを判断し、ページ群θ３−５と同様に、その内部のメッセージ空間にメッセージを転送する。その結果、ページπ４が自分宛のメッセージと判断すると、ページ群θ４−４のメッセージ空間において、ページ番号５であるページへ向けてページ群θ４−４のＩＤとともに指定してメッセージＳｈｉｆｔ（１）を送る。ここで、ページ群θ４−４は、自身へのメッセージでは無いが、ページ群θ４−４が内部で管理しているページ数以上のページ番号にメッセージを送っているので、ページπ４に最大以上のページ番号を指定した旨のメッセージをページπ４向けに送り返す。ページπ４がこのメッセージを受け取ると、自身が最終ページであることを理解し、ページ番号を５にする、つまり、ページ番号４にメッセージで送られてきたＳｈｉｆｔ（１）の１を加える。更に、ページπ４がメッセージを受理したことを表わすメッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））をページ群θ４−４に返す。
【００８３】
ページ群θ４−４が自身のメッセージ空間にメッセージを転送すると同時に、ページ番号５と自身のＩＤを設定してメッセージ“Ｓｈｉｆｔ（１）”を送る。ページπ５は今まで述べてきたように、自身が最終ページであることを理解して、ページ番号を６にして、メッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））をページ群θ４−４に返す。ページ群θ４−４は、隣接するページに投げたメッセージと自身のメッセージ空間に投げたメッセージの両方からメッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））が返されるのを待ち、自身の管理しているページを「ページ４からページ４」にし、ページπ３にメッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））を送る。
【００８４】
ページπ３でも同様に、ページ番号を４として、メッセージの呼び出し元であるページ群θ３−５にメッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））を返す。ページ群θ３−５もページ群θ４−４も同様に自身のメッセージ空間にメッセージを投げると同時に、ページπ６にも投げており、ページπ６がページ番号７に変更される。今まで述べてきたこのページに対してページ番号が変わる処理は、実施例１に述べて方式と同様である。ページ群θ３−５はメッセージＡｌｌｏｗ（Ｓｈｉｆｔ（１））を受け取ることで、自身のメッセージ空間内のページを「ページ４から５」にする。
バインダβは、既存のページの更新処理が終了したことを知り、Ｉｎｓｅｒｔ（３）を送ってきたページπｎｅｗにＡｌｌｏｗ（Ｉｎｓｅｒｔ（３））を送り、最終的に、ページπｎｅｗのページ番号を３とする。
【００８５】
バインダβは、既存のページの更新処理が終了したことを知り、Ｉｎｓｅｒｔ（３）を送ってきたページπｎｅｗにＡｌｌｏｗ（Ｉｎｓｅｒｔ（３））を送り、最終的に、ページπｎｅｗのページ番号を３とする。
【００８６】
このように、メッセージ伝達については、基本的に実施例１で示したページに送る処理と同様であり、ページ群の場合は、隣接するページにメッセージに送るときに、自身のメッセージ空間にもメッセージを転送し、その両方の終了を待つ点が異なるだけである。
【００８７】
なお、バインダβの直下ではなく、ページ群θ３−５の中にページπｎｅｗを挿入したい場合は、ページ群θ３−５のメッセージ空間内にページπｎｅｗを作成すればよい。このときは、ページπｎｅｗから発せられるメッセージはページ群θ３−５に通達される。これは、前記処理のバインダにメッセージが送られることに相当する。そのメッセージを更に、自身が所属するメッセージ空間の上位に位置するページ群（バインダ含む）に対して、転送する。例えば、前記の例において、ページ群θ３−５の中にページ番号３としてページπｎｅｗを挿入するときは、まず、ページπｎｅｗからページ群θ３−５に対してＩｎｓｅｒｔ（３）のメッセージが伝わり、更に、ページ群θ３−５が所属するメッセージ空間の所有者であるバインダβに対してＩｎｓｅｒｔ（３）を転送する。以下は、先程と同様の処理であり、最終的にページ群θ３−５のメッセージ空間内のページπｎｅｗに対してページ番号を３とするように処理が行われる。このようにページ群の内部で管理しているページ番号が変更されるときは、適切にページ番号が付け替えられるものとする。
【００８８】
また、特定区間をページ群にする場合は、ページ群にしたいメッセージ空間でページ群θを作成する。そして、そのメッセージ空間を所有しているページ群に対して、ページ群θからＤｏＦｏｌｄ（ｍ，ｎ）なるメッセージを送る。すると、当該メッセージ空間の全てのページ、ページ群に対して、メッセージＦｏｌｄ（ｍ，ｎ，ページ群θのＩＤ）がブロードキャストされる。ページｍからページｎの間のページは、ページ群θ以下に移動する。
【００８９】
ページの削除も同様にできる。また、ページ群の削除は、複数ページ削除されることを除けば、これも同様に可能である。ページの移動、ページ群の移動は、同一メッセージ空間内であれば、複数ページが増減するだけの違いである。また、メッセージ空間をまたがった移動は、移動、削除を組み合わせて実現可能である。
【００９０】
更に、バインダβ１、バインダβ２が存在している場合に、バインダβ２をバインダβ１の内部に挿入することが可能となる。これは、バインダβ１の挿入先のメッセージ空間にバインダβ２を置くことで、バインダβ２をページ群として扱うこと実現できる。
【実施例３】
【００９１】
第３の実施例では、ページやページ群が拡張領域を持つとする。例えば、ページ、ページ群に対して、拡張領域としてタイトルを表わすフィールドを持つとすると、あるページ群に対してタイトルを設定することで、章題を表わすことができる。また、この拡張領域に対する処理は、各ページ、ページ群が処理方法を知っており、メッセージが伝達された場合に、実施例１、実施例２のように各ページ、ページ群が自分が処理すべきメッセージが判定する。
【００９２】
例として、拡張領域にタイトルを持つときに、タイトルを設定する場合は、例えば、ＳｅｔＴｉｔｌｅ（“ｔｉｔｌｅ”）のようなメッセージとその処理方法を定義して、各ページ、ページ群に設定する。拡張領域を用意した場合、自由にメッセージと処理方法を定義できる。更に、各ページ、ページ群が持つデータについて、個別に保持するため、まとめて管理する必要が無くなる。
【図面の簡単な説明】
【００９３】
【図１】文書管理システムにおけるバインダ操作のブロック図
【図２】バインダとページの関係を説明する図
【図３】空のバインダを説明する図
【図４】バインダにページの挿入することを説明する図
【図５】バインダにページを挿入する際のバインダと各ページ間のメッセージ伝達を説明する図
【図６−１】バインダにページを挿入するためのフローチャート
【図６−２】バインダにページを挿入するためのフローチャート（図６−１の続き）
【図７】バインダからページを削除することを説明する図
【図８】バインダからページを削除する際のバインダと各ページ間のメッセージ伝達を説明する図
【図９−１】バインダからページを削除するためのフローチャート
【図９−２】バインダからページを削除するためのフローチャート（図９−１の続き）
【図１０】バインダにおいてページの移動を説明する図
【図１１】バインダにいてページを前方移動する際のバインダと各ページ間のメッセージ伝達を説明する図
【図１２−１】バインダにいてページを移動するためのフローチャート
【図１２−２】バインダにいてページを移動するためのフローチャート（図１２−１の続き）
【図１３】束ねたページを説明する図
【図１４】バインダにいてページを後方移動する際のバインダと各ページ間のメッセージ伝達を説明する図
【符号の説明】
【００９４】
１０１  データベース
１０２  バインダデータ
１０３  バインダデータ生成管理部
１０５  バインダ内部ファイル管理部
１０６  バインダページ管理部
１０７  データベースアクセスユーザインターフェイス部
【図１】
2006252295.tif 000003
【図２】
2006252295.tif 000004
【図３】
2006252295.tif 000005
【図４】
2006252295.tif 000006
【図５】
2006252295.tif 000007
【図６−１】
2006252295.tif 000008
【図６−２】
2006252295.tif 000009
【図７】
2006252295.tif 000010
【図８】
2006252295.tif 000011
【図９−１】
2006252295.tif 000012
【図９−２】
2006252295.tif 000013
【図１０】
2006252295.tif 000014
【図１１】
2006252295.tif 000015
【図１２−１】
2006252295.tif 000016
【図１２−２】
2006252295.tif 000017
【図１３】
2006252295.tif 000018
【図１４】
2006252295.tif 000019