(57)【要約】      （修正有）【課題】互いに異なる更新により生成される複数の文書を適切に併合する。【解決手段】併合方法は、併合装置により実行され、差分取得処理と併合処理とを含む。差分取得処理は、構造化文書に対する別個の更新により生成される第１の構造化文書および第２の構造化文書について、第１の構造化文書と構造化文書との差分を示す第１の差分情報、および第２の構造化文書と構造化文書との差分を示す第２の差分情報を取得する。併合処理は、第１の差分情報が含む第１の変更文データ、および第２の差分情報が含む第２の変更文データの適用順序を決定し、その適用順序に基づいて、第１の変更文データの構造化文書への適用の際に、第１の階層と等しい第２の階層に所属する第２の語句データを適用対象とする第２の変更文データも併せて構造化文書に適用し、第１の構造化文書および第２の構造化文書を併合する。【選択図】図１
2019133534.tif 000002
【特許請求の範囲】
【請求項１】
構造化文書に対する別個の更新により生成される第１の構造化文書および第２の構造化文書について、前記第１の構造化文書と前記構造化文書との差分を示す第１の差分情報、および前記第２の構造化文書と前記構造化文書との差分を示す第２の差分情報を取得し、
前記第１の差分情報に含まれる第１の変更文データの適用対象の第１の語句データが前記構造化文書において所属している第１の階層、および前記第２の差分情報に含まれる第２の変更文データの適用対象の第２の語句データが前記構造化文書において所属している第２の階層のそれぞれの深さに基づいて、前記第１の変更文データおよび前記第２の変更文データの適用順序を決定し、
前記適用順序に基づいて前記第１の変更文データを前記構造化文書へ適用する際に、前記第１の階層と等しい第２の階層に所属する第２の語句データを適用対象とする第２の変更文データも併せて前記構造化文書に適用して、前記第１の構造化文書および前記第２の構造化文書を併合する
処理を併合装置が実行することを特徴とする併合方法。
【請求項２】
前記第１の差分情報に含まれる前記第１の変更文データを前記第１の階層に基づいて並び替え、前記第２の差分情報に含まれる前記第２の変更文データを前記第２の階層に基づいて並び替え、
並び替えられた順番に基づき、前記第１の変更文データと前記第２の変更文データの前記構造化文書への適用順序を決定する、
処理を前記併合装置が実行することを特徴とする請求項１に記載の併合方法。
【請求項３】
前記適用順序は、前記第１の階層および前記第２の階層の昇順であることを特徴とする請求項１又は２に記載の併合方法。
【請求項４】
前記第１の変更文データは、適用対象の前記第１の語句データの前記構造化文書における所属関係を示す第１の所属情報を含み、前記第２の変更文データは、適用対象の前記第２の語句データの前記構造化文書における所属関係を示す前記第２の所属情報を含み、前記第１の所属情報と前記第２の所属情報が等しい場合に、前記第１の変更文データの前記構造化文書への適用の際に、前記第２の変更文データも前記構造化文書に適用する
処理を併合装置が実行することを特徴とする請求項１から３のいずれか１項に記載の併合方法。
【請求項５】
前記第１の所属情報と前記第２の所属情報が等しい場合であって、前記第１の変更文データの適用後の前記第１の語句データが、前記第２の変更文データの適用後の前記第２の語句データと異なる場合、前記第１の構造化文書と前記第２の構造化文書の併合後の構造化文書に前記第１の変更文データの適用後の第１の語句データと、前記第２の変更文データの適用後の第２の語句データを含ませる
処理を併合装置が実行することを特徴とする請求項４に記載の併合方法。
【請求項６】
前記第１の所属情報と前記第２の所属情報が等しい場合に、前記第１の変更文データの適用後の第１の語句データと、前記第２の変更文データの適用後の第２の語句データを出力する
処理を併合装置が実行することを特徴とする請求項５に記載の併合方法。
【請求項７】
前記第１の所属情報と前記第２の所属情報とが一致する場合であって、前記第１の変更文データの適用後の前記第１の語句データと、前記第２の変更文データの適用後の前記第２の語句データとが等しい場合、前記第１の変更文データと前記第２の変更文データのいずれか一方を前記構造化文書に適用する
処理を併合装置が実行することを特徴とする請求項４から６のいずれか１項に記載の併合方法。
【請求項８】
前記第１の所属情報と前記第２の所属情報とが一致する場合であって、前記第１の変更文データの適用により前記第１の語句データが別の語句データへ変更され、前記第２の変更文データの適用により前記第２の語句データが削除される場合、前記第１の変更文データを前記構造化文書に適用し、前記第２の変更文データを前記構造化文書には適用せずに、前記第１の構造化文書および前記第２の構造化文書を併合する
処理を併合装置が実行することを特徴とする請求項４から７のいずれか１項に記載の併合方法。
【請求項９】
前記第１の変更文データの適用により、前記第１の所属情報が変更される場合で、前記第１の差分情報において前記第１の所属情報を含む第１の他の所属情報により所属関係が示される他の語句データを変更対象とする第１の他の変更文データがある場合、前記第１の他の所属情報に含まれる前記第１の所属情報を、前記第１の変更文データの適用後の前記第１の所属情報へ変更し、
前記第２の変更文データの適用により、前記第２の所属情報が変更される場合で、前記第２の差分情報において前記第２の所属情報を含む第２の他の所属情報により所属関係が示される他の語句データを変更対象とする第２の他の変更文データがある場合、前記第２の他の所属情報に含まれる前記第２の所属情報を、前記第２の変更文データの適用後の前記第２の所属情報へ変更する
処理を併合装置が実行することを特徴とする請求項４から８のいずれか１項に記載の併合方法。
【請求項１０】
前記第１の差分情報において、前記第１の語句データを推移的に更新するための２つ以上の前記第１の変更文データがある場合に、前記２つ以上の第１の変更文データを集約して新たな１つの第１の変更文に書き換え、
前記第２の差分情報において、前記第２の語句データを推移的に更新するための２つ以上の前記第２の変更文データがある場合に、前記２つ以上の第２の変更文データを集約して新たな１つの第２の変更文に書き換え、
前記適用順序を、前記新たな１つの第１の変更文と前記新たな１つの第２の変更文を用いて決定する
処理を併合装置が実行することを特徴とする請求項１から９のいずれか１項に記載の併合方法。
【請求項１１】
構造化文書に対する別個の更新により生成される第１の構造化文書および第２の構造化文書について、前記第１の構造化文書と前記構造化文書との差分を示す第１の差分情報、および前記第２の構造化文書と前記構造化文書との差分を示す第２の差分情報を取得する差分取得部と、
前記第１の差分情報に含まれる第１の変更文データの適用対象の第１の語句データが前記構造化文書において所属している第１の階層、および前記第２の差分情報に含まれる第２の変更文データの適用対象の第２の語句データが前記構造化文書において所属している第２の階層のそれぞれの深さに基づいて、前記第１の変更文データおよび前記第２の変更文データの適用順序を決定し、前記適用順序に基づいて前記第１の変更文データを前記構造化文書へ適用する際に、前記第１の階層と等しい第２の階層に所属する第２の語句データを適用対象とする第２の変更文データも併せて前記構造化文書に適用して、前記第１の構造化文書および前記第２の構造化文書を併合する併合部と
を備えることを特徴とする併合装置。
【請求項１２】
構造化文書に対する別個の更新により生成される第１の構造化文書および第２の構造化文書について、前記第１の構造化文書と前記構造化文書との差分を示す第１の差分情報、および前記第２の構造化文書と前記構造化文書との差分を示す第２の差分情報を取得し、
前記第１の差分情報に含まれる第１の変更文データの適用対象の第１の語句データが前記構造化文書において所属している第１の階層、および前記第２の差分情報に含まれる第２の変更文データの適用対象の第２の語句データが前記構造化文書において所属している第２の階層のそれぞれの深さに基づいて、前記第１の変更文データおよび前記第２の変更文データの適用順序を決定し、
前記適用順序に基づいて前記第１の変更文データを前記構造化文書へ適用する際に、前記第１の階層と等しい第２の階層に所属する第２の語句データを適用対象とする第２の変更文データも併せて前記構造化文書に適用して、前記第１の構造化文書および前記第２の構造化文書を併合する
処理を併合装置に実行させること特徴とする併合プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、併合方法、併合装置、および併合プログラムに関する。
【背景技術】
【０００２】
従来、データ記述言語等を用いるソフトウェア開発において、複数の開発者がデータを共有しながら、開発を進める場合がある。この際に、データ記述言語等により記述された構造化文書に対し、それぞれ異なる更新が行われることがある。この場合に、更新後の複数の構造化文書の併合処理が行なわれる場合がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−６５１８１号公報
【特許文献２】特開２００６−１６３９１２号公報
【特許文献３】特開２００４−４６７４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
構造化文書である共有データに対し、互いに競合する更新が行われる可能性がある。互いに競合する更新が行なわれた複数の構造化文書が併合された場合、併合後の構造化文書の構造が破壊される可能性がある。併合後の構造化文書の構造が破壊された場合、適切でない併合結果が出力されることとなる。
【０００５】
また更新後の複数の構造化文書の各々の併合処理を行う場合、各更新を実行するための命令の実行順序によっては、適切でない併合結果が出力されることとなる。
【０００６】
本発明の一つの側面に係る目的は、互いに異なる更新により生成される複数の構造化文書を適切に併合することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の１つの態様の併合方法は、併合装置により実行され、差分取得処理と併合処理とを含む。差分取得処理は、構造化文書に対する別個の更新により生成される第１の構造化文書および第２の構造化文書について、第１の構造化文書と構造化文書との差分を示す第１の差分情報、および第２の構造化文書と構造化文書との差分を示す第２の差分情報を取得する。併合処理は、第１の変更文データおよび第２の変更文データの適用順序を決定する。適用順序は、第１の差分情報が含む第１の変更文データの適用対象の第１の語句データの構造化文書における第１の階層と、第２の差分情報が含む第２の変更文データの適用対象の第２の語句データの構造化文書における第２の階層の各々の深さに基づき決定される。併合部は、適用順序に基づき第１の変更文データの構造化文書への適用の際に、第１の階層と等しい第２の階層に所属する第２の語句データを適用対象とする第２の変更文データも併せて構造化文書に適用し、第１の構造化文書および第２の構造化文書を併合する。
【発明の効果】
【０００８】
上述の態様によれば、互いに異なる更新により生成される複数の構造化文書を適切に併合できる。
【図面の簡単な説明】
【０００９】
【図１】本実施形態に係る併合装置の機能ブロックを例示する図である。
【図２】変更対象の文書データと、文書データの変更について変更履歴から抽出される変更文データを例示する図である。
【図３】変更文データの適用により変更された文書データと変更文データを例示する図である。
【図４】変更文データの適用により変更された文書データを例示する図である。
【図５】集約について例示的に説明するための図である。
【図６】互いに異なる更新結果を得る２つの変更文データを、１つの語句データへ適用する場合における併合部の処理内容を例示する図である。
【図７】１つの語句データを変更対象とする変更命令が１つだけである場合における併合部の処理方法を例示する図である。
【図８】選択部からの表示指示に応じた、入出力部による表示内容を例示する図である。
【図９】併合部による併合処理が行われるまでの、本実施形態に係る併合装置による処理のフローを例示する図である。
【図１０】２つの変更命令があった場合における差分情報の抽出処理について具体的に説明するための図（その１）である。
【図１１】２つの変更命令があった場合における差分情報の抽出処理について具体的に説明するための図（その２）である。
【図１２】２つの変更命令があった場合における差分情報の抽出処理について具体的に説明するための図（その３）である。
【図１３】ソート部による処理内容の一例を示す図である。
【図１４】集約部による処理の詳細を例示する図である。
【図１５】前処理のフローの一部を例示する図である。
【図１６】集約部による処理についての詳細を例示するフローチャートである。
【図１７】集約部による前処理の実行前後の変更文データの具体例を示す図である。
【図１８】集約処理の詳細を例示するフローチャートである。
【図１９】集約処理について具体的に説明するための図である。
【図２０】後処理の詳細を例示するフローチャートである。
【図２１】併合部による処理のフローを例示する図である。
【図２２】併合部による処理方法を例示する図（その１）である。
【図２３】併合部による処理方法を例示する図（その２）である。
【図２４】併合部による処理方法を例示する図（その３）である。
【図２５】併合部による処理方法を例示する図（その４）である。
【図２６】本実施形態に係る併合装置のハードウェア構成を例示する図である。
【発明を実施するための形態】
【００１０】
図１は、本実施形態に係る併合装置１の機能ブロックの一例を示す。併合装置１は、例えば、所定のコンピュータであってもよい。また、併合装置１は、例えば、ソフトウェア開発におけるテストを行なうモックアップサーバであってもよい。
【００１１】
併合装置１は、記憶部１０、入出力部１１、差分取得部１２、集約部１３、ソート部１４、ソース取得部１５、併合部１６、および選択部１７等を含む。
【００１２】
記憶部１０は、ＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ，「ＪａｖａＳｃｒｉｐｔ」は登録商標）等による構造化文書のデータ（文書データとも記載する）を記憶する。本実施形態における文書データには、ネスト構造に基づいて整理された、名詞等の単語や複合語や語句等のデータ（語句データとも記載する）が含まれる。なお、ネスト構造以外にも木構造等に基づいて整理された語句データを文書データは含んでもよい。文書データは、後述する入出力部１１を介して変更可能である。記憶部１０は、変更前の文書データを記憶し、変更後の文書データや変更前後の各文書データの差分に係るデータや文書データを変更するための変更命令等のデータを記憶する。変更前後の各文書データの差分に係るデータ、文書データを変更するための変更命令等を、以下では変更履歴データと記載する場合もあるとする。
【００１３】
入出力部１１は、開発者等のユーザからの文書データの入力、文書データの変更のための変更命令、２つ以上の文書データの併合指示等を受け付ける。なお、図１には、１つの入出力部１１が示されているが、併合装置１は、複数のユーザのそれぞれから文書データの変更命令を受け付けるために、複数の入出力部１１を備えていてもよい。入出力部１１は、複数のユーザの各々に与えられたアカウントを通じて、複数の変更命令を受け付けてもよい。併合装置１は、不図示の通信部を介して他の装置においてユーザが入力した変更命令を受け付けてもよい。記憶部１０は、複数のユーザや装置からの変更命令に係るデータを、ユーザ毎、アカウント毎、又は装置毎に記憶する。
【００１４】
入出力部１１は、併合部１６および選択部１７による処理結果を、例えば、ディスプレイ等の表示装置に出力し、該表示装置に、処理結果を表示させてもよい。
【００１５】
差分取得部１２は、入出力部１１を介して上記併合指示を受け付けると、記憶部１０に記憶された変更履歴データを読み込む。差分取得部１２は、変更履歴データから、変更前後の各文書データ間の差分に係るデータであって、変更対象の語句データがネスト構造上どの語句データの配下にあるかを示す所属情報と、変更前後の各語句データとを抽出する。このデータを以下では、変更文データとも記載する。所属情報は、データの存在する位置までを示すための文字列等の情報（パス）である。本実施形態における変更文データは、所属情報が示す所在における変更前の語句データを変更後の語句データに変更する際に用いられる。
【００１６】
変更文データを含むデータであって、文書全体に対し変更を行うためのデータを、差分情報とも記載する。本実施形態において差分情報は、１つの変更命令に対し１つ生成されるものとする。
【００１７】
差分情報の総数がＮ（Ｎは２以上の自然数）の場合に、各差分情報を第ｎの差分情報（ｎは１以上でＮ以下の自然数）と記載する場合もあるとする。第ｎの差分情報に含まれる変更文データを、第ｎの変更文データを記載する場合もあるとする。第ｎの変更文データの適用対象の語句データを、第ｎの語句データと記載する場合もあるとする。文書データに対し、第ｎの差分情報を適用することに生成される構造化文書を、第ｎの構造化文書と記載する場合もあるとする。
【００１８】
図２は、変更対象の文書データと、当該文書データの変更について変更履歴データから抽出される変更文データを例示する。図２には、ＪＳＯＮによる文書データが一例として示されているが文書データはＪＳＯＮによるものに限定されない。ＪＳＯＮには、「名前」のデータ（名前データとも記載する）と「値」のデータ（値データとも記載する）が含まれる。なお、名前データと値データは語句データの例である。
【００１９】
図２に示す一例においては、「ｂｏｏｋｓ」、「ｂｏｏｋ」は名前データであり、「ａ」、「ｂ」、「ｃ」は値データである。「ｂｏｏｋ」は「ｂｏｏｋｓ」に属するデータであり、「ａ」、「ｂ」、および「ｃ」は「ｂｏｏｋ」の各具体例となるデータである。一般名詞「ｂｏｏｋ」（本）に対し、例えば本のタイトルである固有名詞「ａ」、「ｂ」、「ｃ」が関連付けられている。値データは、その一般的概念を表す名前データと、例えば「：」を用いて関連付けられ、「：」に隣接して順番に示される。これらの値データ「ａ」等は、「ｂｏｏｋ」によりラベリングされる集合に属するものといえることから、名前データ「ｂｏｏｋ」に属する。
【００２０】
図２には、２つの変更文データ（変更文データＸ、Ｙ）が例示されている。「ｐａｔｈ」は、変更対象の語句データの、構造化文書における所属先を示す所属情報（パス）を指す。ネスト構造において、ある語句データ（語句データＡとする）に別の語句データ（語句データＢとする）が直接的に属する場合、語句データＢの階層は語句データＡの階層よりも１つ下である。この場合、所属情報において、語句データＡと語句データＢとの間には「／」が付される。例えば、図２に示される「／ｂｏｏｋｓ／ｂｏｏｋ」は、文書データに名前データ「ｂｏｏｋｓ」が属し、且つ名前データ「ｂｏｏｋｓ」に名前データ「ｂｏｏｋ」が属することを表す。「／」が２つであることから、「ｂｏｏｋ」の階層の深さは２である。
【００２１】
値データ「ａ」等の所在は、名前データ「ｂｏｏｋ」の所属情報と、名前データ「ｂｏｏｋ」における順番により表される。図２に示す変更文データＸにおける「／ｂｏｏｋｓ／ｂｏｏｋ／３」は、名前データ「ｂｏｏｋｓ」に属する名前データ「ｂｏｏｋ」の３番目の要素の値データを指す所属情報である。この所属情報の「／」は３つであるため、対応する所属情報により所在が示される値データは、深さ３の階層にある。図２の変更対象の文書データを参照すると、上記パスにより所在が示される、深さ３の階層にある値データは「ｃ」である。
【００２２】
変更文データにおいて、「ｓｒｃ」、「ｄｓｔ」は、それぞれ変更対象の語句データの変更前のデータ、変更対象の文言データの変更後のデータを指す。図２の２つの変更文データのうち「“ｓｒｃ”：“ｂｏｏｋ”，“ｄｓｔ”：“ｍａｎｕａｌ”」を含む変更文データＸは、名前データを「ｂｏｏｋ」から「ｍａｎｕａｌ」に変更させるための変更文データである。
【００２３】
同様に、「“ｓｒｃ”：“ｃ”，“ｄｓｔ”：“ｄ”」を含む変更文データＹは、名前データ「ｂｏｏｋ」に属する３番目の値データ「ｃ」を、値データ「ｄ」に変更させるための変更文データである。
【００２４】
以下、図３、４を参照し、文書データに対し、図２に示す変更文データＸ、Ｙが、この順番で適用される場合について説明する。
【００２５】
図３は、変更文データＸを適用することにより変更された文書データと変更文データを示す。変更文データＸの適用により、文書データにおいて名前データ「ｂｏｏｋｓ」に属する名前データ「ｂｏｏｋ」は、名前データ「ｍａｎｕａｌ」へ変更される。また、この変更文データＸにより、変更文データＹに含まれる所属情報における「ｂｏｏｋ」は「ｍａｎｕａｌ」へ変更される。
【００２６】
図４は、変更文データＹの適用により変更された文書データを示す。この変更文データＹの適用により、文書データにおいて名前データ「ｂｏｏｋ」に属する値データ「ｃ」は値データ「ｄ」へと変更される。この変更文データＹは値データを変更するものであり、値データは所属情報には含まれない。このため、変更文データＹの適用により他の変更文データの所属情報の変更は行われない。
【００２７】
図１を参照すると、集約部１３は、差分取得部１２が抽出した差分情報中の変更文データを集約する。集約部１３による変更文データの集約は、変更命令毎に行われる。ある変更命令において、２つ以上の変更文データであって推移的な変更を指示するための変更文データが存在する場合に、集約部１３は、これら２つ以上の変更文データを１つに集約する。
【００２８】
図５は、集約について例示的に説明するための図である。図５に示す変更文データＰ「“ｐａｔｈ”：“／ｗｅｂｓｉｔｅ／ｕｓｅｒ／３”，“ｓｒｃ”：“Ｃ”，“ｄｓｔ”：“Ｎｏｎｅ”」は、「ｗｅｂｓｉｔｅ」に属する「ｕｓｅｒ」に属する３番目の「Ｃ」を消去するための変更文データである。また図５に示す変更文データＱ「“ｐａｔｈ”：“／ｗｅｂｓｉｔｅ／ｕｓｅｒ／３”，“ｓｒｃ”：“Ｎｏｎｅ”，“ｄｓｔ”：“Ｄ”」は、「ｗｅｂｓｉｔｅ」に属する「ｕｓｅｒ」において、３番目の値データとして「Ｄ」を追加するための変更文データである。これらの変更文データが上記の順番で用いられることにより、「ｗｅｂｓｉｔｅ」に属する「ｕｓｅｒ」に属する３番目の値データは、「Ｃ」から、「Ｎｏｎｅ」に対応する状態を経て、「Ｄ」へと推移することがわかる。「Ｎｏｎｅ」に対応する状態とは、何も語句が含まれない空の状態を指す。以下、該空のデータを、文言データとする場合がある。
【００２９】
図５において、変更文データＳ、Ｔのこの順番の組み合わせは、変更文データＲ「“ｐａｔｈ”：“／ｗｅｂｓｉｔｅ／ｕｓｅｒ／３”，“ｓｒｃ”：“Ｃ”，“ｄｓｔ”：“Ｄ”」と同等である。集約部１３は、変更文データＳ、Ｔのような１つにまとめることができる複数の変更文データをまとめ、１つの変更文データに書き換える。このように複数の変更文データをまとめる処理を、以下では、集約処理と記載する。
【００３０】
図１を参照すると、ソート部１４は、１つの文書データに対する１以上の変更命令の各々から取得される変更文データであって、集約部１３による処理後の変更文データを、適用対象の語句データの所在の階層の深さに応じて並び替える。本実施形態においては、ソート部１４は、階層の昇順に変更文データを並び替える。
【００３１】
ソース取得部１５は、入出力部１１を介して併合指示を受け付けると、記憶部１０から、更新対象となる元の文書データを取得する。
【００３２】
併合部１６は、ソース取得部１５が取得した文書データに対し、１以上の変更命令に係る各変更文データを、ソート部１４において並び替えられた順序に従って適用することにより、文書データを更新する。
【００３３】
併合部１６は、２つ以上の差分情報の各変更文データを、ソート部１４により並び替えられた順序に基づき、適用する。これにより、元の文書データにおいて、パスの階層が浅い語句データから順に更新されていく。
【００３４】
ここで、本実施形態において、パスの階層が浅い語句データに対する変更文データから順に適用される理由は、以下の通りである。もし併合装置１が、パスの階層がより深い語句データに対する変更文データを先に適用する場合、併合装置１は、最初に、最も深い階層のパスの語句データを探索する。この場合、ネスト構造が複雑であれば、先に実行される語句データの更新が遅延する可能性がある。一方、階層の浅いパスの語句データの更新が先に行われる場合、併合装置１は、ネスト構造を浅い階層から追跡し、その追跡結果を一時的に記憶するなどすることにより、次の更新対象となる語句データの所在の把握にその追跡結果を用いることができる。これにより、更新のための時間が短縮される。また、浅い階層のパスの語句データが更新により消去される場合、この語句データに属するデータに対し更新を先に行うことは更新時間を無駄に消費することになる。このため、本実施形態に係る併合装置１においては、階層が浅いパスの語句データから順に更新する。ただし、階層の深いパスの語句データの更新から先に行なわれてもよい。
【００３５】
併合部１６は、２つ以上の変更命令における各変更文データが、同じ語句データを変更対象とし、これら変更文データによる更新後の各語句データが互いに異なる場合、更新後の文書データに、これら変更文による更新後の各語句データを含ませる。このようにすることで、２つ以上の変更命令の活用が図られ、また更新後の文書データにおける、２つ以上の変更命令による更新後の各語句データの確認と選択の機会を、ユーザに与えることができる。
【００３６】
図６は、互いに異なる更新結果を得る２つの変更文データを、１つの語句データへ適用する場合における併合部１６の処理内容を例示する図である。元の文書データにおいて変更対象となる語句データは、「ｂｏｏｋｓ」に属する「ａｕｔｈｏｒ」である。この文書データから互いに異なる更新結果を生成する２つの変更命令による各結果を、変更結果Ａ、変更結果Ｂとする。変更結果Ａにおいては、「ａｕｔｈｏｒ」が「ｅｄｉｔｏｒ」に書き換えられている。変更結果Ｂにおいては、「ａｕｔｈｏｒ」が「ｄｏｃｔｏｒ」に書き換えられている。併合部１６は、パスが同一の語句データを変更対象とし、互いに異なる変更結果を生成する、２つ以上の変更命令の各々から取得される変更文データによる変更結果のいずれをも活用する。図６は、併合部１６が、「ａｕｔｈｏｒ」を「（“ｅｄｉｔｏｒ”  ｏｒ  “ｄｏｃｔｏｒ”）」へ書き換え、変更結果Ａ、Ｂを活用し、更新後のデータに「ｅｄｉｔｏｒ」も「ｄｏｃｔｏｒ」も含ませていることを示す。
【００３７】
併合部１６は、１つの変更命令においてある語句データが変更対象とされ、他の変更命令においてはこの語句データが変更対象とされない場合には、この語句データを変更対象とする変更命令に応じて、この語句データを書き換える。
【００３８】
図７は、複数の変更命令のうち、ある語句データを変更対象とする変更命令が１つだけである場合における併合部１６の処理方法を例示する。
【００３９】
併合部１６は、１つの変更命令に係る変更文データが、あるパスにおける語句データを変更する場合、同じパスにおける語句データを変更する他の変更命令に係る変更文データがないか判定する。併合部１６は、あるパスの語句データを変更する変更文データが１つしかない場合に、この変更文データを当該語句データに適用する。併合部１６は、１つの文書データに対する２つ以上の変更命令に係る各変更文データであって、同じパスの語句データを変更する変更文データをまとめてもよい。まとめた変更文データが１つの場合に、併合部１６は、当該変更文データを文書データへ適用してもよい。併合部１６は、ソート部１４が並べ替えた順に従って変更文データを適用し、変更前後の各語句データを候補として文書データに含ませていき、変更が１つの場合に、変更文データに基づいた語句データに更新してもよい。
【００４０】
図７は、名前データ「ａｕｔｈｏｒ」を「ｅｄｉｔｏｒ」へ更新する変更命令（変更命令Ａと記載する）と、値データ「ｆｏｏ」を「ｂａｒ」へ更新する変更命令（変更命令Ｂと記載する）がある場合の併合部１６による処理を示す。
【００４１】
図７に示す例においては、併合部１６は、ソート部１４が並べ替えた順に従い変更文データを適用する中で、変更命令Ａに対応する変更文データに従い変更された文書データ「ｅｄｉｔｏｒ」を、元の語句データ「ａｕｔｈｏｒ」と共に文書データに含ませる。そして、併合部１６は、この語句データに対する他の変更文データがないことから、変更後の「ｅｄｉｔｏｒ」を選択し、文書データから「ａｕｔｈｏｒ」を消去する。
【００４２】
図７に示す例においては、併合部１６は、１つの語句データに適用する変更文データが１つであるか、同じ語句データに適用する他の変更文データがないか判定する。「ｆｏｏ」を変更する変更文データは、変更命令Ｂに係る変更文データ以外にはないため、併合部１６は、この変更文データに従って、「ｆｏｏ」を「ｂａｒ」に変更する。
【００４３】
図７に示す例では、併合部１６は、名前データについては、更新前後のデータを候補として含ませ、値データについては、変更文が１つであることを確認後、更新を行っているが、併合部１６による変更方法はこれに限らない。
【００４４】
本実施形態においては、１つの語句データに対し、１つの変更文データがあった場合に、この変更文データに基づく変更が行われる。これにより、語句データについての変更命令が反映されると共に、ユーザが適切な語句データを選択する手間を省くことができる。しかし、併合部１６による変更命令の実行後の文書データは、変更前後の語句データを含んでいてもよい。別のユーザによる予期しない変更を防ぐためである。
【００４５】
併合部１６による処理結果は、記憶部１０に記憶されてもよい。
選択部１７は、各々が同じ語句データを互いに異なる語句データへ変更する２つ以上の変更文データに応じて併合部１６が候補として文書データに含ませた２つ以上の変更後の語句データの選択に係る処理を行う。選択部１７は、更新後の語句データに２つ以上の候補がある場合に、ユーザに２つ以上の候補のうちのいずれかを選択させるため、入出力部１１に対し表示指示を行う。
【００４６】
図８は、選択部１７からの表示指示に応じた、入出力部１１による表示内容を例示する。図８には、入出力部１１において、Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（ＧＵＩ）、Ｃｈａｒａｃｔｅｒ  ｕｓｅｒ  ｉｎｔｅｒｆａｃｅ（ＧＵＩ）が用いられる場合における各表示内容が例示される。この例においては、図６に示された「ｏｒ」で連結される２つの名前データ「ｅｄｉｔｏｒ」、「ｄｏｃｔｏｒ」が選択肢として示されている。ＧＵＩが用いられる場合には、ユーザは、これらの選択肢のうちのいずれかのラジオボタンに対し、選択のための入力を行うことができ、「ＯＫ」ボタンのクリックにより、入力内容が確定される。またＧＵＩが用いられる場合においては、ユーザは、「＞＞」の後に、「ｅｄｉｔｏｒ」を選択する場合には「１」、「ｄｏｃｔｏｒ」を選択する場合には「２」を入力し、Ｅｎｔｅｒキーを押すことにより、入力内容が確定される。
【００４７】
図９は、併合部１６による併合処理が行われるまでの、本実施形態に係る併合装置１による処理のフローを例示する。
【００４８】
図９に示すように、併合装置１における差分取得部１２は、記憶部１０に記憶される複数の変更命令の各々に係る情報から、各変更命令についての差分情報を抽出する（ステップＳ１００）。
【００４９】
図１０〜１２は、２つの変更命令があった場合における差分情報の抽出処理について具体的に説明するための図である。なお、２つの変更命令のうちの一方を変更命令Ａ、他方を変更命令Ｂとする。また元の文書データを文書データＳとする。
【００５０】
図１０には、変更命令Ａによる差分情報の抽出処理の具体例が示される。図１０に示されるように、文書データＳは、変更命令Ａにより、文書データＡ１から文書データＡ２、文書データＡ２から文書データＡ３へと書き換えられる。
【００５１】
図１０に示されるように、差分取得部１２は、文書データＳから文書データＡ１への変更のための変更文データを抽出する。この変更文データは、文書データＳにおいて「ｗｅｂｓｉｔｅ」に属する「ｕｓａｒ」を、「ｕｓｅｒ」へ書き換えるためのものである。
【００５２】
差分取得部１２は、文書データＡ１から文書データＡ２への変更のための変更文データを抽出する。この場合の変更文データは２つである。当該２つの変更文データのうちの一方は、文書データＡ１における「ｗｅｂｓｉｔｅ」に属する「ｕｓｅｒ」に属する、２番目の値データ「Ｂ」を「Ｃ」に変更する。他方は、同じく「ｕｓｅｒ」に属する、３番目の値データ「Ｃ」を削除する。
【００５３】
差分取得部１２は、文書データＡ２から文書データＡ３への変更のための変更文データを抽出する。この変更文データは、文書データＡ２において「ｗｅｂｓｉｔｅ」に属する「ｕｓｅｒ」を、「ａｃｃｏｕｎｔ」へ変更する。
【００５４】
図１１には、変更命令Ｂによる差分情報の抽出処理の具体例が示される。文書データＳは、変更命令Ｂにより、文書データＢ１から文書データＢ２、文書データＢ２から文書データＢ３へと書き換えられる。
【００５５】
差分取得部１２は、文書データＳから文書データＢ１への変更のための変更文データを抽出する。この場合の変更文データは３つである。このうちの１つ目は、「ｗｅｂｓｉｔｅ」に属する「ｕｓａｒ」に属する、１番目の値データ「Ａ」を「Ｂ」に変更する。２つ目は、同じく「ｕｓａｒ」に属する、２番目の値データ「Ｂ」を「Ｃ」に変更する。３つ目は、同じく「ｕｓａｒ」に属する、３番目の値データ「Ｃ」を削除する。
【００５６】
差分取得部１２は、文書データＢ１から文書データＢ２への変更のための変更文データを抽出する。この変更文データは、文書データＢ１において「ｗｅｂｓｉｔｅ」に属する「ｕｓａｒ」を、「ｕｓｅｒｓ」へ変更する。
【００５７】
差分取得部１２は、文書データＢ２から文書データＢ３への変更のための変更文データを抽出する。この変更文データは、文書データＢ２において「ｗｅｂｓｉｔｅ」に属する「ｕｓｅｒｓ」に属する３番目の値データとして、「Ｄ」を追加する。
【００５８】
図１２には、変更命令Ａに係る差分情報における変更文データ、変更命令Ｂに係る差分情報における変更文データが例示される。差分取得部１２により抽出された変更文データは、文書データの変更の順に差分情報に含まれる。
【００５９】
図１２に示す例によれば、変更命令Ａによる差分情報において、文書データＳを文書データＡ１に変更する変更文データ（変更文データＡ−１とする）が最初に含まれる。この差分情報において、次に、文書データＡ１を文書データＡ２に変更する２つの変更文データが含まれる。なお、この２つの変更文データの差分情報における順序は、どちらが先であってもよい。ここでは、上記の「Ｂ」を「Ｃ」に変更する変更文データを変更文データＡ−２、「Ｃ」を削除する変更文データを変更文データＡ−３とし、差分情報はこの順序でこれらの変更文データを含むものとする。また、この差分情報において、最後に、文書データＡ２を文書データＡ３に変更する変更文データ（変更文データＡ−４とする）が含まれる。
【００６０】
図１２に示す例によれば、変更命令Ｂによる差分情報において、文書データＳを文書データＢ１に変更する３つの変更文データが最初に含まれる。なお、この３つの変更文データの差分情報における順序は、任意である。ここでは、上記の「Ａ」を「Ｂ」に変更する変更文データを変更文データＢ−１、「Ｂ」を「Ｃ」に変更する変更文データを変更文データＢ−２、「Ｃ」を削除する変更文データを変更文データＢ−３とし、差分情報はこの順序でこれらの変更文を含むものとする。また、この差分情報において、次に、文書データＢ１を文書データＢ２に変更する変更文データ（変更文データＢ−４とする）が含まれる。また、この差分情報において、最後に、文書データＢ２を文書データＢ３に変更する変更文データ（変更文データＢ−５）が含まれる。
【００６１】
図９のフローチャートに示されるように、集約部１３は、差分情報に含まれる２つの変更文データについて、以下の条件が満たされる場合に、集約処理を行う（ステップＳ１０１）。以下の条件は、２つの変更文データの各適用対象の語句データが同一パスであることと、差分情報に先に含まれる変更文データによる変更後の語句データと、後に含まれる変更文データによる変更前の語句データが等しいことである。集約処理の詳細については後述する。
【００６２】
ソート部１４は、集約部１３による集約処理後の変更文データを、その変更文データの適用対象の語句データのパスの階層に基づき並び替える（ステップＳ１０２）。この並べ替えは、上述したように、階層の深さの昇順になるように行われる。
【００６３】
本実施形態においては、集約部１３によるステップＳ１０１の処理が、ソート部１４によるステップＳ１０２の処理に先立って実行されるが、この順番は逆であってもよい。
【００６４】
図１３は、ソート部１４による処理内容の一例を示す。ここに示す変更命令Ａに係る変更文データと変更命令Ｂに係る変更文データは、それぞれ図１２に例示された各変更文データに対し集約処理を行ったものである。図１２における変更文データＡ−１、Ａ−４は集約されており、これらの集約処理後の変更文は、図１３において変更文データＡ−１’である。また変更文データＢ−３、Ｂ−５は集約されており、これらの集約処理後の変更文データは、図１３においてＢ−３’である。
【００６５】
図１３に示されるように、変更文データＡ−１’、Ａ−２、Ａ−３における、変更対象の語句データのパスの階層は、それぞれ２、３、３である。
【００６６】
同様に、変更文データＢ−１、Ｂ−２、Ｂ−３’、Ｂ−４における、変更対象の語句データのパスの階層は、それぞれ３、３、３、２である。
【００６７】
変更命令Ａに係る各変更文データは、差分情報において、変更対象の語句データのパスの階層の昇順にソート前から並んでいる。このため、ソート前後で、変更文データＡ−１’、Ａ−２、Ａ−３の順番は変わらない。
【００６８】
変更命令Ｂに係る各変更文データは、ソート部１４により、変更対象の語句データのパスの階層の昇順に、変更文データＢ−４、Ｂ−１、Ｂ−２、Ｂ−３’の順に並べ替えられる。
【００６９】
図９を参照すると、併合部１６は、ソース取得部１５が取得した変更前の文書データに対し、ステップＳ１０２において並び替えられた順序に基づいて変更文データを適用する（ステップＳ１０３）。これにより、併合部１６は、１つの文書データに対し複数の変更命令を適用して生成される複数の文書データを併合する。
【００７０】
図１４は、ステップＳ１０１における集約部１３による処理の詳細を例示する。ここでは、集約部１３により、２つの変更命令の各々に係る変更文データの集約処理を行う場合を例に挙げ説明する。この２つの変更命令を変更命令Ａ、変更命令Ｂと記載する。集約部１３は、変更命令Ａ、Ｂの各々について、ステップＳ２００〜Ｓ２０２までの処理を実行する。例えば、集約部１３は、変更命令Ａに係る差分情報における変更文データについて、ステップＳ２００〜Ｓ２０２の処理を実行し、その後に変更命令Ｂに係る差分情報における変更文データについて、ステップＳ２００〜Ｓ２０２の処理を実行する。
【００７１】
ステップＳ２００において、集約部１３は、変更文データの集約化のための前処理を行う。前処理は、集約の際に変更文データにおけるパスの指定の誤りを防ぐための処理である。本実施形態における前処理は、ある変更文データの適用による名前データの変更に基づく、別の変更文データにおけるパスの変更がある場合、この変更後の当該別の変更文データにおけるパスを当該変更前のパスへ書き換える処理である。
【００７２】
図１５は、前処理のフローの一部を例示する。ｉは、差分情報における変更文データの順序に対応する１からＮまでの自然数である。またＮは１以上の自然数である。ｉ＝１の変更文データは、差分情報における最初の変更文データであり、ｉ＝Ｎの変更文データは、差分情報における最後の変更文データである。集約部１３は、１番目からＮ番目までの各変更文データに対し、この順番に、ステップＳ３００の処理を実行する。
【００７３】
集約部１３は、ｉ番目の変更文データが、名前データを変更対象としているか否かを判定する（ステップＳ３００）。なお、本実施形態では、名前データが変更対象であるかを判定し、値データが変更対象であるかを判定しない。本実施形態における変更文データには値データは含まれないが、名前データはパスの一部として含まれるからである。ただし、これに限定されず、名前データ以外にも値データがパスに含まれる場合、集約部１３は、ステップＳ３００における判定処理を行わず、ステップＳ３０１における処理を行ってもよい。
【００７４】
ｉ番目の変更文データが、名前データを変更対象としない場合（ステップＳ３００：Ｎｏ）、集約部１３は、ｉ番目の変更文データに対する前処理を終了し、ｉ＋１をｉに置き換え、ステップＳ３００の処理を行う。ｉ＝Ｎの場合における変更文データが名前データを変更対象としない場合、集約部１３は、図１４に示す集約処理を実行する（ステップＳ２０１）。この集約処理については後述する。  集約部１３は、ｉ番目の変更文データが名前データを変更対象とする場合（ステップＳ３００：Ｙｅｓ）、ｉ＋１〜Ｎ番目の各変更文データに対し、ステップＳ３０１の処理を実行する。集約部１３は、ステップＳ３０１の処理の終了後、ｉ＜Ｎの場合には、ｉ＋１をｉに置き換え、ステップＳ３００へと処理を戻し、ｉ＝Ｎの場合には、図１４に示す集約処理を実行する（ステップＳ２０１）。
【００７５】
図１６は、上記ステップＳ３０１における集約部１３による処理についての詳細を例示するフローチャートである。集約部１３は、ｉ＋１番目からＮ番目の各変更文データについて、図１６に示される、以下のステップＳ４００以降の処理を実行する。
【００７６】
集約部１３は、ｉ番目の変更文データの適用後の名前データのパスを、ｊ番目（ｉ＋１≦ｊ≦Ｎ）の変更文データにおけるパスが含むか否かを判定する（ステップＳ４００）。ｉ番目の変更文データの適用後の名前データのパスを、ｊ番目の変更文データにおけるパスが含まず（ステップＳ４００：Ｎｏ）、且つｊがＮより小さい場合、集約部１３は、ｊ＋１をｊに置き換え、ステップＳ４００へ処理を戻す。ｊ＝Ｎの場合には、集約部１３は、前処理を終了し、図１４に示すステップＳ２０１の集約処理を実行する。
【００７７】
ステップＳ４００における判定条件が満たされた場合（ステップＳ４００：Ｙｅｓ）、集約部１３は、ｊ番目の変更文データが、ｉ番目の変更文データの適用後の名前データを更に変更するかを判定する（ステップＳ４０１）。
【００７８】
ｊ番目の変更文データの適用により、ｉ番目の変更文データの適用後の名前データが更に変更されない場合（ステップＳ４０１：Ｎｏ）、集約部１３は、ｊ番目の変更文データにおけるパスをｉ番目の変更文データ適用前のものへ書き換える（ステップＳ４０２）。
【００７９】
集約部１３は、ｊ番目の変更文の識別子と書き換え前後の各パスを、互いに関連付けて一時的に記憶する（ステップＳ４０３）。このステップＳ４０３の処理は、後述する後処理のためである。なお、識別子は、差分情報における各変更文に対し一意的に与えられている数値、文字、又は記号等を含む値であり、上記Ａ−１等もこの識別子の一例である。なお、以下ではステップＳ４０３において一時的に記憶される情報を書換情報とも記載する。また、書換情報の一時的な記憶とは、例えば、後述する後処理の終了まで期間を指す。
【００８０】
なお、本実施形態においては、ステップＳ４０３の処理は、ステップＳ４０２の処理後に実行されているが、この順序は逆でもよい。
【００８１】
ステップＳ４０３の処理の実行後であって、ｊがＮより小さい場合、集約部１３は、ｊ＋１をｊに置き換え、ステップＳ４００へ処理を戻す。ｊ＝Ｎの場合には、集約部１３は、前処理を終了し、図１４に示すステップＳ２０１の集約処理を実行する。
【００８２】
ｊ番目の変更文データの適用により、ｉ番目の変更文データの適用後の名前データが更に変更される場合（ステップＳ４０１：Ｙｅｓ）、集約部１３は、ｊ＋１番目からＮ番目の各変更文データについて、ステップＳ４０４の処理を実行する。このステップＳ４０４の処理は、図１６に詳細が示されるステップＳ３０１の処理と同様である。
【００８３】
ステップＳ４０４のサブルーチン処理について、図１２に示す変更文データＡ−１から変更文データＡ−４に対し集約部１３による処理が行われる場合を例に挙げて説明する。このとき差分情報において、変更文データＡ−４の後に、「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」を含むパスを有する変更文データＡ−５が含まれているケースを想定して説明する。すなわち、変更文データＡ−５は、名前データ「ｗｅｂｓｉｔｅ」における名前データ「ａｃｃｏｕｎｔ」に含まれる語句データを変更対象とする。
【００８４】
集約部１３は、図１５におけるステップＳ３００において変更文データＡ−１の変更対象が名前データであると判定し、ステップＳ３０１の処理を開始し、変更文データＡ−２から変更文データＡ−４に対し、ステップＳ４００以降の処理を実行する。
【００８５】
この際に、変更文データＡ−２、Ａ−３は名前データを変更するものではないので、これらの変更文データについては、ステップＳ４０１の処理の後、ステップＳ４０２の処理とステップＳ４０３の処理が行われる。このとき、変更文データＡ−２、Ａ−３の各パスに含まれる「ｕｓｅｒ」は、ステップＳ４０２において「ｕｓａｒ」へと書き換えられ、ステップＳ４０３において、各識別子と書き換え前後の各パスが関連付けられ書換情報として記憶される。このとき変更文データＡ−２の場合においては、書換情報に含まれる書き換え前後のパスはそれぞれ「／ｗｅｂｓｉｔｅ／ｕｓｅｒ／２」、「／ｗｅｂｓｉｔｅ／ｕｓａｒ／２」である。
【００８６】
集約部１３は、ステップＳ４０１において変更文データＡ−４の適用により、変更文データＡ−１の適用後の名前データが更に変更されると判定する。具体的に、変更文データＡ−１の適用により「／ｗｅｂｓｉｔｅ／ｕｓａｒ」で示されるパスにおける名前データ「ｕｓａｒ」は「ｕｓｅｒ」に変更され、この「ｕｓｅｒ」は変更文データＡ−４の適用により「ａｃｃｏｕｎｔ」に変更される。
【００８７】
このため、変更文データＡ−４については、集約部１３は、ステップＳ４０１の処理後、ステップＳ４０４の処理を実行する。変更文データＡ−５におけるパスは、変更文データＡ−４により変更された名前データのパスを含むため、ステップＳ４０２において、パスにおける「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」は、「／ｗｅｂｓｉｔｅ／ｕｓａｒ」に書き換えられる。
【００８８】
なお、本実施形態においてステップＳ４０４におけるステップＳ４０２の処理において書き換え後のパスとされるものは、ｉ番目の変更文データの適用前の名前データのパスを含むものである。
【００８９】
ステップＳ４０４におけるステップＳ４０３の処理により、変更文データＡ−５について書き換え前後の各パスとして、「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」を含むパスと、「／ｗｅｂｓｉｔｅ／ｕｓａｒ」を含むパスが記憶される。書換情報には、変更文データＡ−２、Ａ−３における各パスに含まれる「／ｗｅｂｓｉｔｅ／ｕｓｅｒ」と、変更文データＡ−５におけるパスに含まれる「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」が、それぞれ同じ「／ｗｅｂｓｉｔｅ／ｕｓａｒ」に対応付けられる。
【００９０】
この場合、後の集約処理（ステップＳ２０１）と後処理（ステップＳ２０２）における文書データの整合等のために、集約部１３は、パスにおける「／ｗｅｂｓｉｔｅ／ｕｓａｒ」を「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」とを関連付ける。これに伴い、集約部１３は、変更文データＡ−２、Ａ−３についての書換情報における、書き換え前のパスに含まれる「／ｗｅｂｓｉｔｅ／ｕｓｅｒ」を「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」へと置き換える。
【００９１】
図１７は、集約部１３による前処理の実行前後の変更文データの具体例を示す図である。図１７を参照し、変更命令Ｂに係る変更文データに対し実行される前処理について説明する。図１７に示されるように、変更文データＢ―１から変更文データＢ−３は、パスの変更を伴わない、値データの変更に係るものである。一方、変更文データＢ−４は、名前データ「ｕｓａｒ」を「ｕｓｅｒｓ」へ変更するものであり、この変更に伴い、この名前データを指定するパスは「／ｗｅｂｓｉｔｅ／ｕｓａｒ」から「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ」になる。
【００９２】
差分情報において、変更文データＢ−４の次の変更文データＢ−５のパスには、変更文データＢ−４の適用後の名前データを指定するパス「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ」が含まれている。変更文データＢ−５は、変更文データＢ−４の変更対象の名前データの更なる変更を行うためのものではない。
【００９３】
集約部１３は、変更文データＢ−５における「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ」を、変更文データＢ−４の適用前の「／ｗｅｂｓｉｔｅ／ｕｓａｒ」へ書き換える。
【００９４】
図１４に示されるように、集約部１３は、上述した前処理（ステップＳ２００）の実行後に集約処理を実行する（ステップＳ２０１）。
【００９５】
図１８は、ステップＳ２０１の集約処理の詳細を例示するフローチャートである。集約部１３は、差分情報におけるｉ番目とｊ番目の各変更文データにおけるパスが一致し、且つ、ｉ番目の変更文データの適用後の語句データと、ｊ番目の変更文データの適用前の語句データが等しいかを判定する（ステップＳ５００）。ｉは、１からＮまでの自然数である。Ｎは、差分情報において含まれる変更文データの総数であり、１以上の自然数である。またｊは、ｉ＋１からＮの間の自然数である。集約部１３は、ステップＳ５００の処理に先立ち、ｉに１を格納し、ｊに２（＝ｉ＋１）を格納し、ステップＳ２０１の処理を開始する。
【００９６】
集約部１３は、ｉ番目とｊ番目の各変更文データにおけるパスが不一致、又は、ｉ番目の変更文データの適用後の語句データと、ｊ番目の変更文データの適用前の語句データが等しくない場合（ステップＳ５００：Ｎｏ）、ｊ＋１をｊに置き換える。この場合、処理は、ステップＳ５００の処理へ戻る。なお、ｊ＝Ｎの場合で、且つｉがＮより小さい場合、集約部１３は、ｉ＋１をｉに置き換え、ステップＳ５００の処理に戻る。ｉ＝Ｎの場合、集約部１３は、図１４に示すステップＳ２０１の処理を終了し、ステップＳ２０２の後処理を実行する。
【００９７】
集約部１３は、ｉ、ｊ番目の各変更文データにおけるパスが一致し、ｉ番目の変更文データの適用後の語句データとｊ番目の変更文データの適用前の語句データが等しい場合（ステップＳ５００：Ｙｅｓ）、ｉ番目の変更文データを変更する（ステップＳ５０１）。詳細には、集約部１３は、ｉ番目の変更文データにおいて、例えば図２に示されるように、「ｄｓｔ」として示される変更後の語句データを、ｊ番目の変更文データにおいて「ｄｓｔ」として示される変更後の語句データへ変更する。
【００９８】
２つ以上の変更文データの組み合わせが、あるパスで指定される語句データを推移的に変更するに対応する場合には、集約部１３は、これらを１つにまとめる。１つにまとめられた変更文データは、この組み合わせのうち１つも変更文の適用がされない場合の語句データから、この変更文データの組み合わせの適用がされた場合の語句データへの変更を指示するものとなる。この集約処理により、複数回の変更文データの適用を１回にまとめることができ、後の併合処理等の処理時間が短縮される。
【００９９】
集約部１３は、ｊ番目の変更文データを差分情報から削除する（ステップＳ５０２）。ｉ番目の変更文データにより、文書データにおいて、ｊ番目の変更文データによる変更結果が得られるからである。
【０１００】
図１９は、集約処理について具体的に説明するための図である。図１９に示されるように、差分情報において３番目の変更文データＢ−３と５番目の変更文データＢ−５の各パスは一致している。また変更文データＢ−３の適用後（ｄｓｔ）の語句データ「Ｎｏｎｅ」（語句データ「Ｎｏｎｅ」は、削除された空のデータを指すものとする）と、変更文データＢ−５の適用前の語句データ「Ｎｏｎｅ」とが等しい。
【０１０１】
このため、集約部１３は、ステップＳ５００における判定条件が満たされているものとして、ステップＳ５０１において、変更文データＢ−３における変更後の語句データ「Ｎｏｎｅ」を、変更文データＢ−５における変更後の語句データ「Ｄ」に変更する。この変更後の変更文データＢ−３の識別子は、Ｂ−３’へ置き換えられる。変更文データＢ−５は、ステップＳ５０２において削除される。
【０１０２】
また不図示であるが、変更文データＡ−１と変更文データＡ−４も集約化され、集約後の変更文データＡ−１’におけるパスは「／ｗｅｂｓｉｔｅ／ｕｓａｒ」、変更文データＡ−１’の適用前後の語句データはそれぞれ「ｕｓａｒ」、「ａｃｃｏｕｎｔ」となる。
【０１０３】
集約部１３は、ステップＳ２０１の処理後、前処理において書き換えた情報を元に戻す後処理を実行する（ステップＳ２０２）。
【０１０４】
図２０は、ステップＳ２０２の後処理の詳細を例示するフローチャートである。図２０において、集約部１３は、差分情報に含まれる変更文データの順番に、ステップＳ６００以降の処理を実行する。集約部１３は、ステップＳ２０２の開始の際にｉに１を格納する。
【０１０５】
集約部１３は、書換情報を参照し、差分情報中のｉ番目の変更文データの識別子が含まれているかを判定する（ステップＳ６００）。
【０１０６】
ｉ番目の変更文データの識別子が書換情報に含まれていない場合で（ステップＳ６００：Ｎｏ）、ｉがＮ’未満である場合には、集約部１３は、ｉ＋１をｉに置き換え、ステップＳ６００の処理へ戻る。Ｎ’は、集約処理後の、差分情報に含まれる変更文データの総数である。ｉ＝Ｎ’の場合には、図１４に示されるように、集約部１３による、１つの差分情報に対する処理は終了する。図１４におけるある差分情報に対する後処理（ステップＳ２０２）の後であって、他の差分情報について後処理が終了していない場合、集約部１３は、他の差分情報についてステップＳ２００以降の処理を実行する。他の差分情報についてステップＳ２０２の処理が終了に伴い、集約部１３は、処理を終了する。
【０１０７】
ｉ番目の変更文データの識別子が書換情報に含まれる場合（ステップＳ６００：Ｙｅｓ）、集約部１３は、この識別子に関連付けられ記憶されている、ステップＳ４０２の書き換え前後の各パスを参照する。集約部１３は、この記憶されている各パスに基づき、書き換え後のパスを書き換え前のパスへ変更する（ステップＳ６０１）。これにより、例えば、変更文データＡ−２におけるパス「／ｗｅｂｓｉｔｅ／ｕｓａｒ／２」は、変更文データＡ−１’の適用による変更に基づいた「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ／２」となる。
【０１０８】
図２１は、併合部１６による処理のフローを例示する。図２１に示す処理の際に、差分情報は、変更対象の語句データを指定するパスの階層の昇順に変更文データがソートされている。ここでは、２つの差分情報を用いて、併合処理を行う場合を例に挙げて説明する。２つの差分情報の一方を差分情報Ａ、他方を差分情報Ｂとする。２つの差分情報Ａ、Ｂにおける変更文データに含まれるパスの階層のうちの最も深い階層をＭとする。Ｍは１以上の自然数である。
【０１０９】
併合部１６は、差分情報Ａにおいて、パスの階層がｋの変更文データがあるかを判定する（ステップＳ７００）。なお、ステップＳ７００に先立ち、ｋには、最初に１が格納される。パスの階層がｋの変更文データが差分情報Ａ、Ｂに存在しない場合（ステップＳ７００：Ｎｏ）、併合部１６は、ｋ＋１をｋに置き換え、ステップＳ７００の処理に戻る。パスの階層がｋの変更文が差分情報Ａ、Ｂに存在する場合（ステップＳ７００：Ｙｅｓ）、併合部１６は、パスの階層がｋの変更文データの１つを処理対象として選択する（ステップＳ７０１）。ステップＳ７０１において併合部１６が選択した変更文データを変更文データＰと記載する。以下、変更文データＰが差分情報Ａに含まれる場合について説明する。
【０１１０】
併合部１６は、差分情報Ｂにおいて、パスの階層がｋの変更文データであって、変更文データＰのパスと同一のパスを含む変更文データがあるか否かを判定する（ステップＳ７０２）。ここで、パスの階層がｋで、変更文データＰのパスと同一のパスを含む、差分情報Ｂにおける変更文データを変更文データＱとする。変更文データＱがある場合（ステップＳ７０２：Ｙｅｓ）、併合部１６は、変更文データＰ、Ｑの適用後（ｄｓｔ）の各語句データが等しいか判定する（ステップＳ７０３）。変更文データＰ、Ｑの適用後の各語句データが等しい場合（ステップＳ７０３：Ｙｅｓ）、併合部１６は、変更文データＢを削除し（ステップＳ７０４）、差分情報Ａ、Ｂの適用対象の文書データに対し、変更文Ｐを適用する（ステップＳ７０５）。このとき、併合部１６は、変更文データＰ適用後の文書データに、変更文データＰ適用後の語句データ以外に、変更文データＰ適用前の語句データを含ませてもよい。なお、以下では差分情報Ａ、Ｂの適用対象の文書データを文書データＳと記載する。
【０１１１】
変更文データＰ、Ｑ適用後の各語句データが異なる場合（ステップＳ７０３：Ｎｏ）、併合部１６は、文書データＳに対し変更文データＰ、Ｑの各適用後の語句データを、変更後の文書データＳに候補として含ませる（ステップＳ７０６）。これらの候補は、例えば、図６において例示したように、互いに「ｏｒ」で結び付けられる。
【０１１２】
ここで、変更文データＰ、Ｑのいずれか一方が語句データを削除するためのものである場合、本実施形態においては、当該変更文データの適用はされず、他方の変更文データが適用される。
【０１１３】
併合部１６が、差分情報Ａ、Ｂの各変更文データの適用の際に、同一のパスについてステップＳ７０３〜Ｓ７０６の処理を行うことにより、１つの語句データに対する競合する複数の変更命令のいずれをも活用することができる。これにより、複数のユーザによる１つの語句データの更新において、一方のユーザによる更新のために他方のユーザによる更新結果が消去等される事態や、望まない更新結果が得られる事態を防ぐことができる。  併合部１６は、ステップＳ７０５又はステップＳ７０６による変更文データが、名前データを変更するためのものか否かを判定する（ステップＳ７０７）。併合部１６は、ステップＳ７０５、Ｓ７０６による変更文データが、名前データの変更に係るものでない場合（ステップＳ７０７：Ｎｏ）、ステップ７００へ処理を戻す。
【０１１４】
ステップＳ７０５、Ｓ７０６における変更文データＰ、Ｑが、名前データの変更に係る場合（ステップＳ７０７：Ｙｅｓ）、併合部１６は、変更前の名前データを指定するパスを、他の変更文データにおけるパスが含むか判定する（ステップＳ７０８）。併合部１６は、変更文データＰ、Ｑ適用前における名前データを指定するパスを含む他の変更文データが存在しない場合（ステップＳ７０８：Ｎｏ）、ステップ７００へ処理を戻す。
【０１１５】
変更文データＰ、Ｑ適用前における名前データを指定するパスを含む他の変更文データが存在する場合（ステップＳ７０８：Ｙｅｓ）、併合部１６は、この他の変更文データにおけるパスに対し、変更文データＰ又は変更文データＱを適用する（ステップＳ７０９）。この際に、併合部１６は、この他の変更文データにおける、変更文データＰ、Ｑの適用前の各パスと、適用後の各パスとを対応付け、一時的に記憶する。例えば、ステップＳ７０６において、変更文データＰ、Ｑの適用により名前データが変更され、これによりステップＳ７０９において、他の変更文データにおけるパスが変更される場合を考える。この場合、差分情報Ａにおいてパスが変更された変更文データと、差分情報Ｂにおいてパスが変更された変更文データが、変更前は同じパスであったにも関わらず、異なるパスとなっている可能性がある。このため、変更前には同じパスで、変更後は互いに異なるパスとなる、差分情報Ａ、Ｂの各変更文データにおけるパスについては、互いに関連付けておく。これにより、以降のステップＳ７０２において、差分情報Ａ、Ｂの各変更文において、本来同一であるはずのパスが異なるものとして扱われることが防止できる。
【０１１６】
ステップＳ７００〜Ｓ７０９の処理において、併合部１６は、２以上の差分情報における各変更文データを、パスの浅いものから順番に、併せて適用する。これにより、文書データにおいて、浅いパスで指定される語句データから深いパスで指定される語句データまでを、順番に、２つ以上の変更命令を活かしつつ、変更していくことができる。このため２つ以上の変更命令の活かした併合結果を得ることができる。
【０１１７】
このことについて、図１３を参照して具体的に説明する。例えば、変更命令Ａにおいては階層が浅いパスを含む変更文データから適用され、変更命令Ｂにおいては階層が深いパスから適用される場合を考える。変更命令Ａにおいては変更文データＡ−１、Ａ−３がこの順番で適用されるとし、変更命令Ｂにおいては変更文データＢ−３’、Ｂ−４がこの順番で適用されるとする。このときに変更文データＢ−３’が変更文データＡ−３より先に適用されると、変更文データＡ−３の適用対象の語句データ「Ｃ」が存在しなくなる。もし変更文データＡ−３が「Ｃ」を「Ｅ」に変更するためのものである場合には、変更文データＡ−３は活用されなくなる。同様に例えば、変更文データＡ−１’を変更文データＢ−４より先に適用することにより、変更文データＢ−４の適用対象である語句データ「ｕｓａｒ」がなくなってしまい、変更文データＢ−４を活かすことができなくなる。このようにパスの階層が揃っていない変更文データが適用されると、構造化文書の併合が適切にされず、ユーザにとっては意図しない結果を招くことになる。しかし、パスの階層が揃っている変更文データを適用する場合には、例えば浅い階層のパスで指定される語句データから順番に、変更命令Ａ、Ｂを活かしながら更新可能となり、変更結果も整合性が満たされる。その結果、構造化文書の併合が適切に行なわれる。
【０１１８】
併合部１６は、変更後の文書データＳにおいて、不要な語句データの候補が存在する場合に、これを消去する（ステップＳ７１１）。例えば、ステップＳ７０５において、変更文データＡの適用前の語句データが候補として、変更後の文書データＳに含まれるような場合に、併合部１６は、この語句データを削除する。
【０１１９】
併合部１６は、入出力部１１を介して、文書データにおける複数の候補の語句データの中から適切なものをユーザに選択させるための処理の実行を選択部１７に指示する（ステップＳ７１２）。
【０１２０】
図２２〜２５は、併合部１６による処理方法を例示する。この例において併合部１６は、図１３に例示した、ソート処理後の変更文データを用いて併合処理を行う。変更文データＡ−１’、Ａ−２、Ａ−３を含む差分情報を差分情報Ａとし、変更文データＢ−１、Ｂ−２、Ｂ−３’、Ｂ−４を含む差分情報を差分情報Ｂとする。
【０１２１】
この例において、差分情報Ａ、Ｂには、パスの階層が１の変更文データが存在せず、階層が２の変更文データが存在する。ここでは、最初のステップＳ７０１において、変更文データＡ−１’が選択される場合について説明する。
【０１２２】
ステップＳ７０２において、併合部１６は、階層２のパスで、変更文データＡ−１’におけるパスと同一のパスの変更文Ｂ−４があることから、ステップＳ７０３の処理を実行する。ステップＳ７０３において、併合部１６は、変更文データＡ−１’と変更文データＢ−４の各々の適用後の語句データが異なると判定する。この判定結果に応じて、併合部１６は、ステップＳ７０６において、変更対象の文書データ（文書データＳとする）に対し、変更文Ａ−１’、Ｂ−４を適用する。
【０１２３】
図２２に、変更対象の文書データＳを示す。ステップＳ７０６における変更文データＡ−１’、Ｂ−４の適用により、文書データＳにおける語句データ「ｕｓａｒ」は、２つの語句データの候補「ａｃｃｏｕｎｔ」、「ｕｓｅｒｓ」を含むデータ「“ａｃｃｏｕｎｔ”  ｏｒ  “ｕｓｅｒｓ”」に変更される。これにより、文書データＳは、文書データＳ１へと変更される。
【０１２４】
ステップＳ７０７において、併合部１６は、ステップＳ７０６において適用した変更文データが名前データの変更に係るものであると判定する。併合部１６は、ステップＳ７０８において、図２２に示すように、変更文データＢ−４の適用前の名前データ「ｕｓａｒ」のパスを含む、変更文データＢ−１、Ｂ−２、Ｂ−３が存在すると判定し、ステップＳ７０９の処理を実行する。併合部１６は、ステップＳ７０９において、変更文データＢ−１、Ｂ−２、Ｂ−３の各々のパスにおける「ｕｓａｒ」を、「ｕｓｅｒｓ」に変更する。
【０１２５】
なお、後の処理のために、併合部１６は、パス「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」とパス「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ／」とを対応付けて一時的に記憶する。
【０１２６】
併合部１６は、階層が２のパスを含む変更文データが他にないことから、階層が３の場合についてステップＳ７００以降の処理を行う。この処理について、図２１と図２３〜２５を参照し、説明する。なお、図２３以降においては既に適用済みの変更文データを記載しない。
【０１２７】
併合部１６は、ステップＳ７０１において変更文Ａ−２を選択するものとする。図２３を参照すると、変更文データＡ−２におけるパスの階層は、変更文データＢ−２におけるパスの階層と等しい。ここで併合部１６は、「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」と「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ／」を互いに対応付けて記憶している。このため併合部１６は、ステップＳ７０２において、変更文データＡ−２におけるパス「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ／２」と同一のパス「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ／」を含む変更文データＢ−２があると判定する。
【０１２８】
変更文データＡ−２、Ｂ−２の適用後の各語句データは互いに等しく、「Ｃ」であるため、併合部１６は、変更文データＢ−２を削除し、ステップＳ７０５において文書データＳ１に対し変更文データＡ−２を適用する。なお、この変更は、値データの変更であり、名前データの変更ではない。このため、差分情報における他の変更文データのパスの変更はされない。
【０１２９】
図２３に示される文書データＳ１は、３つの値データのうちの２番目の「Ｂ」が「Ｃ」へと変更され、文書データＳ２に変更される。
【０１３０】
次に、併合部１６はステップＳ７０１において変更文データＡ−３を選択する場合を考える。図２４を参照すると、変更文データＡ−３におけるパスの階層は、変更文データＢ−３’におけるパスの階層と等しい。上記の「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ」と「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ／」の対応から、変更文データＡ−３、Ｂ−３’における各パス「／ｗｅｂｓｉｔｅ／ａｃｃｏｕｎｔ／３」、「／ｗｅｂｓｉｔｅ／ｕｓｅｒｓ／３」は、ステップＳ７０２で一致する。
【０１３１】
変更文データＡ−３は、値データ「Ｃ」を削除するためのもので、変更文データＢ−３’は、この値データ「Ｃ」を「Ｄ」に変更するためのものである。このため、併合部１６は、ステップＳ７０６において、文言データＳ２に対し変更文データＢ−３’を適用する。これにより、図２４に示されるように文書データＳ２は文書データＳ３に変更され、文書データＳ２における値データ「Ｃ」は、文書データＳ３においては値データ「Ｄ」に変更されていることがわかる。
【０１３２】
併合部１６は、未だ適用されていない変更文データＢ−１をステップＳ７０１において選択し、ステップＳ７０５において変更文データＢ−１を文書データＳ３に適用する。変更文データＢ−１の適用により、図２５に示すように、文書データＳ３における値データ「Ａ」は「Ｂ」に変更され、文書データＳ３は文書データＳ４に変更される。
【０１３３】
図２６は、本実施形態に係る併合装置１のハードウェア構成を例示する。ここでは、併合装置１は、一般的なコンピュータとしてハードウェアを有し、併合装置１による処理は、以下に示すハードウェア２を具体的に利用することにより実行される。
【０１３４】
ハードウェア２は、互いにバス２４によって接続されたプロセッサ２０、メモリ２１、記憶装置２２、およびユーザインターフェース回路２３等を備える。
【０１３５】
プロセッサ２０は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
【０１３６】
メモリ２１は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、若しくは半導体メモリ等、又はこれらの組み合わせである。
【０１３７】
プロセッサ２０が、メモリ２１に記憶された各種プログラム（併合プログラムを含む）等を実行することにより、上記の差分取得部１２、集約部１３、ソート部１４、ソース取得部１５、併合部１６、および選択部１７の各機能が実現され得る。
【０１３８】
記憶装置２２は、例えばハードディスクドライブ、光ディスク装置等、又はこれらの組み合わせであり、また可搬型記憶媒体等が含まれてもよい。当該記憶装置２２により、上述した記憶部１０の機能が実現され得る。
【０１３９】
ユーザインターフェース回路２３は、例えば液晶やＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）等を用いる表示装置などの出力装置や、キーボードやマウス等の入力装置を、併合装置１に接続するための回路である。ユーザインターフェース回路２３と、これに接続された入力装置と出力装置等により、上記入出力部１１の機能が実現され得る。
【０１４０】
なお、上述した場合以外にも、図１に示す併合装置１の機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されてもよい。
【０１４１】
本実施形態に係る併合装置１は、複数の変更命令における各変更文データにおけるパスの階層に応じ、変更文データを並べ替える。併合装置１は、２以上の差分情報における各変更文データを、パスの浅い（又は深い）ものから順番に、併せて適用する。これにより、文書データにおいて、浅いパスで指定される語句データから深いパスで指定される語句データまでを、順番に、２つ以上の変更命令を活かしつつ、変更していくことができる。このため文書データの構造に即し、且つ２つ以上の変更命令の活かした併合結果を得ることができる。また、併合装置１は、２以上の差分情報の各々において、同一のパスの語句データを変更する変更文データがある場合に、これらの変更文データの適用結果のいずれも、変更後の文書データに盛り込むことにより活用する。これにより競合する２つ以上の変更命令がある場合でも、文書データを破壊せずに、これら変更命令を活かすことができる。
【０１４２】
また、併合装置１は、文書データの或る位置における文言データに対する変更文が１つの差分情報中に２つ以上存在し、これらの変更文を用いる変更が推移的なものである場合に、これらの変更文を集約する。これにより併合処理のための時間の短縮が図られる。
【０１４３】
本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施形態および変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。特許請求の範囲内およびそれと同等の発明の意義の範囲内で施される様々な変形も、本発明の範囲内とみなされる。
【符号の説明】
【０１４４】
１  併合装置
２  ハードウェア
１０  記憶部
１１  入出力部
１２  差分取得部
１３  集約部
１４  ソート部
１５  ソース取得部
１６  併合部
１７  選択部
２０  プロセッサ
２１  メモリ
２２  記憶装置
２３  ユーザインターフェース回路
【図１】
2019133534.tif 000003
【図２】
2019133534.tif 000004
【図３】
2019133534.tif 000005
【図４】
2019133534.tif 000006
【図５】
2019133534.tif 000007
【図６】
2019133534.tif 000008
【図７】
2019133534.tif 000009
【図８】
2019133534.tif 000010
【図９】
2019133534.tif 000011
【図１０】
2019133534.tif 000012
【図１１】
2019133534.tif 000013
【図１２】
2019133534.tif 000014
【図１３】
2019133534.tif 000015
【図１４】
2019133534.tif 000016
【図１５】
2019133534.tif 000017
【図１６】
2019133534.tif 000018
【図１７】
2019133534.tif 000019
【図１８】
2019133534.tif 000020
【図１９】
2019133534.tif 000021
【図２０】
2019133534.tif 000022
【図２１】
2019133534.tif 000023
【図２２】
2019133534.tif 000024
【図２３】
2019133534.tif 000025
【図２４】
2019133534.tif 000026
【図２５】
2019133534.tif 000027
【図２６】
2019133534.tif 000028