(57)【特許請求の範囲】
【請求項１】
ネットワークを介して接続されたサーバとクライアントとを備えたネットワークサービスシステムにおいて、
前記クライアントは、
予め定められた正規化規則にしたがって正規化されたＸＭＬ文書を含む処理要求を前記サーバに送信する送信手段と、
前記サーバから前記処理要求に対する応答を受信する受信手段と、
前記サーバから受信した応答に含まれるデータをキャッシュする記憶手段と、
前記記憶手段にキャッシュされているキャッシュデータの情報を付加情報として前記処理要求に付加する情報付加手段とを備え、
前記サーバは、
前記クライアントに対して前記処理要求および前記応答の送受信を行う送受信手段と、
前記処理要求に対する処理を実行する処理手段と、
前記送受信手段により受信した前記処理要求に含まれる前記ＸＭＬ文書をキーとして記憶装置にキャッシュされているキャッシュデータを検索し、当該ＸＭＬ文書に対応するキャッシュデータが存在する場合に、当該キャッシュデータを前記送受信手段により前記処理要求の要求元へ送信し、当該ＸＭＬ文書に対応するキャッシュデータが存在しない場合に、前記処理手段の処理により生成されたデータを前記送受信手段により当該処理要求の要求元へ送信し、かつ当該ＸＭＬ文書をキーとして当該生成されたデータを当該記憶装置にキャッシュする代理手段とを備え、
前記代理手段は、受信した前記処理要求に付加されている前記付加情報が特定するキャッシュデータと自装置の前記記憶装置から検索されたキャッシュデータとが同一である場合に、当該処理要求の要求元に対して当該キャッシュデータに代えて当該キャッシュデータが前記クライアントにキャッシュされているキャッシュデータと同一であることを示す通知を送信することを特徴とするネットワークサービスシステム。
【請求項２】
ネットワークを介して接続されたサーバとクライアントとを備えたネットワークサービスシステムにおいて、
前記クライアントは、
予め定められた正規化規則にしたがって正規化されたＸＭＬ文書として処理要求を生成し、当該処理要求に当該ＸＭＬ文書のハッシュ値を付加する処理要求生成手段と、
前記ハッシュ値が付加された前記処理要求を前記サーバに送信し、当該サーバから当該処理要求に対する応答を受信する送受信手段と、
前記サーバから受信した応答に含まれるデータをキャッシュする記憶手段とを備え、
前記処理要求生成手段は、前記記憶手段にキャッシュされているキャッシュデータであって前記処理要求と同一の処理要求に対する応答として取得したキャッシュデータのハッシュ値を付加情報として前記処理要求にさらに付加し、
前記サーバは、
前記クライアントに対して前記処理要求および前記応答の送受信を行う送受信手段と、
前記処理要求に対する処理を実行する処理手段と、
前記送受信手段により受信した前記処理要求に付加されている前記ハッシュ値をキーとして記憶装置にキャッシュされているキャッシュデータを検索し、当該ハッシュ値に対応するキャッシュデータが存在する場合に、当該キャッシュデータを前記送受信手段により前記処理要求の要求元へ送信し、当該ハッシュ値に対応するキャッシュデータが存在しない場合に、前記処理手段の処理により生成されたデータを前記送受信手段により当該処理要求の要求元へ送信し、かつ当該ハッシュ値をキーとして当該生成されたデータを当該記憶装置にキャッシュする代理手段とを備え、
前記代理手段は、受信した前記処理要求に付加されている前記キャッシュデータのハッシュ値と自装置の前記記憶装置から検索されたキャッシュデータのハッシュ値とが同一である場合に、当該処理要求の要求元に対して当該キャッシュデータに代えて当該キャッシュデータが前記クライアントにキャッシュされているキャッシュデータと同一であることを示す通知を送信することを特徴とするネットワークサービスシステム。
【請求項３】
ネットワークを介してＷｅｂサービスを提供するサーバにおいて、
クライアントに対して処理要求および当該処理要求に対する応答の送受信を行う送受信部と、
前記送受信部により受信された前記処理要求に含まれる第１のＸＭＬ文書が予め定められた正規化規則にしたがって正規化されているか否かを調べ、正規化されていない場合に当該第１のＸＭＬ文書を正規化する正規化部と、
前記処理要求に対する処理を実行する処理部と、
正規化された前記第１のＸＭＬ文書をキーとして記憶装置にキャッシュされているキャッシュデータを検索し、当該第１のＸＭＬ文書に対応するキャッシュデータが存在する場合に、当該キャッシュデータを前記送受信部により前記処理要求の要求元へ送信し、当該第１のＸＭＬ文書に対応するキャッシュデータが存在しない場合に、前記処理部の処理により生成された第２のＸＭＬ文書を前記送受信部により当該処理要求の要求元へ送信し、かつ当該第１のＸＭＬ文書をキーとして当該第２のＸＭＬ文書を当該記憶装置にキャッシュする応答処理部とを備え、
前記応答処理部は、受信した前記処理要求に付加されている、前記クライアントにキャッシュされているキャッシュデータの情報に基づいて特定されるキャッシュデータと、自装置の前記記憶装置から検索されたキャッシュデータとが同一である場合に、当該処理要求の要求元に対して当該キャッシュデータに代えて当該キャッシュデータが当該クライアントにキャッシュされているキャッシュデータと同一であることを示す通知を送信することを特徴とするサーバ。
【請求項４】
ネットワークを介してＷｅｂサービスを提供するサーバにおいて、
クライアントに対して処理要求および当該処理要求に対する応答の送受信を行う送受信部と、
前記送受信部により受信された前記処理要求に含まれる第１のＸＭＬ文書が予め定められた正規化規則にしたがって正規化されているか否かを調べ、正規化されていない場合に当該第１のＸＭＬ文書を正規化する正規化部と、
前記第１のＸＭＬ文書のハッシュ値が当該処理要求に付加されているか否かを調べ、付加されていない場合に当該第１のＸＭＬ文書のハッシュ値を計算するハッシュ値計算部と、
前記処理要求に対する処理を実行する処理部と、
正規化された前記第１のＸＭＬ文書のハッシュ値をキーとして記憶装置にキャッシュされているキャッシュデータを検索し、当該第１のＸＭＬ文書のハッシュ値に対応するキャッシュデータが存在する場合に、当該キャッシュデータを前記送受信部により前記処理要求の要求元へ送信し、当該第１のＸＭＬ文書のハッシュ値に対応するキャッシュデータが存在しない場合に、前記処理部の処理により生成された第２のＸＭＬ文書を前記送受信部により当該処理要求の要求元へ送信し、かつ当該第１のＸＭＬ文書のハッシュ値をキーとして当該第２のＸＭＬ文書を当該記憶装置にキャッシュする応答処理部とを備え、
前記応答処理部は、受信した前記処理要求に付加されている、前記クライアントにキャッシュされているキャッシュデータのハッシュ値と、自装置の前記記憶装置から検索されたキャッシュデータのハッシュ値とが同一である場合に、当該処理要求の要求元に対して当該キャッシュデータに代えて当該キャッシュデータが前記クライアントにキャッシュされているキャッシュデータと同一であることを示す通知を送信することを特徴とするサーバ。
【請求項５】
コンピュータを、
クライアントに対して処理要求および当該処理要求に対する応答の送受信を行う送受信手段と、
前記送受信手段により受信された前記処理要求に含まれる第１のＸＭＬ文書が予め定められた正規化規則にしたがって正規化されているか否かを調べ、正規化されていない場合に当該第１のＸＭＬ文書を正規化する正規化手段と、
前記処理要求に対する処理を実行する処理手段と、
正規化された前記第１のＸＭＬ文書をキーとして記憶装置にキャッシュされているキャッシュデータを検索し、当該第１のＸＭＬ文書に対応するキャッシュデータが存在する場合に、当該キャッシュデータを前記送受信手段により前記処理要求の要求元へ送信し、当該第１のＸＭＬ文書に対応するキャッシュデータが存在しない場合に、前記処理手段の処理により生成された第２のＸＭＬ文書を前記送受信手段により当該処理要求の要求元へ送信し、かつ当該第１のＸＭＬ文書をキーとして当該第２のＸＭＬ文書を当該記憶装置にキャッシュし、さらに受信した前記処理要求に付加されている、前記クライアントにキャッシュされているキャッシュデータの情報に基づいて特定されるキャッシュデータと、自装置の前記記憶装置から検索されたキャッシュデータとが同一である場合に、当該処理要求の要求元に対して当該キャッシュデータに代えて当該キャッシュデータが当該クライアントにキャッシュされているキャッシュデータと同一であることを示す通知を送信する応答処理手段として
機能させるためのプログラム。
【請求項６】
コンピュータを、
クライアントに対して処理要求および当該処理要求に対する応答の送受信を行う送受信手段と、
前記送受信手段により受信された前記処理要求に含まれる第１のＸＭＬ文書が予め定められた正規化規則にしたがって正規化されているか否かを調べ、正規化されていない場合に当該第１のＸＭＬ文書を正規化する正規化手段と、
前記第１のＸＭＬ文書のハッシュ値が前記処理要求に付加されているか否かを調べ、付加されていない場合に当該第１のＸＭＬ文書のハッシュ値を計算するハッシュ値計算手段と、
前記処理要求に対する処理を実行する処理手段と、
正規化された前記第１のＸＭＬ文書のハッシュ値をキーとして記憶装置にキャッシュされているキャッシュデータを検索し、当該第１のＸＭＬ文書のハッシュ値に対応するキャッシュデータが存在する場合に、当該キャッシュデータを前記送受信手段により前記処理要求の要求元へ送信し、当該第１のＸＭＬ文書のハッシュ値に対応するキャッシュデータが存在しない場合に、前記処理手段の処理により生成された第２のＸＭＬ文書を前記送受信手段により当該処理要求の要求元へ送信し、かつ当該第１のＸＭＬ文書のハッシュ値をキーとして当該第２のＸＭＬ文書を当該記憶装置にキャッシュし、さらに受信した前記処理要求に付加されている、前記クライアントにキャッシュされているキャッシュデータのハッシュ値と、自装置の前記記憶装置から検索されたキャッシュデータのハッシュ値とが同一である場合に、当該処理要求の要求元に対して当該キャッシュデータに代えて当該キャッシュデータが前記クライアントにキャッシュされているキャッシュデータと同一であることを示す通知を送信する応答処理手段として
機能させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータによるデータ処理において、所定のアドレスがどのメモリ領域に属するかを判別する処理を効率的に行う方法に関する。
【０００２】
【従来の技術】
ウェブブラウザでインターネット上のウェブページ（ＨＴＭＬ文書）を表示する場合、ウェブページの取得要求（リクエスト）に対する応答時間（レスポンスタイム）を向上させるために、最近取得したウェブページをキャッシュすることが行われている。
ウェブブラウザにおいてウェブページを取得して表示するために用いられるHTTP GETによるリクエストは、返送されるＨＴＭＬ文書（レスポンス）がＵＲＬ（Uniform Resource Locators）によって一意に定まる。そのため、ウェブブラウザ（クライアントマシン）またはプロキシ（サーバマシン）にＵＲＬをキーとして当該ＨＴＭＬ文書を保存（キャッシュ）しておき、同一のＵＲＬを指定したリクエストに対して、サーバアプリケーションまでアクセスすることなく、保存されているＨＴＭＬ文書を返すことによって、応答時間を短縮することができた。
【０００３】
ウェブブラウザでＨＴＭＬ文書をキャッシュする場合、過去にアクセスしたウェブページを、クライアントマシンのローカルディスク上に保存しておく。そして、次に同じＵＲＬ（ウェブページ）にアクセスする場合には、ＨＴＴＰのIf-Modified-Sinceヘッダに、保存してあるウェブページのタイムスタンプを付けてリクエストを送る。サーバがウェブブラウザ（クライアント）のキャッシュに対応している場合、サーバは、受信したリクエストに付加されたタイムスタンプの時刻以降に要求されたウェブページが更新されたかどうかを調べる。そして更新されていないならば、ステータスコードが３０４（Not Modified）でボディが空のレスポンスを返す。この場合、ウェブブラウザには、ローカルディスクに保存されているウェブページが表示される。一方、当該ウェブページがタイムスタンプの時刻以降に更新されている場合、通常と同じ応答、すなわち要求されたウェブページのＨＴＭＬ文書を返送する。
【０００４】
プロキシでＨＴＭＬ文書をキャッシュする場合、サーバマシンの記憶装置に、ＵＲＬをキーとしてＨＴＭＬ文書を保存しておき、当該ＵＲＬを指定したリクエストに対して、プロキシが記憶装置から保存されているＨＴＭＬ文書を読み出し、サーバアプリケーションにアクセスすることなく当該ＨＴＭＬ文書を返送する。この場合、このキャッシュに保存されている内容は常に最新に保たれていることが前提となる。
【０００５】
【発明が解決しようとする課題】
ところで、今日、ウェブサービスのようなＸＭＬ文書を入出力とするネットワークサービスが普及しつつある。しかし、この種のサービスを提供する場合、ＵＲＬ（あるいはＵＲＩ（Uniform Resource Identifiers））でレスポンスが一意に決定できるとは限らない。ウェブサービスなどでは、リクエストに含まれるＸＭＬ文書の内容によって返すべきＸＭＬ文書の内容（サービス）が異なる場合が多いためである。
したがって、このようなＸＭＬ文書を入出力とするシステムでは、ＵＲＬをキーとしてＸＭＬ文書をキャッシュすることが困難である。
【０００６】
また、リクエストに含まれるＸＭＬ文書のリテラル表現をキーとして、レスポンスのＸＭＬ文書をキャッシュする方法が考えられる。しかし、サーバアプリケーションのサービスにとって意味が同じＸＭＬ文書であっても、ＸＭＬ文書そのものの文字列の表現が幾通りにも及び、キーとなるリテラル表現が異なる場合があるため、効率的にキャッシュにヒットさせることができない。
【０００７】
そこで本発明は、ＸＭＬを用いたウェブワークサービスのように、異なる表現で意味内容が等しいリクエストが可能であるようなネットワークサービスにおいて、効率的なキャッシュシステムを実現することを目的とする。
【０００８】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、所定の処理要求に対する応答をキャッシュされたデータを用いて行う、次のようなデータ処理方法として実現される。すなわち、このデータ処理方法は、第１の処理要求に含まれるデータファイルをキーとして、この第１の処理要求に対する応答に用いられるデータを記憶装置にキャッシュするステップと、このデータをキャッシュした後になされた第２の処理要求に対し、この第２の処理要求に含まれるデータファイルをキーとして、記憶装置にキャッシュされたデータを検索し、この第２の処理要求に対応するデータがキャッシュされていたならば、キャッシュされているデータを用いて第２の処理要求に対する応答を行うステップとを含むことを特徴とする。
【０００９】
ここで詳しくは、このデータをキャッシュするステップは、第１の処理要求に含まれるデータファイルを正規化するステップと、正規化されたデータファイルをキーとしてこの応答に用いられるデータをキャッシュするステップとを含む。そして、第２の処理要求に対する応答を行うステップは、第２の処理要求に含まれるデータファイルを正規化するステップと、正規化されたデータファイルをキーとしてキャッシュされているデータを検索するステップとを含む。
また、第１、第２の処理要求に含まれるデータファイルを抽出して正規化するのではなく、予め所定の正規化規則に則したデータファイルを含む処理要求を作成することとしても良い。このデータファイルは、ＸＭＬ文書とすることができる。
【００１０】
さらに好ましくは、データをキャッシュするステップは、第１の処理要求に、この第１の処理要求に含まれるデータファイルのハッシュ値が付加されているかどうかを調べ、付加されていなければこのハッシュ値を計算するステップと、第１の処理要求から取得した、または計算により得たデータファイルのハッシュ値をキーとして応答に用いられるデータをキャッシュするステップとを含む。そして、第２の処理要求に対する応答を行うステップは、第２の処理要求に、この第２の処理要求に含まれるデータファイルのハッシュ値が付加されているかどうかを調べ、付加されていなければ当該ハッシュ値を計算するステップと、第２の処理要求から取得した、または計算により得たデータファイルのハッシュ値をキーとしてキャッシュされているデータを検索するステップとを含む。このように、データファイルそのものではなく、このデータファイルを圧縮したハッシュ値をキーとして用いることにより、記憶装置におけるキャッシュサイズを縮小することができる。
【００１１】
また、上記の目的を達成する本発明は、ネットワークを介して接続されたサーバとクライアントとを備えたネットワークサービスシステムとして実現することができる。このシステムにおいて、クライアントは、所定のＸＭＬ文書を含む処理要求をサーバに送信し、サーバは、この処理要求に対して応答を返送すると共に、この処理要求に含まれるＸＭＬ文書を加工し、加工されたＸＭＬ文書をキーとして応答の内容をキャッシュすることを特徴とする。
【００１２】
このシステムにおいて、好ましくは、サーバは、ＸＭＬ文書に対する加工として、ＸＭＬ文書を所定の正規化規則にて正規化する。さらには、このＸＭＬ文書のハッシュ値を計算し、このハッシュ値をキーとして応答の内容をキャッシュする。
一方、クライアントは、所定の正規化規則に則ったテンプレートを用いてＸＭＬ文書を含む処理要求を作成し、サーバへ送信する。
また、クライアントは、処理要求に対するサーバからの応答を、この処理要求に含まれるＸＭＬ文書をキーとして記憶装置にキャッシュする構成とすることもできる。この場合、この処理要求と同一内容の処理要求を行う際に、この処理要求のＸＭＬ文書をキーとして記憶装置を検索し、キャッシュされている応答を用いて処理を行う。
【００１３】
さらに、上記の目的を達成する他の本発明は、ネットワークを介してサービスを提供する、次のように構成されたサーバとして実現される。すなわち、このサーバは、クライアントから受信した要求に対する応答を生成するアプリケーションと、この要求に含まれているデータファイルをキーとして、前記要求に対する応答を登録するキャッシュテーブルと、このデータファイルをキーとしてキャッシュテーブルを検索し、前記要求に対応する応答（レスポンスファイル）がキャッシュされている場合に、キャッシュされている当該応答を前記クライアントに返送し、前記要求に対応する応答（レスポンスファイル）がキャッシュされていない場合に、前記アプリケーションに処理を渡すと共に前記アプリケーションにて生成された応答を前記キャッシュテーブルに登録する応答処理部とを備えることを特徴とする。
【００１４】
より好ましくは、このサーバは、要求に含まれているデータファイルを所定の正規化規則にて正規化する正規化部をさらに備える構成とすることができる。この場合、キャッシュテーブルは、正規化部にて正規化されたデータファイルをキーとして応答（レスポンスファイル）を登録し、応答処理部は、正規化部にて正規化されたデータファイルをキーとしてキャッシュテーブルを検索する。
同様に、このサーバは、要求に含まれているデータファイルのハッシュ値を計算するハッシュ値計算部をさらに備える構成とすることができる。この場合、キャッシュテーブルは、ハッシュ値計算部にて計算されたデータファイルのハッシュ値をキーとして応答（レスポンスファイル）を登録し、応答処理部は、ハッシュ値計算部にて計算されたデータファイルのハッシュ値をキーとしてキャッシュテーブルを検索する。
【００１５】
また、上記の目的を達成する他の本発明は、ネットワークを介してサーバから提供されるサービスを享受する、次のように構成されたクライアントとして実現される。このクライアントは、所定の正規化規則に基づいて正規化されたＸＭＬ文書を含む要求を作成する処理部と、この処理部にて作成された要求に含まれるＸＭＬ文書のハッシュ値を計算し、要求のヘッダに付加するハッシュ値計算部と、ヘッダにＸＭＬ文書のハッシュ値を付加された要求をサーバへ送信する送信部とを備えることを特徴とする。
ここで、この処理部は、より好ましくは、正規化規則に則ったテンプレートを用いてＸＭＬ文書を含む要求を作成する。
【００１６】
さらに、本発明の他のクライアントは、所定の正規化規則に則って正規化されたＸＭＬ文書を含む要求を作成すると共にこの要求に対する前記サーバからの応答に対する処理を実行する処理部と、この処理部にて作成された要求をサーバへ送信し、このサーバからの応答を受信する送受信部と、要求に含まれるＸＭＬ文書をキーとして、サーバからの応答を登録するキャッシュテーブルとを備える構成とすることができる。そして、この処理部は、ＸＭＬ文書をキーとしてキャッシュテーブルを検索し、要求に対応する応答（レスポンスファイル）がキャッシュされている場合に、キャッシュされているこの応答（レスポンスファイル）を用いて処理を実行することを特徴とする。
【００１７】
また、本発明は、コンピュータを制御して上記のサーバあるいはクライアントとして機能させるプログラムとして実現することができる。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
【００１８】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
本発明は、ネットワークサービスにおける同じ意味のリクエストのリテラル表現を１つに統一することにより、効率的なキャッシュシステムを実現する。なお、本発明は、異なる表現で意味内容が等しいリクエストが可能であるようなネットワークサービスに対して一般的に利用できるが、本実施の形態では、ＸＭＬ文書を入出力とするウェブサービスに適用する場合を例として説明する。
【００１９】
図１は、本実施の形態によるウェブサービスシステムの全体構成を示す図である。
図１を参照すると、本実施の形態のウェブサービスシステムは、サービスを提供するサーバ１００と、サービスを利用するクライアント２００とを備える。サーバ１００とクライアント２００とはインターネットなどのウェブベースのネットワークを介して接続されている。
サーバ１００を構成するサーバマシンは、ワークステーションやパーソナルコンピュータなどのネットワーク機能を備えたコンピュータ装置にて実現され、提供サービスに関わる処理を行うサーバアプリケーション１１０と、キャッシュシステムを実現するためのプロキシ１２０とを備える。また、クライアント２００は、ワークステーションやパーソナルコンピュータなどのネットワーク機能を備えたコンピュータ装置にて実現され、提供されるサービスを享受するためのクライアントアプリケーション２１０を備える。
【００２０】
本実施の形態では、同じ意味のＸＭＬ文書のリテラル表現を１つに統一する方法として、正規化されたテンプレートを用いる。
サーバ１００は、提供サービスが受け付けることのできるリクエストのＸＭＬ文書に対し、変更可能な部分を変数で置き換えたテンプレートを用意する（このテンプレート自体もＸＭＬ文書である）。クライアント２００は、このテンプレートの変数部分を埋めることでリクエストのＸＭＬ文書を作成する。このように、テンプレートに従ってリクエストのＸＭＬ文書が構成されることにより、同じ意味のＸＭＬ文書の表現が１つに定まるため、このＸＭＬ文書をキーとするキャッシュのヒット率を向上させることができる。
【００２１】
本実施の形態において、テンプレートに用いられるＸＭＬ文書の正規化には、Ｗ３Ｃで定められたＸＭＬ−ｃ１４ｎが基本的に用いられると共に、サーバアプリケーション１１０にて提供されるサービスの内容（ＸＭＬ文書）に応じて固有の規則を設定することができる。例えば、ＸＭＬ文書において、要素名に関係なく、（１）開始タグから開始タグ、（２）終了タグから開始タグ、（３）終了タグから終了タグのいずれかの部分であって、かつその部分が全て空白（改行、タブなどを含む）である場合に、その空白を削除する正規化規則や、名前空間接頭辞を統一する正規化規則を設けることができる。
図２は、上記の空白を削除する正規化規則を示す図である。図２（Ａ）のＸＭＬ文書における空白部分のうち、上記の（１）、（２）、（３）の各部分に該当する空白が、図２（Ｂ）の該当個所に示されている。
なお、上述した空白を削除する正規化規則及び名前空間接頭辞を統一する正規化規則は、種々のアプリケーションに対してある程度汎用的に用いることができる規則である。
【００２２】
図３は、ＸＭＬ文書の具体例と、当該ＸＭＬ文書の正規化及びテンプレートの例を示す図である。
図３において、図３（Ｂ）に示す正規化されたＸＭＬ文書は、見やすくするために適宜改行しているが、実際には改行コードも正規化により削除される。また、名前空間接頭辞は、出現する順に、ｎｓ１、ｎｓ２、・・・としている。さらに、名前空間の宣言の属性（xmlns:ns*="....."）は、初めて出現する要素に付けられる。
また、図３（Ｃ）に示すテンプレートにおいて、変数は記号「＄」で囲まれる（図の太字部分）。元のＸＭＬ文書の中に記号「＄」が存在する場合は、記号「＄＄」で置き換える。また、変数名に記号「＄」を含んではならない。さらに、変数に代入可能な文字列は、ＸＭＬ１.０で定められている文字データとする（文字データ ::=  [^<&]* - ([^<&]* ')）>' [^<&]*））。
【００２３】
本実施の形態では、上述したテンプレートを用いて定形によるリクエストのＸＭＬ文書を作成し、このＸＭＬ文書をキーとすることにより、効率的なキャッシュを実現するものであるが、クライアント２００から送信されるリクエストのＸＭＬ文書が正規化されていない場合でも、当該リクエストを受け取ったサーバ１００において当該リクエストのＸＭＬ文書を正規化する処理を行うことにより、本実施の形態によるキャッシュを利用することが可能である。
また、キャッシュシステムにおいて、キャッシュデータを保存するサーバ１００またはクライアント２００の記憶装置におけるキャッシュサイズを縮小するため、キーとしてＸＭＬ文書をそのまま用いるのではなくハッシュ値を用いることができる。
【００２４】
この場合、クライアント２００からリクエストにＸＭＬ文書のハッシュ値を付与して送信することとすれば、サーバ１００でのハッシュ値計算に要する処理コストを削減することができる。
また、クライアント２００が１度取得したレスポンスのＸＭＬ文書をキャッシュしておき、２度目のリクエストからは、当該レスポンスのＸＭＬ文書のハッシュ値をリクエストともに送付することとする。そして、サーバ１００からのレスポンスが１度目と同じである場合、サーバ１００はレスポンスが同じであること示す情報だけを返信し、クライアント２００は当該情報に応じてキャッシュされているＸＭＬ文書を使用すれば足りる。これにより、レスポンスを返すコストも削減し、ネットワーク上のトラフィックを軽減することができる。
【００２５】
図４は、図１に示したウェブサービスシステムにおいて、上述した本実施の形態のキャッシュシステムを実現するためのサーバ１００の構成を示す図である。
図４を参照すると、サーバ１００において、プロキシ１２０は、サーバアプリケーション１１０とクライアント２００との間に介在し、クライアント２００からのリクエストを受信すると共に、クライアント２００に対してレスポンスを返送する。そして、受信したリクエストのＸＭＬ文書を正規化する正規化部１２１と、正規化されたＸＭＬ文書のハッシュ値を計算するハッシュ値計算部１２２と、キャッシュを用いた応答またはサーバアプリケーション１１０にアクセスする応答処理部１２３とを備えると共に、レスポンスのＸＭＬ文書をキャッシュするためのキャッシュテーブル１２４と、クライアント２００との間でデータの送受信を行う送受信部１２５とを備える。
図４に示す構成において、正規化部１２１、ハッシュ値計算部１２２及び応答処理部１２３は、プログラム制御されたＣＰＵにて実現される仮想的なソフトウェアブロックである。ＣＰＵを制御するプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供する。また、キャッシュテーブル１２４は、サーバ１００を構成するサーバマシンの記憶装置に構築されている。
【００２６】
図５は、キャッシュテーブル１２４の構成例を示す図である。
図５を参照すると、キャッシュテーブル１２４は、リクエスト（ＸＭＬ文書）のハッシュ値、レスポンス（ＸＭＬ文書）のハッシュ値、レスポンスコンテンツ（ＸＭＬ文書）という３つのコラムを有して構成される。図示のように、ＸＭＬ文書を入出力とするシステムでは、１つのＵＲＬに対して、異なる記述のリクエストがなされ異なるレスポンスが返されることもあれば、異なるＵＲＬに対して同一のリクエスト（ハッシュ値が9PgwNGgkTDs…）がなされ、共通のレスポンス（ハッシュ値がWaX21pBkj1Zd0…）が返されることもある。
【００２７】
図６は、図４に示すように構成されたサーバ１００のプロキシ１２０の動作を説明するフローチャートである。
図６に示すように、プロキシ１２０は、クライアント２００からリクエストを受信すると（ステップ６０１）、まず当該リクエストのＸＭＬ文書が正規化されているかどうかを調べ、正規化されていなければ、正規化部１２１により正規化処理を行う（ステップ６０２、６０３）。
次に、当該リクエストのヘッダに当該リクエストのＸＭＬ文書のハッシュ値が存在するかどうかを調べ、存在しなければ、ハッシュ値計算部１２２により当該ＸＭＬ文書のハッシュ値を計算する（ステップ６０４、６０５）。そして、ヘッダから取得、またはステップ６０５で生成されたハッシュ値をキーとしてキャッシュテーブル１２４を検索する（ステップ６０６）。
【００２８】
該当するレスポンスのＸＭＬ文書がキャッシュされていたならば、プロキシ１２０は、次に、リクエストのヘッダにレスポンスのＸＭＬ文書のハッシュ値が存在するかどうかを調べる（ステップ６０７、６０８）。そして、ハッシュ値が存在するならば、当該ハッシュ値がキャッシュテーブル１２４に登録されている該当するレスポンスのＸＭＬ文書のハッシュ値と一致するかどうかを調べ（ステップ６０９）、一致しているならば、空のレスポンスを要求元のクライアント２００へ返す（ステップ６１０）。
リクエストのヘッダにレスポンスのＸＭＬ文書のハッシュ値が存在しない場合、及びハッシュ値が存在するがキャッシュテーブル１２４に登録されているハッシュ値と一致しない場合は、キャッシュテーブル１２４に登録されている該当するレスポンスコンテンツ（ＸＭＬ文書）を要求元のクライアント２００へ返送する（ステップ６０８、６０９、６１１）。
【００２９】
一方、ステップ６０６の検索で、キャッシュテーブル１２４から該当するレスポンスのＸＭＬ文書が検出されなかったならば、プロキシ１２０は、サーバアプリケーション１１０にアクセスして当該リクエストを送り、応答を待つ（ステップ６０７、６１２）。
ここで、サーバアプリケーション１１０は、提供するサービスに応じて、データベースを検索するなどの処理を行いレスポンスのＸＭＬ文書を作成し、プロキシ１２０に返す。
プロキシ１２０は、サーバアプリケーション１１０から受け取ったレスポンスを要求元のクライアント２００へ返送すると共に、キャッシュテーブル１２４に登録する（ステップ６１３）。
【００３０】
図７は、本実施の形態のキャッシュシステムを実現するためのクライアント２００の構成を示す図である。
図７を参照すると、クライアント２００において、クライアントアプリケーション２１０は、送信するリクエストのＸＭＬ文書を生成すると共に受信したレスポンスのＸＭＬ文書を処理する処理部２１１と、送信しようとするリクエストのヘッダにＸＭＬ文書が正規化されていることを示す情報を付加する正規化情報付加部２１２と、正規化されたＸＭＬ文書のハッシュ値を計算するハッシュ値計算部２１３と、サーバ１００との間でデータの送受信を行う送受信部２１４とを備える。また、クライアント２００は、サーバ１００のプロキシ１２０に設けられたキャッシュテーブル１２４と同様の構成を有するキャッシュテーブル２２０を備えても良い。
図７に示す構成において、処理部２１１、正規化情報付加部２１２及びハッシュ値計算部２１３は、プログラム制御されたＣＰＵにて実現される仮想的なソフトウェアブロックである。ＣＰＵを制御するプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供する。また、キャッシュテーブル２２０は、クライアント２００を構成するクライアントマシンのローカルディスク上に構築されている。
【００３１】
図８、図９は、図７に示すように構成されたクライアント２００のクライアントアプリケーション２１０の動作を説明するフローチャートである。ここでは、クライアント２００がキャッシュテーブル２２０を備えている場合の動作について説明する。
リクエストを送信する際の動作を説明する図８を参照すると、クライアントアプリケーション２１０は、まず処理部２１１により、テンプレートを用いてリクエスト（ＸＭＬ文書及びヘッダ）を作成する（ステップ８０１）。ここで、テンプレートはサーバ１００において作成され、予めクライアント２００に提供されている。
【００３２】
クライアントアプリケーション２１０は、次に、正規化情報付加部２１２により、リクエストのヘッダに、当該ＸＭＬ文書が正規化されていることを示す情報（Is-Canonicalized: true）を付加する（ステップ８０２）。そして、ハッシュ値計算部２１３により、当該リクエストのＸＭＬ文書のハッシュ値を計算し、得られたハッシュ値をキーとしてキャッシュテーブル２２０を検索する（ステップ８０３）。そして、当該リクエストに対するレスポンスのＸＭＬ文書がキャッシュされていたならば、検出された該当するレスポンスのＸＭＬ文書のハッシュ値を当該リクエストのヘッダに付加し、（ステップ８０４、８０５）。さらにステップ８０３で計算されたリクエストのＸＭＬ文書のハッシュ値を当該リクエストのヘッダに付加して（ステップ８０６）、サーバ１００へ送信する（ステップ８０７）。
また、ステップ８０３の検索で、キャッシュテーブル２２０から該当するレスポンスのＸＭＬ文書が検出されなかったならば、ステップ８０３で計算されたリクエストのＸＭＬ文書のハッシュ値を当該リクエストのヘッダに付加して（ステップ８０４、８０６）、サーバ１００へ送信する（ステップ８０７）。
【００３３】
次に、サーバ１００からレスポンスを受信した際の動作を説明する図９を参照すると、クライアントアプリケーション２１０の処理部２１１は、まず受信したレスポンスが空メッセージかどうかを確認する（ステップ９０１、９０２）。
そして、空メッセージでなければ、キャッシュテーブル２２０の該当エントリを更新した後（ステップ９０３）、当該レスポンスのＸＭＬ文書に対する処理を行う（ステップ９０４）。
一方、当該レスポンスが空メッセージであった場合は、キャッシュされているレスポンスコンテンツ（ＸＭＬ文書）を使用することができるので、これを読み出して処理を行う（ステップ９０５、９０４）。
【００３４】
図１０は、本実施の形態のウェブサービスシステムにおいて、クライアント２００から送信されるリクエストの例を示す図である。
図示のように、リクエストのヘッダには、当該リクエストのＸＭＬ文書のハッシュ値（Request-Hash）、当該リクエストに対するレスポンスのＸＭＬ文書のハッシュ値（Response-Hash）、及び当該リクエストのＸＭＬ文書が正規化されていることを示す情報（Is-Canonicalized）が記述されている。
図１１は、図１０のリクエストに対するレスポンスの例を示す図である。
図示のレスポンスは、リクエストのヘッダに記述されているレスポンスのＸＭＬ文書のハッシュ値がサーバ１００のキャッシュテーブル１２４に登録されているハッシュ値と一致した場合の例であり、レスポンスのボディは空である。
【００３５】
次に、本実施の形態において送受信されるＸＭＬ文書の種々の態様に基づいて、サーバ１００のプロキシ１２０による処理、及びクライアント２００のクライアントアプリケーション２１０による処理の手順を説明する。
＜プロキシ１２０の動作＞
態様１：プロキシ１２０が、Request-Hash=なし、Response-Hash=なし、Is-Canonicalized=falseのヘッダを持つリクエストを受けた場合（クライアント２００がキャッシュを意識していない場合）。
プロキシ１２０は、受信したリクエストのＸＭＬ文書を正規化し、そのハッシュ値を計算し、キャッシュテーブル１２４におけるリクエストのハッシュ値を検索する。
そして、一致するキャッシュデータが存在すれば、当該エントリにおけるリクエストのハッシュ値及びレスポンスのハッシュ値を含むヘッダを生成し、当該エントリのレスポンスコンテンツに当該ヘッダを付加して要求元のクライアント２００に返す。
一方、一致するキャッシュデータが存在しないならば、リクエストをサーバアプリケーション１１０に送り、レスポンスを受け取る。そして、当該レスポンスを要求元のクライアント２００に返送すると共に、当該レスポンスに関する情報をキャッシュテーブル１２４に新規に登録する。
【００３６】
態様２：プロキシ１２０がRequest-Hash=なし、Response-Hash=なし、Is-Canonicalized=trueのヘッダを持つリクエストを受けた場合(クライアント２００がテンプレートを用いてＸＭＬ文書を作成しリクエストを送った場合)。
プロキシ１２０は、受信したリクエストのＸＭＬ文書のハッシュ値を計算し、キャッシュテーブル１２４におけるリクエストのハッシュ値を検索する。
そして、態様１と同様に、一致するキャッシュデータが存在すれば、当該エントリにおけるリクエストのハッシュ値及びレスポンスのハッシュ値を含むヘッダを生成し、当該エントリのレスポンスコンテンツに当該ヘッダを付加して要求元のクライアント２００に返す。
また、一致するキャッシュデータが存在しないならば、リクエストをサーバアプリケーション１１０に送り、レスポンスを受け取る。そして、当該レスポンスを要求元のクライアント２００に返送すると共に、当該レスポンスに関する情報をキャッシュテーブル１２４に新規に登録する。
【００３７】
態様３：プロキシ１２０がRequest-Hash=あり、Response-Hash=なし、Is-Canonicalized=trueのヘッダを持つリクエストを受けた場合（クライアント２００がテンプレートを用いてＸＭＬ文書を作成し、ハッシュ値Request-Hashをヘッダに付加してリクエストを送った場合）。
プロキシ１２０は、受信したリクエストのヘッダに付加されている当該リクエストのＸＭＬ文書のハッシュ値をキーとしてキャッシュテーブル１２４を検索する。
そして、態様１と同様に、一致するキャッシュデータが存在すれば、当該エントリにおけるリクエストのハッシュ値及びレスポンスのハッシュ値を含むヘッダを生成し、当該エントリのレスポンスコンテンツに当該ヘッダを付加して要求元のクライアント２００に返す。
また、一致するキャッシュデータが存在しないならば、リクエストをサーバアプリケーション１１０に送り、レスポンスを受け取る。そして、当該レスポンスを要求元のクライアント２００に返送すると共に、当該レスポンスに関する情報をキャッシュテーブル１２４に新規に登録する。
【００３８】
態様４：プロキシ１２０がRequest-Hash=あり、Response-Hash=あり、Is-Canonicalized=trueのヘッダを持つリクエストを受けた場合（クライアント２００が一度送ったことのあるリクエストを再度送る場合）。
プロキシ１２０は、受信したリクエストのヘッダに付加されている当該リクエストのＸＭＬ文書のハッシュ値をキーとしてキャッシュテーブル１２４を検索する。
そして、一致するキャッシュデータが存在すれば、当該リクエストのヘッダに付加されているレスポンスのＸＭＬ文書のハッシュ値を、キャッシュテーブル１２４の該当エントリに登録されているハッシュ値と比較する。このハッシュ値が一致するならば、ステータスコード204(No Content)をレスポンスコンテンツなしで要求元のクライアント２００に返す。
一方、このハッシュ値が一致しないならば、該当エントリに登録されている当該リクエスト及びそのレスポンスのＸＭＬ文書のハッシュ値をレスポンスのヘッダに付加し、レスポンスコンテンツを要求元のクライアント２００に返す。
また、リクエストのＸＭＬ文書のハッシュ値をキーとするキャッシュテーブル１２４の検索において、一致するキャッシュデータが存在しないならば、リクエストをサーバアプリケーション１１０に送り、レスポンスを受け取る。そして、当該レスポンスを要求元のクライアント２００に返送すると共に、当該レスポンスに関する情報をキャッシュテーブル１２４に新規に登録する。
【００３９】
＜クライアントアプリケーション２１０の動作＞
態様５：クライアントアプリケーション２１０がキャッシュを意識しない場合。
クライアントアプリケーション２１０は、サーバアプリケーション１１０が受けることのできるリクエストを送る（ＸＭＬ文書の作成にテンプレートが使用されず、ＸＭＬ文書の正規化もされていない）。レスポンスのヘッダには、Request-Hash、Response-Hash等の情報が含まれるが無視する。この動作はプロキシ１２０における態様１の場合の動作に対応する。
【００４０】
態様６：クライアントアプリケーション２１０がテンプレートを用いてリクエストを作成し、クライアント２００のキャッシュテーブル２２０は設けられていない場合。
クライアントアプリケーション２１０は、テンプレートを用いてリクエストを作成し、リクエストのヘッダにおけるIs-Canonicalizedの値をtrueにして当該リクエストをサーバ１００へ送る。レスポンスのヘッダには、Request-Hash, Response-Hash等の情報が含まれるが無視する。この動作はプロキシ１２０における態様２の場合の動作に対応する。
【００４１】
態様７：クライアントアプリケーション２１０がテンプレートを用いてリクエストを作成し、クライアント２００のキャッシュテーブル２２０が設けられている場合。
クライアントアプリケーション２１０は、テンプレートを用いてリクエストを作成し、リクエストのヘッダにおけるIs-Canonicalizedの値をtrueにする。そして、リクエストのＸＭＬ文書のハッシュ値を計算し、その値をキーとしてキャッシュテーブル２２０を検索する。
ここで、一致するキャッシュデータが存在すれば、得られたリクエストのＸＭＬ文書のハッシュ値と当該リクエストに対するレスポンスのＸＭＬ文書のハッシュ値とを、作成したリクエストのヘッダに付加してサーバ１００へ送る。サーバ１００からのレスポンスで空メッセージ（204 No Content）が返ってきた場合、キャッシュテーブル２２０から得られたレスポンスコンテンツを今回のリクエストに対するレスポンスとして使用する。
レスポンスが空のメッセージではない場合（200 OK）、取得したレスポンスコンテンツを処理に用いると共に、当該レスポンスのヘッダにはRequest-Hash、Response-Hashの情報が含まれるので、これと取得したレスポンスコンテンツとを用いてキャッシュテーブル２２０を更新する。
この動作はプロキシ１２０における態様４の場合の動作に対応する。
【００４２】
一方、キャッシュテーブル２２０の検索で、一致するキャッシュデータが存在しない場合、当該リクエストのＸＭＬ文書のハッシュ値（Request-Hash）のみをヘッダに付けてサーバ１００へ送る。サーバ１００からのレスポンスに含まれるレスポンスコンテンツを処理に用いると共に、このレスポンスのヘッダにはRequest-Hash、Response-Hashなどの情報が含まれるので、これと取得したレスポンスコンテンツとをキャッシュテーブル２２０に登録する。
この動作はプロキシ１２０における態様３の場合の動作に対応する。
【００４３】
以上の説明では、キャッシュのキーとしてリクエスト及びレスポンスのＸＭＬ文書のハッシュ値を用いる場合について説明した。上述したように、キーとしてＸＭＬ文書そのものを用いるのではなく、これを圧縮したハッシュ値を用いることにより、サーバ１００やクライアント２００の記憶装置に格納されるキャッシュサイズを縮小することができる。また、態様４、７に示すように、サーバ１００からクライアント２００へ空のメッセージ（ハッシュ値のみ）を送信する場合には、ネットワークにおけるトラフィックの軽減にも寄与する。
【００４４】
次に、本実施の形態を用いた具体的なウェブサービスシステムの例について説明する。
図１２は、本実施の形態を適用した製品情報提供サービスシステムの全体構成を示す図である。
図１２を参照すると、本システムは、製品供給会社であるＢ社に構築されたサーバ１００と、Ｂ社のビジネスパートナーであるＡ１、Ａ２、Ａ３社がそれぞれ有するクライアント２００とで構成され、サーバ１００と各クライアント２００とは、インターネットで接続されている。
【００４５】
Ｂ社のサーバ１００は、サーバアプリケーション１１０とプロキシ１２０とを備えると共に、サーバアプリケーション１１０が使用するデータベース１３０を備えている。本システムにおけるサーバアプリケーション１１０は、クライアント２００からのリクエストに応じてデータベース１３０を参照し、必要な製品情報を取得してレスポンスを返す。
Ａ１、Ａ２、Ａ３社のクライアント２００は、それぞれクライアントアプリケーション２１０を備えている。
【００４６】
図１２に示すシステムにおいて、Ｂ社は、自社の製品の情報（使用、価格、在庫など）をウェブサービスとしてビジネスパートナー（Ａ１、Ａ２、Ａ３社）に公開している。また、Ａ１、Ａ２、Ａ３社は、Ｂ社のウェブサービスにアクセスすることでＢ社の製品の情報を入手できる。
ここで、Ｂ社のウェブサービスは、多くの会社からのリクエストを受け付けるために大きな負荷がかかる可能性がある。したがって、レスポンスの組立やデータベース１３０へのアクセスが行われる、サーバアプリケーション１１０の処理を軽減するため、プロキシ１２０によるキャッシュを用いた応答処理が行われる。なお、Ｂ社が自社のウェブサービスに関する仕様（ＷＳＤＬ（Web Services Description Language））を公開しておくことによって、汎用のウェブサービス用のクライアントアプリケーション２１０を用いてアクセスすることが可能となる。
一方、所定の会社（例えばＡ３社）が非常に頻繁にＢ社にアクセスする場合、Ｂ社が自社のキャッシュシステムに応じたテンプレートをＡ３社に提供し、このテンプレートを使ってリクエストを作成してもらうことにより、一層効率的にキャッシュシステムを利用することができる。この場合、Ｂ社のキャッシュシステムに専用のクライアントアプリケーション２１０をＡ３社に使ってもらうことが好ましい。
【００４７】
【発明の効果】
以上説明したように、本発明によれば、異なる表現で意味内容が等しいリクエストが可能であるようなネットワークサービスにおいて、効率的なキャッシュシステムを実現することができる。
【図面の簡単な説明】
【図１】  本実施の形態によるウェブサービスシステムの全体構成を示す図である。
【図２】  本実施の形態におけるＸＭＬ文書の正規化規則の例を示す図である。
【図３】  本実施の形態にて用いられるＸＭＬ文書の具体例と、当該ＸＭＬ文書の正規化及びテンプレートの例を示す図である。
【図４】  本実施の形態によるキャッシュシステムを実現するためのサーバの構成を示す図である。
【図５】  本実施の形態で用いられるキャッシュテーブルの構成例を示す図である。
【図６】  本実施の形態によるサーバのプロキシの動作を説明するフローチャートである。
【図７】  本実施の形態によるキャッシュシステムを実現するためのクライアントの構成を示す図である。
【図８】  本実施の形態によるクライアントのクライアントアプリケーションの動作を説明するフローチャートであり、リクエストを送信する際の動作を説明する図である。
【図９】  本実施の形態によるクライアントのクライアントアプリケーションの動作を説明するフローチャートであり、レスポンスを受信した際の動作を説明する図である。
【図１０】  本実施の形態におけるクライアントから送信されるリクエストの例を示す図である。
【図１１】  図１０のリクエストに対するレスポンスの例を示す図である。
【図１２】  本実施の形態を適用した製品情報提供サービスシステムの全体構成を示す図である。
【符号の説明】
１００…サーバ、１１０…サーバアプリケーション、１２０…プロキシ、１２１…正規化部、１２２…ハッシュ値計算部、１２３…応答処理部、１２４…キャッシュテーブル、１２５…送受信部、２００…クライアント、２１０…クライアントアプリケーション、２１１…処理部、２１２…正規化情報付加部、２１３…ハッシュ値計算部、２１４…送受信部、２２０…キャッシュテーブル
【図１】
0004366040.tif 000002
【図２】
0004366040.tif 000003
【図３】
0004366040.tif 000004
【図４】
0004366040.tif 000005
【図５】
0004366040.tif 000006
【図６】
0004366040.tif 000007
【図７】
0004366040.tif 000008
【図８】
0004366040.tif 000009
【図９】
0004366040.tif 000010
【図１０】
0004366040.tif 000011
【図１１】
0004366040.tif 000012
【図１２】
0004366040.tif 000013