上記の目的を達成するため、本発明の一形態によれば、サーバからクライアントへ提供される、1又は複数の要素を構造化して構成される構造化文書データを更新する構造化文書データ更新方法において、前記サーバは、更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成し、前記生成した差分データを前記クライアントへ送信し、前記クライアントは、前記サーバから送信される差分データに基づいて、保有する構造化文書データを更新するようにした。
このような構造化文書データ更新方法では、サーバは、クライアントに対して、更新後の構造化文書データの全体を送信するのではなく、更新前の構造化文書データと更新後の構造化文書データとの差分のデータを生成して送信するだけで良い。このため、できるだけ少ないデータ量でクライアント側の構造化文書データを更新することができ、通信ネットワークの混雑を防止するとともに、サーバとクライアントとの間での構造化文書データの不一致期間を短縮することが可能となる。
また、上記の目的を達成するため、本発明の一形態によれば、サーバからクライアントへ提供される、1又は複数の要素を構造化して構成される構造化文書データを更新する構造化文書データ更新方法において、前記サーバは、更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成し、前記生成した差分データを前記クライアントへ送信し、前記クライアントにおいて、該差分データに基づいて、保有する構造化文書データが更新されるようにした。
このような構造化文書データ更新方法では、上記の一形態に係る発明と同様、サーバは、クライアントに対して、更新後の構造化文書データの全体を送信するのではなく、更新前の構造化文書データと更新後の構造化文書データとの差分のデータを生成して送信するだけで良い。このため、できるだけ少ないデータ量でクライアント側の構造化文書データを更新することができ、通信ネットワークの混雑を防止するとともに、サーバとクライアントとの間での構造化文書データの不一致期間を短縮することが可能となる。
また、本発明の一形態によれば、前記構造化文書データ更新方法において、更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成する際に、前記更新前及び更新後の構造化文書データの階層構造を表す階層情報に基づいて生成するようにした。
この場合には、更新前及び更新後の構造化文書データの階層構造を表す階層情報に基づいて差分データを生成することにより、更新前の構造化文書データと更新後の構造化文書データとの差分を容易に表すことが可能となる。
また、本発明の一形態によれば、前記構造化文書データ更新方法において、前記更新前の構造化文書データの階層情報と、前記更新後の構造化文書データの階層情報とに基づいて、前記更新前及び更新後の構造化文書データを構成する最上位の要素から配下の要素に向けて探索し、異なる要素が存在した場合に、該異なる要素とその配下の要素とを差分とした差分データを生成するようにした。
この場合には、更新前の構造化文書データと更新後の構造化文書データとの間に異なる要素が存在した場合に、その異なる要素とその配下の要素とを差分とみなして差分データを生成するため、探索に要する時間を短縮し、迅速に差分データを生成することができる。
また、本発明の一形態によれば、前記構造化文書データ更新方法において、前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素を第1の2次元配列に展開するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素を第2の2次元配列に展開し、前記第1の2次元配列の各列と前記第2の2次元配列の各列との一致の度合を検出し、前記一致の度合に基づいて、前記差分データを生成するようにした。
この場合には、更新前の構造化文書データの階層情報に基づく第1の2次元配列と、更新後の構造化文書データの階層情報に基づく第2の2次元配列との一致の度合に基づいて、差分データを生成することにより、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本発明の一形態によれば、前記構造化文書データ更新方法において、前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素と該要素の直下の要素とを特定する第1の部品を生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素と該要素の直下の要素とを特定する第2の部品を生成し、前記第1及び第2の部品の対応付けを行い、前記対応付けの結果に基づいて、前記差分データを生成するようにした。
この場合には、更新前の構造化文書データの階層情報に基づく部品と、更新後の構造化文書データの階層情報に基づく部品との対応付けの結果に基づいて、差分データを生成することにより、上記一形態に係る発明と同様、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本発明の一形態によれば、前記構造化文書データ更新方法において、前記更新前の構造化文書データの階層情報に基づいて、更新前の要素の構成パターンを要素がない場合を含め、最上位の要素を除外してて生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、更新後の要素の構成パターンを要素がない場合を含め、最上位の要素を除外して生成し、前記生成した更新前の要素の構成パターンの全てと更新後の要素の構成パターンの全てとを組み合わせ、前記各組み合わせにおいて、更新前の構造化文書を構成するノードから該組み合わせに対応する更新前の要素の構成パターンを削除するとともに、更新後の構造化文書を構成するノードから該組み合わせに対応する更新後の要素の構成パターンを削除し、前記削除後の更新前の構造化文書を構成するノードと更新後の構造化文書を構成するノードとにおいて、一致する要素が最も多い前記組み合わせに基づいて、前記差分データを生成するようにした。
この場合には、更新前と更新後で一致しない要素の組み合わせを容易に特定することができ、この組み合わせに基づいて、差分データを生成することにより、上記一形態に係る発明と同様、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
なお、要素の構成パターンとは、構造化文書データを構成する要素に要素なしを含め、最上位の要素を除外したものを1個乃至最大個数選択することによって得られる全ての組み合わせを指す。
また、本発明の一形態によれば、前記構造化文書データ更新方法において、前記構造化文書はXMLデータであり、前記差分データはXSLT(extensible stylesheets language transformations)データであり、前記階層情報はDOM(document object model )ツリーであるようにした。
構造化文書データがXMLデータの場合、更新前のXMLデータと更新後のXMLデータの差分は、XSLTデータにより表すことができる。また、DOMツリーは、XMLデータの階層構造を表す情報として標準的に用いられている。従って、このDOMツリーを利用して差分データであるXSLTデータを生成することにより、新たにXMLデータの階層構造を表す階層情報を定める必要がなく、本発明の汎用的な利用が可能となる。
また、上記の目的を達成するため、本発明の一形態によれば、クライアントへ1又は複数の要素を構造化して構成される構造化文書データを提供する情報提供サーバにおいて、更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成する差分データ生成手段と、前記生成された差分データを前記クライアントへ送信する差分データ送信手段とを備える。
このような情報提供サーバは、クライアントに対して、更新後の構造化文書データの全体を送信するのではなく、更新前の構造化文書データと更新後の構造化文書データとの差分のデータを生成して送信するだけで良い。このため、できるだけ少ないデータ量でクライアント側の構造化文書データを更新することができ、通信ネットワークの混雑を防止するとともに、サーバとクライアントとの間での構造化文書データの不一致期間を短縮することが可能となる。
また、本発明の一形態によれば、前記情報提供サーバにおいて、前記差分データ生成手段は、前記更新前及び更新後の構造化文書データの階層構造を表す階層情報に基づいて前記差分データを生成するようにした。
この場合には、更新前及び更新後の構造化文書データの階層構造を表す階層情報に基づいて差分データを生成することにより、更新前の構造化文書データと更新後の構造化文書データとの差分を容易に表すことが可能となる。
また、本発明の一形態によれば、前記情報提供サーバにおいて、前記差分データ生成手段は、前記更新前の構造化文書データの階層情報と、前記更新後の構造化文書データの階層情報とに基づいて、前記更新前及び更新後の構造化文書データを構成する最上位の要素から配下の要素に向けて探索し、異なる要素が存在した場合に、該異なる要素とその配下の要素とを差分とした差分データを生成するようにした。
この場合には、更新前の構造化文書データと更新後の構造化文書データとの間に異なる要素が存在した場合に、その異なる要素とその配下の要素とを差分とみなして差分データを生成するため、探索に要する時間を短縮し、迅速に差分データを生成することができる。
また、本発明の一形態によれば、前記情報提供サーバにおいて、前記差分データ生成手段は、前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素を第1の2次元配列に展開するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素を第2の2次元配列に展開し、前記第1の2次元配列の各列と前記第2の2次元配列の各列との一致の度合を検出し、前記一致の度合に基づいて、前記差分データを生成するようにした。
この場合には、更新前の構造化文書データの階層情報に基づく第1の2次元配列と、更新後の構造化文書データの階層情報に基づく第2の2次元配列との一致の度合に基づいて、差分データを生成することにより、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本発明の一形態によれば、前記情報提供サーバにおいて、前記差分データ生成手段は、前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素と該要素の直下の要素とを特定する第1の部品を生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素と該要素の直下の要素とを特定する第2の部品を生成し、前記第1及び第2の部品の対応付けを行い、前記対応付けの結果に基づいて、前記差分データを生成するようにした。
この場合には、更新前の構造化文書データの階層情報に基づく部品と、更新後の構造化文書データの階層情報に基づく部品との対応付けの結果に基づいて、差分データを生成することにより、上記一形態に係る発明と同様、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本発明の一形態によれば、前記情報提供サーバにおいて、前記差分データ生成手段は、前記更新前の構造化文書データの階層情報に基づいて、更新前の要素の構成パターンを要素がない場合を含め、最上位の要素を除外してて生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、更新後の要素の構成パターンを要素がない場合を含め、最上位の要素を除外して生成し、前記生成した更新前の要素の構成パターンの全てと更新後の要素の構成パターンの全てとを組み合わせ、前記各組み合わせにおいて、更新前の構造化文書を構成するノードから該組み合わせに対応する更新前の要素の構成パターンを削除するとともに、更新後の構造化文書を構成するノードから該組み合わせに対応する更新後の要素の構成パターンを削除し、前記削除後の更新前の構造化文書を構成するノードと更新後の構造化文書を構成するノードとにおいて、一致する要素が最も多い前記組み合わせに基づいて、前記差分データを生成するようにした。
この場合には、更新前と更新後で一致しない要素の組み合わせを容易に特定することができ、この組み合わせに基づいて、差分データを生成することにより、上記一形態に係る発明と同様、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本発明の一形態によれば、前記情報提供サーバにおいて、前記構造化文書はXMLデータであり、前記差分データはXSLTデータであり、前記階層情報はDOMツリーであるようにした。
構造化文書データがXMLデータの場合、更新前のXMLデータと更新後のXMLデータの差分は、XSLTデータにより表すことができる。また、DOMツリーは、XMLデータの階層構造を表す情報として標準的に用いられている。従って、このDOMツリーを利用して差分データであるXSLTデータを生成することにより、新たにXMLデータの階層構造を表す階層情報を定める必要がなく、本発明の汎用的な利用が可能となる。
以下、本発明の実施の形態を図面に基づいて説明する。図1は、本発明が適用されるXMLデータ更新システムの構成例を示す図である。同図に示すXMLデータ更新システム1は、提供対象のコンテンツである、1又は複数の要素(ノード)によって構成される構造化文書としてのXMLデータの保持及び公開を行うとともに、XMLデータの更新の際に、更新前のXMLデータと更新後のXMLデータとの差分の検出と差分データとしてのXSLTデータの生成を行うオリジンサーバ10と、該オリジンサーバ10からXMLデータの提供を受けるクライアントとしての移動機30と、これらオリジンサーバ10と移動機30とを接続する通信ネットワークとしてのインターネット40により構成される。
このXMLデータ更新システム1では、移動機30に提供されるXMLデータが更新される際、オリジンサーバ10は、更新前のXMLデータと更新後のXMLデータとの差分を表す差分データとしてのXSLTデータを生成し、移動機30へ送信する。移動機30は、このXSLTデータに基づいて、保持している更新前のXMLデータを更新し、更新後のXMLデータを保持する。
図2は、オリジンサーバ10の詳細な構成例である。同図に示すオリジンサーバ10は、コンテンツであるXMLデータの登録処理、クライアントである移動機30に対するXMLデータの配信処理、及びXMLデータが更新された場合に更新前のXMLデータと更新後のXMLデータとの差分を表すXSLTデータを生成し、移動機30へ提供する処理を行う。
このオリジンサーバ10は、ネットワークインタフェース部11、プロトコル部12、コンテンツ登録サーバ部13、コンテンツ保存部14、Webサーバ部15、更新検出部16、差分生成部17及びプッシュメッセージ作成部18を備える。
図3は、移動機30の詳細な構成例である。同図に示す移動機30は、オリジンサーバ10からのXMLデータの取得処理と、オリジンサーバ10からのXSLTデータに基づくXMLデータの更新処理とを行う。
この移動機30は、リクエスト作成部31、プロトコル部32、ネットワークインタフェース部33、コンテンツ制御部34及びコンテンツ保存部35を備える。
XMLデータの登録処理は、外部装置(図示せず)がオリジンサーバ10に対してXMLデータを送信することが契機となる。具体的には、外部装置は、例えばファイル転送プロトコルであるFTP(file transfer protocol)により、インターネット40、オリジンサーバ10内のネットワークインタフェース部11及びプロトコル部12を介してコンテンツ登録サーバ部13にアクセスする。
プロトコル部12は、パケットを取得すると、XMLデータを復原してコンテンツ登録サーバ13へ出力する。コンテンツ登録サーバ部13は、XMLデータを登録するためのFTPサーバアプリケーションによってXMLデータを受信し、外部装置からXMLデータが送信される毎に、そのXMLデータをコンテンツ保存部14に登録する。
なお、コンテンツ保存部14にあるXMLデータが既に登録されている場合に、更に、外部装置がそのXMLデータを更新したXMLデータを送信した場合には、コンテンツ登録サーバ部13は、既に登録されているXMLデータを削除や上書きすることなく、更新したXMLデータを登録するようにする。また、XMLデータが複数回更新された場合には、コンテンツ登録サーバ部13は、最新のXMLデータを新たに登録する。更新された古いXMLデータの保存数は予め決められており、この数を超えた場合には、古いXMLデータから順に削除される。従って、コンテンツ保存部14には、更新前のXMLデータと、更新後のXMLデータの双方が登録されることになる。
また、コンテンツ登録サーバ部13は、登録したXMLデータに対応する履歴ファイルを生成し、XMLデータに対応付けてコンテンツ保存部14に登録する。図4は、履歴ファイルの一例を示す図である。同図に示す履歴ファイルは、対応するXMLデータの登録日時、データ名及び対応するURL(uniform resource locator)により構成される。これらの情報のうち、登録日時は、更新したXMLデータが登録される毎に、書き換えられる。
オリジンサーバ10によるXMLデータの配信処理及び移動機30によるXMLデータの取得処理は、移動機30がオリジンサーバ10に対してXMLデータを取得することができるプロトコルを用いてメッセージ取得のためのリクエストを送信することが契機となる。具体的には、移動機30内のリクエスト作成部31は、プロトコル部32、ネットワークインタフェース部33、インターネット40、オリジンサーバ10内のネットワークインタフェース部11及びプロトコル部12を介してWebサーバ部15にアクセスし、HTTPリクエストを作成して出力する。このHTTPリクエストは、プロトコル部32によって通信プロトコルに応じたパケットに分割され、ネットワークインタフェース33及びインターネット40を介してオリジンサーバ10へ送信される。
オリジンサーバ10内のプロトコル部12は、ネットワークインタフェース部11を介して、このパケットを取得すると、HTTPリクエストを復原してWebサーバ部15へ出力する。
Webサーバ部15は、HTTPリクエストを取得すると、XMLデータを配信するためのHTTPサーバアプリケーション等を起動して、HTTPリクエスト内のURLを抽出し、更に移動機30が差分データの転送要求を行っているか否かを判定する。次に、Webサーバ部15は、コンテンツ保存部14に登録されている履歴ファイルを検索する。もし、その履歴ファイルの登録日時が差分データの転送要求メッセージに含まれる、移動機キャッシュデータの登録日時よりも新しい日時であった場合には、XMLデータが更新されたということであるから、Webサーバ部15は、差分生成部17に対してXSLTデータの生成を要求する。
差分生成部17は、移動機キャッシュデータの登録日時に対応する古いXMLデータと更新後のXMLデータとの差分に応じたXSLTデータを生成する。次に、差分生成部17は、その生成したXSLTデータをWebサーバ部15へ送る。Webサーバ部15は、差分生成部17から受信したXSLTデータをHTTPリプライに包含して出力する。もし、差分生成部17がXSLTデータの生成を失敗した場合には、更新後のXMLデータをコンテンツ保存部14から読み出し、XSLTデータでなく、この更新後のXMLデータをHTTPリプライに包含して出力する。
なお、XSLTデータのサイズが更新後のXMLデータのサイズよりも大きくなる場合が稀にあり得る。このため、差分生成部17は、生成したXSLTデータのサイズと更新後のXMLデータのサイズとを比較し、XSLTデータのサイズのほうが大きい場合には、更新後のXMLデータをプッシュメッセージ作成部18へ出力する。
プロトコル部12は、Webサーバ部15によって出力されたXMLデータを含むHTTPリプライを通信プロトコルに応じたパケットに分割し、ネットワークインタフェース部11及びインターネット40を介して移動機30へ送信する。
移動機30内のプロトコル部32は、このパケットを受信すると、XMLデータを復原し、コンテンツ制御部34へ出力する。コンテンツ制御部34は、取得したXMLデータをコンテンツ保存部35に格納する。
また、オリジンサーバ10内の更新検出部16は、逐次、コンテンツ保存部14に登録されているXMLデータが更新されたか否かを判定する。具体的には、更新検出部16は、履歴ファイルの登録日時が更新されたか否かを判定し、更新された場合には、その履歴ファイルに対応するXMLデータが更新されたものと判断する。
XMLデータが更新されている場合には、更新検出部16は、更新前のXMLデータと更新後のXMLデータとをコンテンツ保存部14から読み出して差分生成部17へ出力する。
差分生成部17は、入力した更新前のXMLデータと更新後のXMLデータとの差分を表すXSLTデータを生成する。XSLTデータの詳細な生成方法は、後述する。差分生成部17は、生成したプッシュメッセージ作成部18へ出力する。
なお、XSLTデータのサイズが更新後のXMLデータのサイズよりも大きくなる場合が稀にあり得る。このため、差分生成部17は、生成したXSLTデータのサイズと更新後のXMLデータのサイズとを比較し、XSLTデータのサイズのほうが大きい場合には、更新後のXMLデータをプッシュメッセージ作成部18へ出力する。
プッシュメッセージ作成部18は、入力したXSLTデータあるいは更新後のXMLデータを包含したプッシュメッセージを作成し、出力する。このプッシュメッセージは、プロトコル部12によって通信プロトコルに応じたパケットに分割され、ネットワークインタフェース11及びインターネット40を介して移動機30へ送信される。
移動機30内のプロトコル部32は、このパケットを受信すると、プッシュメッセージを復原し、コンテンツ更新部34へ出力する。コンテンツ更新部34は、取得したプッシュメッセージに基づいて、コンテンツ保存部35に格納されているXMLデータを更新する。
次に、差分生成部17によるXSLTデータの詳細な生成方法を説明する。図5は、更新前のXMLデータのDOMツリー及び更新後のXMLデータのDOMツリーの一例を示す図である。同図に示すDOMツリー100は、更新前のXMLデータの階層構造を表す。同様に、DOMツリー200は、更新後のXMLデータの階層構造を表す。
更新前のXMLデータのDOMツリー(以下「更新前DOMツリー」と称する)100内の各ノード(ノードA〜ノードJ)と、更新後のXMLデータのDOMツリー(以下「更新後DOMツリー」と称する)200内の各ノード(ノードA、C、E、F、G、H、I、J、1〜5)は、ルートノードであるノードAからの経路(XPath)と、直上のノード(親ノード)の配下に存在する全てのノード(子ノード)内における順位により特定される。子ノード内における順位は、XMLデータにおける子ノード間の記述順を示す。
例えば、更新前DOMツリー100のノードHは、XPath=A/C/F/Hと、ノードFを親ノードとする子ノード(ノードH、I)内における順位(1番目)により特定される。
差分生成部17は、更新前DOMツリー100と更新後DOMツリー200とを比較したときに、各ノードについてXPath及び子ノード内の順位が異なっている場合には、XSLTデータにその旨の情報を含ませる必要がある。
以下、第1実施例乃至第3実施例においては、図5に示す更新前DOMツリー100及び更新後DOMツリー200を例に説明する。
(第1実施例)
まず、更新前のXMLデータのDOMツリーと更新後のXMLデータのDOMツリーとを、ルートノードから配下のノードに向けて探索し、異なるノードが存在した場合に、当該異なるノードとその配下のサブツリー(部分木)とを差分としたXSLTデータを生成する方法(第1のXSLTデータ生成方法)について説明する。
第1のXSLTデータ生成方法では、差分生成部17は、更新前DOMツリーのルートノードから配下のノードに向けて探索するとともに、更新後DOMツリーのルートノードから配下のノードに向けて探索し、差異のあるノードを認識する。
ここでは、差分生成部17は、変更前DOMツリー100を基準として探索すると、ノードBとその配下のサブツリーが削除されたことを認識する。また、差分生成部17は、ノードDとその配下のサブツリーが削除され、ノードFとその配下のサブツリーが削除されたことを認識する。
一方、差分生成部17は、変更後DOMツリー200を基準として探索すると、ノード1とその配下のサブツリーが追加され、当該ノード1の追加位置がノードAの第1子ノードであることを認識する。また、差分生成部17は、ノード2とその配下のサブツリーが追加され、当該ノード2の追加位置がノードAの第2子ノードであること、及び、ノード5とその配下のサブツリーが追加され、当該ノード5の追加位置がノードCの第1子ノードであることを認識する。
次に、差分生成部17は、上述した削除されたノード及び追加されたノードの情報を用いて、差分情報としてのXSLTデータを生成する。
具体的には、差分生成部17は、更新前DOMツリー100のノードBのXPathがA/Bであり、当該ノードBとその配下のサブツリーが削除されたことを示すXSLTデータを生成する。同様に、差分生成部17は、更新前DOMツリー100のノードDのXPathがA/Dであり、当該ノードDが削除されたこと、及び、更新前DOMツリー100のノードFのXPathがA/C/Fであり、当該ノードFが削除されたことを示すXSLTデータを生成する。
また、差分生成部17は、更新後DOMツリー200のノード1のXPathがA/1であり、当該ノード1とその配下のサブツリーが追加されたことを示すXSLTデータを生成する。同様に、差分生成部17は、更新後DOMツリー200のノード2のXPathがA/2であり、当該ノード2が追加されたこと、及び、更新後DOMツリー200のノード5のXPathがA/C/5であり、当該ノード5が追加されたことを示すXSLTデータを生成する。
上述した第1のXSLTデータ生成方法を採用する場合には、更新前のXMLデータのDOMツリーと更新後のXMLデータのDOMツリーとの間に異なるノードが存在した場合に、その異なるノードとその配下の全てのノードとを差分とみなしてXSLTデータが生成されるため、探索に要する時間を短縮し、迅速にXSLTデータを生成することができる。
(第2実施例)
次に、更新前のXMLデータのDOMツリーを第1の2次元配列に展開するとともに、更新後のXMLデータのDOMツリーを第2の2次元配列に展開し、これら第1及び第2の2次元配列の各列の一致の度合に基づいて、XSLTデータを生成する方法(第2のXSLTデータ生成方法)について説明する。
第2のXSLTデータ生成方法では、差分生成部17は、更新前DOMツリー100を2次元配列(以下「更新前2次元配列」と称する)に展開するとともに、更新後DOMツリー200を2次元配列(以下「更新後2次元配列」と称する)に展開する。
図6は、DOMツリーの展開により得られる2次元配列の一例を示す図である。同図に示す更新前2次元配列101と更新後2次元配列201の各列は、ルートノードAから配下の全てのノードに至る経路を示し、左側の方が同一階層における順位の高いノードを含むようになっている。
次に、差分生成部17は、更新前2次元配列101の各列と送信後2次元配列201の各列との一致の度合を検出する。具体的には、差分生成部17は、更新前2次元配列101の各列と送信後2次元配列201の各列の順列を導出する。例えば、更新前2次元配列101の最も左側の列(第1列)は、ノードA、B、Eの順で構成されている。このため、更新前2次元配列101の第1列については、ノードA、B、Eからなる組、ノードA、Bからなる組、ノードA、Eからなる組、ノードAからなる組、ノードB、Eからなる組、ノードBからなる組及びノードEからなる組の7つの順列が導出される。
次に、差分生成部17は、導出した順列を比較することにより、更新前2次元配列の各列と送信後2次元配列の各列とについて、一致の度合が高い列同士を対応させる。
ここでは、差分生成部17は、更新前2次元配列101の第1列と更新後2次元配列201の第1列とがともにノードA、Eからなる順列を有しているので、これらの列を対応させる。また、差分生成部17は、更新前2次元配列101の第2列と更新後2次元配列201の第5列とがともにノードA、Cからなる順列とノードF、Hからなる順列を有しているので、これらの列を対応させる。同様に、差分生成部17は、更新前2次元配列101の第3列と更新後2次元配列201の第6列とがともにノードA、Cからなる順列とノードF、Iからなる順列を有しているので、これらの列を対応させる。更に、差分生成部17は、更新前2次元配列101の第4列と更新後2次元配列201の第7列とがともにノードA、C、G、Iからなる順列を有しているので、これらの列を対応させる。
このように、更新前2次元配列の各列と送信後2次元配列の各列とを対応させた後、差分生成部17は、更新前2次元配列において完全一致しているために対応付けされた列を2つずつ選択し、これら選択した2つの列の位置が更新後に入れ替わっているか否かを判定する。例えば、更新前2次元配列の第1列と更新後2次元配列の第3列とが完全一致して対応付けられるとともに、更新前2次元配列の第3列と更新後2次元配列の第1列とが完全一致して対応付けられる場合を考える。この場合、更新前2次元配列の第1列が更新後2次元配列では第3列に移動し、更新前2次元配列の第3列が更新後2次元配列の第1列に移動したと考えることができ、列の入れ替えが生じていると判定される。
列の入れ替えが生じている場合、差分生成部17は、その旨を示す差分情報としてのXSLTデータを生成する。
次に、差分生成部17は、対応させた2つの列が完全一致していないものについて差異を検出し、その差異に基づいて、ノードの変更、挿入を認識するとともに、その挿入位置を弟ノードや兄ノードにより認識する。
ここでは、上述した対応付けにより得られた、更新前2次元配列101の第1列と更新後2次元配列201の第1列による対応、更新前2次元配列101の第2列と更新後2次元配列201の第5列による対応、更新前2次元配列101の第3列と更新後2次元配列201の第6列による対応及び更新前2次元配列101の第4列と更新後2次元配列201の第7列による対応のうち、更新前2次元配列101の第4列と更新後2次元配列201の第7列による対応以外は、2つの列が完全一致していない。
このため、差分生成部17は、まず更新前2次元配列101の第1列と更新後2次元配列201の第1列の差異を検討し、更新前2次元配列101の第1列のノードBが更新後2次元配列201の第1列ではノード1に変更されていることを認識する。また、差分生成部17は、更新前2次元配列101の第2列と更新後2次元配列201の第5列の差異を検討し、更新後2次元配列201の第5列にはノードCとノードFとの間にノード5が挿入されており、ノード5の弟ノードのXPathがA/C/Gであることを認識する。同様に、差分生成部17は、更新前2次元配列101の第3列と更新後2次元配列201の第6列の差異を検討し、更新後2次元配列201の第6列にはノードCとノードFとの間にノード5が挿入されており、ノード5の弟ノードのXPathがA/C/Gであることを認識する。
次に、差分生成部17は、更新前2次元配列の各列のうち、対応付けされていないもののノードの削除を認識する。ここでは、差分生成部17は、更新前2次元配列101において、対応付けされていない第5列のノードA、Dのうち、ルートノードAを除くノードDが削除されることを認識する。
次に、差分生成部17は、送信後2次元配列の各列のうち、対応付けされていないもののノードの追加を認識するとともに、その追加位置を弟ノードや兄ノードにより認識する。ここでは、差分生成部17は、更新後2次元配列201において、対応付けされていない第2列のノードA、2、3のうち、ルートノードAを除くノード2、3が追加され、ノード2の兄ノードのXPathがA/1であることを認識するとともに、対応付けされていない第3列のノードA、2、4のうち、ルートノードAを除くノード2、4が追加され、ノード2の兄ノードのXPathがA/1であることを認識する。更に、差分生成部17は、更新後2次元配列201において、対応付けされていない第5列のノードA、C、5、6のうち、ルートノードA、ノードCを除くノード5、6が追加され、ノード6の弟ノードのXPathがA/C/5/Fであることを認識する。
このようにして、ノードの変更、挿入、挿入位置、削除、追加及び追加位置を認識した後、差分生成部17は、これらの情報を集約し、差分情報としてのXSLTデータを生成する。
ここでは、差分生成部17は、ノードBからノード1への変更を示す情報を含んだXSLTデータを生成する。また、差分生成部17は、更新後2次元配列201の第2列のノード2、3が追加され、ノード2の兄ノードのXPathがA/1であること、及び、第3列のノード2、4が追加され、ノード2の兄ノードのXPathがA/1であることに基づいて、ノード1の弟ノードとしてのノード2を追加と、当該ノード2の直下における兄ノード3及び弟ノード4の追加を示す情報を上記生成したXSLTデータに追加する。
また、差分生成部17は、更新後2次元配列201の第5列においてノードCとノードFとの間にノード5が挿入されており、ノード5の弟ノードのXPathがA/C/Gであること、及び、更新後2次元配列201の第6列においてノードCとノードFとの間にノード5が挿入されており、ノード5の弟ノードのXPathがA/C/Gであることに基づいて、ノードCとノードFの間へのノード5の挿入と、当該ノード5がノードGの兄ノードであることを示す情報を上記生成したXSLTデータに追加する。
また、差分生成部17は、更新後2次元配列201の第5列のノード5、6が追加されており、ノード6の弟ノードのXPathがA/C/5/Fであることに基づいて、ノード5の直下におけるノードFの兄ノードとしてのノード6の追加を示す情報を上記生成したXSLTデータに追加する。更に、差分生成部17は、ノードDの削除を示す情報を上記生成したXSLTデータに追加する。
上述した第2のXSLTデータ生成方法を採用する場合には、更新前のXMLデータのDOMツリーに対応する第1の2次元配列と、更新後のXMLデータのDOMツリーに対応する第2の2次元配列との一致の度合に基づいて、XSLTデータを生成するため、挿入、追加、削除、変更等の対象となるノードの情報のみをXSLTデータに含ませることができ、XSLTデータ内の情報を必要最小限とすることができる。
(第3実施例)
次に、更新前のXMLデータのDOMツリーに基づいて1のノード(親ノード)と該1のノードの直下のノード(子ノード)とを特定する第1の部品を生成するとともに、更新後のXMLデータのDOMツリーに基づいて、1のノード(親ノード)と該1のノードの直下のノード(子ノード)とを特定する第2の部品を生成し、これら第1及び第2の部品の対応付けの結果に基づいて、XSLTデータを生成する方法(第3のXSLTデータ生成方法)について説明する。
第3のXSLTデータ生成方法では、差分生成部17は、更新前DOMツリー100を構成する全てのノードを1の親ノードと子ノードからなる部品に分割し、各部品の情報を含んだ部品データ表(以下「更新前部品データ表」)を生成する。同様に、差分生成部17は、更新後DOMツリー200を構成する全てのノードを1親ノードと子ノードからなる部品に分割し、各部品の情報を含んだ部品データ表(以下「更新後部品データ表」)を生成する。差分生成部17は、DOMツリーを構成する全てのノードを部品に分割する際、ルートノード及び直下に子ノードを有していないノード以外のノードが必ず1の部品の親ノードと他の部品の子ノードを経験するように、DOMツリーを部品に分割する。
図7は、部品の生成を説明するための図である。同図に示すように、更新前DOMツリー100は、親ノードA、子ノードB、C、Dからなる部品111、親ノードB、子ノードEからなる部品112、親ノードC、子ノードF、Gからなる部品113、親ノードF、子ノードH、Iからなる部品114、親ノードG、子ノードJからなる部品115に分割される。
一方、更新後DOMツリー200は、親ノードA、子ノード1、2、Cからなる部品211、親ノード1、子ノードEからなる部品212、親ノード2、子ノード3、4からなる部品213、親ノードC、子ノード5、Gからなる部品214、親ノード5、子ノード6、Fからなる部品215、親ノードG、子ノードJからなる部品216、親ノードF、子ノードH、Iからなる部品217に分割される。
図8は、部品データ表の一例を示す図である。同図に示す更新前部品データ表102及び更新後部品データ表202は、親ノードと子ノードからなる部品と、当該親ノードのXPathとが対応付けられている。なお、1の親ノードに対する子ノードが複数存在する場合、それらの子ノードは、順位が上のものが先に記述される。
図8において、例えば、部品データ表102の第3行には、親ノードCと子ノードF、Gからなる部品と、親ノードCのXPathであるA/Cとが対応付けられている。
このように部品データ表を生成した後、差分生成部17は、更新前部品データ表の部品と、更新後部品データ表の部品とを比較し、ノードが完全一致する部品を対応付けするとともに、その部品に対応するXPathを比較し、一致しているか否かを認識する。
ここでは、差分生成部17は、更新前部品データ表102内の第4行の部品114と、部品データ表202内の第7行の部品217がともに親ノードF、子ノードH、Iからなる部品であるため、これらの部品114、217を対応付ける。更に、差分生成部17は、部品114に対応するXPathであるA/C/Fと、部品217に対応するXPathであるA/C/5/Fとを比較し、これらが一致していないことを認識する。
また、差分生成部17は、更新前部品データ表102内の第5行の部品115と、部品データ表202内の第6行の部品216がともに親ノードG、子ノードJからなる部品であるため、これらの部品115、216を対応付ける。更に、差分生成部17は、部品115に対応するXPathであるA/C/Gと、部品216に対応するXPathA/C/Gとを比較し、これらが一致していることを認識する。
次に、差分生成部17は、部品は完全一致するが、その部品に対応するXPathが異なる対応付けに基づいて、ノードの移動を示す情報を生成する。ここでは、部品114と部品217は完全一致するが、これら部品に対応するXPathはA/C/FとA/C/5/Fであり、異なっている。このため、差分生成部17は、親ノードFがノードCの直下からノード5の直下であってノード6の弟ノードとしての位置に移動し、子ノードH、Iもそれに伴って移動することを示す情報を生成する。
次に、差分生成部17は、差分生成部17は、更新前部品データ表の部品と、更新後部品データ表の部品とを比較し、ノードが部分一致する部品を対応付けする。
ここでは、差分生成部17は、更新前部品データ表102内の第1行の部品111と、部品データ表202内の第1行の部品211がともにノードAを親ノードとしており、対応するXPathがともにAであるため、これらの部品111、211を対応付ける。また、差分生成部17は、更新前部品データ表102内の第2行の部品112と、部品データ表202内の第2行の部品212がともに1つのノードBを子ノードとしており、対応するXPathがA/B、A/1であって部分一致するため、これらの部品112、212を対応付ける。更に、差分生成部17は、更新前部品データ表102内の第3行の部品113と、部品データ表202内の第4行の部品214がともにノードCを親ノードとし、2つの子ノードのうちの1つがノードGであり、対応するXPathがともにA/Cであって部分一致するため、これらの部品113、214を対応付ける。
次に、差分生成部17は、上記の部分一致する部品の対応付けと、その部品に対応するXPathとに基づいて、ノードの変更、追加、削除を示す情報を生成する。
ここでは、差分生成部17は、部品111(親ノードA、子ノードB、C、D)と部品211(親ノードA、子ノード1、2、C)の対応付けと、これらの部品に対応するXPath(ともにA)とに基づいて、ノードBのノード1への変更を示す情報、ノードAの直下であってノード1とノードCの間へのノード2の追加を示す情報、及び、ノードDの削除を示す情報を生成する。また、差分生成部17は、部品112(親ノードB、子ノードE)と部品212(親ノード1、子ノードE)の対応付けと、これらの部品に対応するXPath(A/BとA/1)とに基づいて、ノードBのノード1への変更を示す情報を生成する。更に、差分生成部17は、部品113(親ノードC、子ノードF、G)と部品214(親ノードC、子ノード5、G)の対応付けと、これらの部品に対応するXPath(ともにA/C)とに基づいて、ノードFのノード5への変更を示す情報を生成する。
次に、差分生成部17は、更新前部品データ表のうち対応付けされていない部品の追加を示す情報と、更新後部品データ表のうち対応付けされていない部品の削除を示す情報を生成する。
ここでは、更新前部品データ表102のうち対応付けされていない部品は存在しない。一方、更新後部品データ表202のうち対応付けされていない部品は、部品213、215である。
このため、差分生成部17は、部品213(親ノード2、子ノード3、4)、対応するXPath(A/2)及び前後の部品212、214に対応するXPath(A/1、A/C)に基づいて、ノードAの直下であってノード1とノードCの間へのノード2の追加と、該ノード2の直下における兄ノード3及び弟ノード4の追加を示す情報を生成する。また、差分生成部17は、部品215(親ノード5、子ノード6、F)、対応するXPath(A/C/5)及び後の部品216に対応するXPath(A/C/G)に基づいて、ノードCの直下においてノードGの兄ノードとしてのノード5の追加と、該ノード5の直下におけるノードFの兄ノードとしてのノード6の追加を示す情報を示す情報を生成する。
次に、差分生成部17は、後述した手順により生成したノードの移動、変更、追加、削除を示す情報を集約する。ここでは、差分生成部17は、ノードBのノード1への変更を示す情報が2つ存在するため、これらを1つに集約する。また、差分生成部17は、ノードAの直下であってノード1とノードCの間へのノード2の追加と、該ノード2の直下における兄ノード3及び弟ノード4の追加を示す情報と、ノードAの直下であってノード1とノードCの間へのノード2の追加を示す情報とを集約し、ノードAの直下であってノード1とノードCの間へのノード2の追加と、該ノード2の直下における兄ノード3及び弟ノード4の追加を示す情報を生成する。更に、差分生成部17は、親ノードFがノードCの直下からノード5の直下であってノード6の弟ノードとしての位置に移動し、子ノードH、Iもそれに伴って移動することを示す情報、ノードFのノード5への変更を示す情報、及び、ノードCの直下においてノードGの兄ノードとしてのノード5の追加を示す情報とを集約して、ノードCとノードFの間へのノード5の挿入と、当該ノード5がノードGの兄ノードであることを示す情報を生成する。
このような集約の結果、ノードの移動、変更、追加、挿入、削除を示す情報は、ノードBからノード1への変更を示す情報、ノードDの削除を示す情報、ノードAの直下であってノード1とノードCの間へのノード2の追加と、該ノード2の直下における兄ノード3及び弟ノード4の追加を示す情報、ノードCとノードFの間へのノード5の挿入と、当該ノード5がノードGの兄ノードであることを示す情報、及び、ノード5の直下におけるノードFの兄ノードとしてのノード6の追加を示す情報となる。差分生成部12は、これらの情報を含んだXSLTデータを生成する。
上述した第3のXSLTデータ生成方法を採用する場合には、更新前のXMLデータのDOMツリーに対応する部品と、更新後のXMLデータのDOMツリーに対応する部品との対応付けの結果に基づいて、XSLTデータを生成するため、挿入、追加、削除、変更等の対象となるノードの情報のみをXSLTデータに含ませることができ、XSLTデータ内の情報を必要最小限とすることができる。
(第4実施例)
次に、第4のXSLTデータ生成方法を説明する。この第4のXSLTデータ生成方法では、更新前のXMLデータのDOMツリーに基づいて、更新前のノードの構成パターンをノードがない場合を含め、ルートノードを除外して生成するとともに、更新後のXMLデータのDOMツリーに基づいて、更新後のノードの構成パターンをノードがない場合を含め、ルートノードを除外して生成し、これら生成した更新前のノードの構成パターンの全てと更新後のノードの構成パターンの全てとを組み合わせ、各組み合わせにおいて、更新前の全てのノードの構成パターンから該組み合わせに対応する更新前のノードの構成パターンを削除するとともに、更新後の全てのノードの構成パターンから該組み合わせに対応する更新後のノードの構成パターンを削除し、削除後の更新前のノードの構成パターンと更新後のノードの構成パターンとにおいて、一致するノードが最も多い組み合わせに基づいて、XSLTデータを生成する。
本実施例においては、図9に示すように、更新前のXMLデータの階層構造がルードノードA、ルードノードAの子ノードとしてのノードB及びノードC、ノードCの子ノードとしてのノードDによって構成される更新前DOMツリー300であり、更新後のXMLデータの階層構造がルードノードA、ルードノードAの子ノードとしてのノード1及びノード2、ノード2の子ノードとしてのノード3及ノードDによって構成される更新後DOMツリー400である場合を例に説明する。
差分生成部17は、まず、更新前DOMツリーと更新後DOMツリーとに基づいて、ルートノードに変更がないか否かを判定する。ここでは、図9に示すようにルートノードは、更新前後で変更がなく、ともにノードAである。
差分生成部17は、ルートノードが更新前後で変更がないと判断すると、次に更新前DOMツリーに基づいて、更新前のノードの構成パターンをノードがない場合を含め、ルートノードを除外して生成する。
ここでは、更新前のXMLデータは、ノードA、B、C、Dからなる。このため、更新前のノードの構成パターンは、「ノードなし」、「ノードB」、「ノードC」、「ノードD」、「ノードB・C」、「ノードB・D」、「ノードC・D」、「ノードB・C・D」の8個になる。
同様に、差分生成部17は、更新後DOMツリーに基づいて、更新後のノードの構成パターンをノードがない場合を含め、ルートノードを除外して生成する。
ここでは、更新後のXMLデータは、ノードA、B、D、1、2、3からなる。このため、更新後のノードの構成パターンは、「ノードなし」、「ノードB」、「ノードD」、「ノード1」、「ノード2」、「ノード3」、「ノードB・D」、「ノードB・1」、「ノードB・2」、「ノードB・3」、「ノードD・1」、「ノードD・2」、「ノードD・3」、「ノード1・2」、「ノード1・3」、「ノード2・3」、「ノードB・D・1」、「ノードB・D・2」、「ノードB・D・3」、「ノードB・1・2」、「ノードB・1・3」、「ノードB・2・3」、「ノードD・1・2」、「ノードD・1・3」、「ノードD・2・3」、「ノード1・2・3」、「ノードB・D・1・2」、「ノードB・D・1・3」、「ノードB・D・2・3」、「ノードB・1・2・3」、「ノードD・1・2・3」、「ノードB・D・1・2・3」の32個になる。
次に、差分生成部17は、生成した更新前のノードの構成パターンのそれぞれと、更新後のノードの構成パターンのそれぞれとを組み合わせる。ここでは、更新前のノードの構成パターンは8個であり、更新後のノードの構成パターンは32個であるので、これらの組み合わせは図10に示すように256通りとなる。
なお、更新前のノード数をp、更新後のノード数をqとすると、更新前のルートノードと更新後のルートノードを除いたp+q−2個のノードからノードなしも含めた組み合わせを求めるため、その数は次式で表わされる。
図9の例では、p=4、q=6であるので、上記式によれば、256通りの組み合わせが得られる。
その後、差分生成部17は、図11のフローチャートに従った処理を行う。即ち、差分生成部17は、まず更新前のノードの構成パターンのそれぞれと、更新後のノードの構成パターンのそれぞれとの組み合わせから1組を選択する(ステップ101)。
次に、差分生成部17は、更新前のXMLデータを構成するノードから選択した組み合わせに含まれる更新前のノードの構成パターンを削除するとともに、更新後のXMLデータを構成するノードから選択した組み合わせに含まれる更新後のノードの構成パターンを削除する(ステップ102)。
上述したノードの削除後、差分生成部17は、削除後の更新前のXMLデータのノードと更新後のXMLデータのノードとが一致するか否かを判定する(ステップ103)。
削除後の更新前後のXMLデータのノードが一致する場合、差分生成部17は、一致するノード(削除後の更新前後のXMLデータのノードであり、以下「一致ノード」と称する)と、一致しないノード(選択した組み合わせに含まれるノードであり、以下、当該組み合わせに含まれる更新前のノードの構成パターンとしてのノードを「更新前差分ノード」と称し、当該組み合わせに含まれる更新後のノードの構成パターンとしてのノードを「更新後差分ノード」と称する)とを認識し(ステップ104)、一致ノードの数がこれまでで最大であるか否かを判定する(ステップ105)。
一致ノードの数がこれまでで最大である場合には、差分生成部17は、選択した組み合わせを最適な組み合わせであると判断する(ステップ106)。次に、差分生成部17は、全ての組み合わせについて、上述したステップ102乃至106の調査を行ったか否かを判定する(ステップ107)。また、ステップ103において、削除後の更新前のXMLデータのノードと更新後のXMLデータのノードとが一致しないと判定した場合と、ステップ105において、一致するノードの数がこれまでで最大でないと判断した場合も、同様に、差分生成部17は、全ての組み合わせについて、上述したステップ102乃至106の調査を行ったか否かを判定する(ステップ107)。
全ての組み合わせについて、上述したステップ102乃至106の調査が終了している場合には、差分生成部17は、一連の処理を終了する。一方、未調査の組み合わせがある場合には、差分生成部17は、その未調査の組み合わせから1組を選択し(ステップ101)、ステップ102以降の処理を繰り返す。
ここでは、図10に示す項番1乃至256の各組み合わせについて、図11のフローチャートに従った処理を行うと、項番90の組み合わせ(更新前のノードの構成パターンが「ノードC」、更新後のノードの構成パターンが「ノード1・2・3」の組み合わせ)が、ステップ102の処理による削除後の更新前後のXMLデータを構成するノードが何れもノードB、Dで一致し、且つ、一致するノードの数が2個で最大となる。従って、項番90の組み合わせが最適な組み合わせとして決定される。
最適な組み合わせが決定されると、次に、差分生成部17は、認識した差分ノードに基づいて、差分情報を生成する。
具体的には、差分生成部17は、更新前DOMツリーから最適な組み合わせに含まれる更新前のノードの構成パターンとしての差分ノードを削除した新たな更新前DOMツリーを生成するとともに、更新後DOMツリーから最適な組み合わせに含まれる更新後のノードの構成パターンとしての差分ノードを削除した新たな更新後DOMツリーを生成する。これら新たに生成される2つのDOMツリー(以下「削除後DOMツリー」は一致ノードのみによって構成されるので、同一のDOMツリーとなる。
次に、差分生成部17は、削除後DOMツリーにおいて、同一の親ノードと子ノードからなる組み合わせ(以下「親子ノード」称する)に着目し、この着目した親子ノードの間に削除前に差分ノードが存在していたか否かを判定する。削除後DOMツリーにおいて着目した親子ノードの間に削除前は更新前差分ノードが存在しており、且つ、更新後差分ノードが存在していたと判定された場合には、これら2つの差分ノードは異なる値となる。このため、差分生成部17は、更新前差分ノードから更新後差分ノードへの変更であると認識する。
一方、差分生成部17は、削除後DOMツリーにおいて着目した親子ノードの間に削除前は更新前差分ノードが存在しており、且つ、更新後差分ノードが存在していなかったと判定した場合には、更新前差分ノードの削除であると認識する。また、差分生成部17は、削除後DOMツリーにおいて着目した親子ノードの間に削除前は更新前差分ノードが存在しておらず、且つ、更新後差分ノードが存在していたと判定した場合には、更新後差分ノードの挿入であると認識する。このような手順により、一致ノードに挟まれている差分ノードについて、削除、変更、挿入が決定される。
次に、差分生成部17は、一致ノードで挟まれていない更新前差分ノードについて、当該更新前ノードの削除であると認識するとともに、一致ノードで挟まれていない更新後差分ノードについて、当該更新後差分ノードの追加であると認識する。
このようにして、ノードの削除、変更、挿入、追加を認識すると、次に、差分生成部17は、上述した認識結果に基づいて、差分情報を生成する。図12は、差分情報の項目を示す図である。同図に示すように、差分情報は、差分種別、基準ノード、相対位置、ノード情報により構成される。
差分種別は、ノードに対する処理が削除、変更、挿入、追加の何れかに該当するかを示す情報である。基準ノードは、差分種別が削除の場合には、その削除されるノードのXPath、差分種別が変更の場合には、その変更前のノードのXPath、差分種別が挿入の場合には、挿入されるノードの親ノードのXPathあるいは挿入されるノードの親ノード及び子ノードのXPath、差分種別が追加の場合には、追加されるノードの親ノードのXPathあるいは兄弟ノードのXPathである。また、相対位置は、差分種別が削除、変更の場合には、基準ノードと同一であり、差分種別が挿入、追加の場合には、基準ノードからの相対位置を示す情報である。また、ノード情報は、差分種別が削除の場合には不要であり、差分種別が変更の場合には変更後のノードの情報であり、差分種別が挿入、追加の場合には、その挿入、追加されるノードの情報である。
ここでは、図10に示す項番90の組み合わせが最適な組み合わせとして決定されているため、更新前差分ノードはノードCであり、更新後差分ノードはノード1、2、3である。このため、差分生成部17は、図9の更新前DOMツリー300からノードCを削除し、更新後DOMツリー400からノード1、2、3を削除することにより、削除後DOMツリーを生成する。図13は、削除後DOMツリーを示す図である。同図に示すように、削除後DOMツリー500は、ルートノードAと、当該ルードノードAの子ノードとしてのノードB及びノードDにより構成される。
次に、差分生成部17は、削除後DOMツリー500のノードAとノードBからなる親子ノードに着目し、当該親子ノードに削除前は更新後差分ノードとしてのノード1が存在していたため、ノードAとノードBの間にノード1が挿入されることを認識する。また、差分生成部17は、削除後DOMツリー500のノードAとノードDからなる親子ノードに着目し、当該親子ノードに削除前は更新前差分ノードとしてのノードCと更新後差分ノードとしてのノード2が存在していたため、ノードCがノード2に変更されることを認識する。更に、差分生成部17は、一致ノードで挟まれていない更新後差分ノードであるノード3について、ノードCの第1子ノードとして追加されることを認識する。
次に、差分生成部17は、図14に示すように、ノードAとノードBの間にノード1が挿入されることに対応して、基準ノード及び相対位置がノード1の親ノードであるノードAのXPathであり、ノード情報が挿入されるノード1のタイプと名前を示す情報である差分情報を生成する。また、差分生成部17は、ノードCがノード2に変更されることに対応して、基準ノード及び相対位置が変更前のノードであるノードCのXPathであり、ノード情報が変更後のノードであるノード2のタイプと名前を示す情報である差分情報を生成する。更に、差分生成部17は、ノードCの第1子ノードとしてのノード3が追加されることに対応して、基準ノードがノード3の親ノードであるノードCのXPathであり、相対位置が基準ノードであるノードCの第1子ノードであることを示す情報であり、ノード情報が追加されるノード3のタイプと名前を示す情報である差分情報を生成する。
差分情報の生成後、差分生成部17は、生成した差分情報の基準ノードに着目し、同一の基準ノードを有する差分情報を1つの差分情報にまとめる(差分情報のマージ)。ここでは、図14に示す差分情報が生成されているため、差分生成部17は、基準ノードがノードCのXPathである2つの差分情報を、図15に示すように1つの差分情報にまとめる。
このようにして差分情報を生成すると、次に、差分生成部17は、これら生成した差分情報に基づいて、XSLTデータを生成する。図16は、図14のノードAとノードBの間にノード1が挿入されることに対応した差分情報と、図15のマージ後の差分情報に基づいて生成されるXSLTデータを示す。
上述した第4のXSLTデータ生成方法によれば、更新前と更新後で一致しないノードの組み合わせを容易に特定することができ、その組み合わせに基づいて、差分データを生成することにより、挿入、追加、削除、変更等の対象となるノードの情報のみをXSLTデータに含ませることができ、XSLTデータ内の情報を必要最小限とすることができる。
このように、本実施形態のXMLデータ更新システム1では、移動機30に提供されるXMLデータが更新される際、オリジンサーバ10は、更新前のXMLデータと更新後のXMLデータとの差分を表すXSLTデータを生成し、移動機30へ送信し、当該移動機30は、このXSLTデータに基づいて、保持している更新前のXMLデータを更新し、更新後のXMLデータを保持する。
即ち、オリジンサーバ10は、移動機30に対して、更新後のXMLデータの全体を送信するのではなく、更新前のXMLデータと更新後のXMLデータとの差分のデータをXSLT形式で生成して送信するだけで良い。このため、できるだけ少ないデータ量で移動機30側のXMLデータを更新することができ、通信ネットワークの混雑を防止するとともに、オリジンサーバ10と移動機30との間でのXMLデータの不一致期間を短縮することが可能となる。
また、XMLデータは階層構造を有しているため、オリジンサーバ10は、更新前及び更新後のXMLデータの階層構造を表す情報として標準的に用いられているDOMツリーに基づいてXSLTデータを生成することにより、更新前のXMLデータと更新後のXMLデータとの差分を容易に表すことが可能となるとともに、新たにXMLデータの階層構造を表す情報を定める必要がなく、汎用的な利用が可能となる。
上記実施形態において、差分生成部17がXSLTデータ生成手段に対応し、ネットワークインタフェース部11、プロトコル部12及びプッシュメッセージ作成部18がXSLTデータ送信手段に対応する。
上述の如く、本願実施例によれば、サーバは、クライアントに対して、更新後の構造化文書データの全体を送信するのではなく、更新前の構造化文書データと更新後の構造化文書データとの差分のデータを生成して送信するだけで良い。このため、できるだけ少ないデータ量でクライアント側の構造化文書データを更新することができ、通信ネットワークの混雑を防止するとともに、サーバとクライアントとの間での構造化文書データの不一致期間を短縮することが可能となる。
また、本願実施例によれば、更新前及び更新後の構造化文書データの階層構造を表す階層情報に基づいて差分データを生成することにより、更新前の構造化文書データと更新後の構造化文書データとの差分を容易に表すことが可能となる。
また、本願実施例によれば、更新前の構造化文書データと更新後の構造化文書データとの間に異なる要素が存在した場合に、その異なる要素とその配下の要素とを差分とみなして差分データを生成するため、探索に要する時間を短縮し、迅速に差分データを生成することができる。
また、本願実施例によれば、更新前の構造化文書データの階層情報に基づく第1の2次元配列と、更新後の構造化文書データの階層情報に基づく第2の2次元配列との一致の度合に基づいて、差分データを生成することにより、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本願実施例によれば、更新前の構造化文書データの階層情報に基づく部品と、更新後の構造化文書データの階層情報に基づく部品との対応付けの結果に基づいて、差分データを生成することにより、上記実施例と同様、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本願実施例によれば、更新前と更新後で一致しない要素の組み合わせを容易に特定することができ、この組み合わせに基づいて、差分データを生成することにより、上記実施例と同様、挿入、追加、削除、変更等の対象となる要素の情報のみを差分データに含ませることができ、差分データ内の情報を必要最小限とすることができる。
また、本願実施例によれば、構造化文書データがXMLデータの場合、更新前のXMLデータと更新後のXMLデータの差分は、XSLTデータにより表すことができ、DOMツリーは、XMLデータの階層構造を表す情報として標準的に用いられているため、DOMツリーを利用して差分データであるXSLTデータを生成することにより、新たにXMLデータの階層構造を表す階層情報を定める必要がなく、本発明の汎用的な利用が可能となる。
以下、本発明により教示される手段を例示的に列挙する。
(1) サーバからクライアントへ提供される、1又は複数の要素を構造化して構成される構造化文書データを更新する構造化文書データ更新方法において、
前記サーバは、
更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成し、
前記生成した差分データを前記クライアントへ送信し、
前記クライアントは、
前記サーバから送信される差分データに基づいて、保有する構造化文書データを更新するようにした構造化文書データ更新方法。
(2) サーバからクライアントへ提供される、1又は複数の要素を構造化して構成される構造化文書データを更新する構造化文書データ更新方法において、
前記サーバは、
更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成し、
前記生成した差分データを前記クライアントへ送信し、前記クライアントにおいて、該差分データに基づいて、保有する構造化文書データが更新されるようにした構造化文書データ更新方法。
(3) 上記(2)に記載の構造化文書データ更新方法において、
更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成する際に、前記更新前及び更新後の構造化文書データの階層構造を表す階層情報に基づいて生成するようにした構造化文書データ更新方法。
(4) 上記(3)に記載の構造化文書データ更新方法において、
前記更新前の構造化文書データの階層情報と、前記更新後の構造化文書データの階層情報とに基づいて、前記更新前及び更新後の構造化文書データを構成する最上位の要素から配下の要素に向けて探索し、
異なる要素が存在した場合に、該異なる要素とその配下の要素とを差分とした差分データを生成するようにした構造化文書データ更新方法。
(5) 上記(3)に記載の構造化文書データ更新方法において、
前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素を第1の2次元配列に展開するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素を第2の2次元配列に展開し、
前記第1の2次元配列の各列と前記第2の2次元配列の各列との一致の度合を検出し、
前記一致の度合に基づいて、前記差分データを生成するようにした構造化文書データ更新方法。
(6) 上記(3)に記載の構造化文書データ更新方法において、
前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素と該要素の直下の要素とを特定する第1の部品を生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素と該要素の直下の要素とを特定する第2の部品を生成し、
前記第1及び第2の部品の対応付けを行い、
前記対応付けの結果に基づいて、前記差分データを生成するようにした構造化文書データ更新方法。
(7) 上記(3)に記載の構造化文書データ更新方法において、
前記更新前の構造化文書データの階層情報に基づいて、更新前の要素の構成パターンを要素がない場合を含め、最上位の要素を除外して生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、更新後の要素の構成パターンを要素がない場合を含め、最上位の要素を除外して生成し、
前記生成した更新前の要素の構成パターンの全てと更新後の要素の構成パターンの全てとを組み合わせ、
前記各組み合わせにおいて、更新前の構造化文書を構成するノードから該組み合わせに対応する更新前の要素の構成パターンを削除するとともに、更新後の構造化文書を構成するノードから該組み合わせに対応する更新後の要素の構成パターンを削除し、
前記削除後の更新前の構造化文書を構成するノードと更新後の構造化文書を構成するノードとにおいて、一致する要素が最も多い前記組み合わせに基づいて、前記差分データを生成するようにした生成するようにした構造化文書データ更新方法。
(8) 上記(3)乃至(7)の何れかに記載の構造化文書データ更新方法において、
前記構造化文書はXMLデータであり、前記差分データはXSLTデータであり、前記階層情報はDOMツリーである構造化文書データ更新方法。
(9) クライアントへ1又は複数の要素を構造化して構成される構造化文書データを提供する情報提供サーバにおいて、
更新前の構造化文書データと更新後の構造化文書データとの差分を表す差分データを生成する差分データ生成手段と、
前記生成された差分データを前記クライアントへ送信する差分データ送信手段と、
を備える情報提供サーバ。
(10) 上記(9)に記載の情報提供サーバにおいて、
前記差分データ生成手段は、前記更新前及び更新後の構造化文書データの階層構造を表す階層情報に基づいて、前記差分データを生成するようにした情報提供サーバ。
(11) 上記(10)に記載の情報提供サーバにおいて、
前記差分データ生成手段は、
前記更新前の構造化文書データの階層情報と、前記更新後の構造化文書データの階層情報とに基づいて、前記更新前及び更新後の構造化文書データを構成する最上位の要素から配下の要素に向けて探索し、
異なる要素が存在した場合に、該異なる要素とその配下の要素とを差分とした差分データを生成するようにした情報提供サーバ。
(12) 上記(10)に記載の情報提供サーバにおいて、
前記差分データ生成手段は、
前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素を第1の2次元配列に展開するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素を第2の2次元配列に展開し、
前記第1の2次元配列の各列と前記第2の2次元配列の各列との一致の度合を検出し、
前記一致の度合に基づいて、前記差分データを生成するようにした情報提供サーバ。
(13) 上記(10)に記載の情報提供サーバにおいて、
前記差分データ生成手段は、
前記更新前の構造化文書データの階層情報に基づいて、該更新前の構造化文書データを構成する要素と該要素の直下の要素とを特定する第1の部品を生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、該更新後の構造化文書データを構成する要素と該要素の直下の要素とを特定する第2の部品を生成し、
前記第1及び第2の部品の対応付けを行い、
前記対応付けの結果に基づいて、前記差分データを生成するようにした情報提供サーバ。
(14) 上記(10)に記載の情報提供サーバにおいて、
前記差分データ生成手段は、
前記更新前の構造化文書データの階層情報に基づいて、更新前の要素の構成パターンを要素がない場合を含め、最上位の要素を除外して生成するとともに、前記更新後の構造化文書データの階層情報に基づいて、更新後の要素の構成パターンを要素がない場合を含め、最上位の要素を除外して生成し、
前記生成した更新前の要素の構成パターンの全てと更新後の要素の構成パターンの全てとを組み合わせ、
前記各組み合わせにおいて、更新前の構造化文書を構成するノードから該組み合わせに対応する更新前の要素の構成パターンを削除するとともに、更新後の構造化文書を構成するノードから該組み合わせに対応する更新後の要素の構成パターンを削除し、
前記削除後の更新前の構造化文書を構成するノードと更新後の構造化文書を構成するノードとにおいて、一致する要素が最も多い前記組み合わせに基づいて、前記差分データを生成するようにした生成するようにした情報提供サーバ。
(15) 上記(10)乃至(14)の何れかに記載の情報提供サーバにおいて、
前記構造化文書はXMLデータであり、前記差分データはXSLTデータであり、前記階層情報はDOMツリーである情報提供サーバ。