JP5172073B2 - 編集システム、サーバ及びプログラム - Google Patents

編集システム、サーバ及びプログラム Download PDF

Info

Publication number
JP5172073B2
JP5172073B2 JP2004355478A JP2004355478A JP5172073B2 JP 5172073 B2 JP5172073 B2 JP 5172073B2 JP 2004355478 A JP2004355478 A JP 2004355478A JP 2004355478 A JP2004355478 A JP 2004355478A JP 5172073 B2 JP5172073 B2 JP 5172073B2
Authority
JP
Japan
Prior art keywords
record
status
edit
update
editing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004355478A
Other languages
English (en)
Other versions
JP2006163912A (ja
Inventor
智子 眞瀬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dai Nippon Printing Co Ltd
Original Assignee
Dai Nippon Printing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Dai Nippon Printing Co Ltd filed Critical Dai Nippon Printing Co Ltd
Priority to JP2004355478A priority Critical patent/JP5172073B2/ja
Publication of JP2006163912A publication Critical patent/JP2006163912A/ja
Application granted granted Critical
Publication of JP5172073B2 publication Critical patent/JP5172073B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Machine Translation (AREA)
  • Document Processing Apparatus (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、1つのマスタデータを複数人が並行して編集する場合の競合を制御するための技術に関する。
第1に、文書を動的に編集する技術として、構造化文書をツリー表示する等、構造とテキストとを関連付けて編集する仕組みが多数存在している(特許文献1乃至3)。しかし、構造化文書全体をDOM(Document Object Model)等を用いてメモリに展開し、ツリー表示や編集を行う仕組みにおいては、当該構造化文書のサイズが大きい場合に大量のハードウェアリソースを要し、動作が悪くなるといった問題が生じていた。
第2に、共有文書を複数人で編集する技術として、構造化文書の構造を反映したまま格納するXML(eXtensible Markup Language)DBやODBが存在している。このようなDBやXMLエディタ、ワープロソフト等では、複数のトランザクションによる更新処理を排他制御することができる。また、共有文書を複数人で同時に編集する際に、他者による更新の通知手法も公開されている。具体的には、共有文書を同時に参照・編集する仕組みにおいて、所定の利用者が当該文書を参照中に、別の利用者によって当該文書が更新された場合には、その内容を通知する手法が公開されている(特許文献4及び5)。
しかし、既存のXMLDBやXMLエディタ等では、複数のトランザクションによる更新処理を排他制御することができるに止まり、正常に更新された文書の内容が他人によって意図せず上書きされることは問題としていない。例えば、要素Aと、要素Aを子要素に持つ要素Bを含む構造化文書を編集する場合において、要素Aを編集中の編集者aと、要素Bを編集中の編集者bが存在した際に、編集者aが更新を行った後、編集者bが更新を行うことで、要素Bによって要素Aの内容が上書きされることは問題としていない。即ち、既存の技術では、このような競合に適切に対応することができない。
第3に、差分情報から文書を更新する技術として、構造化文書の編集前後の差分情報から当該構造化文書を更新する手法が知られている。具体的に、特許文献6には、差分情報による構造化文書更新方法が記載されているが、この手法では、要素内のテキストの修正やテキスト要素を持つ新しい要素の追加には対応できない。即ち、構造変換のみしか対応できない点が問題である。一方、特許文献7には、DOMインタフェースを利用し、予め決められた構造の文書の指定要素について更新通知を受け、通知があった要素にのみアクセスして更新する方法が公開されている。しかし、この方法では、構造変換は不可能であり、さらに、構造変換された文書については更新することもできない点が問題である。たとえ、特許文献6及び7の発明を組み合わせたとしても、特許文献6の仕組みに基づいて構造が変化する毎に、特許文献7の仕組みを作り変えなければならず、また、特許文献7で更新すべきテキスト要素の変更箇所を検出する新たな手法を考案しなくてはならない。
特公平07-15686号公報 特開平07-160703号公報 特開2001-290803号公報 特開平7-234810号公報 特開平11-306173号公報 特開2003-256249号公報 特開2001-211431号公報
本発明は、以上の点に鑑みてなされたものであり、差分情報及び編集後データから、必要な箇所のみを部分文書として取得し、任意の単位でマスタデータに対する追加、更新することが可能であると共に、既に更新されているマスタデータが、後から行われた編集のレコードに基づいて意図せず上書きされるという問題を回避することが可能なシステムを提供することを課題とする。
本発明の1つの観点は、端末及び当該端末とデータの送受信が可能なサーバから構成され、文書を編集するための編集システムであって、前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、前記サーバは、前記文書をマスタデータとして記憶するマスタ記憶部と、編集前部分文書と編集後部分文書の差分情報を前記端末から受信する差分情報受信手段と、前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、前記編集後部分文書を前記端末から受信する編集後部分文書受信手段と、前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、前記端末は、前記サーバのマスタ記憶部から、前記マスタデータの一部を前記編集前部分文書として受信する編集前部分文書受信手段と、前記編集前部分文書を編集し、編集後部分文書を作成する編集後部分文書作成手段と、前記編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段と、前記差分情報をサーバへ送信する差分情報送信手段と、前記編集後部分文書をサーバへ送信する編集後部分文書送信手段と、を備え、前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、前記差分情報検出手段は、前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、取得した子要素に付与された要素IDを取得するID取得手段と、取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、前記初期ステータス設定手段は、前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定する。
また、本発明の同様の観点は、端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバであって、前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、前記文書をマスタデータとして記憶するマスタ記憶部と、編集前部分文書と編集後部分文書の差分情報を前記端末から受信する差分情報受信手段と、前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、前記編集後部分文書を前記端末から受信する編集後部分文書受信手段と、前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、前記初期ステータス設定手段は、前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定する。
上述のように構成された編集システム及びサーバにおいて、端末とは、利用者がマスタデータの一部である部分文書の編集のために使用しており、サーバとデータの送受信が可能なパソコンやPDA(Personal Digital Assistants)等である。また、サーバは、マスタ記憶部及び編集履歴記憶部を有している。編集システムにおいて、利用者は、まず、端末を使用してサーバのマスタ記憶部からマスタデータの一部を編集前部分文書として取得する。さらに、利用者は、端末を使用して、当該編集前部分文書に所定の編集を行うことで編集後部分文書を作成し、編集前部分文書と編集後部分文書の差分情報を検出する。そして、利用者は、端末を使用して、検出した差分情報及び編集後部分文書をサーバへ送信する。
サーバは、端末から取得した差分情報に基づいて、利用者が行った編集の履歴を複数のレコードから構成される編集履歴として編集履歴記憶部へ記憶する。さらに、サーバは、編集履歴記憶部に記憶された各レコードに対して編集の状態を示すステータスを設定し、当該ステータスに基づいて競合する編集があるか否かを判定する。競合する編集がある場合、サーバは、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするようにステータスを再設定し、競合する編集がなくなるまでステータスの再設定を行う。一方、競合する編集がない場合、サーバは、編集履歴記憶部に記憶されたレコード及び編集後部分文書に基づいて、マスタ記憶部に記憶されたマスタデータの更新を行う。即ち、利用者が端末において行った編集をマスタデータに反映させる。
このように、本発明によれば、マスタデータが階層構造の文書となっているため、1つのマスタデータから取得したそれぞれ異なる部分文書を複数人で並行して編集することができる。また、編集前部分文書と編集後部分文書の差分情報と、編集後部分文書とに基づいてマスタデータを更新することができる。さらに、この差分情報に基づく編集履歴にステータスを設定することで、同時進行する編集の競合を事前に把握して回避するように制御することができる。
本発明の別の観点は、端末及び当該端末とデータの送受信が可能なサーバから構成され、文書を編集するための編集システムであって、前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、前記サーバは、階層構造の文書をマスタデータとして記憶するマスタ記憶部と、編集後部分文書を前記端末から受信する編集後部分文書受信手段と、編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段と、前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、前記端末は、前記サーバのマスタ記憶部から、前記マスタデータの一部を前記編集前部分文書として受信する編集前部分文書受信手段と、前記編集前部分文書を編集し、編集後部分文書を作成する編集後部分文書作成手段と、前記編集後部分文書をサーバへ送信する編集後部分文書送信手段と、を備え、前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、前記差分情報検出手段は、前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、取得した子要素に付与された要素IDを取得するID取得手段と、取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、前記初期ステータス設定手段は、前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定する。
また、本発明の同様の観点は、端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバであって、前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、階層構造の文書をマスタデータとして記憶するマスタ記憶部と、編集後部分文書を前記端末から受信する編集後部分文書受信手段と、編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段と、前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、前記差分情報検出手段は、前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、取得した子要素に付与された要素IDを取得するID取得手段と、取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、前記初期ステータス設定手段は、前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定する。
上述のように構成された編集システム及びサーバにおいて、利用者は、まず、端末を使用してサーバのマスタ記憶部からマスタデータの一部を編集前部分文書として取得する。さらに、利用者は、端末を使用して、当該編集前部分文書に所定の編集を行うことで編集後部分文書を作成し、当該編集後部分文書をサーバへ送信する。サーバは、編集前部分文書と、端末から取得した編集後部分文書とに基づいて差分情報を検出する。そして、サーバは、検出した差分情報に基づいて、利用者が行った編集の履歴を複数のレコードから構成される編集履歴として編集履歴記憶部へ記憶する。さらに、サーバは、編集履歴記憶部に記憶された各レコードに対して編集の状態を示すステータスを設定し、当該ステータスに基づいて競合する編集があるか否かを判定する。競合する編集がある場合、サーバは、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするようにステータスを再設定し、競合する編集がなくなるまでステータスの再設定を行う。一方、競合する編集がない場合、サーバは、編集履歴記憶部に記憶されたレコード及び編集後部分文書に基づいて、マスタ記憶部に記憶されたマスタデータの更新を行う。即ち、利用者が端末において行った編集をマスタデータに反映させる。これによれば、端末は、マスタデータの一部である部分文書を編集した後、編集後部分文書をサーバに送信することで、容易に当該編集をマスタデータへ反映することができる。即ち、端末に差分情報検出機能を持たせる必要がなく、端末の負荷を軽減することができる。
上記サーバの一態様では、前記マスタデータは、編集を管理する単位となる要素毎に要素IDが付与されており、前記レコードは、対応する要素ID、更新の種別を示す更新種別、複数の要素から構成されるグループ毎に付与されたグループIDとを有しており、前記差分検出手段は、前記編集前部分文書において前記差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、取得した子要素に付与された要素IDを取得するID取得手段と、取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、をさらに備える。
上述のように構成されたサーバにおいて、マスタ記憶部に記憶されたマスタデータは、編集を管理する要素毎に、当該要素を識別する要素IDが付与されている。また、編集履歴部に記憶されたレコードは、各レコードが示す編集に対応する要素の要素ID、更新種別、グループID、ステータスが設定されている。差分検出手段において、サーバは、編集前部分文書の対象要素に、要素IDが付与された子要素が存在するか否かを判定する。ここで、子要素とは、対象要素より1つ下の階層に存在する要素のことである。つまり、子要素とは、対象要素より下位階層に存在する全ての要素を指すのではない。一方、子孫要素とは、子要素を含め、対象要素より下位階層に存在する全ての要素のことである。また、親要素とは、子要素より1つ上の階層に存在する要素のことである。つまり、親要素とは、子要素より上位階層に存在する全ての要素を指すのではない。対象要素に要素IDが付与された子要素が存在する場合、サーバは、編集前部分文書からID付与子要素と、当該子要素に付与された要素IDを取得する。そして、サーバは、編集後部分文書において対象要素に対応する要素の子要素として、取得したIDが付与された子要素が存在するか否かを判定する。存在しない場合、サーバは、編集前部分文書における当該子要素及びその子孫要素とに対応するレコードの更新情報として削除を設定する。さらに、サーバは、編集前部分文書における当該要素及びその子孫要素とに対応するレコードのグループIDとして、当該子要素に付与された要素IDを設定する。
このように、要素毎に編集前部分文書と編集後部分文書を比較することにより、どの要素が削除されたかを差分情報として検出することができる。さらに、編集履歴を構成するレコードの更新種別として削除を設定することで、サーバは容易にどのような編集が行われたかを把握することができる。また、マスタデータは階層構造であるため、ある要素が削除されることで、その子孫要素も削除される。よって、レコードにグループIDを設定し、グループIDの要素を削除することで、このような階層構造を考慮して効率的にマスタデータの更新ができる。
上記サーバの他の一態様では、前記レコードは、対応する要素より1つ上の階層に位置した親要素の要素IDである親要素IDをさらに有しており、前記差分検出手段は、前記編集後部分文書において前記差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集後子要素判定手段と、前記編集後子要素判定手段が存在すると判定した場合に、前記編集後部分文書から前記要素IDが付与された子要素を取得する編集後子要素取得手段と、取得した子要素に付与された要素IDを取得するID取得手段と、取得した要素IDが、前記編集前部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集前ID判定手段と、前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に追加を設定する追加設定手段と、前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素の要素IDを設定する追加グループID設定手段と、前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素に対応するレコードの親要素IDに、当該子要素の親要素の要素IDを設定する親要素ID設定手段と、をさらに備える。
上述のように構成されたサーバは、まず、編集後部分文書の対象要素に、要素IDが付与された子要素が存在するか否かを判定する。対象要素に要素IDが付与された子要素が存在する場合、サーバは、編集後部分文書からID付与子要素と、当該子要素に付与された要素IDを取得する。そして、サーバは、編集前部分文書において対象要素に対応する要素の子要素として、取得したIDが付与された子要素が存在するか否かを判定する。存在しない場合、サーバは、編集後部分文書における当該子要素及びその子孫要素とに対応するレコードの更新情報として追加を設定する。さらに、サーバは、編集後部分文書における当該子要素及びその子孫要素とに対応するレコードのグループIDとして、当該子要素に付与された要素IDを設定する。また、サーバは、編集後部分文書における当該子要素に対応するレコードの親要素IDとして、当該子要素の親要素に付与された要素IDを設定する。
このように、要素毎に編集前部分文書と編集後部分文書を比較することにより、どの要素が追加されたかを差分情報として検出することができる。さらに、編集履歴を構成するレコードの更新種別として追加を設定することで、サーバは容易にどのような編集が行われたかを把握することができる。また、マスタデータは階層構造であるため、ある要素が追加されることで、その子孫要素も追加される。よって、レコードにグループIDを設定し、グループIDの要素を追加することで、このような階層構造を考慮して効率的にマスタデータの更新ができる。さらに、レコードに親要素IDを設定することで、編集後部分文書の要素をマスタデータのどの位置に追加すればよいか容易に認識することができる。
上記サーバの他の一態様では、前記差分検出手段は、編集前部分文書において下位階層に前記要素IDが付与されていないデータが存在する要素を対象要素として設定する対象要素設定手段と、前記対象要素配下の要素IDが付与されていないデータを、前記編集後部分文書の当該要素IDに対応する要素配下の要素IDが付与されていないデータと比較する比較手段と、前記比較手段による比較の結果、差があると判定した場合に、前記対象要素に対応するレコードの更新種別に修正を設定する修正設定手段と、を備える。これによれば、要素毎に、当該要素配下のIDが付与されていないデータを比較することで、どの要素配下のデータが修正されたかを差分情報として検出することができる。さらに、編集履歴を構成するレコードの更新種別として修正を設定することで、サーバは容易にどのような編集が行われたかを把握することができる。
上記サーバの他の一態様では、前記マスタデータは、要素毎にデータバージョンが付与されており、前記レコードは、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDをさらに備え、前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであって、前記初期ステータス設定手段は、前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、をさらに備える。
上記のように構成されたサーバにおいて、マスタデータは、要素毎に、当該要素のバージョンを示すデータバージョンが付与されている。このデータバージョンは、マスタデータが更新される度に更新される。また、編集履歴部に記憶されたレコードは、各レコードが示す編集に対応する要素の要素ID、更新種別、グループID、ステータスに加え、データバージョン、ジョブIDが設定されている。初期ステータス設定手段は、まず、ステータスが未設定であって、ジョブID、グループID及び更新種別が同一のレコードを、同一のステータスを設定する必要がある同ステータスレコード群に設定する。さらに、ステータスが未設定であって、ジョブID及び要素IDが同一のレコードも、同一のステータスを設定する必要がある同ステータスレコード群に設定する。そして、初期ステータス設定手段は、編集履歴部に基づいて、当該同ステータスレコード群に属するレコードと異なるジョブIDであって要素ID及びデータバージョンが同一のレコードが複数存在するか否かを判定する。存在しない場合、当該同ステータスレコード群に属する全てのレコードのステータスに更新対象を設定する。一方、存在する場合、そのレコードの中に、ステータスとして更新完了が設定されているレコードが存在するか否かを判定する。存在しない場合、当該同ステータスレコード群に属する全てのレコードのステータスに更新対象を設定する。一方、存在する場合、ステータスが設定されていない当該同ステータスレコード群に属する全てのレコードのステータスに放棄を設定する。ここで、ステータス「更新対象」とは、マスタデータにレコードをまだ反映させていない状態を表す。また、ステータス「更新完了」とは、マスタデータにレコードを既に反映させた状態を表す。一方、ステータス「放棄」とは、マスタデータにレコードを反映させることなく放棄する状態を表す。つまり、サーバは、初期ステータス設定手段により、各レコードにステータスを設定することにより、競合する編集を把握すると共に、既に更新されたマスタデータの要素が上書きされる問題を回避することができる。
上記サーバの他の一態様では、前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定するものであって、前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定することを特徴とする。これによれば、サーバは、編集履歴記憶部に記憶されたレコードのステータス、ジョブID、要素ID及びデータバージョンに基づいて編集が競合するレコードを的確に抽出することができる。そして、サーバは、編集の競合を回避するため、ステータスの再設定を行う。このとき、サーバは、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードは連動して同一のステータスを設定するものとする。これにより、サーバは、マスタデータへの更新を効率的に行うことができ、且つ、競合しないようにレコードのステータスを設定することができる。
上記サーバの他の一態様では、前記マスタ更新手段は、前記編集履歴記憶部から、ステータスが更新対象であって、更新種別が削除であるレコードを抽出する削除レコード抽出手段と、前記削除レコードに基づいて、グループIDと要素IDが一致するか否かを判定する削除ID判定手段と、前記削除ID判定手段が一致すると判定した場合に、当該削除レコードのIDに対応するマスタデータの要素を削除する削除手段と、前記削除レコードのステータスを更新完了に設定する削除完了設定手段と、を備える。これによれば、サーバは、編集履歴記憶部に記憶されたレコードに基づいて、マスタデータは階層構造であることを考慮した上で、容易に当該マスタデータの一部を削除する更新を行うことができる。
上記サーバの他の一態様では、前記マスタ更新手段は、前記編集履歴記憶部から、ステータスが更新対象であって、更新種別が追加であるレコードを抽出する追加レコード抽出手段と、前記追加レコードに基づいて、グループIDと要素IDが一致するか否かを判定する追加ID判定手段と、前記追加ID判定手段が一致すると判定した場合に、当該追加レコードのIDに対応する編集後部分文書の要素を、前記マスタデータに親要素IDの子要素として追加する追加手段と、前記追加レコードのステータスを更新完了に設定する追加完了設定手段と、前記追加手段が追加した要素のデータバージョンを更新する追加更新手段と、を備える。これによれば、サーバは、編集履歴記憶部に記憶されたレコードに基づいて、マスタデータは階層構造であることを考慮した上で、容易に当該マスタデータの一部を追加する更新を行うことができる。
上記サーバの他の一態様では、前記マスタ更新手段は、前記編集履歴記憶部から、ステータスが更新対象であって、更新種別が修正であるレコードを抽出する修正レコード抽出手段と、前記修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータを、前記マスタデータから削除する修正削除手段と、前記編集後部分文書における修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータを、前記マスタデータに追加する修正追加手段と、前記修正レコードのステータスを更新完了に設定する修正完了設定手段と、前記修正追加手段が追加したデータに対応する要素のデータバージョンを更新する修正更新手段と、を備える。これによれば、サーバは、編集履歴記憶部に記憶されたレコードに基づいて、容易に、要素IDが付与されていないデータの修正をマスタデータに反映させることができる。
上記サーバのさらに他の一態様では、前記削除レコード抽出手段、前記削除ID判定手段、前記削除手段及び前記削除完了設定手段による処理は、前記追加レコード抽出手段、前記追加ID判定手段、前記追加手段、前記追加完了設定手段及び前記追加更新手段による処理より前に行われることを特徴とする。これによれば、最終処理であるレコードからのマスタ更新手段では、必ず削除、追加の順に処理を行わなくてはならない。換言すると、追加の処理の後、削除の処理を行ってはならない。これは、追加の処理の後、削除の処理を行うと、追加したデータを削除する等整合性が取れなくなる可能性があるからである。
本発明の別の観点は、端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバにより実行されるプログラムであって、前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、前記文書をマスタデータとして記憶するマスタ記憶手段、編集前部分文書と編集後部分文書の差分情報を前記端末から受信する差分情報受信手段、前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶手段、前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段、前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段、前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段、前記編集後部分文書を前記端末から受信する編集後部分文書受信手段、前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段、として前記サーバを機能させ、前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、前記初期ステータス設定手段は、前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定する。
本発明のさらに別の観点では、端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバにより実行されるプログラムであって、前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、階層構造の文書をマスタデータとして記憶するマスタ記憶手段、編集後部分文書を前記端末から受信する編集後部分文書受信手段と、編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段、前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶手段、前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段、前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段、前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段、前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段、として前記サーバを機能させ、前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、前記差分情報検出手段は、前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、取得した子要素に付与された要素IDを取得するID取得手段と、取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、前記初期ステータス設定手段は、前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定する。
上記プログラムを実行することにより、上述のサーバを実現することができる。また、上述のサーバの各態様も同様に実現することができる。
本発明によれば、差分情報及び編集後データから、任意の単位でマスタデータを更新することが可能であると共に、同時進行する編集の競合を事前に把握することができる。
以下、図面を参照して本発明の好適な実施の形態について説明する。
[編集システム]
まず、本実施形態に係る編集システムについて図1及び図2を参照して説明する。図1は、編集システムの概略構成であり、図2は、編集システムの内部構成を示すブロック図である。編集システム100は、1つのマスタデータから取得したそれぞれ異なる部分文書を複数人で並行して編集した場合に、編集前部分文書と編集後部分文書の差分情報と、当該編集後部分文書とに基づいて、任意の要素単位で当該マスタデータを更新することができるシステムである。また、編集システム100は、差分情報、各要素に付与された要素ID及びデータバージョンに基づいて、同時進行する編集の競合を事前に把握することができるシステムである。
なお、本発明は、大容量の構造化文書を複数人で同時編集するような場合であって、特に、編集箇所を取得した時点ではどこがどのように編集されるかが分からないような場合に最適である。具体的には、辞典、事典、教材、マニュアル、約款、規約、法規等に適用することが考えられる。例えば、辞典データの編集では、同一の単語について複数の意味が存在し、それぞれ異なる分野の複数の専門家が編集を追加、削除、修正等を行った場合に、構造変更を伴う編集の競合が発生し得るからである。
図1に示すように、編集システム100において、利用者端末A及びBはネットワーク300を介してサーバ30と通信可能に接続されている。ネットワーク300の1つの好適な例はインターネットである。ここで、利用者端末A及びBは、各利用者が部分文書の編集のために使用しており、ネットワーク300を介して他の利用者端末やサーバ30とメールやデータの送受信が可能なパソコンやPDA等である。また、サーバ30は、マスタデータベース(以下、「DB」と呼ぶ。)1及び編集履歴DB4に接続されている。
なお、図1では、利用者端末A及びBのみを記載しているが、本発明はこれに限定されるものではなく、ネットワーク300を介して、複数の利用者が使用する複数の利用者端末が通信可能に接続されているものとする。
図2に示すように、編集システム100の利用者端末40は、編集機2を有している。また、サーバ30は、マスタDB1、差分情報検出部3、編集履歴DB4、更新処理実行部5、編集競合検査部6、ステータス制御部7及びステータス入出力部8を有している。
マスタDB1は、編集対象となるマスタデータを記憶している。マスタデータは階層構造の文書であり、編集を管理したい単位要素及びその直系の先祖要素には、要素ID及びデータバージョンが付与されている。ここで、要素IDとは、管理したい単位となる要素の識別情報であり、任意に設定することができる。また、データバージョンは、要素のバージョンを示すデータである。
利用者端末40は、マスタデータの部分構造となる編集前部分文書10を取得し、編集機2で編集を行うことで、編集後部分文書20を作成する。そして、利用者端末40は、編集後部分文書20をサーバ30へ送信する。サーバ30は、このような部分文書毎の編集プロセスをジョブという単位で管理し、編集履歴DB4に記憶する。具体的には、差分情報検出部3で、編集前部分文書10及び編集後部分文書20の差分を検出し、差分情報を編集履歴DB4に記憶する。
更新処理実行部5では、編集履歴DB4と編集後部分文書20から、マスタデータについて変更があった部分のみ更新する。ここで、変更とは、追加、削除、修正のことである。編集競合検査部6は、編集履歴DB4を参照し、要素ID及びデータバージョンが同一の要素の編集が、他の編集プロセス(ジョブ)で進行していないかを検査し、競合があればステータス制御部7に通知する。ステータス制御部7では、編集履歴DB4を参照し、編集作業の状態を示すステータスを設定すると共に、外部入力されるステータス制御情報を編集履歴DB4に記憶する。ステータス入出力部8は、ステータス制御部7に対して、ステータスの入力や自動判断したステータスの通知を行う。また、ステータス入出力部8は、ステータス制御部7による制御結果の利用者への通知を行う。
[編集処理]
次に、編集システム100による編集処理について図3を参照して説明する。図3は、編集処理のフローチャートである。
利用者は、まず、利用者端末40を使用したマスタDB1から編集前部分文書10を取得する(ステップS1)。このとき編集前部分文書10は、編集管理単位以上の要素、又はその集合であるグループを任意のルート要素でまとめたもので取得する。さらに、利用者は、利用者端末40の編集機2により編集前部分文書10を編集することで、編集後部分文書20を作成する。そして、利用者端末40は、編集後部分文書20を、ネットワーク300を介してサーバ5へ送信する。
サーバ30は、差分情報検出部3で差分情報検出処理を行い、編集前部分文書10と編集後部分文書20とを比較することで差分情報を検出する(ステップS3)。ここで、差分情報とは、要素IDやデータバージョン等の編集された要素を特定する情報と、編集の種類(テキストの修正、要素の削除、追加)を示す情報である。差分情報は、編集履歴DB4に記憶される(ステップS4)。なお、差分情報が記憶される際同時に、編集前部分文書10の編集プロセスをジョブとして管理し、当該ジョブを識別するジョブIDも編集履歴DB4に記憶される。サーバ30は、ステータス制御部7で、編集履歴DB4に記憶された情報に基づいて初期ステータスを設定する(ステップS5)。
そして、サーバ30は、編集競合検査部6で、編集履歴DB4に記憶された情報に基づいて、編集が競合しているか否かを判定する(ステップS6)。具体的には、編集を行った要素を他のジョブで編集していないかをチェックする。編集が行われている場合には、編集が競合しているとして(ステップS6;Yes)、ステータス入出力部8を通してステータスコントロールを行い、どの編集を優先させるか、どの編集を放棄するかを決定する。このようなステータスコントロールの後、サーバ30は、ステータス制御部7で再度ステータスの設定を行い、ステップS6へ進む。一方、編集が行われていない場合には、編集が競合していないとして(ステップS6;No)、更新処理実行部5により、編集履歴DB4に記憶された情報と、編集後部分文書20とに基づいてマスタDB1に記憶されているマスタデータを上書きすることで更新を行う。そして、サーバ30は、マスタデータの更新が完了した要素について、編集履歴DB4上の対応するステータスに更新完了を記憶する(ステップS9)。これにより、編集処理は完了する。
[マスタデータ]
次に、サーバ30に接続されたマスタDB1に記憶されたマスタデータについて、図4を参照して詳細に説明する。図4は、マスタデータと編集用部分文書を模式的に示す図である。
マスタデータは、XMLやSGML、又はこれらのサブセットであるような構造化文書である。構造は任意であり、図示のとおり、同じタグ名の要素がネストしている、入れ子構造を持つ文書も対象である。マスタデータには、図示のとおり、編集を管理する単位要素及びその直系の先祖要素に要素ID(ID)とデータバージョン(ver)が付与される。要素IDは、要素を識別する情報であるため、一度付与されたら変更されることはないが、データバージョンは、その要素に編集が行われる度に更新される。なお、データバージョンは、マスタデータが更新された日時を利用する等任意に設定することができる。
編集前部分文書10は、図示のとおり、マスタデータを管理する単位要素を含むような任意の階層の要素、又はその集合であるグループを任意のルート要素でまとめた構造化文書である。
なお、マスタデータは、テキスト形式で管理してもよいし、XML-DB等のXML形式のデータを扱うDBに格納して管理してもよい。
[差分情報検出部]
次に、サーバ30の構成要素である差分情報検出部3について、図5乃至図9を参照して詳細に説明する。図5(a)は、編集前部分文書10を、図5(b)は、編集後部分文書20を模式的に示す図である。なお、図5において、楕円は要素IDが付与された要素、丸や四角は要素IDが付与されていないデータを表している。また、楕円の中に記載されている数字が要素IDである。
差分情報検出部3では、図5に示すような、編集前部分文書10と編集後部分文書20とを比較することで、差分情報検出処理を行う。差分情報検出処理は、削除要素を検出する削除検出処理、追加要素を検出する追加検出処理及び修正要素を検出する修正検出処理から構成されている。図6は削除検出処理のフローチャート、図7は追加検出処理のフローチャート、図8は修正検出処理のフローチャートである。これら3つの処理は全て、編集前部分文書10をルート要素から下位方向に探索し、各ID付与要素を対象要素として、その子要素を編集後部分文書20と比較する。
まず、図6を参照して、削除検出処理について説明する。削除検出処理をスタートする際には、まず、対象要素を編集前部分文書10のルート要素に設定する(ステップS10)。そして、差分情報検出部3は、編集前部分文書10の対象要素にID付与子要素が存在するか否かを判定する(ステップS11)。ID付与子要素が存在しない場合(ステップS11;No)、削除検出処理は終了する。一方、ID付与子要素が存在する場合(ステップS11;Yes)、編集前部分文書10のID付与子要素を全て取得する(ステップS12)。そして、差分情報検出部3は、ID付与子要素のIDを1つ取得し(ステップS14)、当該IDの子要素が編集後部分文書20に対象要素の子要素に付与されたIDとして存在するか否かを判定する(ステップS15)。
存在しないと判定した場合(ステップS15;No)、差分情報検出部3は、当該IDの子要素(消失要素)及びその子孫要素全てから「削除」という更新情報を検出する(ステップS16)。この消失要素とその子孫の要素は1つのグループとして取り扱い、当該グループを識別する情報としてグループIDを付与する。このグループIDは、最上位の消失要素のID、つまり「削除」を検出したID付与子要素のIDを設定する。そして、差分情報検出部3は、ステップS13へ進み、ステップS12で取得した全ての子要素をチェックしたか否かを判定する(ステップS13)。全ての子要素をチェックしていない場合(ステップS13;No)、差分情報検出部3は、ステップS14乃至S17の処理を繰り返し行う。一方、全ての子要素をチェックした場合(ステップS13;Yes)、差分情報検出部3は、削除検出処理を完了する。
なお、削除検出処理では、「削除」の更新情報が検出された要素については、その子孫に同じ更新情報を適用するため、子孫に対して再帰的な処理は行わない。
一方、ステップS15において存在すると判定した場合(ステップS15;Yes)、差分情報検出部3は、当該IDの子要素にID付与子孫要素があるか否かを判定する(ステップS18)。ID付与子孫要素がない場合(ステップS18;No)、差分情報検出部3は、ステップS13へ進む。一方、ID付与子孫要素がある場合(ステップS18;Yes)、差分情報検出部3は、当該IDの子要素を対象要素に設定し、削除検出処理を再帰コールする(ステップS19)。即ち、再帰的に下位階層要素をチェックする。そして、差分情報検出部3は、対象要素を変えて上述と同様の削除検出処理を行うとともに、ステップS13へ進む(ステップS20)。これにより、編集前部分文書10に含まれる全てのID付与子要素についてチェックを行うことができる。
次に、図7を参照して追加検出処理について説明する。追加検出処理は、基本的には削除検出処理と同じであるが、編集後部分文書20を基準にする点で異なる。追加検出処理では、編集後部分文書20には存在するが、編集前部分文書10には存在しないID付与要素をチェックし、このような要素(追加要素)が存在した場合には、追加要素及びその全てのID付与子孫要素に対して「追加」という更新情報を検出する。削除検出処理と同様に、この追加要素及びそのID付与子孫要素は1つのグループとして取り扱い、グループIDとして最上位の追加要素のIDを設定する。さらに、追加検出処理では、編集後部分文書20における追加要素の親要素のIDも取得する必要がある。
図7によれば、追加検出処理をスタートする際には、まず、対象要素を編集後部分文書20のルート要素に設定する(ステップS21)。そして、差分情報検出部3は、編集後部分文書20の対象要素にID付与子要素が存在するか否かを判定する(ステップS22)。ID付与子要素が存在しない場合(ステップS22;No)、追加検出処理は終了する。一方、ID付与子要素が存在する場合(ステップS22;Yes)、編集後部分文書20のID付与子要素を全て取得する(ステップS23)。そして、差分情報検出部3は、ID付与子要素のIDを1つ取得し(ステップS25)、当該IDの子要素が編集前部分文書10に対象要素の子要素に付与されたIDとして存在するか否かを判定する(ステップS26)。
存在しないと判定した場合(ステップS26;No)、差分情報検出部3は、当該IDの子要素(追加要素)及びその子孫要素全てから「追加」という更新情報を検出する(ステップS27)。この追加要素とその子孫要素は1つのグループとして取り扱い、当該グループを識別する情報としてグループIDを付与する。このグループIDは、最上位の追加要素のID、つまり「追加」を検出したID付与子要素のIDを設定する(ステップS28)。さらに、差分情報検出部3は、追加要素の親要素のIDを親要素IDとして設定する。そして、差分情報検出部3は、ステップS24へ進み、ステップS23で取得した全ての子要素をチェックしたか否かを判定する(ステップS24)。全ての子要素をチェックしていない場合(ステップS24;No)、差分情報検出部3は、ステップS25乃至S28の処理を繰り返し行う。一方、全ての子要素をチェックした場合(ステップS24;Yes)、差分情報検出部3は、追加検出処理を完了する。
なお、追加検出処理では、「追加」の更新情報が検出された要素については、その子孫に同じ更新情報を適用するため、子孫に対して再帰的な処理は行わない。
一方、ステップS26において存在すると判定した場合(ステップS26;Yes)、差分情報検出部3は、当該IDの子要素にID付与子孫要素があるか否かを判定する(ステップS29)。ID付与子孫要素がない場合(ステップS29;No)、差分情報検出部3は、ステップS24へ進む。一方、ID付与子孫要素がある場合(ステップS29;Yes)、差分情報検出部3は、当該IDの子要素を対象要素に設定し、追加検出処理を再帰コールする(ステップS30)。即ち、再帰的に下位階層要素をチェックする。そして、差分情報検出部3は、対象要素を変えて上述と同様の追加検出処理を行うとともに、ステップS24へ進む(ステップS31)。これにより、編集後部分文書20に含まれる全てのID付与子要素についてチェックすることができる。
次に、図8を参照して修正検出処理について説明する。修正検出処理は、所定のID付与要素について、その子孫であってIDが付与されていないデータに対して、編集前部分文書10と編集後部分文書20に差があった場合には、当該ID付与要素に対して「修正」という更新情報を検出する。これらのチェックをルートから順に下位層に対して行い、全てのID付与要素について行う。
図8によれば、修正検出処理をスタートする際には、まず、対象要素を編集前部分文書10のルート要素に設定する(ステップS40)。そして、差分情報検出部3は、編集前部分文書10の対象要素にID付与されていないデータが存在するか否かを判定する(ステップS41)。ID付与されていないデータが存在すると判定した場合(ステップS41;Yes)、対象要素配下のIDが付与されていないデータを、対応する編集後部分文書20のデータと比較する(ステップS51)。比較の結果、編集後部分文書20のデータと差がある場合(ステップS52;Yes)、差分情報検出部3は、対象要素から「修正」という更新情報を検出する(ステップS53)。一方、比較の結果、編集後部分文書20のデータと差がない場合(ステップS52;No)、差分情報検出部3は、ステップS42へ進む。
ステップS41において、対象要素にID付与されていないデータが存在しないと判定した場合(ステップS41;No)、差分情報検出部3は、対象要素にID付与子要素が存在するか否かを判定する(ステップS42)。ID付与子要素が存在しない場合(ステップS42;No)、差分情報検出部3は、修正検出処理を終了する。一方、ID付与子要素が存在する場合(ステップS42;Yes)、差分情報検出部3は、編集前部分文書10のID付与子要素を全て取得する(ステップS43)。そして、差分情報検出部3は、ID付与子要素のIDを1つ取得し、当該IDの子要素にID付与子孫要素があるか否かを判定する(ステップS45)。ID付与子孫要素があると判定した場合(ステップS45;Yes)、差分情報検出部3は、当該IDの子要素を対象要素に設定し、修正検出処理を再帰コールする(ステップS49)。即ち、再帰的に下位階層要素をチェックする。そして、差分情報検出部3は、対象要素を変えて上述と同様の修正検出処理を行うとともに、ステップS44へ進む(ステップS50)。これにより、編集前部分文書10に含まれる全てのID付与子要素についてチェックすることができる。
一方、ステップS45において、ID付与子孫要素がないと判定した場合(ステップS45;No)、差分情報検出部3は、当該IDの子要素配下のIDが付与されていないデータを、対応する編集後部分文書20のデータと比較する(ステップS46)。比較の結果、編集後部分文書20のデータと差がある場合(ステップS47;Yes)、差分情報検出部3は、対象要素から「修正」という更新情報を検出し(ステップS48)、ステップS44へ進む。一方、比較の結果、編集後部分文書20のデータと差がない場合(ステップS47;No)、差分情報検出部3は、ステップS44へ進む。ステップS44では、ステップS43で取得した全ての子要素をチェックしたか否かを判定する(ステップS44)。全ての子要素をチェックしていない場合(ステップS44;No)、差分情報検出部3は、ステップS45乃至S48を繰り返し行う。一方、全ての子要素をチェックした場合(ステップS44;Yes)、差分情報検出部3は、修正検出処理を完了する。
なお、上述の例では、修正検出処理を、編集前部分文書10を元に行っているが、本発明はこれに限定されるものではなく、編集後部分文書20を元に行うこととしてもよい。
この差分情報検出処理について、図5を参照して説明する。図5は、編集前部分文書10と、編集後部分文書20の構造を模式的に示す図である。なお、本実施形態では図5に示すように、編集前部分文書10に対して「削除」、「修正」及び「追加」の編集を行った結果が編集後部分文書20であるものとする。図中の「削除」、「修正」及び「追加」の文字や破線は説明の便宜上記載したものである。
差分情報検出部3は、まず、編集前部分文書10を基準として、ルート要素から下位階層の要素へと探索を行い、「削除」と「修正」を検出する。そして、編集前部分文書10の要素ID1の要素「以下、「要素1」と呼ぶ。他の要素も同様。)を対象要素に設定する。要素1の子要素には変更がないので、差分情報は検出されない。
次に、要素2を対象要素に設定する。要素2では、配下のIDが付与されていないデータに修正が行われているため、「修正」という更新情報が検出される。即ち、差分情報検出部3は、要素2について「修正」の更新情報を検出する。
次に、要素3は、ID付与子要素がないので、次の要素4を対象要素に設定する。要素4では、要素5及び6を子要素に持つが、それらのうち、要素5は編集後部分文書20において、要素4の子要素として存在しない。よって、要素5が削除されたことがわかり、要素5及びその子孫要素7について「削除」の更新情報を検出する。このとき、要素5及び要素7にはグループIDとして「5」が設定される。削除検出処理において、編集前部分文書10における要素5及び要素7の「削除」は、グループID5の1つのグループを形成すると捉える。
なお、「修正」の検出は全対象要素で行うが、便宜上、検出されなかったレコードについては説明を省略する。
差分情報検出部3は、次に、編集後部分文書20を基準として、ルート要素から下位階層の要素へと探索を行い、「追加」を検出する。そして、編集後部分文書20の要素1を対照要素に設定する。要素1の子要素には変更がないので、差分情報は検出されない。
次に、要素2にはID付与子要素がないので、次の要素3を対象要素とする。要素3では、要素5を子要素として持つが、要素5は、編集前部分文書10において、要素3の子要素として存在しない。よって、要素5が追加されたことがわかり、要素5及びその子孫要素7について「追加」の更新情報を検出する。このとき、要素5及び要素7にはグループIDとして「5」が設定される。また、要素5には、親要素IDとして「3」が設定される。追加検出処理において、編集後部分文書20における要素5及び要素7の「追加」は、グループID5の1つのグループを形成すると考えられる。最後に要素4については、その子要素には変更がないので、差分情報は検出されない。
図5に示す編集前部分文書10及び編集後部分文書20に基づいて検出した差分情報を図9に示す。図9は、複数のレコードから構成される差分情報のデータ構造を模式的に示す図である。図9に示すような差分情報に基づいて、編集履歴DB4に編集履歴に関する情報が記憶される。
なお、図9では、差分情報は、要素ID、更新種別、グループID及び親要素IDから構成されることとしているが、本発明はこれに限定されるものではなく、要素IDの代わりにXPathや要素名を構成要素とすることもできる。これらを構成要素とすることにより、要素IDより簡単に要素を特定することが可能となる。
[編集履歴DB]
次に、サーバ30に接続された編集履歴DB4について、図10を参照して詳細に説明する。
図10は、編集履歴DB4のデータ構造を模式的に示す図である。編集履歴DB4には、図9に示す差分情報に加えて、さらに、要素のデータバージョン、部分文書毎の編集プロセスであるジョブを特定するジョブID、各レコードのステータスを記憶している。
なお、図10に示すジョブID100のレコード群は図5の編集、ジョブID200のレコード群は後述する図13の編集に対応する。本実施形態では、詳細は後述するが、ジョブID100の編集と、ジョブID200の編集が競合するものであって、ステータスコントロール処理によってステータスを変更することで競合を回避することを説明する。図10に示す編集履歴DB4は、差分情報に基づいてレコードが記憶された直後であって、後述するステータスコントロール処理前の状態である。
ここで、編集履歴DB4に記憶されているデータバージョンとは、編集前部分文書10をマスタDB1から取得したときの各要素のデータバージョンである。ステータスとは、各レコードの編集状態である。ステータスとしては、マスタDBに反映されていない「更新対象」、既にマスタDBに反映された「更新完了」、マスタDBに反映しない「放棄」の少なくとも3つの状態がある。具体的に、「更新完了」は、正常にマスタDB1に記憶されているマスタデータ更新が完了した状態を表している。「更新対象」は、マスタデータ更新が行われていないレコードであって、そのジョブのレコードを他のジョブより優先して更新することを表している。一方、「放棄」は、他のジョブで既に更新が完了しているか、マスタデータ更新を放棄することを表している。即ち、ステータスとして「放棄」が設定されたレコードに基づいて、マスタデータが更新されることはない。
このようなステータスは、詳細は後述するが、ステータス制御部7で設定される。
なお、本発明はこれに限定されるものではなく、適宜この3つ以外のステータスを設けることも可能である。
[ステータス制御部]
次に、サーバ30の構成要素であるステータス制御部7について詳細に説明する。
ステータス制御部7は、図2の編集処理におけるステップS4において、差分情報に基づいて編集履歴DB4に新たなレコードが記憶される度に、当該レコードに初期ステータスを設定する。ステータス制御部7が行う初期ステータス設定処理について、図11及び図12を参照して説明する。図11は、初期ステータス設定処理のフローチャートである。また、図12は、初期ステータス設定処理によるステータス設定例である。
図11に示すように、ステータス制御部7は、まず、編集履歴DB4にステータス未設定のレコードが存在するか否かを判定する(ステップS54)。未設定のレコードが存在しない場合(ステップS54;No)、ステータス制御部7は、初期ステータス設定処理を終了する。一方、未設定のレコードが存在する場合(ステップS54;Yes)、ステータス制御部7は、編集履歴DB4から未設定のレコードを1レコード取得する(ステップS55)。さらに、ステータス制御部7は、取得したレコードと、同ステータスを設定するべき範囲のレコードを同ステータスレコード群として取得する。ここで、同ステータスレコード群は、ステップS55で取得したレコードも含む。
なお、ジョブID、グループID及び更新種別が同一のレコードは、同ステータスレコード群に設定される。また、ジョブID及び要素IDが同一のレコードも、同ステータスレコード群に設定される。具体的には、図12(a)に示すように、ジョブID100、グループID1及び更新種別「削除」の4レコードは同グループのレコード群「削除グループ」であり、同ステータスを設定するべき同ステータスレコード群である。また、図12(a)に示すように、ジョブID100、グループID5及び更新種別「追加」の2レコードは同グループのレコード群「追加グループ」であり、同ステータスを設定すべき同ステータスレコード群である。
さらに、ジョブID100及び要素ID1のレコードが「削除グループ」と「追加グループ」にそれぞれ2レコード存在するが、これらも同ステータスレコード群であり、同じステータスが設定されなければならない。よって、結果として、「削除グループ」及び「追加グループ」を合わせた6レコード全てが同ステータスレコード群となり、同じステータスが設定されなければならない。
そして、ステータス制御部7は、取得した同ステータスレコード群の中に、1つでも他のジョブIDであって、要素ID及びデータバージョンが一致するレコードが存在するか否かを判定する(ステップS57)。存在しない場合(ステップS57;No)、ステータス制御部7は、同ステータスレコード群全てのステータスに「更新対象」を設定する(ステップS60)。一方、存在する場合(ステップS57;Yes)、他のレコード、即ち他の編集と競合しているため、他のレコードのステータスが「更新完了」であるか否かを判定する(ステップS58)。判定の結果、他のレコードのステータスが「更新完了」でない場合(ステップS58;No)、ステータス制御部7は、同ステータスレコード群全てのステータスに「更新対象」を設定する(ステップS60)。
なお、これによれば、異なるジョブIDであって、要素ID及びデータバージョンが一致する複数のレコードのステータスが「更新対象」となってしまうが、後述するステータスコントロール処理によって、競合の問題は回避することが可能である。
一方、ステップ58の判定の結果、他のレコードのステータスが「更新完了」である場合(ステップS58;Yes)、ステータス制御部7は、同ステータスレコード群全てのステータスに「放棄」を設定する(ステップS59)。ステップS59及びS60によりステータスが設定されると、ステータス制御部7は、ステップS54へ進む。そして、ステータス制御部7は、ステータス未設定のレコードが存在しないと判定した場合(ステップS54;No)、初期ステータス設定処理を完了する。
このような初期ステータス設定処理によれば、図12(b)に示すように、ジョブID100及び要素1のレコードは、既にステータスが「更新完了」となっているジョブID200及び要素1のレコードと競合しているため、ステータスは「放棄」となる。また、図示のように、ジョブID100及び要素1のレコードと同ステータスレコード群に属する他の5つのレコードのステータスも全て「放棄」となる。これにより、既に更新されているマスタデータが、後から行われた編集のレコードに基づいて上書きされるという問題を回避することができる。
[編集競合検査部]
次に、サーバ30の構成要素である編集競合検査部6について、図13乃至図17を参照して詳細に説明する。図13は、ジョブID200により修正された編集前部分文書10と編集後部分文書20のデータ構造を模式的に示す図である。また、図14は、修正競合検査部6、ステータス制御部7及びステータス入出力部8により実行されるステータスコントロール処理のフローチャートである。
サーバ30は、図14に示すように、検査が要求された任意のタイミングで編集履歴DB4を参照し、要素ID及びデータバージョンが一致し、ステータスが「更新対象」であるレコードが複数ジョブに存在するか否かを判定する(ステップS61)。即ち、マスタDB1に記憶されたマスタデータに反映していない編集のレコードの中で競合するものがあるか否かを判定する。複数ジョブに存在しない場合(ステップS61;No)、即ち競合状態でない場合は、ステータスコントロールを行う必要がないため、ステータスコントロール処理を終了する。一方、複数ジョブに存在する場合(ステップS61;Yes)、即ち競合状態の場合、サーバ30は、警告を発し、ステータスコントロールを促す(ステップS62)。これは、このままステータスコントロールを行わずにマスタデータへの更新処理を実行してしまうと、ステータスが「更新対象」のレコード全てがマスタデータに反映されることになり、編集内容が意図せず上書きされてしまうからである。
このような問題を回避するため、ステータスコントロールが行われる(ステップS63)。つまり、ステータスコントロールとは、競合する複数のレコードにおいて、ステータスが「更新対象」のレコードを1つに集約する処理である。よって、ステータスコントロールでは、最優先するジョブIDのレコードのみステータスに「更新対象」を設定し、その他のジョブIDのレコードのステータスには「放棄」を設定する。
このステータスコントロールは、ステータス入出力部8を通して行われるが、図15に示すような画面を設け、管理者が人為的に各レコードの編集意図を考慮して手動で行うこととしてもよい。図15は、ステータスコントロール時の画面例であって、各レコードにラジオボタンやチェックボックスが対応付けられており、人為的に当該ラジオボタンやチェックボックスを選択することで、選択したレコードのステータスが「更新対象」となり、競合する他のレコードのステータスが「放棄」となるように設計されている。また、マスタデータへの反映を最初に行うことを明示したジョブIDのレコードのステータスを「更新対象」に設定する等のルールを予め設けておくことで、「更新対象」の選択を自動で行うこととしてもよい。自動で行った場合には、選択結果をメール等で管理者に通知することとしてもよい。
ステータスコントロールにおいて、管理者が手動でステータスを「更新対象」とするレコードを選択した場合、図16(a)に示すように、ステータスを「放棄」とするレコードに対する必要作業を行ったか否かを確認するポップアップ画面を表示させることができる。ステータスが「放棄」となったレコードはマスタデータに反映されることがないため、ここでいう必要作業とは、ステータスが「放棄」となったレコードに対応する編集を反映されるレコードに対応する部分文書上に転記すること、利用者に自身の編集が反映されない旨通知すること等が考えられる。なお、必要作業はこれに限定されるものではなく、任意に設定することができる。
一方、ステータスコントロールにおいて、自動でステータスを「更新対象」とするレコードが選択される場合、図16(b)に示すように、ステータスが「放棄」となるレコードのリストを放棄リストとして画面上に表示し、管理者にどのレコードがマスタデータに反映されないかを通知させることができる。これによれば、管理者は、一定のルールに従って自動的に行われたステータスコントロールの内容を的確に把握し、必要作業を行うことができる。
なお、ステータスコントロールにおいて「更新対象」を選択する際、グループIDが存在するレコードでは、同一のグループID、ジョブID及び更新種別のレコードは1つのグループとして取り扱われるため、連動して全て同一のステータスが設定される。また、同一のジョブID及び要素IDのレコードも、連動して全て同一のステータスが設定される。このように、同一のステータスが設定されるべきレコードを同ステータスレコード群と呼ぶ。このようにグループIDやジョブIDに基づいてステータスの設定を連動させることで、階層構造を考慮した上書きのコントロールも制御することが可能となる。よって、図14に示すステータスコントロール処理においても、サーバ30は、ステータスコントロールを行ったレコードがグループIDを保有しているか否かを判定する(ステップS64)。判定の結果、グループIDを保有している場合(ステップS64;Yes)、同ステータスレコード群に属するレコード全てに同一のステータスを設定し(ステップS65)、競合状態がなくなるまで、ステップS61乃至S65の処理を繰り返し行う(ステップS61)。また、判定の結果、グループIDを保有していない場合(ステップS64;No)も同様に、競合状態がなくなるまで、ステップS61乃至S65の処理を繰り返し行う(ステップS61)。そして、競合状態がなくなると(ステップS61;No)、サーバ30は、ステータスコントロール処理を完了する。
なお、ステータスを編集履歴DB4に記憶するタイミングは、必ずしもマスタデータへの更新処理の前である必要はない。例えば、マスタデータへの更新処理を最初に行うジョブIDのレコードを自動で「更新対象」とみなし、当該レコードをマスタデータへ反映させた直後にステータスを設定する運用でも構わない。
次に、ステータスコントロール処理について、具体的に図10を参照して説明する。図10に示す編集履歴DB4では、初期ステータスとして全てのレコードのステータスに「更新対象」が設定されている。このような編集履歴DB4では、要素2及び7において、ジョブID100とジョブID200にそれぞれステータスが「更新対象」のレコードが存在しているため、競合状態である。ここで、要素2のレコードについては、ジョブID200のレコードを集約先とし、ジョブID100のレコードを放棄したとする。その結果、ジョブID200のレコードのステータスには「更新対象」が設定され、ジョブID100のレコードのステータスには「放棄」が設定される。
一方、要素7のレコードについては、ジョブID100のレコードを集約先とし、ジョブID200のレコードを放棄したとする。ジョブID100の要素7のレコードは、編集履歴DB4に2レコード存在し、これらは同じステータスでなくてはならない。また、それぞれがグループIDを「5」とする「削除」と「追加」のグループに属しているので、グループ内でも同じステータスにならなくてはならない。その結果、ジョブID100のレコードでは、同ステータスレコード群に属する全てのレコードのステータスに「更新対象」が設定される。一方、ジョブID200の要素ID7のレコードはグループに属していないので、要素IDのレコードのみのステータスに「放棄」が設定される。このようにステータスコントロール処理により競合状態を回避するようにステータスが設定された編集履歴DB4は、図17に示すようになる。図17は、ステータスコントロール処理後の編集履歴DB4のデータ構造を模式的に示す図である。
[更新処理実行部]
次に、サーバ30の構成要素である更新処理実行部5について、図18乃至図20を参照して詳細に説明する。
更新処理実行部5は、ジョブ単位の複数のレコードから構成される編集履歴DB4と編集後部分文書20に基づいて、マスタDB1に記憶されたマスタデータについて変更があった部分のみを更新する。即ち、更新処理実行部5は、編集履歴DB4の更新種別毎にマスタデータに対して異なる上書き処理を行う。更新処理は、更新種別「削除」のレコードをマスタデータに反映する削除更新処理、更新種別「追加」のレコードをマスタデータに反映する追加更新処理、更新種別「修正」のレコードをマスタデータに反映する修正更新処理から構成されている。図18は削除更新処理のフローチャート、図19は追加更新処理のフローチャート、図20は修正更新処理のフローチャートである。
まず、図18を参照して、削除更新処理について説明する。削除更新処理は、グループIDを参照してグループ単位で処理を行う。具体的には、グループIDと要素IDとが一致するレコードに対してのみ、対応するマスタデータの要素を削除する処理を行う。グループIDの要素が削除されることで、その子孫要素も削除されるからである。
図18に示すように、削除更新処理において更新処理実行部5は、まず、編集履歴DB4から、ステータスが「更新対象」であって、更新種別が「削除」のレコードを1つ取得する(ステップS71)。そして、更新処理実行部5は、当該レコードのグループIDと要素IDが一致するか否かを判定する(ステップS72)。一致すると判定した場合(ステップS72;Yes)、当該レコードの要素IDに対応するマスタデータの要素を削除する(ステップS73)。一方、一致しないと判定した場合(ステップS73;No)、マスタデータの更新は行わず、ステップS74へ進む。ステップS74において更新処理実行部5は、当該レコードのステータスを「更新完了」に設定する(ステップS74)。そして、更新処理実行部5は、ステータスが「更新対象」であって、更新種別が「削除」のレコード全てを参照したか否かを判定し(ステップS75)、参照していない場合(ステップS75;No)、ステップS71乃至S75の処理を繰り返し行う。一方、参照した場合(ステップS75;Yes)、削除更新処理を完了する。これにより、異なる複数のジョブで進行している削除の競合を制御することができる。
次に、図19を参照して、追加更新処理について説明する。追加更新処理は、グループIDを参照してグループ単位で処理を行う。具体的には、グループIDと要素IDとが一致するレコードに基づいてのみ、編集後部分文書20の対応する要素を、対応するマスタデータに追加する。グループIDの要素が追加されることで、その子孫要素も追加されるからである。
図19に示すように、追加更新処理において更新処理実行部5は、まず、編集履歴DB4から、ステータスが「更新対象」であって、更新種別が「追加」のレコードを1つ取得する(ステップS81)。そして、更新処理実行部5は、当該レコードのグループIDと要素IDが一致するか否かを判定する(ステップS82)。一致すると判定した場合(ステップS82;Yes)、当該レコードの要素IDに対応する編集後部分文書20の要素を、対応するマスタデータに親要素IDの子要素として追加する(ステップS83)。一方、一致しないと判定した場合(ステップS82;No)、マスタデータの更新は行わず、ステップS84へ進む。ステップS84において更新処理実行部5は、当該レコードのステータスを「更新完了」に設定する(ステップS84)。さらに、更新処理実行部5は、マスタデータに追加した要素のデータバージョンを更新する(ステップS85)。そして、更新処理実行部5は、ステータスが「更新対象」であって、更新種別が「追加」のレコード全てを参照したか否かを判定し(ステップS86)、参照していない場合(ステップS86;No)、ステップS81乃至S86の処理を繰り返し行う。一方、参照した場合(ステップS86;Yes)、追加更新処理を完了する。これにより、異なる複数のジョブで進行している追加の競合を制御することができる。
次に、図20を参照して、修正更新処理について説明する。修正更新処理は、修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータをマスタデータから削除すると共に、編集後部分文書20における修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータをマスタデータに追加する処理である。
図20に示すように、修正更新処理において更新処理実行部5は、まず、編集履歴DB4から、ステータスが「更新対象」であって、更新種別が「修正」のレコードを1つ取得する(ステップS91)。そして、更新処理実行部5は、当該レコードのIDに対応する要素配下のIDが付与されていないデータをマスタデータから全て削除する(ステップS92)。さらに、更新処理実行部5は、編集後部分文書20における当該レコードのIDに対応する要素配下のIDが付与されていないデータを、マスタデータに追加する(ステップS93)。このようにして当該レコードをマスタデータに反映させた後、更新処理実行部5は、当該レコードのステータスを「更新完了」に設定する(ステップS94)。さらに、マスタデータ上に追加したデータの親要素のデータバージョンを更新する(ステップS95)。そして、更新処理実行部5は、ステータスが「更新対象」であって、更新種別が「修正」のレコード全てを参照したか否かを判定し(ステップS96)、参照していない場合(ステップS96;No)、ステップS91乃至S96の処理を繰り返し行う。一方、参照した場合(ステップS96;Yes)、修正更新処理を完了する。これにより、異なる複数のジョブで進行している修正の競合を制御することができる。
なお、更新処理において、追加更新処理と削除更新処理では、必ず削除更新処理を先に行う必要がある。修正更新処理は、特に順番は問わず、追加更新処理及び削除更新処理の前又は後のどちらに行っても構わない。
次に、図17に示す編集履歴DB4に基づいて上述の更新処理を行う場合について、図21を参照して具体的に説明する。図21(a)は更新前のマスタデータを、図21(b)は更新後のマスタデータの構造を模式的に示す図である。
図17は、ジョブID100の編集とジョブID200の編集が競合していたため、ステータスコントロール処理を行われたレコードが記憶されている編集履歴DB4のデータ構造を模式的に示す図である。ジョブID100の編集内容は図5、ジョブID200の編集内容は図13に示されている。なお、図5及び図13における編集前部分文書10は、図21(a)に示すような更新前のマスタデータから取得されたものとする。
図17に示す編集履歴DB7に記憶されたレコードのうち、ステータスに「更新対象」が設定されているレコードは、ジョブID100の要素5及び要素7と、ジョブID200の要素2とに対応するレコードである。このようなレコードにおいて、特に更新種別に着目する。
更新種別が「修正」である要素2は、ジョブID100のレコードとジョブID200のレコードとが存在しているが、この場合、ステータスが「更新対象」に設定されているジョブID200のレコードのみをマスタデータに反映させる。即ち、ステータスが「放棄」に設定されているジョブID100のレコードはマスタデータに反映させることなく放棄する。そこで、更新処理実行部5は、図21(a)及び(b)に示すように、マスタデータの要素2配下のIDが付与されていないデータを削除し、ジョブID200のレコードに基づいて、対応する編集後部分文書20の要素2配下のIDが付与されていないデータを追加する。即ち、マスタデータの一部を編集後部分文書20の一部で置換する。このとき、置換されたデータの親要素である要素2のデータバージョンが更新される。
その他のレコードとして更新種別が「削除」と「追加」の2種類が存在するが、「削除」のレコードを先に処理する。この場合においても、ステータスに「更新対象」が設定されているレコードのみを処理し、ステータスに「放棄」が設定されているレコードはマスタデータに反映させない。よって、ジョブID100のグループID5のグループについて削除更新処理を行う。このグループでは、要素IDがグループIDと一致する、即ち要素ID5であるレコードについてのみ処理を行うため、図21(a)に示すマスタデータの要素5を削除する。これに伴い、要素5の子要素である要素7も同時に削除される。
次に、更新種別が「追加」のレコードに基づいて追加更新処理を行う。この場合においても、ステータスに「更新対象」が設定されているレコードのみを処理し、ステータスに「放棄」が設定されているレコードはマスタデータに反映させない。よって、ジョブID100のグループID5のグループについて追加更新処理を行う。このグループでは、要素IDがグループIDと一致する、即ち要素ID5であるレコードについてのみ処理を行うため、図21(b)に示すように、マスタデータの要素3を親要素とする位置に、編集後部分文書20の要素5を追加する。これに伴い、要素5の子要素である要素7も同時に追加される。このとき、追加された要素5及び要素7のデータバージョンが更新される。このような追加更新処理を行うことで、マスタデータが、編集履歴DB4の内容を反映したものに更新されることになる。
なお、本実施形態では、図2に示すように、サーバ30が差分情報検出部3を有することとしているが、本発明はこれに限定されるものではなく、利用者端末40が差分情報検出部3を有することとしても構わない。この場合であっても、利用者端末40は、編集後部分文書20をサーバ30へ送信する必要がある。
また、本実施形態では、「削除」、「追加」及び「修正」の3つを更新種別として設定しているが、本発明はこれに限定されるものではなく、さらに「移動」という更新種別を設定してもよい。「移動」は、編集前後で要素IDの消失及び新規追加を伴わない構造変更を含んだ更新であり、「削除」及び「追加」双方の更新種別のレコードが編集履歴DB4に記憶されている要素について設定する。この場合、グループは、「削除」及び「追加」の更新種別のレコードのいずれかのグループに入れることとする。更新処理実行部5は、更新種別「移動」に対して、削除更新処理及び追加更新処理の双方を実行するが、これらの順序や実行すべきレコードは、いずれのグループに入れたかにより任意である。
また、本実施形態では、編集の競合が検出できないパターンとして、「更新種別「追加」のレコードの親要素が別のジョブで削除されている」という編集が考えられる。例えば、図5に示すようなマスタデータにおいて、要素5の追加を行うジョブと、要素3の削除を行うジョブとが同時に存在するような場合である。このような編集が存在した場合、双方の編集をマスタデータに反映させると、当該マスタデータは意図しない状態に更新されてしまうことがある。よって、この状態を回避するためには、更新種別が「追加」のレコードの親要素IDが、別のジョブで削除されていないかを編集履歴DB4で確認する必要がある。
このように本発明によれば、マスタデータが階層構造の文書となっているため、1つのマスタデータから取得したそれぞれ異なる部分文書を複数人で並行して編集することができる。また、編集前部分文書10と編集後部分文書20の差分情報と、編集後部分文書20とに基づいて、任意の要素単位でマスタデータを更新することができる。さらに、この差分情報に、編集単位の要素IDやデータバージョンを関連付けることで、同時進行する編集の競合を事前に把握して回避するように制御することができる。よって、本発明により、大容量の構造化文書であっても、必要な箇所のみを部分文書として取得し、任意の階層の要素で容易に編集や更新が可能である。また、差分情報を編集履歴DB4に記憶することで、複数のプロセスで進行している編集作業の競合を、階層構造を考慮して事前に把握することができる。
この編集システムによれば、差分情報及び編集後データから、任意の単位でマスタデータを更新することが可能であると共に、同時進行する編集の競合を事前に把握することができる。
本発明における編集システムの概略構成を示す図である。 編集システムを構成するサーバ及び利用者端末の内部構成を示すブロック図である。 本発明における編集処理のフローチャートである。 本発明のマスタデータの構造を模式的に示す図である。 ジョブID100における編集前部分文書及び編集後部分文書のデータ構造を模式的に示す図である。 本発明における削除検出処理のフローチャートである。 本発明における追加検出処理のフローチャートである。 本発明における修正検出処理のフローチャートである。 差分情報のデータ構造を模式的に示す図である。 ステータスコントロール処理前の編集履歴DBのデータ構造を模式的に示す図である。 本発明における初期ステータス設定処理のフローチャートである。 初期ステータス設定処理によるステータス設定例である。 ジョブID200における編集前部分文書及び編集後部分文書のデータ構造を模式的に示す図である。 本発明におけるステータスコントロール処理のフローチャートである。 更新対象を選択する際の表示画面例である。 更新対象を選択する際の表示画面及び放棄リストの例である。 ステータスコントロール処理後の編集履歴DBのデータ構造を模式的に示す図である。 本発明における削除更新処理のフローチャートである。 本発明における追加更新処理のフローチャートである。 本発明における修正更新処理のフローチャートである。 更新前マスタデータと更新後マスタデータのデータ構造を模式的に示す図である。
符号の説明
1…マスタDB
2…編集機
3…差分情報検出部
4…編集履歴DB
5…更新処理実行部
6…編集競合検査部
7…ステータス制御部
8…ステータス入出力部
10…編集前部分文書
20…編集後部分文書
30…サーバ
40…利用者端末

Claims (18)

  1. 端末及び当該端末とデータの送受信が可能なサーバから構成され、文書を編集するための編集システムであって、
    前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、
    前記サーバは、
    前記文書をマスタデータとして記憶するマスタ記憶部と、
    編集前部分文書と編集後部分文書の差分情報を前記端末から受信する差分情報受信手段と、
    前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、
    前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、
    前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、
    前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、
    前記編集後部分文書を前記端末から受信する編集後部分文書受信手段と、
    前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、
    前記端末は、
    前記サーバのマスタ記憶部から、前記マスタデータの一部を前記編集前部分文書として受信する編集前部分文書受信手段と、
    前記編集前部分文書を編集し、編集後部分文書を作成する編集後部分文書作成手段と、
    前記編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段と、
    前記差分情報をサーバへ送信する差分情報送信手段と、
    前記編集後部分文書をサーバへ送信する編集後部分文書送信手段と、を備え、
    前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、
    前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、
    前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、
    前記差分情報検出手段は、
    前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、
    前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、
    取得した子要素に付与された要素IDを取得するID取得手段と、
    取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、
    前記初期ステータス設定手段は、
    前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、
    前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、
    前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、
    前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、
    前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、
    前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、
    前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、
    前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、
    前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定することを特徴とする編集システム。
  2. 端末及び当該端末とデータの送受信が可能なサーバから構成され、文書を編集するための編集システムであって、
    前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、
    前記サーバは、
    階層構造の文書をマスタデータとして記憶するマスタ記憶部と、
    編集後部分文書を前記端末から受信する編集後部分文書受信手段と、
    編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段と、
    前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、
    前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、
    前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、
    前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、
    前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、
    前記端末は、
    前記サーバのマスタ記憶部から、前記マスタデータの一部を前記編集前部分文書として受信する編集前部分文書受信手段と、
    前記編集前部分文書を編集し、編集後部分文書を作成する編集後部分文書作成手段と、
    前記編集後部分文書をサーバへ送信する編集後部分文書送信手段と、を備え、
    前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、
    前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、
    前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、
    前記差分情報検出手段は、
    前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、
    前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、
    取得した子要素に付与された要素IDを取得するID取得手段と、
    取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、
    前記初期ステータス設定手段は、
    前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、
    前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、
    前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、
    前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、
    前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、
    前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、
    前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、
    前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、
    前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定することを特徴とする編集システム。
  3. 端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバであって、
    前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、
    前記文書をマスタデータとして記憶するマスタ記憶部と、
    編集前部分文書と編集後部分文書の差分情報を前記端末から受信する差分情報受信手段と、
    前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、
    前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、
    前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、
    前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、
    前記編集後部分文書を前記端末から受信する編集後部分文書受信手段と、
    前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、
    前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、
    前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、
    前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、
    前記初期ステータス設定手段は、
    前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、
    前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、
    前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、
    前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、
    前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、
    前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、
    前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、
    前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、
    前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定することを特徴とするサーバ。
  4. 端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバであって、
    前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、
    階層構造の文書をマスタデータとして記憶するマスタ記憶部と、
    編集後部分文書を前記端末から受信する編集後部分文書受信手段と、
    編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段と、
    前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶部と、
    前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段と、
    前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段と、
    前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段と、
    前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段と、を備え、
    前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、
    前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、
    前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、
    前記差分情報検出手段は、
    前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、
    前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、
    取得した子要素に付与された要素IDを取得するID取得手段と、
    取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、
    前記初期ステータス設定手段は、
    前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、
    前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、
    前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、
    前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、
    前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、
    前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、
    前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、
    前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、
    前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定することを特徴とするサーバ。
  5. 前記レコードは、対応する要素より1つ上の階層に位置した親要素の要素IDである親要素IDをさらに有しており、
    前記差分情報検出手段は、
    前記編集後部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集後子要素判定手段と、
    前記編集後子要素判定手段が存在すると判定した場合に、前記編集後部分文書から前記要素IDが付与された子要素を取得する編集後子要素取得手段と、
    取得した子要素に付与された要素IDを取得するID取得手段と、
    取得した要素IDが、前記編集前部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集前ID判定手段と、
    前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に追加を設定する追加設定手段と、
    前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素の要素IDを設定する追加グループID設定手段と、
    前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素に対応するレコードの親要素IDに、当該子要素の親要素の要素IDを設定する親要素ID設定手段と、をさらに備えることを特徴とする請求項に記載のサーバ。
  6. 前記差分情報検出手段は、
    編集前部分文書において下位階層に前記要素IDが付与されていないデータが存在する要素を対象要素として設定する対象要素設定手段と、
    前記対象要素配下の要素IDが付与されていないデータを、前記編集後部分文書の当該要素IDに対応する要素配下の要素IDが付与されていないデータと比較する比較手段と、
    前記比較手段による比較の結果、差があると判定した場合に、前記対象要素に対応するレコードの更新種別に修正を設定する修正設定手段と、を備えることを特徴とする請求項4又は5に記載のサーバ。
  7. 前記マスタ更新手段は、
    前記編集履歴記憶部から、ステータスが更新対象であって、更新種別が削除であるレコードを抽出する削除レコード抽出手段と、
    前記削除レコードに基づいて、グループIDと要素IDが一致するか否かを判定する削除ID判定手段と、
    前記削除ID判定手段が一致すると判定した場合に、当該削除レコードのIDに対応するマスタデータの要素を削除する削除手段と、
    前記削除レコードのステータスを更新完了に設定する削除完了設定手段と、を備えることを特徴とする請求項3又は4に記載のサーバ。
  8. 前記マスタ更新手段は、
    前記編集履歴記憶部から、ステータスが更新対象であって、更新種別が追加であるレコードを抽出する追加レコード抽出手段と、
    前記追加レコードに基づいて、グループIDと要素IDが一致するか否かを判定する追加ID判定手段と、
    前記追加ID判定手段が一致すると判定した場合に、当該追加レコードのIDに対応する編集後部分文書の要素を、前記マスタデータに親要素IDの子要素として追加する追加手段と、
    前記追加レコードのステータスを更新完了に設定する追加完了設定手段と、
    前記追加手段が追加した要素のデータバージョンを更新する追加更新手段と、を備えることを特徴とする請求項に記載のサーバ。
  9. 前記マスタ更新手段は、
    前記編集履歴記憶部から、ステータスが更新対象であって、更新種別が修正であるレコードを抽出する修正レコード抽出手段と、
    前記修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータを、前記マスタデータから削除する修正削除手段と、
    前記編集後部分文書における修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータを、前記マスタデータに追加する修正追加手段と、
    前記修正レコードのステータスを更新完了に設定する修正完了設定手段と、
    前記修正追加手段が追加したデータに対応する要素のデータバージョンを更新する修正更新手段と、を備えることを特徴とする請求項に記載のサーバ。
  10. 前記削除レコード抽出手段、前記削除ID判定手段、前記削除手段及び前記削除完了設定手段による処理は、前記追加レコード抽出手段、前記追加ID判定手段、前記追加手段、前記追加完了設定手段及び前記追加更新手段による処理より前に行われることを特徴とする請求項8又は9に記載のサーバ。
  11. 端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバにより実行されるプログラムであって、
    前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、
    前記文書をマスタデータとして記憶するマスタ記憶手段、
    編集前部分文書と編集後部分文書の差分情報を前記端末から受信する差分情報受信手段、
    前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶手段、
    前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段、
    前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段、
    前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段、
    前記編集後部分文書を前記端末から受信する編集後部分文書受信手段、
    前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段、として前記サーバを機能させ、
    前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、
    前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、
    前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、
    前記初期ステータス設定手段は、
    前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、
    前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、
    前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、
    前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、
    前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、
    前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、
    前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、
    前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、
    前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定することを特徴とするプログラム。
  12. 端末とデータの送受信を行うことにより文書を編集するための編集システムのサーバにより実行されるプログラムであって、
    前記文書は、階層構造を有し、編集の最小単位である編集管理単位以上の要素を編集単位として部分的に編集が可能であり、
    階層構造の文書をマスタデータとして記憶するマスタ記憶手段、
    編集後部分文書を前記端末から受信する編集後部分文書受信手段と、
    編集前部分文書と前記編集後部分文書の差分情報を検出する差分情報検出手段、
    前記差分情報に基づいて、前記編集の履歴を複数レコードから構成される編集履歴として記憶する編集履歴記憶手段、
    前記レコードの編集状態を示すステータスを設定する初期ステータス設定手段、
    前記レコードのステータスに基づいて、前記編集が競合しているか否かを判定する競合判定手段、
    前記競合判定手段が競合があると判定した場合に、競合している編集に対応するレコードのステータスを再設定した後、前記競合判定手段により、前記編集が競合しているか否かを再度判定するステータス再設定手段、
    前記競合判定手段が競合がないと判定した場合に、前記レコード及び前記編集後部分文書に基づいて前記マスタデータを更新するマスタ更新手段、として前記サーバを機能させ、
    前記マスタデータは、前記要素毎に要素IDが付与されており、かつ、前記要素毎にデータバージョンが付与されており、
    前記レコードは、対応する要素IDと、更新の種別を示す更新種別と、複数の要素から構成されるグループ毎に付与されたグループIDと、前記データバージョンと、部分文書毎の編集プロセスであるジョブのIDであるジョブIDと、を有しており、
    前記ステータスは、放棄、更新対象及び更新完了のいずれか1つが設定されるものであり、
    前記差分情報検出手段は、
    前記編集前部分文書において差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集前子要素判定手段と、
    前記編集前子要素判定手段が存在すると判定した場合に、前記編集前部分文書から前記要素IDが付与された子要素を取得する編集前子要素取得手段と、
    取得した子要素に付与された要素IDを取得するID取得手段と、
    取得した要素IDが、前記編集後部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集後ID判定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に削除を設定する削除設定手段と、
    前記編集後ID判定手段が存在しないと判定した場合に、前記編集前部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素のIDを設定する削除グループID設定手段と、を備え、
    前記初期ステータス設定手段は、
    前記ステータスが未設定であって、ジョブID、グループID及び更新種別が同一の全てのレコードを、同一のステータスを設定する同ステータスレコード群に設定する第1レコード群設定手段と、
    前記ステータスが未設定であって、ジョブID及び要素IDが同一のレコードを、前記同ステータスレコード群に設定する第2レコード群設定手段と、
    前記編集履歴記憶部に、前記同ステータスレコード群に属するレコードと異なるジョブIDであって、データバージョンが一致するレコードが存在するか否かを判定するジョブID判定手段と、
    前記ジョブID判定手段が存在すると判定した場合に、前記同ステータスレコード群に属するレコードと異なるジョブIDであってデータバージョンが一致するレコードの中に、ステータスが更新完了のレコードが存在するか否かを判定する更新完了判定手段と、
    前記更新完了判定手段が存在すると判定した場合に、前記同ステータスレコード群に属する全てのレコードに放棄を設定する放棄設定手段と、
    前記ジョブID判定手段及び前記更新完了判定手段のいずれか1つ以上が存在しないと判定した場合に、前記同ステータスレコード群に属する全てのレコードに更新対象を設定する更新対象設定手段と、を備え、
    前記競合判定手段は、前記編集履歴記憶部に、ステータスが更新対象であって、ジョブIDが異なり、要素ID及びデータバージョンが一致するレコードが複数存在する場合に前記編集が競合していると判定し、
    前記ステータス再設定手段は、ジョブID、グループID及び更新種別が同一のレコード、並びに、ジョブID及び要素IDが同一のレコードには同一のステータスを設定し、
    前記ステータス再設定手段は、複数の編集が競合している場合、1つの編集のみを有効とし他の編集を無効とするように前記ステータスを再設定することを特徴とするプログラム。
  13. 前記レコードは、対応する要素より1つ上の階層に位置した親要素の要素IDである親要素IDをさらに有しており、
    前記差分情報検出手段は、
    前記編集後部分文書において前記差分検出の対象となる対象要素に、当該対象要素より1つ下の階層に位置しており、前記要素IDが付与された子要素が存在するか否かを判定する編集後子要素判定手段と、
    前記編集後子要素判定手段が存在すると判定した場合に、前記編集後部分文書から前記要素IDが付与された子要素を取得する編集後子要素取得手段
    取得した子要素に付与された要素IDを取得するID取得手段
    取得した要素IDが、前記編集前部分文書において対応する前記対象要素の子要素に付与された要素IDとして存在するか否かを判定する編集前ID判定手段
    前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素と、当該子要素より下位階層に位置しており、前記要素IDが付与された子孫要素とに対応するレコードの更新種別に追加を設定する追加設定手段
    前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素と前記子孫要素とに対応するレコードのグループIDに、当該子要素の要素IDを設定する追加グループID設定手段
    前記編集前ID判定手段が存在しないと判定した場合に、前記編集後部分文書における前記子要素に対応するレコードの親要素IDに、当該子要素の親要素の要素IDを設定する親要素ID設定手段と、を備えることを特徴とする請求項12に記載のプログラム。
  14. 前記差分情報検出手段は、
    編集前部分文書において下位階層に前記要素IDが付与されていないデータが存在する要素を対象要素として設定する対象要素設定手段
    前記対象要素配下の要素IDが付与されていないデータを、前記編集後部分文書の当該要素IDに対応する要素配下の要素IDが付与されていないデータと比較する比較手段
    前記比較手段による比較の結果、差があると判定した場合に、前記対象要素に対応するレコードの更新種別に修正を設定する修正設定手段と、を備えることを特徴とする請求項12又は13に記載のプログラム。
  15. 前記マスタ更新手段は、
    前記編集履歴記憶手段から、ステータスが更新対象であって、更新種別が削除であるレコードを抽出する削除レコード抽出手段
    前記削除レコードに基づいて、グループIDと要素IDが一致するか否かを判定する削除ID判定手段
    前記削除ID判定手段が一致すると判定した場合に、当該削除レコードのIDに対応するマスタデータの要素を削除する削除手段
    前記削除レコードのステータスを更新完了に設定する削除完了設定手段と、を備えることを特徴とする請求項11又は12に記載のプログラム。
  16. 前記マスタ更新手段は、
    前記編集履歴記憶手段から、ステータスが更新対象であって、更新種別が追加であるレコードを抽出する追加レコード抽出手段
    前記追加レコードに基づいて、グループIDと要素IDが一致するか否かを判定する追加ID判定手段
    前記追加ID判定手段が一致すると判定した場合に、当該追加レコードのIDに対応する編集後部分文書の要素を、前記マスタデータに親要素IDの子要素として追加する追加手段
    前記追加レコードのステータスを更新完了に設定する追加完了設定手段
    前記追加手段が追加した要素のデータバージョンを更新する追加更新手段と、を備えることを特徴とする請求項15に記載のプログラム。
  17. 前記マスタ更新手段は、
    前記編集履歴記憶手段から、ステータスが更新対象であって、更新種別が修正であるレコードを抽出する修正レコード抽出手段
    前記修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータを、前記マスタデータから削除する修正削除手段
    前記編集後部分文書における修正レコードの要素IDに対応する要素配下の要素IDが付与されていないデータを、前記マスタデータに追加する修正追加手段
    前記修正レコードのステータスを更新完了に設定する修正完了設定手段
    前記修正追加手段が追加したデータに対応する要素のデータバージョンを更新する修正更新手段と、を備えることを特徴とする請求項16に記載のプログラム。
  18. 前記削除レコード抽出手段、前記削除ID判定手段、前記削除手段及び前記削除完了設定手段による処理は、前記追加レコード抽出手段、前記追加ID判定手段、前記追加手段、前記追加完了設定手段及び前記追加更新手段による処理より前に行われることを特徴とする請求項16又は17に記載のプログラム。
JP2004355478A 2004-12-08 2004-12-08 編集システム、サーバ及びプログラム Expired - Fee Related JP5172073B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004355478A JP5172073B2 (ja) 2004-12-08 2004-12-08 編集システム、サーバ及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004355478A JP5172073B2 (ja) 2004-12-08 2004-12-08 編集システム、サーバ及びプログラム

Publications (2)

Publication Number Publication Date
JP2006163912A JP2006163912A (ja) 2006-06-22
JP5172073B2 true JP5172073B2 (ja) 2013-03-27

Family

ID=36665855

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004355478A Expired - Fee Related JP5172073B2 (ja) 2004-12-08 2004-12-08 編集システム、サーバ及びプログラム

Country Status (1)

Country Link
JP (1) JP5172073B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4907241B2 (ja) * 2006-06-30 2012-03-28 三菱電機株式会社 サーバ装置、サーバ装置の情報管理方法、サーバ装置の情報管理プログラム、クライアント装置、クライアント装置の情報管理方法、クライアント装置の情報管理プログラム、情報管理システムおよび情報管理システムの情報管理方法
JP2008165299A (ja) * 2006-12-27 2008-07-17 Update It Inc ドキュメント作成システム
JP5257578B2 (ja) * 2007-12-19 2013-08-07 富士ゼロックス株式会社 情報処理プログラムおよび情報処理装置
JP2011141814A (ja) * 2010-01-08 2011-07-21 Hitachi Ltd ファイル共有管理システム
US20130326323A1 (en) 2012-05-30 2013-12-05 Google Inc. Systems and methods for displaying contextual revision history
US9471556B2 (en) * 2013-01-30 2016-10-18 Microsoft Technology Licensing, Llc Collaboration using multiple editors or versions of a feature
US9946691B2 (en) 2013-01-30 2018-04-17 Microsoft Technology Licensing, Llc Modifying a document with separately addressable content blocks
JP2015225561A (ja) * 2014-05-29 2015-12-14 株式会社日立製作所 申請データの有効性確認方法およびプログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004326176A (ja) * 2003-04-21 2004-11-18 Matsushita Electric Works Ltd 情報サーバ、情報サーバ用プログラムおよび情報システム

Also Published As

Publication number Publication date
JP2006163912A (ja) 2006-06-22

Similar Documents

Publication Publication Date Title
JP4141556B2 (ja) 構造化文書管理方法及びその実施装置並びにその処理プログラムを記録した媒体
US10318628B2 (en) System and method for creation of templates
US8078960B2 (en) Rendering an HTML electronic form by applying XSLT to XML using a solution
US5752021A (en) Document database management apparatus capable of conversion between retrieval formulae for different schemata
US6044387A (en) Single command editing of multiple files
KR101608099B1 (ko) 문서의 동시적인 협업적 검토
US7197510B2 (en) Method, system and program for generating structure pattern candidates
EP0430505B1 (en) A support method and apparatus for making a formated document
KR101013233B1 (ko) 의미적 그리고 기능적 관계에 따라 포털 페이지상의포틀릿의 자동적 배치를 위한 시스템
EP3358470B1 (en) Method of preparing documents in markup languages
US8584009B2 (en) Automatically propagating changes in document access rights for subordinate document components to superordinate document components
US20040268229A1 (en) Markup language editing with an electronic form
US20030237046A1 (en) Transformation stylesheet editor
KR101311123B1 (ko) 문서의 xml 데이터 저장소에 대한 프로그램가능성
WO2003009177A1 (en) Web site application development method using object model for managing web-based content
JPH076077A (ja) 自己編成情報記憶システム
WO2020039729A1 (ja) ドキュメント作成支援システム
JP5172073B2 (ja) 編集システム、サーバ及びプログラム
US7100126B2 (en) Electrical form design and management method, and recording medium
JP2003281149A (ja) アクセス権限設定方法および構造化文書管理システム
RU2613026C1 (ru) Способ подготовки документов на языках разметки при реализации пользовательского интерфейса для работы с данными информационной системы
JP4199916B2 (ja) 文書管理方法および装置
JPH11288412A (ja) 文書作成方法及びシステム及び文書作成プログラムを記録したコンピュータ読み取り可能な記録媒体
JP6647954B2 (ja) 設計書の入出力装置、設計書の入出力システム及び設計書の入出力方法
JPH117445A (ja) 統合化文書管理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071024

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100223

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100420

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101019

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121109

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121226

LAPS Cancellation because of no payment of annual fees