(57)【要約】  本開示では、ホスティング装置を使用して、複数のバージョンの単一のウェブ・アプリケーションを提供する技法を説明する。以下で詳細に説明するように、ホスティング装置は、ウェブ・アプリケーションの様々なバージョンに関連する資源を、様々なサブディレクトリ内に記憶する。ホスティング装置は、ウェブ・アプリケーションに関連する要求を受信すると、ウェブ・アプリケーションの各バージョンのうちの１つのバージョンを、このウェブ・アプリケーションの適用可能なバージョンとして自動的に識別する。ホスティング装置は、ウェブ・アプリケーションの適用可能なバージョンを記憶するサブディレクトリのサブディレクトリ名を含むように、要求内のパス名を書き換える。次いで、ホスティング装置は、書き換えられたパス名によって識別された資源を逆参照する。このようにして、ホスティング装置は、ウェブ・アプリケーションの適用可能なバージョンの資源を使用して、要求を処理する。
2012504276.tif 000002
【特許請求の範囲】
【請求項１】
複数のバージョンのウェブ・アプリケーションを提供する方法であって、
サブディレクトリ名を有する一群のサブディレクトリ（３２）を含む階層ディレクトリ・システム（３０）を、コンピューティング装置（４）からアクセス可能なコンピュータ読取り可能な記憶媒体上に記憶するステップと、
前記ウェブ・アプリケーションの一群のバージョンにおけるウェブ・アプリケーションの互いに異なるバージョンに関連する資源（３４）を、前記コンピュータ読取り可能な媒体上で前記サブディレクトリの内部に記憶するステップであって、前記ウェブ・アプリケーションの前記バージョンが、互いに異なるユーザ・エクスペリエンスを提供するステップと、
電子通信ネットワーク（８）を介したクライアント装置（６）からの、前記ウェブ・アプリケーションに関連する資源のパス名を指定する要求を、前記コンピューティング装置（４）において受信するステップ（６０）と、
前記要求を受信することに応答して、前記ウェブ・アプリケーションの前記一群のバージョンから前記ウェブ・アプリケーションの適用可能なバージョンを、前記コンピューティング装置（４）において自動的に識別するステップ（６６）と、
前記パス名が、前記ウェブ・アプリケーションの前記適用可能なバージョンに関連する前記資源を記憶する前記サブディレクトリの前記サブディレクトリ名を含むように、前記コンピューティング装置において前記要求を書き換えるステップ（６８）と、
前記要求を書き換えた後に、前記書き換えられた要求内の前記パス名によって識別された資源を、前記コンピューティング装置（４）において逆参照するステップ（７０）とを備える方法。
【請求項２】
前記ウェブ・アプリケーションの前記バージョンとユーザのグループとを関連付ける情報を、前記コンピュータ読取り可能な記憶媒体において記憶するステップをさらに備え、
前記ウェブ・アプリケーションの前記適用可能なバージョンを自動的に識別するステップが、前記ウェブ・アプリケーションの前記バージョンとユーザのグループとを関連付ける前記情報を使用して、前記クライアント装置のユーザに関連する前記ウェブ・アプリケーションの前記バージョンを識別し、前記ウェブ・アプリケーションの前記適用可能なバージョンを識別するステップを含む、請求項１に記載の方法。
【請求項３】
前記ウェブ・アプリケーションの前記バージョンとユーザのグループとを関連付ける情報を記憶するステップが、一群のルールを記憶するステップを含み、前記ルールが、前記ウェブ・アプリケーションの状態とその前記バージョンのうちの１つのバージョンを指定し、
前記ウェブ・アプリケーションの前記バージョンとユーザのグループとを関連付ける前記情報を使用して、前記クライアント装置のユーザに関連する前記ウェブ・アプリケーションの前記バージョンを識別するステップが、前記ルールを評価するステップを含む、請求項２に記載の方法。
【請求項４】
前記要求を受信するステップが、受入れ可能な言語を指定する「Ａｃｃｅｐｔ−Ｌａｎｇｕａｇｅ」ヘッダを含む、ハイパーテキスト転送プロトコル（ＨＴＴＰ）要求を受信するステップを含み、
前記一群のルールを記憶するステップが、前記ＨＴＴＰ要求の前記「Ａｃｃｅｐｔ−Ｌａｎｇｕａｇｅ」ヘッダの値に基づいて状態を指定するルールを記憶するステップを含む、請求項３に記載の方法。
【請求項５】
前記方法が、前記ウェブ・アプリケーションの前記バージョンのうちの第１のバージョンをユーザが好むことを指定するプリファランス・データを記憶するステップをさらに備え、
前記ウェブ・アプリケーションの前記適用可能なバージョンを自動的に識別するステップは、前記クライアント装置が前記ユーザによって使用されるとき、前記プリファランス・データを使用して、前記ウェブ・アプリケーションの前記バージョンのうちの第１のバージョンを、前記ウェブ・アプリケーションの前記適用可能なバージョンとして識別するステップを含む、請求項１に記載の方法。
【請求項６】
前記書き換えられた要求内の前記パス名によって識別された前記資源が、サーバ側のスクリプトを含み、
前記書き換えられた要求内の前記パス名によって識別された前記資源を逆参照するステップが、前記サーバ側のスクリプトを実行するステップを含む、請求項１に記載の方法。
【請求項７】
前記書き換えられた要求内の前記パス名によって識別された前記資源を逆参照した後に、前記書き換えられた要求内の前記パス名によって識別された前記資源を含むＨＴＴＰ応答を、前記コンピューティング装置において生成するステップと、
前記ＨＴＴＰ応答を前記クライアント装置に送信するステップとをさらに備える、請求項１に記載の方法。
【請求項８】
前記ＨＴＴＰ応答を生成するステップは、前記ウェブ・アプリケーションに関連する資源の場所を指定する、前記ＨＴＴＰ応答内のパス名が、前記ウェブ・アプリケーションの前記適用可能なバージョンに関連する資源を記憶する前記サブディレクトリの前記サブディレクトリ名を含むように、前記ＨＴＴＰ応答を書き換えるステップを含む、請求項７に記載の方法。
【請求項９】
前記ＨＴＴＰ応答を生成するステップは、前記ＨＴＴＰ応答が、前記ウェブ・アプリケーションの前記適用可能なバージョンを指定するバージョン識別子を含むクッキーを設定するよう前記クライアント装置に命令するヘッダを含むように、前記ＨＴＴＰ応答を生成するステップを含む、請求項７に記載の方法。
【請求項１０】
前記方法は、前記要求が、前記ウェブ・アプリケーションの前記適用可能なバージョンを識別するバージョン識別子を含むかどうか、前記コンピューティング装置において判定するステップをさらに備え、
前記ウェブ・アプリケーションの前記適用可能なバージョンを自動的に識別するステップが、前記ウェブ・アプリケーションの前記適用可能なバージョンを識別するバージョン識別子を前記要求が含まないと判定されるときに、前記ウェブ・アプリケーションの前記適用可能なバージョンを自動的に識別するステップを含む、請求項１に記載の方法。
【請求項１１】
前記ウェブ・アプリケーションの前記バージョンのうちの前記第２のバージョンによって提示されたユーザ・インターフェースとは異なるユーザ・インターフェースを提示することにより、前記ウェブ・アプリケーションの前記バージョンのうちの第１のバージョンが、前記ウェブ・アプリケーションの前記バージョンのうちの第２のバージョンとは異なるユーザ・エクスペリエンスを提供する、請求項１に記載の方法。
【請求項１２】
前記ウェブ・アプリケーションの前記バージョンのうちの前記第２のバージョンによって提示されたユーザ・インターフェースとは異なる機能を提供することにより、前記ウェブ・アプリケーションの前記バージョンのうちの第１のバージョンが、前記ウェブ・アプリケーションの前記バージョンのうちの第２のバージョンとは異なるユーザ・エクスペリエンスを提供する、請求項１に記載の方法。
【請求項１３】
少なくとも、前記サブディレクトリのうちの第１のサブディレクトリ、および前記サブディレクトリのうちの第２のサブディレクトリが、すぐ上の単一の親ディレクトリの子ディレクトリである、請求項１に記載の方法。
【請求項１４】
命令を実行することができる処理ユニット（１０２）と、
クライアント装置（６）を含む電子通信ネットワーク（８）上での通信を容易にするネットワーク・インターフェース（１１６）と、
単一の親ディレクトリの子ディレクトリである一群のサブディレクトリ（３２）を含む階層ディレクトリ・システム（３０）であって、前記一群のサブディレクトリ内の各サブディレクトリがサブディレクトリ名を有する階層ディレクトリ・システム、および
前記サブディレクトリの内部に、前記ウェブ・アプリケーションの一群のバージョンにおけるウェブ・アプリケーションの互いに異なるバージョンに関連する資源（３４）であって、前記ウェブ・アプリケーションの前記バージョンが、互いに異なるユーザ・エクスペリエンスを提供する資源を記憶する不揮発性記憶装置（１０８）と、
前記ウェブ・アプリケーションに関連する資源のパス名を指定する要求を、前記電子通信ネットワーク（８）を介して前記クライアント装置（６）から受信し、前記要求を受信するのに応答して、前記ウェブ・アプリケーションの前記一群のバージョンから前記ウェブ・アプリケーションの適用可能なバージョンを自動的に識別するバージョン・モジュール（３８）と、
前記パス名が、前記ウェブ・アプリケーションの前記適用可能なバージョンに関連する前記資源を記憶する前記サブディレクトリの前記サブディレクトリ名を含むように、前記要求を書き換える要求書換えモジュール（４０）と、
前記要求が書き換えられた後に、前記書き換えられた要求内の前記パス名によって識別された資源を逆参照し、前記書き換えられた要求内の前記パス名によって識別された前記資源を前記クライアント装置（６）に送信する、要求ハンドラ・モジュール（４２）とを備える電子コンピューティング装置（４）。
【請求項１５】
前記バージョン・モジュール、前記要求書換えモジュール、および前記要求ハンドラ・モジュールが、前記処理ユニットによって実行される命令を含む、請求項１４に記載の電子コンピューティング装置。
【請求項１６】
前記コンピュータ読取り可能な媒体が、前記ウェブ・アプリケーションの前記バージョンとユーザのグループとを関連付ける情報を含むグループ・データベースを記憶し、
前記バージョン・モジュールが、前記グループ・データベースを使用して、前記ウェブ・アプリケーションの前記適用可能なバージョンを識別する、請求項１４に記載の電子コンピューティング装置。
【請求項１７】
前記書き換えられた要求内の前記パス名によって識別された前記資源が、サーバ側のスクリプトを含み、
前記要求ハンドラ・モジュールが、部分的に前記サーバ側のスクリプトを実行することにより、前記書き換えられた要求内の前記パス名によって識別された前記資源を逆参照する、請求項１４に記載の電子コンピューティング装置。
【請求項１８】
前記不揮発性記憶装置が、前記ウェブ・アプリケーションの前記バージョンのうちの第１のバージョンをユーザが好むことを指定するプリファランス・データを記憶し、
前記ウェブ・アプリケーションの前記適用可能なバージョンを自動的に識別するステップは、前記クライアント装置が前記ユーザによって使用されるとき、前記プリファランス・データを使用して、前記ウェブ・アプリケーションの前記バージョンのうちの前記第１のバージョンを、前記ウェブ・アプリケーションの前記適用可能なバージョンとして識別するステップを含む、請求項１４に記載の電子コンピューティング装置。
【請求項１９】
複数のサブディレクトリ（３２）を含む階層ディレクトリ・システム（３０）であって、
前記サブディレクトリ（３２）が、互いに異なるサブディレクトリ名に関連し、
前記サブディレクトリが、ウェブ・アプリケーションの一群のバージョンにおける前記ウェブ・アプリケーションの互いに異なるバージョンに関連する資源（３４）を記憶し、
前記サブディレクトリには、同等に名付けられた資源が存在し、
前記サブディレクトリが、すぐ上の単一の親ディレクトリの子ディレクトリであり、
前記ウェブ・アプリケーションの前記バージョンが、異なる一群の機能および異なるユーザ・インターフェースを提供することにより、互いに異なるユーザ・エクスペリエンスを提供する、階層ディレクトリ・システムと、
一群のルールを含むグループ・データベース（３６）であって、前記ルールが、前記ウェブ・アプリケーションの状態とその前記バージョンのうちの１つのバージョンを指定する、グループ・データベースと、
命令がコンピューティング装置（４）において実行されるときに、前記コンピューティング装置（４）が、
電子通信ネットワーク（８）を介したクライアント装置（６）からの、前記ウェブ・アプリケーションに関連する資源のパス名を指定するハイパーテキスト転送プロトコル（ＨＴＴＰ）要求を受信し（６０）、
前記ＨＴＴＰ要求を受信することに応答して、前記ＨＴＴＰ要求が、前記ウェブ・アプリケーションの適用可能なバージョンを識別するバージョン識別子を含んでいるかどうか判定し（６２）、前記ウェブ・アプリケーションの前記適用可能なバージョンが、前記ウェブ・アプリケーションの前記バージョンのうちの１つのバージョンであり、
前記ルールを使用して（６６）、前記ＨＴＴＰ要求が前記ウェブ・アプリケーションの前記適用可能なバージョンを識別するバージョン識別子を含まないときに、前記ウェブ・アプリケーションの前記一群のバージョンから前記ウェブ・アプリケーションの前記適用可能なバージョンを自動的に識別し、
前記ウェブ・アプリケーションの前記適用可能なバージョンに関連する前記資源を記憶する前記サブディレクトリの前記サブディレクトリ名を前記パス名が含むように、前記ＨＴＴＰ要求を書き換え（６８）、前記ウェブ・アプリケーションの前記適用可能なバージョンに関連する前記資源を記憶する前記サブディレクトリ内の資源を前記パス名が識別するようにし、
前記ＨＴＴＰ要求を書き換えた後に、前記書き換えられたＨＴＴＰ要求内の前記パス名によって指定された資源を逆参照し（７０）、
前記ＨＴＴＰ要求に対するＨＴＴＰ応答を生成し（７２）、前記ＨＴＴＰ応答は、前記書き換えられたＨＴＴＰ要求内の前記パス名によって識別された前記資源と、前記ウェブ・アプリケーションに関連する後続のＨＴＴＰ要求内の前記ウェブ・アプリケーションの前記適用可能なバージョンを識別する前記バージョン識別子を含むように前記クライアント装置を構成するデータとを含むようにする命令とを含む、コンピュータ読取り可能な記憶媒体。
【請求項２０】
前記コンピュータ読取り可能な記憶媒体は、前記ウェブ・アプリケーションの前記バージョンのうちの第１のバージョンをユーザが好むことを指定するプリファランス・データをさらに含み、
前記命令により、前記クライアント装置が前記ユーザによって使用されるとき、前記コンピューティング装置が、部分的に、前記プリファランス・データを使用して、前記ウェブ・アプリケーションの前記バージョンのうちの前記第１のバージョンを、前記ウェブ・アプリケーションの前記適用可能なバージョンとして識別するようにすることにより、前記コンピューティング装置は、前記ウェブ・アプリケーションの前記適用可能なバージョンを自動的に識別するようになる、請求項１９に記載のコンピュータ読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
ウェブ・アプリケーションは、インターネットまたはイントラネットなどのネットワーク上で、ウェブ・ブラウザを介してアクセスされるアプリケーションである。ウェブ・アプリケーションは、今日のビジネス世界では不可欠なツールである。例えば、販売員は、自分のパーソナル・コンピュータ上の自分のウェブ・ブラウザを使用して、売上データベースに売上高を入力するために、自分の会社が提供するウェブ・アプリケーションにアクセスすることができる。他の例では、大学生は、自分のパーソナル・コンピュータ上のウェブ・ブラウザを使用して、授業を登録するために、自分の大学が提供するウェブ・アプリケーションにアクセすることができる。
【背景技術】
【０００２】
多くの状況において、ウェブ・アプリケーション・プロバイダは、様々なバージョンのウェブ・アプリケーションを様々なグループのユーザに提供しようと望むことがある。例えば、多国間の販売力を有する会社であれば、その欧州の販売員には第１のバージョンの売上高入力ウェブ・アプリケーションを提供し、その北米の販売員には第２のバージョンの売上高入力ウェブ・アプリケーションを提供しようと望むことがある。この例では、様々なバージョンのウェブ・アプリケーションが、様々なデータを収集して、様々な規定に準拠してもよい。他の例では、ウェブ・アプリケーション・プロバイダが、不特定多数の人々には現行バージョンのウェブ・アプリケーションを提供し続けながら、一群のベータ・ユーザには更新バージョンのウェブ・アプリケーションを提供しようと望むことがある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
様々なバージョンのウェブ・アプリケーションを実施するために、ウェブ・アプリケーション・プロバイダは、ソフトウェア・モジュール、画像、ビデオなど様々なバージョンの同等な資源を実装する必要が生じることがある。さらに、ウェブ・アプリケーション・プロバイダは、様々なバージョンの同等なソフトウェア・モジュールを実装する必要が生じることがあるので、ウェブ・アプリケーション・プロバイダは、様々なバージョンの同等なソフトウェア・モジュールを、様々な一群の物理的なホスティング装置にインストールする必要が生じることがある。例えば、ウェブ・アプリケーション・プロバイダは、第１のバージョンのウェブ・アプリケーションによって必要とされるソフトウェア・モジュールを、第１の一群の物理的なホスティング装置上にインストールする必要が生じることがあり、第２のバージョンのウェブ・アプリケーションによって必要とされるソフトウェア・モジュールを、第２の一群の物理的なホスティング装置上にインストールする必要が生じることがある。ウェブ・アプリケーション・プロバイダが、様々なバージョンの同等なソフトウェア・モジュールを様々な一群の物理的なホスティング装置にインストールする必要が生じることがあるというのも、これら様々なバージョンのウェブ・アプリケーションに関連する同等な資源が、同じファイル名を有することがあり、したがって、ファイル・システム・ディレクトリ構造内の同じ場所に記憶することができないからである。
【課題を解決するための手段】
【０００４】
この課題を解決するための手段は、発明を実施するための形態において以下でさらに説明する簡略化された形態での選ばれた概念を紹介するために提供される。この課題を解決するための手段は、特許請求される主題の重要な特徴または不可欠な特徴を識別するものではなく、特許請求される主題の範囲を限定するために使用されるものでもない。
【０００５】
本開示は、単一のホスティング装置を使用して、複数のバージョンの単一ウェブ・アプリケーションを提供する技法を説明する。以下で詳細に記述するように、ホスティング装置は、様々なディレクトリ内の様々なバージョンのウェブ・アプリケーションに関連する資源を記憶する。ホスティング装置は、クライアント装置からウェブ・アプリケーションに関連する要求を受信すると、このウェブ・アプリケーションの適用可能なバージョンとして、ウェブ・アプリケーションの各バージョンのうちの１つのバージョンを自動的に識別する。ホスティング装置は、ウェブ・アプリケーションの適用可能なバージョンを記憶するサブディレクトリのサブディレクトリ名を含むように、要求内のパス名を書き換える。次いで、ホスティング装置は、書き換えられたパス名によって識別された資源を逆参照する。このようにして、ホスティング装置は、ウェブ・アプリケーションの適用可能なバージョンの資源を使用して、要求を処理する。
【図面の簡単な説明】
【０００６】
【図１】本開示の技法を実施するホスティング装置を含む例示的なシステムを示すブロック図である。
【図２】ホスティング装置の例示的な論理コンポーネントを示すブロック図である。
【図３】ホスティング装置の論理コンポーネントの例示的な動作を示す流れ図である。
【図４】例示的なディレクトリ構造を示す図である。
【図５】ホスティング装置の例示的なハードウェアコンポーネントを示すブロック図である。
【発明を実施するための形態】
【０００７】
全般に、本開示は、単一のホスティング装置を使用して、複数のバージョンの単一ウェブ・アプリケーションを提供する技法を説明する。ウェブ・アプリケーションのバージョンのそれぞれが、互いに異なるユーザ・エクスペリエンスを提供してもよい。以下の記述では、様々な例を説明する。これらの例は、説明するために提供されるものであり、特許請求の範囲に記載の範囲を限定することを明示するものでもなく、または意味するものでもないことを理解すべきである。
【０００８】
図１は、例示的なシステム２を示すブロック図である。図１の例で示すように、システム２は、複数のバージョンのウェブ・アプリケーションをホスティングするホスティング装置４を含む。ホスティング装置４は、場合によっては複数の別々の物理ユニットに分割してもよい物理的な電子コンピューティング装置である。こうした場合、これらの物理的なユニットは、バス技術、相互接続技術、ネットワーク技術、および他の通信技術を含め、様々な通信技術を使用して互いに通信してもよい。例えば、ホスティング装置４は、単一の独立型サーバ装置、一群のサーバ装置、サーバ・ブレード、または他のタイプの物理的な電子コンピューティング装置でもよい。
【０００９】
本開示で使用されているように、用語「ウェブ・アプリケーション」は、インターネットまたはイントラネットなどのネットワーク上で、ウェブ・ブラウザを介してアクセスされるアプリケーションを指す。ホスティング装置４は、多種多様な異なるタイプのウェブ・アプリケーションをホスティングしてもよい。例えば、ホスティング装置４は、ビジネス・プロセス用のウェブ・アプリケーション、電子メール用のウェブ・アプリケーション、電子カレンダー用のウェブ・アプリケーション、電子協働用のウェブ・アプリケーション、および他のタイプのウェブ・アプリケーションをホスティングしてもよい。一具体例では、ホスティング装置４は、Ｍｉｃｒｏｓｏｆｔ  Ｏｆｆｉｃｅ  Ｌｉｖｅ  Ｗｏｒｋｓｐａｃｅの協働アプリケーション・ツールに基づいて複数のバージョンのウェブ・アプリケーションをホスティングする。
【００１０】
ホスティング装置４は、階層ディレクトリ・システムを記憶するコンピュータ読取り可能な記憶媒体を含む。ディレクトリ構造は、一群のサブディレクトリを含む。サブディレクトリのそれぞれが、サブディレクトリ名に関連している。例えば、第１のサブディレクトリが、サブディレクトリ名「ｒｏｏｔ／ｖｅｒｓｉｏｎ＿２００８＿０１／」に関連付けられ、第２のサブディレクトリが、サブディレクトリ名「ｒｏｏｔ／ｖｅｒｓｉｏｎ＿２００８＿０２／」に関連付けられてもよい。
【００１１】
この一群のディレクトリ内の各サブディレクトリ内には、同じウェブ・アプリケーションの異なるバージョンに関連付けられた異なる一群の資源が記憶される。言い換えれば、ディレクトリ・システムの第１のサブディレクトリ内には、ウェブ・アプリケーションの第１のバージョンと関連付けられた第１の一群の資源が記憶され、ディレクトリ・システムの第２のサブディレクトリ内には、ウェブ・アプリケーションの第２のバージョンと関連付けられた第２の一群の資源などが記憶される。
【００１２】
サブディレクトリのそれぞれにある資源は、多種多様な異なるタイプの資源でもよい。例えば、サブディレクトリのうちの第１のサブディレクトリ内の資源には、画像ファイル、オーディオ・ファイル、ビデオ・ファイル、ハイパテキスト・マーク付け言語（ＨＴＭＬ）ファイル、ジャバスクリプトのスクリプト、ＶＢスクリプトのスクリプト、拡張可能なマーク付け言語（ＸＭＬ）の文書、ダイナミック・リンク・ライブラリ（ＤＬＬ）のファイル、ＡＳＰ．ＮＥＴのページ、段階スタイルシートのファイル、構成ファイル、ジャバ・アプレット、ＡｃｔｉｖｅＸのオブジェクト、共通ゲートウェイ・インタフェース（ＣＧＩ）のスクリプト、ＰＨＰスクリプト、および他のタイプの資源が含まれ得る。
【００１３】
ウェブ・アプリケーションの各バージョンは、そのウェブ・アプリケーションについての互いに異なるユーザ・エクスペリエンスを提供するように設計される。言い換えれば、ウェブ・アプリケーションの第１のバージョンが、第１のユーザ・エクスペリエンスを提供するように設計され、ウェブ・アプリケーションの第２のバージョンが、第２のユーザ・エクスペリエンスなどを提供するように設計される。ウェブ・アプリケーションの様々なバージョンによって提供されるユーザ・エクスペリエンスは、様々に異なっていてもよい。例えば、ウェブ・アプリケーションの様々なユーザ・エクスペリエンスは、様々な機能、様々な概観、様々なユーザ・インターフェース、および他の様々な特徴を提供してもよい。一具体例では、売上高入力ウェブ・アプリケーションの第１のユーザ・エクスペリエンスが、ウェブ・アプリケーションの第１のバージョンによって提供されるウェブ・ページに売上高データを入力するときに、特定のデータを入力するようユーザに要求してもよく、また売上高入力ウェブ・アプリケーションの第２のバージョンによって提供される第２のユーザ・エクスペリエンスが、ウェブ・アプリケーションの第２のバージョンによって提供される同等のウェブ・ページに売上高データを入力するときに、特定のデータを入力するようユーザに要求しなくてもよい。
【００１４】
システム２はまた、クライアント装置６を含む。クライアント装置６は、多種多様な異なるタイプの電子コンピューティング装置でもよい。例えば、クライアント装置６は、パーソナル・コンピュータ、携帯電話、パーソナル・メディア・プレーヤ、ネットワーク機器、中間ネットワーク装置、メインフレーム・コンピュータ、車両組込み装置、ラップトップ・コンピュータ、テレビのセットトップ・ボックス、ハンドヘルド・コンピューティング装置、または他のタイプのコンピューティング装置でもよい。
【００１５】
さらに、システム２は、ネットワーク８を含む。ネットワーク８は、クライアント装置６とホスティング装置４の間の通信を容易にする電子通信ネットワークである。ネットワーク８は、多種多様な異なるタイプの電子通信ネットワークでもよい。例えば、ネットワーク８は、インターネット、イントラネット、ローカルエリア・ネットワーク、広域ネットワーク、パーソナルエリア・ネットワーク、アド・ホック・ネットワーク、または他のタイプのネットワークでもよい。さらに、ネットワーク８には、無線および／または有線の通信リンクが含まれ得る。例えば、イーサネット（登録商標）、ＷｉＦｉ、ＷｉＭａｘ，ブルートゥース、符号分割多元接続（ＣＤＭＡ）、および他の通信プロトコルを含め、ネットワーク８内のリンク上では様々な通信プロトコルを使用してもよい。
【００１６】
クライアント装置６は、ブラウザ１０を含む。ブラウザ１０は、クライアント装置６上で実行される、インターネット・ブラウジング・アプリケーションである。例えば、ブラウザ１０は、Ｍｉｃｒｏｓｏｆｔ  ＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ「登録商標」インターネット・ブラウザ、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘインターネット・ブラウザ、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅインターネット・ブラウザ、Ａｐｐｌｅ  Ｓａｆａｒｉインターネット・ブラウザ、Ｏｐｅｒａインターネット・ブラウザ、ＢｌａｃｋＢｅｒｒｙインターネット・ブラウザ、または他のタイプのインターネット・ブラウザのうちの一例でよい。
【００１７】
クライアント装置６のユーザ１２は、ブラウザ１０を使用して、ホスティング装置４によってホスティングされているウェブ・アプリケーションと対話してもよい。ホスティング装置４によってホスティングされているウェブ・アプリケーションとの対話を開始するために、ブラウザ１０は、ネットワーク８を介して、このウェブ・アプリケーションに関連する要求をホスティング装置４に送信する。例えば、ユーザ１２は、ブラウザ１０によって生成されるユーザ・インターフェースのアドレス・バーにＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）を入力する。この例では、ＵＲＬは、ホスティング装置４に関連するホスト名、およびウェブ・アプリケーションに関連するパス名を指定する。例えば、ユーザは、ブラウザ１０によって生成されるユーザ・インターフェースのるアドレス・バーに、ＵＲＬ「ｈｔｔｐ：／／ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ／ｍｙＷｅｂＡｐｐ／ｏｒｉｇｉｎ．ａｓｐｘ」を入力してもよい。この場合、ＵＲＬのドメイン名部分は「ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ」であり、パス名は「ｍｙＷｅｂＡｐｐ／ｏｒｉｇｉｎ．ａｓｐｘ」である。さらに、この例では、ブラウザ１０は、ＵＲＬの入力に応答して、ハイパーテキスト転送プロトコル（ＨＴＴＰ）要求メッセージを生成し、ネットワーク８を介してホスティング装置４に送信する。この例では、ＨＴＴＰ要求メッセージは、ホスティング装置４に関連するホスト名、およびウェブ・アプリケーションに関連するパス名を指定してもよい。例えば、ユーザが、ブラウザ１０によって生成されるユーザ・インターフェースのアドレス・バーに、ＵＲＬ「ｈｔｔｐ：／／ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ／ｍｙＷｅｂＡｐｐ／ｏｒｉｇｉｎ．ａｓｐｘ」を入力した場合、ブラウザ１０は、以下のＨＴＴＰ要求メッセージを生成し送信してもよい。すなわち、
ＧＥＴ  ／ｍｙＷｅｂＡｐｐ／ｏｒｉｇｉｎ．ａｓｐｘ  ＨＴＴＰ／１．１
Ｈｏｓｔ：  ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ
【００１８】
ホスティング装置４は、要求に応答して、ウェブ・アプリケーションの一群のバージョンから、ウェブ・アプリケーションの適用可能なバージョンを自動的に識別する。以下に述べるように、ホスティング装置４は、様々な方式で、ウェブ・アプリケーションの適用可能なバージョンを自動的に識別してもよい。例えば、ホスティング装置４は、クライアント装置６のユーザがドイツ語を使用するようにブラウザ１０を設定したとき、適用可能なバージョンとしてウェブ・アプリケーションの第１のバージョンを自動的に識別してもよく、クライアント装置６のユーザがロシア語を使用するようにブラウザ１０を設定したとき、適用可能なバージョンとしてウェブ・アプリケーションの第２のバージョンを自動的に識別してもよい。
【００１９】
ウェブ・アプリケーションの適用可能なバージョンを識別した後に、ホスティング装置４は、要求内のパス名が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を含むサブディレクトリのサブディレクトリ名を含むように、要求を書き換える。例えば、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を含むサブディレクトリのサブディレクトリ名は「ｒｏｏｔ／ｖｅｒｓｉｏｎ＿２００８＿０２」でよく、初めのＨＴＴＰ要求は以下でもよい。すなわち、
ＧＥＴ  ／ｍｙＷｅｂＡｐｐ／ｏｒｉｇｉｎ．ａｓｐｘ  ＨＴＴＰ／１．１
Ｈｏｓｔ：  ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ
この例では、ホスティング装置４は、この要求を書き換えてもよく、結果として以下のＨＴＴＰ要求になる。すなわち、
ＧＥＴ  ／ｒｏｏｔ／ｖｅｒｓｉｏｎ＿２００８＿０２／ｍｙＷｅｂＡｐｐ／ｏｒｉｇｉｎ．ａｓｐｘ  ＨＴＴＰ／１．１
Ｈｏｓｔ：  ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ
【００２０】
ホスティング装置４は、要求を書き換えた後に、書き換えられた要求によって指定されたパス名で識別された資源を逆参照する。本開示で使用されているように、「逆参照する」という表現は、参照識別子によって識別された資源を得ることを意味する。資源を逆参照することは、コンピュータ読取り可能な記憶媒体上に記憶された資源を検索するのと同じくらい簡単でもよい。他の場合では、逆参照することは、資源を得るために１つまたは複数のスクリプトもしくはアセンブリを実行することを要求してもよい。
【００２１】
ホスティング装置４は、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むように、要求内のパス名を書き換えるので、またウェブ・アプリケーションの適用可能なバージョンは、要求毎に異なってもよいので、ホスティング装置４は、同じパス名を指定する２つの要求を受け取るときに、２つの異なる資源を逆参照してもよい。例えば、第１のユーザが、ＵＲＬ「ｈｔｔｐ：／／ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ／ｒｏｏｔ／ｍｙＷｅｂＡｐｐ／ｏｒｉｇｉｎ．ａｓｐｘ」を、第１のユーザのブラウザのアドレス・バーに入力し、第２のユーザが、同一のＵＲＬを第２のユーザのブラウザのアドレス・バーに入力してもよい。結果として生じる２つの要求を受信すると、ホスティング装置４は、２つの異なる資源を逆参照してもよいが、それは、第１のユーザおよび第２のユーザが、ウェブ・アプリケーションの互いに異なる適用可能なバージョンを有してもよいからである。
【００２２】
ホスティング装置４は、書き換えられた要求によって指定されたパス名で識別された資源を逆参照した後に、この資源をクライアント装置６に送信してもよい。例えば、ホスティング装置４は、１つまたは複数のヘッダ・フィールドと資源を含む本体とを含むＨＴＴＰ応答を送信してもよい。この例では、ネットワーク８上で伝送するために、ＨＴＴＰ応答を複数のデータ・パケットに分割してもよい。
【００２３】
図２は、ホスティング装置４の例示的な論理コンポーネントを示すブロック図である。図２の例に示すように、ホスティング装置４は、ファイルを編成するためのディレクトリの階層を表すディレクトリ構造３０を含む。ディレクトリ構造３０は、ＦＡＴ３２、ＮＴＦＳ、ＨＰＦＳ、Ｇｏｏｇｌｅファイル・システム、階層型ファイル・システム・プラス（ＨＦＳ＋）、または他のタイプのファイル・システムを含むが、それらには限定されない、様々なファイル・システム・アーキテクチャを使用して実施してもよい。
【００２４】
ディレクトリ構造３０は、サブディレクトリ３２Ａおよび３２Ｂを含む。サブディレクトリ３２Ａは、サブディレクトリ３２Ｂの下位ディレクトリまたは上位ディレクトリではない。しかし、サブディレクトリ３２Ａおよびサブディレクトリ３２Ｂは、すぐ上の単一の親ディレクトリの子ディレクトリでもよい。サブディレクトリ３２Ａおよびサブディレクトリ３２Ｂは、サブディレクトリ名に関連している。例えば、サブディレクトリ３２Ａが、サブディレクトリ名「ｖｅｒｓｉｏｎ＿２００８＿０１」に関連付けられ、サブディレクトリ３２Ｂが、サブディレクトリ名「ｖｅｒｓｉｏｎ＿２００８＿０２」に関連付けられてもよい。図２の例には示していないが、サブディレクトリ３２Ａおよびサブディレクトリ３２Ｂには、さらに１つまたは複数の下位ディレクトリなどを含んでもよい、１つまたは複数の子ディレクトリが含まれ得る。サブディレクトリ３２Ａおよびサブディレクトリ３２Ｂが下位サブディレクトリを含む場合には、サブディレクトリ３２Ａの下位サブディレクトリ、およびサブディレクトリ３２Ｂの下位サブディレクトリの構造が同じでもよい。
【００２５】
サブディレクトリ３２Ａは、ウェブ・アプリケーションの第１のバージョンに関連する一群の資源３４Ａを記憶する。サブディレクトリ３２Ｂは、ウェブ・アプリケーションの第２のバージョンに関連する一群の資源３４Ｂを記憶する。前述の通り、資源３４Ａおよび資源３４Ｂは、ＤＬＬ、スクリプト、画像ファイル、ビデオ・ファイル、オーディオ・ファイルなどを含むが、それらには限定されない、多種多様な異なるタイプの資源でよい。図２の例には示していないが、ディレクトリ構造３０は、ウェブ・アプリケーションのさらなるバージョンに関連する資源を含む、さらなるサブディレクトリを含んでもよい。
【００２６】
場合によっては、資源３４Ａのうちの１つが、資源３４Ｂのうちの１つとファイル名が同じでもよいが、動作は異なっていてもよい。例えば、資源３４Ａが、「ｓａｌｅｓＥｎｔｒｙ．ｄｌｌ」と名付けられたファイルを含んでもよく、資源３４Ｂが、「ｓａｌｅＥｎｔｒｙ．ｄｌｌ」と名付けられたファイルを含んでもよい。「ｓａｌｅＥｎｔｒｙ．ｄｌｌ」と名付けられたこれら２つのファイルは、異なる機能を提供してもよい。他の例では、資源３４Ａのそれぞれが、資源３４Ｂ内の同等に名付けられた資源に対応してもよい。
【００２７】
図２の例では、ホスティング装置４は、ウェブ・アプリケーションのバージョンとユーザのグループとを関連付ける情報を記憶するグループ・データベース３６を含む。例えば、グループ・データベース３６は、一群のルールを記憶してもよく、そのルールのそれぞれが、ウェブ・アプリケーションの事前条件およびバージョン指定する。この場合、ルールによって指定された事前条件が真のとき、ウェブ・アプリケーションのバージョンは、このウェブ・アプリケーションの適用可能なバージョンであると判定されてもよい。グループ・データベース３６は、多種多様な事前条件に基づいて多種多様なルールを記憶してもよく、その事前条件のうちのあるものは、ホスティング装置４が受信する要求のコンテンツに依存してもよく、また依存しなくてもよい。
【００２８】
第１の例では、ＨＴＴＰ要求は、ＨＴＴＰ応答について受入れ可能な１つまたは複数の言語を指定する「Ａｃｃｅｐｔ−Ｌａｎｇｕａｇｅ」ヘッダを含んでもよい。この第１の例では、グループ・データベース３６には、「ドイツ語」を指定する「Ａｃｃｅｐｔ−Ｌａｎｇｕａｇｅ」ヘッダをＨＴＴＰ要求が含むときに、ウェブ・アプリケーションの適用可能なバージョンがこのウェブ・アプリケーションの第１のバージョンであることを示すルールが含まれ得る。この第１の例では、グループ・データベース３６にはまた、「英語」を指定する「Ａｃｃｅｐｔ−Ｌａｎｇｕａｇｅ」ヘッダをＨＴＴＰ要求が含むときに、ウェブ・アプリケーションの適用可能なバージョンがこのウェブ・アプリケーションの第２のバージョンであることを示すルールが含まれ得る。この第１の例では、ウェブ・アプリケーションの第１のバージョンおよび第２のバージョンは、同じユーザ・エクスペリエンスの単なる変換ではない、互いに異なるユーザ・エクスペリエンスを提供してもよい。
【００２９】
第２の例では、ＨＴＴＰ要求は、ユーザ・エージェントのユーザ・エージェント・ストリングを指定する「Ｕｓｅｒ−Ａｇｅｎｔ」ヘッダを含んでもよい。この場合、グループ・データベース３６は、ユーザ・エージェントがＭｏｚｉｌｌａ  Ｆｉｒｅｆｏｘインターネット・ブラウザであることを指定する「Ｕｓｅｒ−Ａｇｅｎｔ」ヘッダをＨＴＴＰ要求が含むときに、ウェブ・アプリケーションの適用可能なバージョンがこのウェブ・アプリケーションの第１のバージョンであることを示すルールを含んでもよい。この場合、グループ・データベース３６はまた、ユーザ・エージェントがＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒインターネット・ブラウザであることを指定する「Ｕｓｅｒ−Ａｇｅｎｔ」ヘッダをＨＴＴＰ要求が含むときに、ウェブ・アプリケーションの適用可能なバージョンがこのウェブ・アプリケーションの第２のバージョンであることを示すルールを含んでもよい。
【００３０】
第３の例では、ユーザは、ウェブ・アプリケーションにアクセスするために、ホスティング装置４にログインするよう要求されてもよい。この第３の例では、グループ・データベース３６には、ユーザそれぞれの好みを指定するプリファレンス・データが含まれ得る。例えば、第１のユーザが、ウェブ・アプリケーションの第１のバージョンを使用することを好んでもよく、また第２のユーザが、ウェブ・アプリケーションの第２のバージョンを使用することを好んでもよい。状況によっては、グループ・データベース３６内の１つのルールは、ユーザにとってのウェブ・アプリケーションの適用可能なバージョンがウェブ・アプリケーションの第１のバージョンであることを示すことがあるが、そのユーザの好みは、ユーザがウェブ・アプリケーションの第２のバージョンを使用することを好んでいることを示すことがある。これらの状況では、ユーザの好みが、より重要になることがある。したがって、ユーザは、ウェブ・アプリケーションの第２のバージョンを使用することを優先して、ウェブ・アプリケーションの第１のバージョンを使用しないことを事実上選択してもよく、またウェブ・アプリケーションの第１のバージョンと、ウェブ・アプリケーションの第２のバージョンとの間で使用を切り替えてもよい。多くのユーザが現行のユーザ・インターフェースを好んでいるときに、ウェブ・アプリケーション・プロバイダが、新規のユーザ・インターフェースを有するウェブ・アプリケーションのバージョンを世に出そうとしていると、これらの状況が頻繁に生じることがある。
【００３１】
グループ・データベース３６内のルールは、様々な目的のために構築されてよい。第１の例では、ウェブ・アプリケーションの新規のバージョンは、第１の地理的領域で使用する準備が整っているが、第２の地理的領域で使用する準備が整っていないことがある。この第１の例では、グループ・データベース３６内のルールは、第２の地理的領域内のユーザがウェブ・アプリケーションの既存のバージョンを使い続けながら、第１の地理的領域内のユーザがウェブ・アプリケーションの新規バージョンを使用できるように構築されてもよい。これにより、ウェブ・アプリケーションのプロバイダは、世界的な進出を待つことなく、ウェブ・アプリケーションの新規バージョンを第１の地理的領域内の市場に迅速に送り出すことが可能になる。第２の例では、プロバイダは、ウェブ・アプリケーションの既存バージョンの提供を続けながら、ウェブ・アプリケーションの新規バージョンにベータ・テストを実行していてもよい。この第２の例では、グループ・データベース３６内のルールは、ベータ・テストを自発的に行ったユーザがウェブ・アプリケーションの新規バージョンと対話することができ、他のユーザがウェブ・アプリケーションの既存バージョンと対話し続けることができるように構築されてもよい。これらの例では、ウェブ・アプリケーションの新旧バージョンについて議論しているが、ウェブ・アプリケーションのバージョンは、こうした関係である必要はない。
【００３２】
ホスティング装置４はまた、バージョン・モジュール３８を含む。バージョン・モジュール３８は、ウェブ・アプリケーションに関連する要求を受信する。この要求を受信することに応答して、バージョン・モジュール３８は、ウェブ・アプリケーションの適用可能なバージョンを自動的に識別する。図２の例では、バージョン・モジュール３８は、グループ・データベース３６内の情報を使用して、クライアント装置６のユーザに関連するウェブ・アプリケーションのバージョンを識別する。例えば、グループ・データベース３６が、ウェブ・アプリケーションの適用可能なバージョンを示す一群のルールを使用する場合、バージョン・モジュール３８は、このルールを要求に自動的に適用することにより、ウェブ・アプリケーションの適用可能なバージョンを自動的に識別してもよい。
【００３３】
バージョン・モジュール３８がウェブ・アプリケーションの適用可能なバージョンを自動的に識別した後に、ホスティング装置４内の要求書換えモジュール４０は、要求内に含まれるパス名が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むように、要求を書き換えてもよい。例えば、ウェブ・アプリケーションの適用可能なバージョンに関連する資源がサブディレクトリ３２Ａに記憶される場合、要求書換えモジュール４０は、要求で指定されたパス名がサブディレクトリ３２Ａに関連するサブディレクトリ名を含むように、要求を書き換えてもよい。
【００３４】
要求書換えモジュール４０が要求を書き換えた後に、要求ハンドラ・モジュール４２は、書き換えられた要求によって指定されたパス名で識別された資源を逆参照する。書き換えられた要求によって指定されたパス名が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むので、要求ハンドラ・モジュール４２は、ウェブ・アプリケーションの異なるバージョンに関連する資源を記憶するサブディレクトリ内の資源とは対照的に、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリ内の資源にアクセスする。例えば、書き換えられた要求によって指定されたパス名が、サブディレクトリ３２Ａに関連するサブディレクトリ名を含む場合、要求ハンドラ・モジュール４２は、サブディレクトリ３２Ｂ内の同等に名付けられた資源の代わりに、サブディレクトリ３２Ａ内の資源を逆参照する。
【００３５】
図２の例に示すように、ホスティング装置４はまた、グローバル・アセンブリ・キャッシュ（ＧＡＣ）４４を含んでもよい。ＧＡＣ４４は、．ＮＥＴアセンブリに対してのマシン全体のレポジトリである。各アセンブリは、共通中間言語（ＣＩＬ）においてフォーマット化されたコード・ライブラリである。アセンブリは、プロセス・アセンブリでも、ライブラリ・アセンブリでもよい。プロセス・アセンブリは、ライブラリ・アセンブリで定義されたクラスを使用するプロセスを表す。ホスティング装置４は、ＧＡＣ４４にインストールされた各ライブラリ・アセンブリの単一コピーをメモリにロードしてもよい。ホスティング装置４上で実行される多くの様々なプログラムは、メモリにロードされたライブラリ・アセンブリの単一コピーの方法を呼び出してもよい。これにより、ホスティング装置４が、メモリ内の機能の共通セットのいくつかのコピーを同時に記憶する必要性が低くなる。
【００３６】
資源３４Ａまたは３４Ｂのうちの１つまたは複数を逆参照することにより、要求ハンドラ・モジュール４２は、ＧＡＣ４４内にインストールされた１つまたは複数のアセンブリを利用することが必要になることがある。例えば、サブディレクトリ３２Ａ内の資源は、ＧＡＣ４４内に記憶されたアセンブリの第１のバージョンによって提供される機能を利用するサーバ側のスクリプトを含むＡＳＰ．ＮＥＴページでもよい。さらに、この例では、サブディレクトリ３２Ｂ内の資源は、ＧＡＣ４４内のアセンブリの第２のバージョンによって提供される機能を利用するサーバ側のスクリプトを含むＡＳＰ．ＮＥＴページでもよい。
【００３７】
サブディレクトリ３２Ａは、サブディレクトリ３２Ａ内の資源とＧＡＣ４４内のアセンブリのバージョンとの間の結合を指定するウェブ構成ファイルを含んでもよい。例えば、ＧＡＣ４４は、「Ｗｅｂｃｏｎｔｒｏｌｓ．ｄｌｌ」アセンブリの第１のバージョンおよび第２のバージョンを含んでもよい。この例では、サブディレクトリ３２Ａのウェブ構成ファイルは、サブディレクトリ３２Ａ内の資源による「Ｗｅｂｃｏｎｔｒｏｌｓ．ｄｌｌ」アセンブリの方法の呼び出しが、ＧＡＣ４４内の「Ｗｅｂｃｏｎｔｒｏｌｓ．ｄｌｌ」アセンブリの第１のバージョンを対象とするものであることを指定してもよい。サブディレクトリ３２Ｂ、およびウェブ・アプリケーションのバージョンに関連する資源を含む他のサブディレクトリは、同様のウェブ構成ファイルを含んでもよい。前の例の説明を続けると、サブディレクトリ３２Ｂのウェブ構成ファイルは、サブディレクトリ３２Ｂ内の資源による「Ｗｅｂｃｏｎｔｒｏｌｓ．ｄｌｌ」アセンブリの方法の呼び出しが、ＧＡＣ４４内の「Ｗｅｂｃｏｎｔｒｏｌｓ．ｄｌｌ」アセンブリの第２のバージョンを対象とするものであることを指定してもよい。このようにして、ウェブ・アプリケーションの様々なバージョンに関連する資源は、ＧＡＣ４４内にインストールされたアセンブリの様々なバージョンを利用することができる。
【００３８】
前述の通り、ウェブ・アプリケーションのバージョンのそれぞれが、互いに異なるユーザ・エクスペリエンスを提供してもよい。本開示で使用されているように、「ユーザ・エクスペリエンス」は、ユーザがウェブ・アプリケーションと対話する方式である。２人のユーザが、互いに異なる言語でのウェブ・アプリケーションが提供するページを見ていても、そのウェブ・アプリケーションで同じユーザ・エクスペリエンスを有することができる。例えば、ウェブ・アプリケーションのバージョンは、ウェブ・ページの第１のバージョンを第１のユーザに提供し、ウェブ・ページの第２のバージョンを第２のユーザに提供してもよい。この例では、ウェブ・ページの第１のバージョンおよびウェブ・ページの第２のバージョンは、レイアウトおよび機能が全く同じでもよいが、テキストまたはグラフィックスなどの特定の要素を互いに代用してもよいという点で異なってもよい。例えば、第１のウェブ・ページ内のテキストをポルトガル語で書いてもよく、第２のウェブ・ページ内のテキストをフランス語で書いてもよい。この例では、第１のユーザおよび第２のユーザは、同様にウェブ・アプリケーションと対話することができるので、同じユーザ・エクスペリエンスを有することができる。対照的に、ページのレイアウト、ページの機能、またはサイトの編成などが異なっていることにより、ユーザが各ページと別々に対話しなければならない場合には、ウェブ・アプリケーションの様々なバージョンが、様々なユーザ・エクスペリエンスを提供してもよい。
【００３９】
これをさらに説明するために、．ＮＥＴサテライト・アセンブリを使用して、様々な静的要素を提供してもよいが、ユーザがウェブ・アプリケーションと対話する方法を変更しなくてもよいことを考えてみる。例えば、ＡＳＰ．ＮＥＴページには、ライブラリ・アセンブリによって提供される方法を呼び出すサーバ側のスクリプトが含まれ得る。デフォルトでは、ライブラリ・アセンブリの方法は、英語でのストリングを戻してもよい。この例では、サテライト・アセンブリは、ライブラリ・アセンブリに関連してもよい。サテライト・アセンブリは、特定の文化に関連し、ライブラリ・アセンブリの動作を特定の文化にローカライズするスタティックな（すなわちノンコードの）資源を含む。典型的な使用では、サテライト・アセンブリは、特定の文化の言語でのストリングを含む。例えば、フランス系カナダ人の文化に関連するサテライト・アセンブリは、フランス系カナダ人の方言でのストリングを含んでもよい。ＡＳＰ．ＮＥＴページ内のサーバ側のスクリプトが、ライブラリ・アセンブリによって提供される方法を呼び出し、文化の選択をフランス系カナダ人に設定すると、この方法は、英語でのストリングの代わりに、フランス系カナダ人の方言でのストリングを戻す。このストリングは、ウェブ・ページ内に含む、画像、テキストなどのＵＲＬでもよい。このようにして、一群のサテライト・アセンブリを提供することにより、ウェブ・デザイナは、ウェブ・ページを作成するのに使用されるライブラリ・アセンブリを書き換えることなく、様々な言語でのウェブ・ページを提供することができる。すなわち、単一のライブラリ・アセンブリは、一群のサテライト・アセンブリを伴うとき、複数の言語でのウェブ・ページを生成することができる。しかし、すべてのユーザが、ウェブ・アプリケーションと対話しているときには、基本的に同じユーザ・エクスペリエンスを有しているので、ウェブ・アプリケーション内でサテライト・アセンブリを使用しても、異なるユーザ・エクスペリエンスは提供されない。
【００４０】
図３は、図２の例に示した論理コンポーネントに関する、ホスティング装置４の例示的な動作を示す流れ図である。図３の例に示すように、バージョン・モジュール３８は、ウェブ・アプリケーションに関連する要求を、ネットワーク８を介してクライアント装置６から受信する（６０）。次に、バージョン・モジュール３８は、この要求が、ウェブ・アプリケーションのバージョンを識別するバージョン識別子を含むかどうか判定する（６２）。例えば、バージョン・モジュール３８は、この要求が、ウェブ・アプリケーションのバージョンを識別するバージョン識別子を指定するクッキーを含むかどうか判定してもよい。この要求が、ウェブ・アプリケーションのバージョンを識別するバージョン識別子を含むと判定されると（６２の「はい」）、要求書換えモジュール４０は、要求によって指定されたパス名が、ウェブ・アプリケーションの指定されたバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むように、このパス名を書き換える（６４）。この要求が、ウェブ・アプリケーションのバージョンを指定すると判定される状況では、ウェブ・アプリケーションの指定されたバージョンは、ウェブ・アプリケーションの適用可能なバージョンである。
【００４１】
一方で、この要求が、ウェブ・アプリケーションのバージョンを識別するバージョン識別子を含まないと判定される場合（６２の「いいえ」）、バージョン・モジュール３８は、ウェブ・アプリケーションの適用可能なバージョンを自動的に識別してもよい（６６）。図２を参照しながら前述した通り、バージョン・モジュール３８は、グループ・データベース４４を使用して、ウェブ・アプリケーションの適用可能なバージョンを識別してもよい。
【００４２】
バージョン・モジュール３８がウェブ・アプリケーションの適用可能なバージョンを自動的に識別した後に、要求書換えモジュール４０は、要求によって指定されたパス名が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を含むサブディレクトリのサブディレクトリ名を含むように、このパス名を書き換える（６８）。要求書換えモジュール４０が、ホスティング装置４でパス名を書き換えるので、クライアント装置６は、パス名が書き換えられたことを示すいかなる指示も受信しなくてよい。
【００４３】
要求書換えモジュール４０が、ステップ６４またはステップ６８のいずれかにおいて、要求によって指定されたパス名を書き換えると、要求ハンドラ・モジュール４２は、書き換えられた要求内のパス名によって識別された資源を逆参照する（７０）。例えば、要求ハンドラ・モジュール４２は、ＨＴＭＬファイルを生成するＡＳＰ．ＮＥＴページ内のスクリプトを実行することにより、パス名によって指定されたＡＳＰ．ＮＥＴページを逆参照してもよい。他の場合には、要求ハンドラ・モジュール４２は、要求内の情報を共通ゲートウェイ・インタフェース（ＣＧＩ）資源に提供することにより、パス名によって指定されたＣＧＩ資源を逆参照してもよい。
【００４４】
要求ハンドラ・モジュール４２は、書き換えられた要求内のパス名によって識別された資源を逆参照した後に、要求に対する応答を生成してもよい（７２）。応答がＨＴＴＰ応答である場合、この応答は、ウェブ・アプリケーションの適用可能なバージョンのバージョン識別子を含むクッキーを設定するようクライアント装置６に命令するｓｅｔ−ｃｏｏｋｉｅヘッダを含んでもよい。したがって、クライアント装置６は、ウェブ・アプリケーションに関連する後続のＨＴＴＰ要求内に「Ｓｅｔ−Ｃｏｏｋｉｅ」ヘッダのコンテンツを含むことになる。他の例では、要求ハンドラ・モジュール４２は、ウェブ・アプリケーションに関連する資源の場所を指定する応答内のパス名が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むように、この応答を書き換えてもよい。これらの技法により、ホスティング装置４は、グループ・データベース３６を使用して、ウェブ・アプリケーションの適用可能なバージョンを識別するという、潜在的に高価なステップを実行しないですむことが可能になる。
【００４５】
要求に対する応答を生成した後に、要求ハンドラ・モジュール４２は、この応答をクライアント装置６に送信してもよい（７４）。
【００４６】
図３の例に示した動作は、単にホスティング装置４の動作の一例に過ぎないことを理解すべきである。例えば、ホスティング装置４の他の例示的な動作では、バージョン・モジュール３８は、要求によって指定されたパス名が、ウェブ・アプリケーションのバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むときに、要求がバージョン識別子を指定すると判定してもよい。この例では、要求によって指定されたパス名が、ウェブ・アプリケーションのバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含む場合、要求書換えモジュール４０は、要求によって指定されたパス名を書き換える必要がない場合がある。
【００４７】
図４は、ウェブ・アプリケーションの２つのバージョンに関連する資源を記憶するために使用してもよい、ディレクトリ構造９０の図である。図４の例に示すように、ディレクトリ構造９０は、ディレクトリ名「／ａｐｐｌｉｃａｔｉｏｎ＿ｒｏｏｔ」に関連するディレクトリを含む。「／ａｐｐｌｉｃａｔｉｏｎ＿ｒｏｏｔ」ディレクトリは、ディレクトリ名「ｖｅｒｓｉｏｎ＿２００８＿０１」に関連する第１のサブディレクトリ、およびディレクトリ名「ｖｅｒｓｉｏｎ＿２００８＿０２」に関連する第２のサブディレクトリを含む。すなわち、「ｖｅｒｓｉｏｎ＿２００８＿０１」サブディレクトリ、および「ｖｅｒｓｉｏｎ＿２００８＿０２」サブディレクトリは、すぐ上の単一の親ディレクトリ（すなわち「／ａｐｐｌｉｃａｔｉｏｎ＿ｒｏｏｔ」ディレクトリ）の子ディレクトリである。「ｖｅｒｓｉｏｎ＿２００８＿０１」サブディレクトリは、ウェブ・アプリケーションの第１のバージョンに関連する資源を記憶してもよく、「ｖｅｒｓｉｏｎ＿２００８＿０２」サブディレクトリは、ウェブ・アプリケーションの第２のバージョンに関連する資源を記憶してもよい。
【００４８】
図４の例はさらに、「ｖｅｒｓｉｏｎ＿２００８＿０１」サブディレクトリが、「Ｃａｎｃｅｌａｔｉｏｎ」サブディレクトリ、「Ｉｎｔｅｒｃｅｐｔ  Ｓｕｒｖｅｙ」サブディレクトリ、「Ｍｉｓｃ」サブディレクトリ、「Ｒｅｓｏｕｒｃｅｓ」サブディレクトリ、「ＲＳＳ」サブディレクトリ、および「Ｓｅｒｖｉｃｅｓ」サブディレクトリを含むことを示している。さらに、図４の例は、「Ｉｎｔｅｒｃｅｐｔ  Ｓｕｒｖｅｙ」サブディレクトリが「Ｅｎ−ｕｓ」サブディレクトリを含むことを示している。図４の例はまた、「Ｒｅｓｏｕｒｃｅｓ」サブディレクトリが、「Ｄｉａｌｏｇ」サブディレクトリ、「Ｅｄｉｔｏｒ」サブディレクトリ、「Ｉｍａｇｅｓ」サブディレクトリ、「Ｊｓ」サブディレクトリ、「Ｔｅｍｐｌａｔｅｓ」サブディレクトリ、「ＲＳＳ」サブディレクトリ、および「Ｓｅｒｖｉｃｅｓ」サブディレクトリを含むことを示している。図４の例には示していないが、「ｖｅｒｓｉｏｎ＿２００８＿０２」サブディレクトリは、「ｖｅｒｓｉｏｎ＿２００８＿０１」サブディレクトリと同じまたは同様のサブディレクトリを有してもよい。
【００４９】
ディレクトリ構造９０は、要求書換えモジュール４０が、どのようにして要求を書き換えることができるのかの例を提供するために使用してもよい。その一例においては、バージョン・モジュール３８は、「ｖｅｒｓｉｏｎ＿２００８＿０１」サブディレクトリ内にその資源が記憶されるウェブ・アプリケーションのバージョンを識別してもよい。この例では、要求書換えモジュール４０が、以下のパス名「ａｐｐｌｉｃａｔｉｏｎ＿ｒｏｏｔ／Ｒｅｓｏｕｒｃｅｓ／Ｉｍａｇｅｓ／ｌｏｇｏ．ｊｐｇ」を指定する要求を受信してもよい。このパス名は、ディレクトリ構造９０内のサブディレクトリのパス名には対応しない。要求書換えモジュール４０は、要求を受信すると、要求内のパス名が以下の通り「ａｐｐｌｉｃａｔｉｏｎ＿ｒｏｏｔ／ｖｅｒｓｉｏｎ＿２００８＿０１／Ｒｅｓｏｕｒｃｅｓ／Ｉｍａｇｅｓ／ｌｏｇｏ．ｊｐｇ」と読めるように、このパス名を書き換えてもよい。
【００５０】
図５は、ホスティング装置４の例示的なハードウェアコンポーネントを示すブロック図である。図５の例に示すように、ホスティング装置４は、メモリ・ユニット１００を含む。メモリ・ユニット１００は、データおよび命令を記憶することのできる、コンピュータ読取り可能な記憶媒体である。メモリ・ユニット１００は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、ダブル・データ・レート・シンクロナス・ダイナミック・ランダム・アクセス・メモリ（ＤＤＲ  ＳＤＲＡＭ）、低遅延ＤＲＡＭ、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭ、ラムバスＲＡＭ、または他のタイプのコンピュータ読取り可能な記憶媒体を含むが、それらには限定されない、様々な異なるタイプのコンピュータ読取り可能な記憶媒体でよい。
【００５１】
さらに、ホスティング装置４は、命令を実行することのできる処理ユニット１０２を含む。処理ユニット１０２は、１つもしくは複数の処理コア、および／または１つもしくは複数の別々のマイクロプロセッサとして実装してもよい。例えば、処理ユニット１０２は、１つまたは複数のＩｎｔｅｌ  Ｃｏｒｅ  ２マイクロプロセッサとして実装してもよい。処理ユニット１０２は、ｘ８６命令セット、ＰＯＷＥＲ命令セット、ＲＩＳＣ命令セット、ＳＰＡＲＣ命令セット、ＩＡ−６４命令セット、ＭＩＰＳ命令セット、または他の命令セットなど、命令セット内の命令を実行することができる。
【００５２】
ホスティング装置４はまた、ホスティング装置４がビデオ情報を表示装置１０６に出力することができるようにする、ビデオ・インターフェース１０４を含む。表示装置１０６は、様々な異なるタイプの表示装置でもよい。例えば、表示装置１０６は、陰極線管表示装置、ＬＣＤ表示パネル、プラズマ・スクリーン表示パネル、タッチセンシティブ表示パネル、ＬＥＤアレイ、または他のタイプの表示装置でもよい。
【００５３】
さらに、ホスティング装置４は、不揮発性記憶装置１０８を含む。不揮発性記憶装置１０８は、データおよび／または命令を記憶することができるコンピュータ読取り可能な記憶媒体である。不揮発性記憶装置１０８は、様々な異なるタイプの、互いに異なる不揮発性記憶装置でもよい。例えば、不揮発性記憶装置１０８は、１つまたは複数のハード・ディスク・ドライブ、磁気テープ・ドライブ、ＣＤ−ＲＯＭドライブ、ＤＶＤ−ＲＯＭドライブ、Ｂｌｕ−Ｒａｙディスク・ドライブ、または他のタイプの不揮発性記憶装置でもよい。
【００５４】
ホスティング装置４はまた、ホスティング装置４が外部コンポーネントと通信できるようにする、外部コンポーネントインターフェース１１０を含む。図５の例に示すように、外部コンポーネントインターフェース１１０は、入力装置１１２および外部記憶装置１１４と通信する。ホスティング装置４の一つの実装では、外部コンポーネントインターフェースは、ユニバーサル・シリアル・バス（ＵＳＢ）インターフェースである。ホスティング装置４の他の実装では、ホスティング装置４には、ホスティング装置４が入力装置および／または出力装置と通信できるようにする、他のタイプのインターフェースが含まれ得る。例えば、ホスティング装置４には、ＰＳ／２インターフェースが含まれ得る。入力装置１１２は、キーボード、マウス、トラックボール、スタイラス入力装置、タッチ・パッド、タッチセンシティブ表示画面、または他のタイプの入力装置を含むが、それらには限定されない、様々な異なるタイプの装置でもよい。外部記憶装置１１４は、磁気テープ、フラッシュ・メモリ・モジュール、磁気ディスク・ドライブ、光ディスク・ドライブ、および他のコンピュータ読取り可能な記憶媒体を含め、様々な異なるタイプのコンピュータ読取り可能な記憶媒体でもよい。
【００５５】
さらに、ホスティング装置４は、ホスティング装置４がネットワーク８との間でデータを送受信できるようにする、ネットワーク・インターフェース１１６を含む。ネットワーク・インターフェース１１６は、様々な異なるタイプのネットワーク・インターフェースでもよい。例えば、ネットワーク・インターフェース１１６は、イーサネット・インターフェース、トークン・リング・ネットワーク・インターフェース、光ファイバ・ネットワーク・インターフェース、無線ネットワーク・インターフェース（例えば、ＷｉＦｉ、ＷｉＭａｘなど）、または他のタイプのネットワーク・インターフェースでもよい。
【００５６】
ホスティング装置４はまた、ホスティング装置４の様々なコンポーネント間での通信を容易にする通信媒体１１８を含む。通信媒体１１８は、ＰＣＩバス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、加速グラフィックス・ポート（ＡＧＰ）バス、インフィニバンド相互接続、シリアル・アドバンスト・テクノロジー・アタッチメント（ＡＴＡ）相互接続、パラレルＡＴＡ相互接続、ファイバ・チャネル相互接続、ＵＳＢバス、小型コンピュータ・システム・インターフェース（ＳＣＳＩ）インターフェース、または他のタイプの通信媒体を含むが、それらには限定されない、１つまたは複数の異なるタイプの通信媒体を含んでもよい。
【００５７】
いくつかのコンピュータ読取り可能な記憶媒体が、図５の例に示してある（すなわち、メモリ１００、不揮発性記憶装置１０８、および外部記憶装置１１４）。それとともに、これらのコンピュータ読取り可能な記憶媒体は、単一の論理的なコンピュータ読取り可能な記憶媒体を構成してもよい。この単一の論理的なコンピュータ読取り可能な記憶媒体は、処理ユニット１０２によって実行可能な命令を記憶してもよい。前述の動作は、この単一の論理的なコンピュータ読取り可能な記憶媒体上に記憶された命令を実行する結果として生じてもよい。したがって、この説明で、特定の論理モジュールが特定の動作を実行するという場合、こうした記述は、ソフトウェア・モジュールの命令により、処理ユニット１０２などの処理ユニットがこの動作を実行することを意味すると解釈してもよい。
【００５８】
本開示の技法は、様々なやり方で概念化してもよい。例えば、本開示の技法は、複数のバージョンのウェブ・アプリケーションを提供するための方法として概念化してもよい。この方法は、それぞれがサブディレクトリ名を有する一群のサブディレクトリを含む階層ディレクトリ・システムを、コンピューティング装置からアクセス可能なコンピュータ読取り可能な記憶媒体上に記憶するステップを含む。さらに、この方法は、ウェブ・アプリケーションの一群のバージョンにおけるウェブ・アプリケーションの互いに異なるバージョンに関連する資源を、コンピュータ読取り可能な媒体上で各サブディレクトリのそれぞれの内部に記憶するステップを含み、ウェブ・アプリケーションのバージョンのそれぞれが、互いに異なるユーザ・エクスペリエンスを提供する。この方法はまた、電子通信ネットワークを介したクライアント装置からの、ウェブ・アプリケーションに関連する資源のパス名を指定する要求を、コンピューティング装置において受信するステップを含む。さらに、この方法は、この要求を受信することに応答して、ウェブ・アプリケーションの一群のバージョンからウェブ・アプリケーションの適用可能なバージョンを、コンピューティング装置において自動的に識別するステップを含む。この方法はまた、パス名が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むように、コンピューティング装置において要求を書き換えるステップを含む。さらに、この方法は、要求を書き換えた後に、書き換えられた要求内のパス名によって識別された資源を、コンピューティング装置において逆参照するステップを含む。
【００５９】
他の例では、本開示の各技法は、命令を実行することができる処理ユニットを含む電子コンピューティング装置として概念化してもよい。電子コンピューティング装置はまた、クライアント装置を含む電子通信ネットワーク上での通信を容易にするネットワーク・インターフェースを含む。さらに、電子コンピューティング装置は、単一の親ディレクトリの子ディレクトリである一群のサブディレクトリを含む、階層ディレクトリ・システムを記憶する不揮発性記憶装置を含み、一群のサブディレクトリ内の各サブディレクトリは、サブディレクトリ名を有し、サブディレクトリのそれぞれの中に、ウェブ・アプリケーションの一群のバージョンにおけるウェブ・アプリケーションの異なるバージョンに関連する資源を有する。ウェブ・アプリケーションのバージョンのそれぞれが、互いに異なるユーザ・エクスペリエンスを提供する。電子コンピューティング装置はまた、ウェブ・アプリケーションに関連する資源のパス名を指定する要求を、電子通信ネットワークを介してクライアント装置から受信し、この要求を受信するのに応答して、ウェブ・アプリケーションの一群のバージョンからウェブ・アプリケーションの適用可能なバージョンを自動的に識別するバージョン・モジュールを含む。さらに、電子コンピューティング装置は、パス名が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名を含むように要求を書き換える、要求書換えモジュールを含む。さらに、電子コンピューティング装置は、要求が書き換えられた後に、書き換えられた要求内のパス名によって識別された資源を逆参照し、書き換えられた要求内のパス名によって識別された資源をクライアント装置に送信する、要求ハンドラ・モジュールを含む。
【００６０】
本開示の各技法はまた、複数のサブディレクトリを含む階層ディレクトリ・システムを含むコンピュータ読取り可能な記憶媒体として概念化してもよい。サブディレクトリのそれぞれが、互いに異なるサブディレクトリ名に関連する。サブディレクトリのそれぞれが、ウェブ・アプリケーションの一群のバージョンにおけるウェブ・アプリケーションの互いに異なるバージョンに関連する資源を記憶する。サブディレクトリのそれぞれが、すぐ上の単一の親ディレクトリの子ディレクトリである。サブディレクトリのそれぞれには、同等に名付けられた資源が存在する。ウェブ・アプリケーションのバージョンのそれぞれが、異なる一群の機能および異なるユーザ・インターフェースを提供することにより、互いに異なるユーザ・エクスペリエンスを提供する。コンピュータ読取り可能な記憶媒体はまた、一群のルールを含むグループ・データベースを含み、このルールのそれぞれが、ウェブ・アプリケーションの状態とその各バージョンのうちの１つのバージョンを指定する。さらに、コンピュータ読取り可能な記憶媒体は、コンピューティング装置で実行されるときに、コンピューティング装置が、ウェブ・アプリケーションに関連する資源のパス名を指定するハイパーテキスト転送プロトコル（ＨＴＴＰ）要求を、電子通信ネットワークを介してクライアント装置から受信するようにする命令を含む。この命令はまた、ＨＴＴＰ要求を受信することに応答して、このＨＴＴＰ要求が、ウェブ・アプリケーションの適用可能なバージョンを識別するバージョン識別子を含んでいるかどうか、コンピューティング装置が判定するようにし、このウェブ・アプリケーションの適用可能なバージョンは、ウェブ・アプリケーションのバージョンのうちの１つのバージョンである。さらに、この命令により、コンピューティング装置は、ルールを使用して、ＨＴＴＰ要求がウェブ・アプリケーションの適用可能なバージョンを識別するバージョン識別子を含まないときに、ウェブ・アプリケーションの一群のバージョンからウェブ・アプリケーションの適用可能なバージョンを自動的に識別するようになる。この命令はまた、コンピューティング装置が、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリのサブディレクトリ名をパス名が含むように、ＨＴＴＰ要求を書き換えるようにし、それにより、ウェブ・アプリケーションの適用可能なバージョンに関連する資源を記憶するサブディレクトリ内の資源をパス名が識別するようにする。さらに、この命令により、ＨＴＴＰ要求を書き換えた後に、書き換えられたＨＴＴＰ要求内のパス名によって識別された資源を、コンピューティング装置が逆参照するようになる。この命令はまた、コンピューティング装置が、ＨＴＴＰ要求に対するＨＴＴＰ応答を生成するようにし、このＨＴＴＰ応答は、書き換えられたＨＴＴＰ要求内のパス名によって識別された資源と、ウェブ・アプリケーションに関連する後続のＨＴＴＰ要求内のウェブ・アプリケーションの適用可能なバージョンを識別するバージョン識別子を含むようにクライアント装置を構成するデータとを含む。
【００６１】
構造上の特徴および／または方法論的な作用に特有の用語で、主題について述べてきたが、添付の特許請求の範囲で定義される主題は、必ずしも前述の具体的な特徴または作用を限定するものではないことを理解されたい。むしろ、前述の具体的な特徴および作用は、特許請求の範囲を実施する例示的な形態として開示されている。
【図１】
2012504276.tif 000003
【図２】
2012504276.tif 000004
【図３】
2012504276.tif 000005
【図４】
2012504276.tif 000006
【図５】
2012504276.tif 000007
【国際調査報告】
2012504276.tif 000008
2012504276.tif 000009