(57)【特許請求の範囲】
【請求項１】
動的なウェブページを生成するために、クライアントコンピュータシステムに接続されたウェブサーバコンピュータにおいて、サーバ側制御オブジェクトのプロパティを、１つ以上のデータ行を有するサーバ側データテーブル内のデータ行のプロパティとデータ結合する、前記ウェブサーバコンピュータのプロセッサによって処理される方法であって、
前記サーバ側制御オブジェクトが、前記クライアントコンピュータシステムに表示されるウェブページに組み込まれるクライアント側ユーザインタフェース要素に対応しており、
前記ウェブサーバコンピュータが、前記クライアントコンピュータシステムからリクエストを受信すると、前記サーバ側データテーブルの各データ行を参照して、各データ行に対応する、複数の下層サーバ側制御オブジェクトを階層的に含むことができる結合コンテナサーバ側制御オブジェクトを作成する工程と、
各結合コンテナサーバ側制御オブジェクトを前記サーバ側データテーブルのデータ行の１つに関連付ける工程と、
各データ行のプロパティとして、所与のデータ行に対応する結合コンテナサーバ側制御オブジェクトの下層にあり、かつ前記所与のデータ行のプロパティと関連付ける前記下層サーバ側制御オブジェクトを作成する工程と、
前記下層サーバ側制御オブジェクトのプロパティと前記サーバ側データテーブルのデータ行のうちの１つのプロパティとの間にデータ結合関係を確立させる工程と、
前記下層サーバ側制御オブジェクトが、前記クライアント側ユーザインタフェース要素を前記ウェブページに表示するためのオーサリング言語データを生成する工程と、
前記ウェブサーバコンピュータが、前記オーサリング言語データを前記クライアントコンピュータシステムに送信する工程とを含むデータ結合する方法。
【請求項２】
前記データ結合関係を確立させる工程において、
前記下層サーバ側制御オブジェクトの制御識別子、前記下層サーバ側制御オブジェクトのプロパティの第１のプロパティ識別子、前記結合コンテナサーバ側制御オブジェクトの結合コンテナ識別子を含む結合オブジェクトを作成する工程を含む請求項１に記載のデータ結合する方法。
【請求項３】
前記データ結合関係に基づいて、前記サーバ側データテーブルのデータ行のプロパティとして格納するために前記下層サーバ側制御オブジェクトのプロパティとして格納されたデータを、前記下層サーバ側制御オブジェクトから前記サーバ側データテーブルへ送信する工程をさらに含む請求項１に記載のデータ結合する方法。
【請求項４】
前記データ結合関係に基づいて、前記下層サーバ側制御オブジェクトのプロパティとして格納するために前記サーバ側データテーブルのプロパティとして格納されたデータを、前記サーバ側データテーブルから前記下層サーバ側制御オブジェクトへ送信する工程をさらに含む請求項１に記載のデータ結合する方法。
【請求項５】
動的なウェブページを生成するために、クライアントコンピュータシステムに接続されたウェブサーバコンピュータにおいて、コンピュータシステムによって読み取り可能であり、サーバ側制御オブジェクトのプロパティを、１つ以上のデータ行を有するサーバ側データテーブル内のデータ行のプロパティとデータ結合するコンピュータプロセスを実行するためのコンピュータプログラムを記録したコンピュータプログラム記憶媒体であって、
前記サーバ側制御オブジェクトが、前記クライアントコンピュータシステムに表示されるウェブページに組み込まれるクライアント側ユーザインタフェース要素に対応しており、
前記コンピュータプロセスは、
前記ウェブサーバコンピュータが、前記クライアントコンピュータシステムからリクエストを受信すると、前記サーバ側データテーブルの各データ行を参照して、各データ行に対応する、複数の下層サーバ側制御オブジェクトを階層的に含むことができる結合コンテナサーバ側制御オブジェクトを作成する工程と、
各結合コンテナサーバ側制御オブジェクトを前記サーバ側データテーブルのデータ行うちの１つに関連付ける工程と、
各データ行のプロパティとして、所与のデータ行に対応する結合コンテナサーバ側制御オブジェクトの下層にあり、かつ前記所与のデータ行のプロパティと関連付ける前記下層サーバ側制御オブジェクトを作成する工程と、
前記下層サーバ側制御オブジェクトのプロパティと前記サーバ側データテーブルのデータ行の１つのプロパティとの間にデータ結合関係を確立する工程と、
前記下層サーバ側制御オブジェクトが、前記クライアント側ユーザインタフェース要素を前記ウェブページに表示するためのオーサリング言語データを生成する工程と、
前記ウェブサーバコンピュータが、前記オーサリング言語データを前記クライアントコンピュータシステムに送信する工程とを含むコンピュータプログラム記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にウェブサーバフレームワークに関し、特にサーバ側データテーブルのプロパティを二方向に結合するサーバ側制御オブジェクトに関する。
【０００２】
【従来の技術】
典型的なウェブブラウザは、クライアントシステムにおいて表示するウェブページの外観および基本動作を規定するウェブサーバからデータを受け取る。典型的な手順としては、ユーザが、ワールドワイドウェブ上の資源のグローバルアドレスであるユニホームリソース（資源）ロケータ（以下、「URL」という）を特定し、所望のウェブサイトにアクセスする。一般に、用語「資源」とは、プログラムによってアクセスすることができるデータまたはルーチンのことである。URLの一例は、“ HYPERLINK "http://www.microsoft.com/ms.htm" http://www.microsoft.com/ms.htm ”である。このURL例の第１の部分は、通信に用いる所与のプロトコル（例えば“http”）を示している。第２の部分は、資源の所在を示すドメイン名（例えば“ HYPERLINK "http://www.microsoft.com" www.microsoft.com ”）を特定している。第３の部分はドメイン内の資源（例えば“ms.htm”と呼ばれるファイル）を特定している。これに従い、ブラウザは、 HYPERLINK "http://www.microsoft.com" www.microsoft.com ドメイン内のms.htmファイルに関連するデータを取り出すためのURL例に関連するHTTP(ハイパーテキストトランスポートプロトコル)リクエストを生成する。www.microsoft.comサイトをホストしているウェブサーバはHTTPリクエストを受け取り、要求されたウェブページまたは資源をクライアントシステムにHTTPレスポンスで戻し、ブラウザに表示する。
【０００３】
上記の例の"ms.htm"ファイルは、静的なHTML（ハイパーテキストマークアップ言語）コードを含んでいる。HTMLは、ワールドワイドウェブ上でのドキュメント（例えば、ウェブページ）作成に用いられるプレインテキストオーサリング言語である。このようなものであるので、HTMLファイルは、ウェブサーバから取り出され、ブラウザにウェブページとして表示し、ユーザがインターネットからの情報を見ている間に期待するようになる豊かなグラフィカルな経験を提供することができる。HTMLを用いて、開発者が、例えば、ブラウザに表示するフォーマット化されたテキスト、リスト、フォーム、テーブル、ハイパーテキストリンク、インライン画像および音声、ならびに背景グラフィックスを特定する。しかし、HTMLファイルは、ウェブページコンテンツの動的な生成を本質的にサポートしていない静的ファイルである。
【０００４】
株価の変化や交通情報などのような動的コンテンツを表示する場合は、通常、より複雑なクライアント・サーバ対話を扱うためのサーバ側アプリケーションプログラムを開発する。サーバ側アプリケーションプログラムは、HTTPリクエストを処理し、クライアントへのHTTPレスポンスの送信に適切なHTMLコードを生成する。HTTPリクエストの一例は、照会ストリングでのデータまたはウェブベースのフォームからのデータなどのパラメータを含むことがある。このようなものであるので、サーバ側アプリケーションプログラムは、このパラメータを処理し、クライアントへのHTTPレスポンスでHTMLコードを動的に生成することができる。サーバ側アプリケーションプログラムの一例として、メモリ機構への１つ以上のフォーマット化されたテキスト書込み処理のシーケンスを用いて、適切なHTMLコードを含むドキュメントを動的に生成する場合がある。その後、得られたドキュメントは、HTTPレスポンスでクライアントシステムに送信され、そこでウェブページとしてブラウザに表示される。
【０００５】
サーバ側アプリケーションプログラムの開発は、ウェブページ設計に用いる通常のHTMLコード化に精通しているだけでなく、１つ以上のプログラム言語（例えば、C++, Perl, Visual Basic, または Jscript）を含むプログラムベーシックスに精通していることが要求される複雑な作業である。しかし、ウェブページ設計者は、グラフィックデザイナーまたはエディタであることが多く、プログラム経験がない場合がある。さらに、複雑なウェブページ開発を単純化すると、いかなる開発者によっても新たなウェブコンテンツの開発の速度を上げることができる。一般に、カスタムサーバ側アプリケーションプログラムの開発もまた、多大な労力が要求され、実際、開発者はしばしばそれを試みたくないと思う程である。したがって、開発者が最小のプログラムでウェブページを動的に作成および処理することができる開発フレームワークを提供することが望ましい。
【０００６】
【発明が解決しようとする課題】
動的ウェブページ生成のプログラム要件を最小にする１つの手段は、マイクロソフト社によって提供されるアクティブサーバページ（ASP）フレームワークである。ASPリソースは、典型的に、所望の資源としてASPリソースを特定するHTTPリクエストを処理し、その後、クライアントへのHTTPレスポンスでの結果HTMLコードを生成する、例えばVisual BasicまたはJscriptを含む。さらに、ASP資源は、所与のアプリケーションプログラム労力を軽減するために、予め開発されたまたは第三者のクライアント側ライブラリコンポーネント（例えば、クライアント側ACTIVEX制御）を参照することができる。しかし、現在のサーバ側アプリケーションフレームワークにおいて、サーバ側アプリケーション内でクライアント側ユーザインタフェース要素（例えば、テキストボックス、リストボックス、ボタン、ハイパーリンク、画像、音声など）を動的に管理することを要求されるプログラミングは、依然として高度なプログラミング技術と相当な労力を必要とする。未解決の課題は、ウェブページ開発者がウェブページの他のアスペクトに焦点を当てることができるように、ユーザインタフェース要素を処理することが要求されるプログラミングを適切にカプセル化することについてである。
【０００７】
あるクライアント側ユーザインタフェース要素は、データベースのようなサーバ側データ格納部に関連付けられたデータを含む。このような要素の一例は、製品と価格の一覧をサーバ側プロダクトデータベースから表示するクライアント側テーブルである。また別の一例としては、後の利用のために、サーバ側顧客データベースに格納すべきシッピングアドレスを消費者が入力できるテキストボックスも含まれる。従来は、クライアント側ユーザインタフェースは、ページ開発者によってページに書き込まれ、ページとサーバ側データベースとの間でデータ通信を行うために、アプリケーションプログラムはアプリケーション開発者によって書かれていた。問題は、ページ開発もアプリケーションプログラム開発もともに、多大な開発労力を要求し、ならびにデータベース構造およびある程度の複雑なプログラミング(例えば、クライアント側のスクリプティングあるいはサーバ側のアプリケーションプログラミングを介して)についての深い知識を必要とする点である。
【０００８】
【課題を解決するための手段】
本発明によると、上述および他の課題は、１つ以上のサーバ側制御オブジェクトと１つ以上のサーバ側データ格納部とを結合する階層データを提供することによって解決される。階層データ結合は、データアレイにおける各データオブジェクトに対し結合コンテナを自動的に作成することによってサポートされる。各結合コンテナは、その子供に対し、関連付けられているサーバ側データ格納部のデータオブジェクトを含むそのパブリックプロパティへのアクセスを提供する。このようにすることで、サーバ側制御オブジェクトのプロパティは、その結合コンテナを介して、サーバ側データ格納部のプロパティに結合され得る。データ結合関係は、サーバ側制御オブジェクトのプロパティからサーバ側データ格納部のプロパティへ、またはその逆方向に、一方向的に確立することができるが、これに限定されない。データ結合関係はまた、サーバ側制御オブジェクトのプロパティとサーバ側データ格納部のプロパティとの間に二方向的に確立することもできるが、これに限定されない。
【０００９】
ある本発明にかかる手段において、下層サーバ側制御オブジェクトのプロパティを１つ以上のデータセットを有するサーバ側データテーブルのデータセット(例えば、テーブル行)のプロパティにデータを結合する方法が、クライアントコンピュータシステムに接続しているサーバコンピュータにおいて提供される。この下層サーバ側制御オブジェクトは、クライアント側ユーザインタフェース要素に対応する。繰り返し制御オブジェクトは、サーバ側データテーブルの各データセットごとに繰り返し参照し、各データセットに対応する結合コンテナサーバ側制御オブジェクトを作成する。各結合コンテナサーバ側制御オブジェクトは、サーバ側データテーブルのデータセットに関連づけられている。下層サーバ側制御オブジェクトは、各データセットのプロパティに対し作成される。所与の下層サーバ側制御オブジェクトは、所与のデータセットに対応する結合コンテナサーバ側制御オブジェクトの下層にあり、かつ所与のデータセットのプロパティと関連付けられている。データ結合関係は、下層サーバ側制御オブジェクトのプロパティと、サーバ側データテーブルのデータセットのうちの１つとの間に確立される。
【００１０】
本発明にかかる他の手段において、製品はコンピュータプログラムプロダクトとして提供される。コンピュータプログラムプロダクトのある実施形態において、コンピュータシステムによって読み取り可能であり、かつ下層サーバ側制御オブジェクトのプロパティを１つ以上のデータオブジェクトを有するサーバ側データアレイのプロパティにデータ結合させるコンピュータプロセスを実行するためのコンピュータプログラムをコード化するコンピュータプログラム記憶媒体が提供される。コンピュータプログラムプロダクトのまた別の実施形態としては、コンピュータシステムによって搬送波で具体化され、かつコンピュータプログラムをコード化するコンピュータデータ信号において提供することもできる。子サーバ側制御オブジェクトは、クライアント側ユーザインタフェース要素に対応する。サーバ側データアレイは、サーバ側データベースからロードされる。繰り返しサーバ側制御オブジェクトは、サーバ側データテーブルに関連付けられ、かつサーバ側制御オブジェクト階層中に作成される。サーバ側データアレイは、繰り返しサーバ側制御オブジェクトのプロパティとして格納される。データオブジェクトの1つと対応する結合コンテナサーバ側制御オブジェクトは、繰り返しサーバ側制御オブジェクトの子として作成される。結合コンテナサーバ側制御オブジェクトは、サーバ側データアレイのデータオブジェクトのうちの１つに関連付けられる。下層サーバ側制御オブジェクトは、各データオブジェクトの各プロパティに対して作成される。各下層サーバ側制御オブジェクトは、結合コンテナサーバ側制御オブジェクトの下層にある。データ結合関係は、下層サーバ側制御オブジェクトのプロパティとサーバ側データアレイのプロパティとの間に確立される。
【００１１】
別の手段においては、１つ以上のデータオブジェクトを有するサーバ側データアレイを含む、クライアント側ユーザインタフェース要素に対応するサーバ側制御オブジェクトの階層を用いてサーバ側データ結合を実行するサーバもまた提供される。各データオブジェクトはプロパティを含んでもよい。サーバ側制御オブジェクト階層中の繰り返しサーバ側制御オブジェクトは、サーバ側データアレイに関連付けられている。１つ以上の結合コンテナサーバ側制御オブジェクトは、サーバ側データアレイにおける多数のデータオブジェクトに基づいて、繰り返しサーバ側制御オブジェクトによって繰り返し作成される。１つ以上の下層サーバ側制御オブジェクトは、サーバ側データアレイの各データオブジェクトのプロパティに対応する。各下層サーバ側制御は、サーバ側データアレイにおける所与のデータオブジェクトの結合制御サーバ側制御オブジェクトの下層に作成される。データ結合関係構造は、下層制御オブジェクトのプロパティとサーバ側データアレイのデータオブジェクトのプロパティとのデータ結合関係を記述する。
【００１２】
【発明の実施の形態】
本発明のある実施形態において、ウェブページコンテンツは、ウェブサーバ上に動的に生成され、クライアントに表示される。クライアントは、例えば、標準HTMLあるいは他のオーサリング言語をサポートするいかなるブラウザにもなることができる。ウェブサーバにおけるクライアントは、HTTPリクエストおよびHTTPレスポンスなどを用いることによって、ネットワークを通じて通信する。このように、ウェブサーバは、おそらくHTMLコード形態であろうが、ウェブページコンテンツを生成し、クライアントへそのコンテンツを送信する。これによりブラウザにウェブページを表示することができる。ウェブページの個々のユーザインタフェース要素と論理的に対応し得るサーバ側制御オブジェクトがウェブサーバ上に作成され、ウェブページコンテンツを処理し、レンダリングする。サーバ側制御オブジェクトは、サーバ側制御オブジェクトの階層を作成するページファクトリによって処理されるASP＋リソースなどの動的コンテンツ資源で宣言される。階層における制御オブジェクトはクライアントから受信したリクエストを協働して処理し、次いで、結果ウェブページコンテンツを生成し、クライアントへ送信し、階層における制御オブジェクトを終了させる。
【００１３】
本発明のある実施形態において、ページオブジェクトは、制御オブジェクト階層の最上位レベルとして例示することができる。制御オブジェクトでもあるページオブジェクトは、典型的に１つ以上の子制御オブジェクトを含み、各子制御オブジェクトは、それ自体１つ以上の子制御オブジェクトを含み、多数レベルの階層に広がる。ページオブジェクトおよび下層制御オブジェクトは、処理シーケンスを実行し、クライアント側ユーザインタフェース要素に対応するウェブコンテンツを処理および生成する。
【００１４】
このシーケンスにおける処理の１つは、１つ以上のサーバ側制御オブジェクトとサーバ側データ格納部との通信を制御するデータ結合処理を含む。本発明のある実施形態において、サーバ側データ格納部は、ウェブページのユーザインタフェース要素に関するデータを格納するデータベースである(例えば、図１のデータ格納部１３１を参照)。特に限定されないが、構成登録、データファイル、データストリームを含む他の非データベース型データ格納部もまた、本発明の範囲内に含まれる。サーバ側制御オブジェクトおよび関連のデータ結合関係を動的コンテンツ資源において宣言することにより、ページ開発者は、サーバ側データ格納部に関連するサーバ側データアレイに対して一方向、および／または二方向データ結合関係を有する制御オブジェクト階層を構成することができる。
【００１５】
図１は、本発明のある実施形態におけるクライアントに表示するウェブページコンテンツを動的に生成するウェブサーバを示す。クライアント１００は、クライアント１００の表示装置上におけるウェブページ１０４を表示するブラウザ１０２を実行する。クライアント１００は、ビデオモニタのような表示装置を有するクライアントコンピュータシステムを含んでもよい。マイクロソフト社によって販売されている"INTERNET EXPLORER"ブラウザは、本発明のある実施形態におけるブラウザ１０２の一例である。他のブラウザの例として、"NETSCAPE NAVIGATOR"および"MOSAIC"などがあるが、これに限らない。例示したウェブページ１０４には、4つのリスト行要素を有するテーブルリスト１４０が組み込まれている。リスト行要素１４２は、テーブルリスト要素１４０が含む子ユーザインタフェース要素である。リスト行要素１４２は、テンプレート宣言（テンプレート宣言の一例として図６Ａを参照）によって定義され、ラベル要素１４４(例えば、OrderIDを表す)および１４６(例えば、注文製品の量を表す)を含む２つの列と、テーブルリスト要素１４８を含む１つの列を有している。要素１４４、１４６、および１４８は、リスト行要素１４２によって含まれる子ユーザインタフェース要素として宣言される（ラベルおよびテーブルリスト宣言の例として図６Ａを参照）。付加リスト行要素１５０、１５２および１５４もまたウェブページ１０４に示されている。
【００１６】
図６Ａの宣言に従って、ウェブページ１０４のユーザインタフェース要素に対応するサーバ側制御オブジェクトが２つのサーバ側データアレイ(例えば、MyOrderSystemオブジェクトを通じてサーバ側データベースアクセスに関連するサーバ側データテーブルMyOrdersおよびMyItems)にデータ結合される。一般には、サーバ側データアレイはサーバ側データ格納部と関連し（例えば、格納部からロードされ、かつ／または格納部に格納される）、制御オブジェクト階層内においてインデックスデータセット(例えば、データ行、またはデータオブジェクト)を含む。このようなデータセットは、例えば、あるテーブルデータ行のデータ値を表すことができるプロパティを有する。コラム１４８は、２つの列、すなわち、（１）結合されたItemsデータテーブルからの行インデックスの列、及び（２）Itemsデータテーブルからラベル（例えば、項目名）を含む3つのリスト行要素の列、の２つを有するサブテーブルリスト要素を表している。
【００１７】
ブラウザ１０２は、HTTPレスポンス１１２においてウェブサーバ１１６からHTMLコードを受信ことができ、HTMLコードにより記述されたウェブページを表示する。ある実施形態を参照してHTMLについて説明するが、特に制限されるものではなく、SGML(Standard Generalized Markup Language)および、XMLベースのマークアップ言語であって、ポケットベルおよび携帯電話などの狭帯域無線装置の内容およびユーザインタフェースを特定するように設計されたWML(Wireless Markup Language)を含む他のオーサリング言語も本発明の範囲内であると考えられている。さらに、標準HTML3.2が、本明細書中に主に開示されているが、HTMLのいかなるバージョンも本発明の範囲内に含まれ得る。
【００１８】
クライアント１００とウェブサーバ１１６との通信は、HTTPリクエスト１１４およびHTTPレスポンス１１２の一連の処理を用いて行うことができる。ある実施形態を参照してHTTPを説明するが、特に制限されるものではなく、S−HTTPを含めた他のトランスポートプロトコルも本発明の範囲内であると考えられている。ウェブサーバ１１６において、HTTPパイプラインモジュール１１８が、HTTPリクエスト１１４を受信し、URLを解析し、リクエストを処理する適切なハンドラ１２０を呼び出す。本発明のある実施形態において、異なるタイプの資源を扱う複数のハンドラ１２０がウェブサーバ１１６に備わっている。
【００１９】
例えば、URLがHTMLファイルのような静的なコンテンツ資源１２２を特定する場合、ハンドラ１２０は、静的コンテンツ資源１２２にアクセスし、HTTPパイプライン１１８を介して静的コンテンツ資源１２２をHTTPレスポンス１１２でクライアント１００へ送信する。あるいは、本発明のある実施形態において、URLがASP+リソースのような動的コンテンツ資源１２４を特定する場合、ハンドラ１２０は、動的コンテンツ資源１２４にアクセスし、動的コンテンツ資源１２４のコンテンツを処理し、ウェブページ１０４用の結果HTMLコードを生成する。本発明のある実施形態において、結果HTMLコードは、標準HTML３．２コードを含む。一般に、動的コンテンツ資源は、クライアントに表示すべきウェブページを記述するオーサリング言語を動的に生成するのに用いることができるサーバ側宣言データ格納部（例えば、ASP+リソース）である。そして、ウェブページ用のHTMLコードは、HTTPパイプライン１１８を通過し、HTTPレスポンス１１２でクライアント１００へ送られる。
【００２０】
この処理の間、ハンドラ１２０はまた、開発労力を簡単化にするために予め開発された、あるいは第３者コードのライブラリにアクセスすることができる。このようなライブラリの１つがサーバ側クラス制御ライブラリ１２６であり、ここから、ハンドラ１２０は、ユーザインタフェース要素を処理しウェブページに表示する結果HTMLデータを生成するサーバ側制御オブジェクトを例示することができる。本発明のある実施形態において、１つ以上のサーバ側制御オブジェクトは、動的コンテンツファイル１２４に記述されたウェブページ上に、可視的にまたは隠して、１つ以上のユーザインタフェース要素にマッピングする。
【００２１】
これに対し、第２のライブラリは、マイクロソフト社からの"ACTIVEX"コンポーネントを含むライブラリのようなクライアント側制御クラスライブラリ１２８である。"ACTIVEX"制御は、クライアントおよび他のコンポーネントとの対話の仕方において一定の標準に従うCOM（コンポーネントオブジェクトモデル）オブジェクトである。クライアント側"ACTIVEX"制御は、例えば、クライアントに自動的にダウンロードされ、クライアントのウェブブラウザによって実行処理され得るCOMベースのコンポーネントである。サーバ側ACTIVEXコンポーネント（図示せず）は、株価検索アプリケーションまたはデータベースコンポーネントのサーバ側機能性を提供するような多様なサーバ側機能を果たすためにサーバ上で実行され得るCOMベースのコンポーネントである。ACTIVEXについては、「ACTIVEXおよびOLEの理解」（デビッド・チャペル、マイクロソフトプレス、１９９６年）により詳細に記載されている。
【００２２】
"ACTIVEX"制御とは対照的に、動的コンテンツ資源１２４に特定される本発明の実施形態のサーバ側制御オブジェクトは、クライアント上のウェブページに組み込まれるユーザインタフェース要素に論理的に対応する。サーバ側制御オブジェクトはまた、例えば、HTMLタグと所与のクライアント側"ACTIVEX"制御をリファレンスするロケータを含み得る有効なHTMLコードを生成することができる。ブラウザが、すでに格納システム内にクライアント側"ACTIVEX"制御用コードを有している場合は、クライアント上のウェブページ内で"ACTIVEX"制御を実行処理する。そうでなれば、ブラウザは、ロケータによって特定された資源から"ACTIVEX"制御用コードをダウンロードし、そして、クライアント上のウェブページ内で"ACTIVEX"制御を実行処理する。本発明の実施形態におけるサーバ側制御オブジェクトはまた、サーバ上で株価検索アプリケーションを実行するのに用いられるサーバ側"ACTIVEX"制御に対しイベントを立ち上げることができる。
【００２３】
ハンドラ１２０はまた、ウェブサーバ１１６上または別のアクセス可能ウェブサーバ上で実行処理する１つ以上の非ユーザインタフェースサーバコンポーネント１３０にアクセスする。株価検索アプリケーションまたはデータベースコンポーネントのような非ユーザインタフェースサーバコンポーネント１３０は、ハンドラ１２０によって処理される動的コンテンツ資源１２４において参照され、またはそれに関連付けられる。動的コンテンツ資源１２４で宣言された制御オブジェクトによって立ち上げられたサーバ側イベントは、非ユーザインタフェースコンポーネント１３０の適切なメソッドを呼び出すサーバ側コードによって処理され得る。その結果、サーバ側制御オブジェクトによって提供される処理は、ウェブページのユーザインタフェース要素の処理および生成をカプセル化することによって非ユーザインタフェースサーバコンポ−ネント１３０のプログラミングを簡単にし、これにより、非ユーザインタフェースサーバコンポーネント１３０の開発者は、ユーザインタフェース問題ではなく、アプリケーション固有の機能の開発に集中することができる。
【００２４】
本発明のある実施形態において、サーバ側制御オブジェクトのプロパティは、サーバ側データ格納部１３１内のプロパティとデータ結合されている。例えば、データ結合によって、ページ開発者はサーバ側制御オブジェクト階層内の制御オブジェクトのプロパティをサーバ側データベース内のデータ項目に関連付けることが可能になる。この処理の間、各制御オブジェクトは、データベース内のデータオブジェクトから関連するプロパティ値を取り出すことによって、そのデータ結合プロパティを更新する（サーバ側データ格納部からの一方向データ結合という）。あるいはまた、各制御オブジェクトは、制御オブジェクト内的プロパティ値を用いて、サーバ側データ格納部のプロパティを更新する（サーバ側データ格納部への一方向データ結合という）。この２つのタイプの一方向データ結合を組み合わせて、サーバ側制御オブジェクトとサーバ側データ格納部との間に二方向データ結合を提供することができる。
【００２５】
図２は、本発明のある実施形態におけるサーバ側制御オブジェクトを用いてのクライアント側ユーザインタフェース要素の処理および生成処理のフローチャートを示す。送信処理２００において、クライアントは、HTTPリクエストをサーバに送信する。HTTPリクエストは、ASP+リソースなどの資源を特定するURLを含む。受信処理２０２において、サーバは、HTTPリクエストを受信し、特定された資源を処理する適切なハンドラを呼び出す。ASP+リソースは、構文解析処理２０３で読み出される。作成処理２０４は、特定された動的コンテンツ資源（例えば、ASP+リソース）の内容に基づいてサーバ側制御オブジェクト階層を生成する。
【００２６】
処理２０６において、制御オブジェクト階層のサーバ側制御オブジェクトは、ポストバックイベントハンドリング、ポストバックデータハンドリング、状態管理およびデータ結合のうちの１つ以上の処理を行う。ユーザインタフェース要素からのポストバックイベントおよびデータ（まとめて「ポストバック入力」）は、クライアントからサーバへと送られ処理される。ポストバックイベントは、特に制限されるものではなく、例えば、クライアント側ボタン要素からの「マウスクリック」イベントまたはサーバに送られるクライアント側テキストボックス要素からの「データ変化」イベントを含んでもよい。ポストバックデータは、例えば、これに限らないが、テキストボックス要素またはドロップダウンボックスから選ばれた項目のインデックスにユーザによって入力されたテキストを含んでもよい。
【００２７】
処理２０８において、階層内の各サーバ側制御オブジェクトは、クライアント側ユーザインタフェース要素のウェブページでの表示のためのHTMLコードのようなデータを生成（またはレンダリング）するために呼び出される。用語「レンダリング」は、ユーザインタフェース上にグラフィックスを表示する処理を意味することがあるが、本明細書において「レンダリング」は、表示およびクライアント側機能のためのブラウザのようなクライアントアプリケーションによって解釈され得るオーサリング言語データの生成処理をも意味している。処理２０６およびレンダリング処理２０８のより詳細な説明は図６との関連で行われている。ある実施形態において、個々の制御オブジェクトにおけるrender()メソッドの呼び出しは、ツリートラバーサルシーケンスを用いて行われる。すなわち、ページオブジェクトのrender()メソッドの呼び出しは、階層内の適切なサーバ側制御オブジェクトにわたる再帰的な参照になる。適切な制御オブジェクトのrender()メソッドを呼び出す別の方法として、イベントシグナリングまたはオブジェクト登録手法などの方法を用いてもよい。括弧は、データ値と比較するなどのメソッドを示す「render()」ラベルを指定する。
【００２８】
本発明のある実施形態において、個々のサーバ側制御オブジェクトの実際の作成は、サーバ側制御オブジェクトが処理２０６または２０８においてアクセスされる（ポストバック入力のハンドリング、状態のロード、制御オブジェクトからHTMLコードのレンダリングなど）まで遅らせてもよい。サーバ側制御オブジェクトが所与のリクエストのためにアクセスされることがない場合、制御オブジェクトの作成が遅れ、不要な制御オブジェクト作成処理を排除することによって、サーバ処理が最適化される。
【００２９】
送信処理２１０において、HTMLコードをHTTPレスポンスでクライアントに送信する。受信処理２１４において、クライアントは、表示されるべき新たなウェブページに関連するHTMLコードを受信する。表示処理２１６において、クライアントシステムは、HTTPレスポンスから受け取ったHTMLコードに応じて新しいページのユーザインタフェース要素を組み入れる（例えば、表示する）。しかし、ユーザインタフェース要素の組み入れは、音声または触覚出力の提供、メモリへの読出しおよび書込み、スクリプト処理の制御などの非表示処理を含んでもよいことを理解すべきである。終了処理２１２において、サーバ側制御オブジェクト階層を終了する。本発明のある実施形態において、階層内サーバ側制御オブジェクトは、関連付けられたASP+リソースを参照するHTTPリクエストに応答して作成され、オーサリング言語データ（例えば、HTMLデータ）のレンダリングが終わると破壊される。別の実施形態において、処理２１２は、処理２０８の後、処理２１０の前に行ってもよい。
【００３０】
図３は、本発明のある実施形態において用いるウェブサーバでのモジュールの一例を示す。ウェブサーバ３００は、HTTPパイプライン３０４にHTTPリクエスト３０２を受け入れる。HTTPパイプライン３０４は、ウェブページ統計のロギング、ユーザ照合、ユーザアクセス権およびウェブページの出力キャッシュ化用モジュールなどの種々のモジュールを含んでもよい。ウェブサーバ３００によって受信される各入力HTTPリクエスト３０２は、最終的には、IHTTPハンドラクラス（ハンドラ３０６として図示）の特定のインスタンスによって処理される。ハンドラ３０６は、URLリクエストを解析し適切なハンドラファクトリ（例えば、ページファクトリモジュール３０８）を呼び出す。
【００３１】
図３において、ASP+リソース３１０に関連付けられたページファクトリモジュール３０８が呼び出され、ASP+リソース３１０のオブジェクトの例示および構成をハンドリングする。ある実施形態において、ASP+リソースは、ファイルに特定の接尾語（または".aspx"のようなファイル拡張部分）を指定することによって認識され得る。所与のASP+リソースに対するリクエストがまず、ページファクトリモジュール３０８によって受信されると、ページファクトリモジュール３０８は、ファイルシステムを検索して適切なファイル（例えば、.aspxファイル３１０）を得る。このファイルは、リクエストを処理するサーバによって後に解釈またはアクセスされ得るテキスト（例えば、オーサリング言語データ）または別のフォーマットでのデータ（例えば、バイトコードデータまたはコード化されたデータ）を含んでもよい。物理的なファイルが存在する場合、ページファクトリモジュール３０８は、ファイルを開き、そのファイルをメモリに読み出す。ファイルが見つからない場合、ページファクトリモジュール３０８は、適切な「ファイルが見つからない」というエラーメッセージを戻す。
【００３２】
ASP+リソース３１０をメモリに読み出した後、ページファクトリモジュール３０８は、ファイル内容を処理し、ページのデータモデル（例えば、スクリプトブロックのリスト、ディレクティブ、静的テキスト領域、階層サーバ側制御オブジェクト、サーバ側制御プロパティなど）を構築する。データモデルは、ページベースのクラスを拡張させるCOM+（Component Object Model+）クラスのような新たなオブジェクトクラスのソースリストを生成するのに用いられる。ページベースクラスは、基本ページオブジェクトの構造、プロパティおよび機能を定義するコードを含んでいる。本発明のある実施形態において、次いで、ソースリストは、中間言語に動的にコンパイルされ、のちにプラットフォームに固有の命令 (例えば、X86,Alphaなど)に適時に（Just-In-Time）コンパイルされる。中間言語は、COM+ IL コード、Java バイトコード、Modula 3 コード、SmallTalk コードおよびVisual Basicコードなどの汎用またはカスタム指向言語コードを含んでもよい。別の実施形態において、中間言語処理を省き、固有の命令をソースリストまたはソースファイル（例えば、ASP+リソース３１０）から直接生成してもよい。制御クラスライブラリ３１２は、制御オブジェクト階層の生成に用いられる予め定義されたサーバ側制御クラスを得るためにページファクトリモジュール３０８によってアクセスされ得る。
【００３３】
ページファクトリモジュール３０８は、図１のウェブページ１０４に相当するサーバ側制御オブジェクトであるページオブジェクト３１４を出力する。ページオブジェクト３１４およびその子オブジェクトが、制御オブジェクト階層３１６の一例である。他の制御オブジェクトの例もまた、本発明に従い考えることができ、カスタム制御オブジェクトと同様に、特に制限されるものではなく、表１のHTML制御に対応するオブジェクトも含んでいる。ページオブジェクト３１４は、図１のウェブページ１０４に論理的に対応し、サーバ上の他の制御オブジェクトと階層的に関連している。ある実施形態において、ページオブジェクトは、その子制御オブジェクトを階層的に含んでいるコンテナオブジェクトである。別の実施形態では、依存関係などの他の形態の階層関係を用いることができる。多数レベルの子オブジェクトを有するより複雑な制御オブジェクト階層において、１つの子オブジェクトが、他の子オブジェクトのコンテナオブジェクトであってもよい(例えば、テーブルリスト１４０は、リスト行要素１４２、１５０、１５２および１５４とその子要素のコンテナである)。これらのサーバ側制御オブジェクトは、協働してHTTPリクエスト３０２からの入力をハンドリングし、サーバ側制御オブジェクトの状態を管理し、データ結合を行い、クライアントの結果ウェブページのためにオーサリング言語データ(例えば、HTML)をレンダリングする。結果HTMLコードは、制御オブジェクト階層３１６からの出力であり、HTTPレスポンス３２４でクライアントに送信される。
【００３４】
上記の実施形態において、制御オブジェクト階層３１６の制御オブジェクトは、サーバ３００上で作成および実行され、各サーバ側制御オブジェクトは、クライアント上のユーザインタフェース要素と論理的に対応する。サーバ側制御オブジェクトはまた、協働して、HTTPリクエスト３０２からのポストバック入力をハンドリングし、サーバ側制御オブジェクトの状態を管理し、サーバ側データベースとのデータ結合を行い、クライアントでの結果ウェブページの表示に用いるオーサリング言語データ（例えば、HTMLコード）を生成する。結果オーサリング言語データは、サーバ側制御オブジェクト階層３１６から生成（すなわち、レンダリング）され、HTTPレスポンス３２４でクライアントに送信される。例えば、結果HTMLコードは、いかなる有効なHTML構成も具現化することができ、ACTIVEXタイプの制御、JAVAアプレット、スクリプトおよびその他、ブラウザによって処理されたとき、クライアント側ユーザインタフェース要素（例えば、制御ボタン、テキストボックスなど）を生み出すいかなるウェブ資源も参照することができる。
【００３５】
ASP+リソース３１０でなされた宣言によって、サーバ側制御オブジェクトは、非ユーザインタフェースサーバコンポーネント３３０とクライアント側ユーザインタフェース要素との対話のために、１つ以上の非ユーザインタフェースサーバコンポーネント３３０にアクセスすることができる。例えば、ポストバック入力に応答して、サーバ側制御オブジェクトは、サーバ側イベントをそれらのイベント用に登録された非ユーザインタフェースサーバコンポーネントに対し立ち上げることができる。このように、非ユーザインタフェースサーバコンポーネント３３０は、ユーザとの対話を、ユーザインタフェース要素を介して、これらの要素を表示および処理するのに必要なコードをプログラミングすることなく行うことができる。
【００３６】
１つ以上のサーバ側データ格納部３３１のプロパティは、サーバ側制御オブジェクトのプロパティにデータ結合することができる。データ結合の一形態をサポートするよう構成されたサーバ側制御オブジェクト階層の一例についての詳細な説明は、図７に関連して行われる。このデータ結合関係は、ASP+リソースにおいて宣言され、サーバ側制御オブジェクトをコンパイルし、ランタイム実行する間に確立される。
【００３７】
要するに、本発明の実施形態は、クライアントに送信するHTMLコードを生成するためにサーバ上で作成および実行処理されるサーバ側制御オブジェクトを含む。HTMLコードは、例えば、いかなる有効なHTML構成も具現化することができ、ACTIVEXタイプの制御、JAVA アプレット、スクリプトならびにクライアントでのユーザインタフェースボタンおよび他のユーザインタフェース要素を生成する他のいかなるウェブ資源も参照することができる。クライアントでのユーザは、サーバ側制御オブジェクトに論理的に対応するこれらのユーザインタフェース要素と対話し、リクエストをサーバに送り返すことができる。サーバ側制御オブジェクトは、サーバ上で再作成され、クライアントにレスポンスとして送信すべき次のラウンドのHTMLコードを生成するように、ユーザインタフェース要素のデータ、イベントおよび他の特性を処理する。
【００３８】
図４を参照すると、本発明の実施形態のコンピュータシステムの一例は、プロセッサユニット４０２、システムメモリ４０４およびシステムメモリ４０４を含む種々のシステムコンポーネントをプロセッサユニット４００に接続するシステムバス４０６を含んでいる従来のコンピュータシステム４００という形態の汎用コンピュータ装置を含んでいる。システムバス４０６は、メモリバスまたはメモリコントローラ、種々のバスアーキテクチャを用いるペリフェラルバスおよびローカルバスを含む幾つかのタイプのバス構造のいずれであってもよい。システムメモリは、再生専用メモリ（ROM）４０８およびランダムアクセスメモリ（RAM）４１０を含んでいる。コンピュータシステム４００内の要素間での情報の転送を助ける基本ルーチンを含んでいる基本入力／出力システム４１２（BIOS）は、ROM４０８に格納されている。
【００３９】
コンピュータシステム４００は、さらに、ハードディスクの読み出しおよび書き込みを行うハードディスクドライブ４１２、着脱可能な磁気ディスク４１６の読出しおよび書込みを行う磁気ディスクドライブ４１４およびCD ROM、DVDまたは他の光学媒体のような着脱可能な光ディスク４１９の読出しおよび書込みを行う光ディスクドライブ４１８を含んでいる。ハードディスクドライブ４１２、磁気ディスクドライブ４１４および光学ディスクドライブ４１８は、それぞれ、ハードディスクドライブインタフェース４２０、磁気ディスクドライブインタフェース４２２および光ディスクドライブインタフェース４２４によってシステムバス４０６に接続されている。ドライブおよびその関連コンピュータ読み取り可能媒体が、コンピュータシステム４００のコンピュータ読み取り可能命令、データ構造、プログラムおよび他のデータの不揮発性記憶部を提供している。
【００４０】
本明細書に記載の上記環境例では、ハードディスク、着脱可能な磁気ディスク４１６および着脱可能な光ディスク４１９を用いているが、データ保存可能な他のタイプのコンピュータ読み取り可能媒体を上記システム例に用いることができる。上記動作環境例に用いることができるこれらの他のタイプのコンピュータ読み取り可能媒体は、例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイ(Bernoulli)カートリッジ、ランダムアクセスメモリ（RAM）および再生専用メモリ（ROM）などがある。
【００４１】
多数のプログラムモジュールが、ハードディスク、磁気ディスク４１６、光ディスク４１９、ROM４０８またはRAM４１０に格納され得、これらは、オペレーティングシステム４２６、１つ以上のアプリケーションプログラム４２８、他のプログラムモジュール４３０およびプログラムデータ４３２を含む。ユーザは、コマンドおよび情報をコンピュータシステム４００にキーボード４３４およびマウス４３６または他のポインティング装置などの入力装置によって入力することができる。他の入力装置としては、例えば、マイクロフォン、ジョイステック、ゲームパッド、サテライトディッシュおよびスキャナなどがある。これらおよび他の入力装置は、システムバス４０６に接続されているシリアルポートインタフェース４４０を介して処理装置４０２に接続されていることが多い。しかし、これらの入力装置はまた、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（USB）などの他のインタフェースによって接続されていてもよい。モニタ４４２または他のタイプの表示装置もまた、ビデオアダプタ４４４などのインタフェースを介してシステムバス４０６と接続している。モニタ４４２に加えて、コンピュータシステムは、典型的には、スピーカおよびプリンタなどの他の周辺出力装置（図示せず）を含む。
【００４２】
コンピュータシステム４００は、リモートコンピュータ４４６のような１つ以上のリモートコンピュータへの論理接続を用いたネットワーク化された環境で動作することができる。リモートコンピュータ４４６は、コンピュータシステム、サーバ、ルータ、ネットワークPC、ピア（peer）装置、または他の共通ネットワークノードであり得、典型的にコンピュータシステム４００との関連で上述した要素の多くまたはすべてを含む。ネットワーク接続は、ローカルエリアネットワーク（LAN）４４８およびワイドエリアネットワーク（WAN）４５０を含む。このようなネットワーク環境は、オフィス、企業規模コンピュータネットワーク、イントラネットおよびインターネットにおいて珍しいものではない。
【００４３】
LANネットワーク環境で用いるとき、コンピュータシステム４００は、ネットワークインタフェースまたはアダプタ４５２を介してローカルネットワーク４４８に接続される。WANネットワーク環境で用いるとき、コンピュータシステム４００は、典型的に、インターネットのようなワイドエリアネットワーク４５０による通信を確立するためのモデム４５４または他の手段を含む。モデム４５４は内蔵または外付けのいずれでもよく、シリアルポートインタフェース４４０を介してシステムバス４０６と接続されている。ネットワーク化された環境において、コンピュータシステム４００に関連して述べたプログラムモジュールまたはその一部は、リモートメモリ記憶装置に記憶されてもよい。図示されたネットワーク接続は例であって、コンピュータ間の通信リンク確立のために他の手段を用いることができる。
【００４４】
本発明の実施形態において、コンピュータ４００は、ウェブサーバを表し、プロセッサ４０２が、記憶媒体４１６、４１２、４１４、４１８、４１９またはメモリ４０４のうち少なくとも１つに記憶されたASP+リソース上でページファクトリモジュールを実行処理する。HTTPレスポンスおよびリクエストは、クライアントコンピュータ４４６に接続されたLAN４４８により通信される。
【００４５】
図５は、本発明のある実施形態におけるページオブジェクトおよび他の制御オブジェクトのサーバ側処理を表すプロセスフローチャートである。処理５００において、ページオブジェクト構築部が、ページファクトリモジュール３０８によって呼び出される（図３参照）。その結果、ページオブジェクト（例えば、図３におけるページオブジェクト３１４を参照）は、クライアント上のウェブページユーザインタフェース要素に論理的に対応するように作成される。処理５０２において、ページファクトリモジュールは、クライアントから受け取ったHTTPリクエストの段階的な処理を始めるページオブジェクトのProcessRequestメンバ関数を呼び出す。本発明の一実施形態の第１の段階において、サーバ側作成処理(図示せず)は、ページオブジェクトの制御オブジェクト階層に含まれる下層サーバ側制御オブジェクトを作成する。すなわち、子制御オブジェクトの構築部がHTTPリクエスト処理の継続期間中、制御オブジェクトを作成するために繰り返し呼び出される。
【００４６】
しかし、別の実施形態において、子制御オブジェクトの作成は、制御オブジェクトが所与の処理ステップ（例えば、ポストバックイベントのハンドリング、ポストバックデータのハンドリング、ビューステートのローディングおよび保存、データ結合の解析または対応するユーザインタフェース要素のHTMLコードのレンダリング）に必要とされるまで遅らせることができる。「制御オブジェクト作成を遅らせる」後者の実施形態は、不必要なCPUおよびメモリの利用を減らすことができるので最適である。例えば、クライアントから受け取ったユーザ入力イベントが、全く異なるウェブページの作成ということになる場合がある。この場合、直ちに制御オブジェクト階層を終了させ、新たなページの新たな異なる制御オブジェクト階層を例示することになるイベントを処理するためだけに、以前のページの制御オブジェクト階層全体を例示する必要はない。
【００４７】
ページオブジェクトのProcessRequestメソッドのサーバ呼び出しに応答して、処理５０４〜５２０は、所与のHTTPリクエストのデータなどに応じ、ページオブジェクトおよび個々の下層制御オブジェクトによって実行処理することができる。本発明のある実施形態において処理５０４〜５２０を図５の順序で各個々のオブジェクトに対し行う。しかし、１つのオブジェクトに対する所与の処理は、HTTPリクエストによっては、別のオブジェクトの所与の処理に関して順番に行われなかったり、全く処理が行われないこともある。例えば、第１のオブジェクトは、初期化処理５０４およびそのロード処理５０６を行い、ポストバックデータ処理５０８を開始し、その後、遅れた制御オブジェクト作成により下層制御オブジェクトが、それ自体の初期化処理５０４およびロード処理５０６を行う。ページオブジェクトおよび下層制御オブジェクトによる処理の順番は、これには限らないが、HTTPリクエストにおけるデータの性質、制御オブジェクト階層の構成、制御オブジェクトの現在の状態および制御オブジェクト作成が遅れたか否かに依存する。
【００４８】
初期化処理５０４は、動的コンテンツ資源における初期化に関する任意のサーバ側コードを実行処理することによって制御オブジェクトが作成された後、制御オブジェクトを初期化する。このようにして、各サーバ側制御オブジェクトは、動的コンテンツ資源で宣言された特定のサーバ側機能でカスタマイズされ得る。本発明のある実施形態において、動的コンテンツコードは、サーバ上のASP+リソースでページ開発者によって宣言されたベースページ制御クラスをカスタマイズまたは拡張するものである。ASP+リソースがコンパイルされると、宣言されたコードは、適切な初期コード（例えば、ページオブジェクトおよび下層制御オブジェクトのInit()メソッド）に含まれている。初期化処理５０４は、このコードを実行処理して、ページベースクラスおよび下層制御オブジェクトのベースクラスをカスタマイズまたは拡張する。
【００４９】
本発明のある実施形態において、サーバ側制御オブジェクトの状態管理は、サーバ側制御オブジェクトを以前の状態に戻すことによってクライアント・サーバシステムの無状態モデルを収納するために搬送可能状態構造を用いるロード処理５０６および保存処理５１６においてサポートされる。ある実施形態では、状態は、一対のHTTPリクエスト／レスポンスの隠れた１つ以上のHTMLフィールドでまたな別の搬送可能状態構造でサーバを往復するが、他の搬送可能状態構造も本発明の範囲内であると考えられる。
【００５０】
クライアントとサーバ間の現在のページに関する所与のリクエストおよびレスポンスによる一連の処理において、１つ以上の制御オブジェクトの状態は、先のリクエストの処理後に保存処理５１６によって搬送可能状態構造に記録される。本発明のある実施形態において、階層情報またはサーバが適切な制御オブジェクトと所与の状態とを関連付けることを可能にする制御オブジェクト識別子を含む追加の状態情報もまた、搬送可能状態構造に含まれる。次のHTTPリクエストにおいて、状態情報は、搬送可能状態構造でサーバに戻される。サーバは、受信した搬送可能状態構造から状態情報を抽出し、状態データを制御オブジェクト階層内の適切な制御オブジェクトにロードし、各制御オブジェクトを先のHTTPレスポンス以前に存在したような状態に戻す。現在のリクエストに対する処理後、１つ以上のサーバ側制御オブジェクトの状態は、再度保存処理５１６によって搬送可能状態構造に記録され、次のHTTPレスポンスで搬送可能状態構造をクライアントに戻す。
【００５１】
ロード処理５０６の結果、各サーバ側制御オブジェクトを先のHTTPリクエスト以前の状態と同じ状態にする。例えば、テキストボックス制御オブジェクトが、先のHTTPレスポンス以前に"JDoe"と同等のプロパティ値を含む場合、テキストストリング"JDoe"をそのプロパティ値にロードすることなどによって、ロード処理５０６は、同じ制御オブジェクトを先の状態に戻す。さらに、所与のオブジェクトの状態が記憶され回復されたかどうかについても構成可能である。
【００５２】
本発明のある実施形態を要約すると、１つ以上のサーバ側制御オブジェクトの状態が処理後「保存」される。保存された状態情報は、レスポンスによりクライアントに送信される。クライアントは、次のレスポンスで保存された状態情報をサーバ側に戻す。サーバは、階層の状態が以前の状態に戻るように、新たに例示されたサーバ側制御オブジェクト階層に状態情報をロードする。
【００５３】
別の実施形態では、サーバ上、またはサーバからクライアント、そしてサーバへ戻るという往復の間、サーバによってアクセス可能な幾つかの他のウェブロケーションに状態情報を保持できる。クライアントリクエストをサーバが受信した後、この状態情報は、サーバによって取り出され、制御オブジェクト階層内の適切なサーバ側制御オブジェクトにロードされ得る。
【００５４】
処理５０８において、HTTPリクエストから受け取ったポストバックデータが処理される。ポストバックデータは、対になったキー値、階層表示（例えば、XML）またはRDF（Resource Description Framework）のような他のデータ表示でのHTTPリクエストのペイロードに含まれ得る。処理５０８は、ペイロードを構文解析してターゲットサーバ側制御オブジェクトの一意の識別子を識別する。識別子（例えば、"page:tablelist1:listrow2:label1"）を見つけ、ターゲットサーバ側制御オブジェクトが制御オブジェクト階層に存在する場合、対応するポストバックデータがその制御オブジェクトへと渡される。例えば、図１を参照すると、リスト行１４２および列１４４のデータ項目に関連する一意の識別子および対応データは、HTTPリクエスト１１４のペイロードでウェブサーバ１１６へ送られる。処理５０８はHTTPリクエスト１１４のペイロードを構文解析し、テーブルリスト１４０の一意の識別子とその関連値（すなわち、リスト行１４２のような子ユーザインタフェース要素のHTMLコード）を得る。それから処理５０８は、リスト行１４２の一意の識別子を解析し、対応するサーバ側制御オブジェクトを識別およびトラバースし、処理するターゲット制御オブジェクトにポストバック値を渡す。
【００５５】
ロード処理５０６に関して説明したように、サーバ側制御オブジェクトのプロパティ値は、以前の状態に戻され得る。ポストバックデータを受け取ると、サーバ側制御オブジェクトは、渡されたポストバック値が対応する先のプロパティ値を変化させたかどうかを判断する。変化した場合には、関連制御オブジェクトのデータ変化を示す変化リストにその変化をロギングする。すべてのポストバックデータが制御オブジェクト階層内で処理された後、制御オブジェクトメソッドが呼び出され、サーバ上で起動している株価検索アプリケーションのような１つ以上の非ユーザインタフェースサーバコンポーネントに対し、１つ以上のポストデータ変化イベントを立ち上げ得る。ポストバックデータ変化イベントは、例えば、ポストバックデータがサーバ側制御オブジェクトのプロパティを変化させたということを示しているイベントである。例示的な実施形態において、このようなイベントは、システム提供イベント待ち行列に送られ、イベントを処理するよう登録されたサーバ側コードを呼び出すことができる。次いで、サーバ側コードは、非ユーザインタフェースサーバコンポーネントのメソッドを呼び出すことができる。このように、サーバ側非ユーザインタフェースサーバコンポーネントは、サーバ側制御オブジェクトのデータの変化によってトリガされたイベントに応答することができる。アプリケーション提供イベント待ち行列、ポーリング、および処理割込みを用いることを含む、イベントを実行する別の方法もまた本発明の範囲内と考えることができる。
【００５６】
処理５１０において、ポストバックイベントをハンドリングする。ポストバックイベントは、HTTPリクエストのペイロードで通信される。処理５１０は、そのイベントが向けられているサーバ側制御オブジェクトを識別する特定のイベントターゲット（例えば、本発明のある実施形態では、"#EVENTTARGET"とラベル付けされている）を構文解析する。さらに、処理５１０は、探し当てたイベント引数がある場合はそれを構文解析し、イベント引数（例えば、本発明のある実施形態では、"#EVENTARGUMENT"とラベル付けされている）を特定されたサーバ側制御オブジェクトに与える。制御オブジェクトは、動的コンテンツ資源に関連する非ユーザインタフェースサーバコンポーネントによって処理するイベントを立ち上げる。
【００５７】
処理５１２は、サーバ側制御オブジェクトとサーバがアクセス可能な１つ以上のサーバ側データベースとのデータ結合関係を解明し、これにより、データベース値で制御オブジェクトプロパティを更新し、かつ／または、制御オブジェクトプロパティの値でデータベースフィールドを更新する。本発明のある実施形態では、サーバ側制御オブジェクトのプロパティは、サーバ側アプリケーションデータベースの表のような親データ結合コンテナのプロパティと関連付けられ（またはデータ結合され）得る。データ結合処理５１２の間に、ページフレームワークは、対応する親データ結合コンテナプロパティの値を有するデータ結合された制御オブジェクトプロパティを更新することができる。このように、次のレスポンスにおけるウェブページ上のユーザインタフェース要素は、更新されたプロパティ値を正確に反映する。なぜなら、ユーザインタフェース要素が対応する制御オブジェクトプロパティは、データ結合処理５１２の間に、自動的に更新されたからである。同様に、制御オブジェクトプロパティはまた、親データ結合コンテナフィールドに更新され得、これにより、サーバ側制御オブジェクトからのポストバック入力でサーバ側アプリケーションデータベースを更新する。
【００５８】
所与のサーバ制御オブジェクトと所与のデータソース（例えば、サーバ側データテーブル）とのデータ結合関係は、ASP+リソースにおいて宣言される(例えば、図６Ａのライン１４を参照)。制御オブジェクト階層において、データ結合関係は、データテーブルおよびサーバ側制御オブジェクトのプロパティが結合されているデータテーブルのプロパティを識別する。データ結合関係はまた二方向であり得るが、これは、（１）サーバ側データテーブルのプロパティ値がサーバ側制御オブジェクトの結合プロパティにロードされ得、かつ（２）サーバ側制御オブジェクトのプロパティ値がサーバ側データテーブルの結合プロパティにロードされ得るということを意味している。データ結合処理５１２の後、すべてのサーバ側制御オブジェクトは、サーバ側データテーブルから適切に更新されたデータ結合プロパティ値を正確に反映する。
【００５９】
処理５１４は、制御オブジェクト状態が保存され出力がレンダリングされる以前に実行処理され得る多数の更新処理を行う。処理５１６は、制御オブジェクト階層内の１つ以上の制御オブジェクトから状態情報（すなわち、ビューステート）を要求し、状態情報を格納し、HTTPレスポンスペイロードでクライアントへ送られる搬送可能状態構造に挿入する。例えば、“grid”制御オブジェクトが、次のHTTPリクエスト（すなわち、処理５０６）の後この状態に戻ることができるように、“grid”制御オブジェクトは、値のリストの現在のインデックスページを保存する。上記のように、ビューステート情報は、クライアントによる次のアクション以前の制御オブジェクト階層の状態を表す。ビューステート情報が戻ってくると、それは、制御オブジェクト階層を、クライアントポストバック入力処理またはデータ結合以前の先の状態にするのに用いられる。
【００６０】
レンダリング処理５１８は、HTTPレスポンスでクライアントへ送信する適切なオーサリング言語出力（例えば、HTMLデータ）を生成する。レンダリングは、すべてのサーバ側制御オブジェクトのトップダウン階層ツリーウォークおよび埋め込まれたレンダリングコードにより行われる。処理５２０は、任意の最終のクリーンアップ作業（例えば、ファイルを閉じたりデータベースの接続）を行い、制御オブジェクト階層を終了させる。次いで、処理は５０２に戻り、処理５２２を行い、そこでページオブジェクトは、その破壊部を呼び出すことによって終了する。
【００６１】
図６Ａは、本発明の実施形態においてサーバにデータ結合制御オブジェクトを宣言する動的コンテンツ資源(例えば、ASP+リソース)の一例を示す。ライン１は、HTMLファイルの開始タグである<html>をリテラルとして含む。ライン２から８までは、ローカルの"MyOrders"および"MyItems"のデータアレイがポピュレートするコードのコード宣言ブロックを表す。具体的には、ライン２は、"runat=server"属性および値によってサーバ側のコードをサーバ側スクリプトとして宣言する。このスクリプトは、ページオブジェクトの図５のロード処理５０６を無効にする。ライン３から５は、サーバ側制御オブジェクトのネームスペース内でアクセス可能なパブリックオブジェクトを宣言する。ライン３は、パブリックオブジェクトである"OrderSystem"タイプの"MyOrderSystem"を宣言し、これがライン７で使用され、ライン４においてパブリックデータアレイオブジェクトの"MyOrders"として宣言されたデータアレイをサーバ側データ格納部から取り出す。ライン8において、パブリックオブジェクトの"MyOrderSystem"はまた、ライン５におけるパブリックデータアレイオブジェクトの"MyItems"として宣言されたデータアレイをサーバ側データ格納部から取り出すのにも用いられる。
【００６２】
ライン１１は、HTMLファイルの本文の開始タグ<body>であるリテラルを含む。ライン１２は、ウェブページ上に表示をするヘッダ"H1"を規定するリテラルHTMLコードを含む。ライン１３は、サーバ側フォーム制御オブジェクトの宣言を含む。ライン１４は、“Page.MyOrders"に等しいデータ結合データソースプロパティを有するサーバ側テーブルリスト制御オブジェクトを宣言する。したがって、MyOrdersデータテーブルは、テーブルリスト制御オブジェクトおよびその下層のデータソースとして宣言されるのである。
【００６３】
ライン１５から２４のインラインテンプレート宣言は、ライン１４で宣言されたテーブルリスト制御オブジェクトの1つ以上の子制御オブジェクトを宣言する。テンプレート宣言は、構文解析時に解釈されて、適切なITemplateインタフェースインスタンスを繰り返し制御オブジェクト(例えば、テーブルリスト制御オブジェクト)における同名のプロパティへ動的に結合する。テーブルリスト制御オブジェクト（すなわち、繰り返し制御オブジェクト）は、実行時にITemplateインスタンスを使用して、適切なテンプレート制御クラスの新たな０からＮのインスタンスを作成および初期化する。作成された新たなインスタンスの数は、データソースの対応するデータセット（例えば、データ行）の数によって制御することができる。
【００６４】
例えば、ライン１５から２４は、ライン１４において宣言されたテーブルリスト制御オブジェクトのリスト行制御オブジェクトに対し、"itemtemplate"というテンプレートを宣言する。テンプレート制御オブジェクトのパラメータはライン１６から２２において宣言され、OrderIDラベル制御オブジェクト、Quantityラベル制御オブジェクト、およびその他のテーブルリスト制御オブジェクトを含むリスト行制御オブジェクトを示す。ライン１４において宣言されたテーブルリスト制御オブジェクトは、データテーブルMyOrdersのデータセットを繰り返し参照し、各データセットに対して下層リスト行制御オブジェクトを作成する。
【００６５】
itemtemplateテンプレートに対応するリスト行制御オブジェクトは、制御オブジェクト開発者によってIBindingContainerインスタンスとして開発され、したがって"結合コンテナ"と見なされる。図５のロード処理５０６の間に、MyOrdersデータテーブルはライン７のコードによってMyOrderSystemからポピュレートされる。例えば、MyOrdersSystemオブジェクトにより提供されたデータは、注文および製品データを含むサーバ側データベースから抽出される。その後、テーブルリスト制御オブジェクトは、データテーブルMyOrdersの各データセットに対し結合コンテナとしてリスト行制御オブジェクトを作成する。
【００６６】
ライン１６において宣言されたOrderID制御オブジェクトは、MyOrdersデータテーブル内のデータセットのOrderIDプロパティに結合されている。OrderIDラベル制御オブジェクトのPropertyBindingオブジェクトによって定義された、OrderIDラベル制御オブジェクトとリスト行制御オブジェクトとの階層データ結合関係は、ライン２０において宣言されたラベル制御オブジェクトのTextプロパティが、"OrderID"として識別されるデータ項目プロパティに結合されているデータであることを確立する。階層データ結合関係はまた、データ項目プロパティは制御オブジェクトの結合コンテナ、すなわちMyOrdersデータテーブルのプロパティであることを特定する。結合されてOrderID制御オブジェクトとなるMyOrdersデータテーブルのプロパティはデータ項目ではあるが、サーバ側データアレイ（例えば、データテーブルあるいは別のタイプのデータオブジェクト）のいかなるパブリックプロパティも、行インデックス、データ値サイズ、データ値タイプなどを含むサーバ側制御オブジェクトのプロパティに結合することができる。
【００６７】
ライン１７において宣言されたQuantity制御オブジェクトは、MyOrdersデータテーブルにおけるデータセットのQuantityプロパティに結合されている。Quantityラベル制御オブジェクトのPropertyBindingオブジェクトによって定義された、Quantityラベル制御オブジェクトとリスト行制御オブジェクトとの階層データ結合関係は、ライン１７において宣言されたラベル制御オブジェクトのTextプロパティが、"Quantity"として識別されるデータ項目プロパティに結合されているデータであることを確立する。階層データ結合関係はまた、データ項目プロパティがQuantityラベル制御オブジェクトの結合コンテナのプロパティ、すなわちMyOrdersデータテーブルのプロパティであることを特定する。結合されてQuantityラベル制御オブジェクトとなるMyOrdersデータテーブルのプロパティはデータ項目ではあるが、サーバ側データアレイ(例えば、データテーブルあるいは別のタイプのデータオブジェクト)のいかなるパブリックプロパティも、データセットインデックス、データ値サイズ、データ値タイプなどを含むサーバ側制御オブジェクトのプロパティに結合されてもよい。
【００６８】
ライン１８は、"Page.MyItems"に等しいデータ結合データソースプロパティを有するサーバ側テーブルリスト制御オブジェクトの宣言を含む。したがって、MyItemsは、テーブルリスト制御オブジェクトおよびその下層のデータソースとして宣言される。ライン１９から２２のインラインテンプレート宣言は、ライン１８において宣言されたテーブルリスト制御オブジェクトの1つ以上の子制御オブジェクトを宣言する。テーブルリスト制御オブジェクト（すなわち、別の繰り返し制御オブジェクト）は、インラインテンプレート宣言に関連するテンプレートインスタンスを用いて、適切なテンプレート制御クラスの０からＭの新たなインスタンスを作成および初期化する。作成された新たなインスタンスの数は、データソースにおける対応するデータセットの数によって制御することができる。
【００６９】
テンプレート制御オブジェクトのパラメータは、Indexラベル（すなわち、所与のデータセットの順序インデックスに対応する）およびデータソースからデータ項目プロパティのテキストを表示するItemラベルを含むリスト行制御オブジェクトを示しているライン２０から２１において定義される。データテーブルMyItemsの各データセットに対し、ライン１８で宣言されたテーブルリスト制御オブジェクト下でリスト行制御オブジェクトが作成される。ファイル６００における残りのラインは、ファイル内の入れ子の宣言を閉じる終了タグを含む。
【００７０】
ASP+リソース６００は、本発明のある実施形態において、一方向データ結合（すなわち、サーバ側データテーブルから制御オブジェクト階層へデータを送信すること）を実行するための宣言およびサーバ側スクリプティングを示す。また別の実施形態においては、反対方向の一方向データ結合（すなわち、制御オブジェクト階層からサーバ側データテーブルへデータを送信すること）あるいは二方向データ結合（すなわち、両方向にデータを送信すること）を宣言することができる。
【００７１】
第１のタイプの一方向データ結合（すなわち、制御オブジェクト方向へ）を実行するために、ライン７におけるコードはLoad()サブルーチンを無効にし、例えば、MyOrderSystemデータテーブルからの注文のスナップショットデータアレイをローカルのMyOrdersデータアレイ（すなわち、上述の第１のタイプの一方向データ結合）へロードする。その後、データ結合段階の間に、サーバ側制御オブジェクトのプロパティはライン１４、１６、１７、１８、２０および２１のデータ結合ステートメントに従って、ローカルのMyOrdersデータアレイからの値から更新することができる。
【００７２】
第２のタイプの一方向データ結合（すなわち、制御オブジェクトから）を実行するために、ページ開発者はページオブジェクトのSave()サブルーチンを無効にすることができる(図５の保存処理５１６を参照)。それ以前に、データ結合段階において、ローカルのMyOrdersおよびMyItemsデータアレイは、ライン１４、１６、１７、１８、２０および２１のデータ結合ステートメントに従って、サーバ側制御オブジェクトプロパティからの値を用いて更新されている。その後、無効にされたSave()サブルーチンは、ローカルデータアレイの値をMyOrderSystemオブジェクトのデータテーブルにロードする。ページオブジェクトのSave()サブルーチンを無効にするコード宣言ブロックの一例は、図６ＢのASP+リソース６０２におけるライン６から９に示されている。このタイプの一方向データ結合は、例えば、注文をサーバ側データベースにロードするのに用いることができる。二方向データ結合を宣言するために、ページ開発者はページオブジェクトのLoad()およびSave()サブルーチンの両方を無効にすることができる。
【００７３】
図７は、本発明の一実施形態において、図６Ａの動的コンテンツ資源の一例(例えば、ASP+リソース)を処理した結果の制御オブジェクト階層の一部を示したものである。最上レベルのページ制御オブジェクトおよび種々のリテラル制御オブジェクトは、制御オブジェクト階層７００から省略されている。図６Ａのライン１１から開始するフォーム宣言に対応するフォーム制御オブジェクト７０２はテーブルリスト制御オブジェクト７０４を含む。テーブルリスト制御オブジェクト７０４は、図６Ａのライン１２から開始して宣言され、MyOrdersデータテーブルに等しいデータ結合プロパティを有することになる。
【００７４】
テーブルリスト制御オブジェクト７０４は、リスト行制御オブジェクト７０６から７０８（すなわち、ListRow0からListRowNまで）を含む。このレベルでの制御オブジェクト階層におけるリスト行制御オブジェクトの実際の数は、MyOrdersデータテーブル内のデータセットの数に依存している。各リスト行制御オブジェクトの構成は、図６Ａのライン１３で開始する項目テンプレート宣言によって定義される。各リスト行制御オブジェクトのデータ結合関係は、各リスト行制御オブジェクトの結合コンテナ（すなわち、テーブルリスト制御オブジェクト７０４）のデータソースに関連して定義される。ある実施形態において、制御オブジェクト結合コンテナは、IBindingContainerインタフェースをサポートする制御オブジェクト階層においてもっとも近いところにあるより高いレベルの制御オブジェクトである。
【００７５】
図６Ａのライン１４および１５の宣言に対応しているラベル制御オブジェクト７１０および７１２は、結合コンテナリスト行オブジェクト７０６に含まれている。ラベル制御オブジェクト７１０および７１２のデータ結合関係は、MyOrdersデータテーブルのデータセットにデータ結合している結合コンテナリスト行制御オブジェクト７０６に関連して定義される。
【００７６】
図６Ａのライン１６における宣言に対応するテーブルリスト制御オブジェクト７１４もまた、結合コンテナリスト行制御オブジェクト７０６に含まれている。テーブルリスト制御オブジェクト７１４は、サブデータテーブルのMyOrders. MyIngredients.に結合したデータとして宣言される結合コンテナである。テーブルリスト制御オブジェクト７１４は、サブデータテーブルMyOrders. MyIngredients.のデータセットに対応しているリスト行制御オブジェクト７１６から７１８（ListRow0からListRowNまで）を含む。リスト行制御オブジェクト７１６から７１８までの各々は、図６Ａのライン１９から開始するテンプレート宣言によって定義される。リスト行制御オブジェクト７１６から７１８のデータ結合関係は、結合コンテナテーブルリスト制御オブジェクト７１４に関連して定義される。
【００７７】
リスト行制御オブジェクト７１６から７１８までの各々は、ラベル制御オブジェクト（例えば、７２０および７２２）を含む。例えば、ラベル制御オブジェクト７２０は、図６Ａのライン２０においてサブデータテーブルMyOrders. MyIngredientsのデータセットのインデックスフィールドにデータ結合したものとして宣言され、かつラベル制御オブジェクト７２２は、図６Ａのライン２１においてサブデータテーブルMyOrders.MyIngredientsのIngredientsデータ項目にデータ結合したものとして宣言される。Ingredientsデータ項目のデータソースを判断するために、ラベル制御オブジェクト７２０および７２２のプロパティは、より高いレベルの階層内においてもっとも近い結合コンテナ（すなわち、リスト行制御オブジェクト７１６のような、IBindingContainerインスタンスである制御オブジェクト）へのリファレンスを戻す。
【００７８】
リスト行制御オブジェクト７０８以下の階層は、同一のテンプレート宣言によって定義されるため、リスト行制御オブジェクト７０６以下の階層と同じ構成に従う。この階層は、ラベル制御オブジェクト７３０、ラベル制御オブジェクト７３４およびテーブルリスト制御オブジェクト７３２を含む第１のレベルを含んでいる。テーブルリスト制御オブジェクト７３２より下の、他のレベルの階層には、0からＮのリスト行制御オブジェクト７３６から７３８が含まれる。リスト行制御オブジェクト７３６から７３８の各々は、対応するテンプレート宣言によって定義されるようなラベル制御オブジェクトを含む（ラベル制御オブジェクト７４２、７４４、７４６および７４８を参照）。
【００７９】
図８は、本発明の一実施形態におけるサーバ側制御クラスの一例の表記を表している。サーバ側制御クラスは、本発明のある実施形態におけるすべてのサーバ側制御オブジェクトに共通のメソッド、プロパティおよびイベントを定義している。より具体的な制御クラス（例えば、ウェブページでのクライアント側ボタンに対応するサーバ側ボタン制御オブジェクト）は、この制御クラスから派生している。制御クラス８００は、プロパティ８０２およびメソッド８０４を格納するメモリを含むものとして示されている。データメンバとメソッドとの組み合わせが異なる他の制御クラスの実施形態もまた、本発明の範囲内で考えられる。
【００８０】
示された実施形態において、プロパティ８０２およびメソッド８０４はパブリックである。プロパティ"ID"は、制御オブジェクト識別子を示している読み取りおよび書き込み可能なストリング値である。プロパティ"Visible"は、対応しているクライアント側ユーザインタフェース要素のオーサリング言語データをレンダリングすべきかどうかを示す読み取りおよび書き込み可能なブーリアン値である。プロパティ"MaintainState"は、制御オブジェクトが、現在のページリクエストの終了時に（すなわち、図５の保存処理５１６へのレスポンスで）そのビューステート（およびその子オブジェクトのビューステート）を保存すべきかどうかを示している読み取りおよび書き込み可能なブーリアン値である。プロパティ"Parent"は、制御オブジェクト階層の現在の制御オブジェクトを関連する制御コンテナオブジェクトへの読み取り可能なリファレンスである。プロパティ"Page"は、現在の制御オブジェクトがホストされているルートページオブジェクトへの読み取り可能なリファレンスである。プロパティ"Form"は、現在の制御オブジェクトがホストされているフォーム制御オブジェクトへの読み取り可能なリファレンスである。プロパティ"Trace"は、開発者のトレースログの書きこみを可能にするトレースコンテキストへの読み取り可能なリファレンスである。プロパティ"BindingContainer"は、制御オブジェクトの直接データ結合コンテナへの読み取り可能なリファレンスである。プロパティ"Bindings"は、制御オブジェクトのデータ結合連関の集合へのリファレンスである。
【００８１】
メソッド８０４は、リクエストの処理および制御オブジェクトのデータメンバへのアクセス方法を含む。ある実施形態において、メソッドは、制御オブジェクトのメモリスペースに格納されるポインタによって参照される。この参照技術はまた、コンテナ制御オブジェクト、制御コレクションオブジェクト、およびページオブジェクトを含む他のサーバ側オブジェクトの実施形態においても用いられる。メソッド"Init()"は、子制御オブジェクトが作成された後、これらを初期化するのに用いられる（図５の処理５０４を参照）。メソッド"Load()"は、先のHTTPリクエストからビューステート情報を回復するのに用いられる(図５の処理５０６を参照)。メソッド"Save()"は、後のHTTPリクエストで用いるビューステート情報を保存するのに用いられる（図５の処理５１６を参照）。メソッド"PreRender()"は、ビューステートの保存およびコンテンツのレンダリングに先立って必要なプレレンダリングステップを行うのに用いられる(図５の処理５１４を参照)。メソッド"Render(TextWriter output)"は、現在の制御オブジェクトに対応するユーザインタフェース要素のオーサリング言語コードを出力するのに用いられる(図５の処理５１８を参照)。コードは、"Output"パラメータでこのコードに渡されたTextWriter Output Screenに出力される。メソッド"Dispose()"は、制御オブジェクトを終了する前に最終的なクリーンアップ作業を行うのに用いられる(図５の処理５２０を参照)。
【００８２】
メソッド"GetUniqueID()"は、現在の制御オブジェクトの一意の、階層的に認定されたストリング識別子を得る。メソッド"GetControlWithID(String id)"は、与えられた識別子（"id"）を有する直接の子制御オブジェクトへのリファレンスを戻す。メソッド"GetControlWithUniqueID(String id)"は、一意の階層識別子（"id"）を有する子制御オブジェクトへのリファレンスを戻す。
【００８３】
メソッド"PushControlPropertyTwoBindingContainer(String prop Name)"は、プッシュモジュールの一例であり、ポストバック値がサーバ側制御オブジェクト内で変化すると、ポストバックデータから二方向のデータ結合をする結合コンテナを更新するのに用いられる。メソッド"PushBindingContainer PropertyTwoControl(String prop Name)"は、別のプッシュモジュールの一例であり、現在の結合コンテナ値を有するサーバ側制御オブジェクトプロパティを更新するのに用いられる。メソッド"HasBindings()"は、制御オブジェクトが結合連関を有しているかどうかを示しているブーリアン値を戻す。これらのメソッドは、サーバ側制御オブジェクトのプロパティとサーバ側データ格納部に関連しているサーバ側データアレイにおけるプロパティとの結合関係を解明するのに用いられる(図５のデータ結合処理５１２を参照)。
【００８４】
図９は、本発明のある実施形態における、サーバ側制御オブジェクトのプロパティをサーバ側データアレイのプロパティにデータ結合させる処理のフローチャートを示す。図９に示された処理は、図５に示した1つ以上の処理において実行することができる。例えば、本発明のある実施形態においては、処理９００および９０２は、作成処理または初期化処理５０４の間に実行し、かつ、処理９０４はロード処理５０６の間に実行し、その結果データテーブルは処理９０６におけるテーブルリスト制御オブジェクトのプロパティとして格納される。ポストバック入力プロセス処理５０８および５１０、またはデータ結合処理５１２を行なっている間にテーブルリスト制御オブジェクトあるいはその子制御オブジェクトがアクセスされる時は、データテーブルの構成に従って、処理９０８、９１０、９１２および９１４が実行されて結合コンテナおよびその子を含むように階層が拡張される。処理９１６、９１８、９２０および９２２は、図５のデータ結合処理５１２の間に実行し、かつ、処理９２４は図５の保存処理の間に実行する。上述の処理対応関係は、本発明のある実施形態に用いられているが、他の実施形態では、図５および９の処理の順序を入れ替えたり並べ替えたりすることができる。
【００８５】
図９の個々の処理については、ページがサーバ側データベースからの一方向データ結合をサポートしている場合、あるいはサーバ側データベースと制御オブジェクト階層との間に二方向データ結合をサポートしている場合、処理９００は、COM+リフレクションの機能を用いて、サーバ側データベースの一部からローカルのデータテーブル（すなわち、データアレイ）をロードする。処理９０２は、データテーブルをテーブルリスト制御オブジェクトのデータソースとして関連付ける。ある実施形態において、この関連付けは、テーブルリスト制御オブジェクトの宣言において特定されたデータ結合プロパティによって遂行される(図６Ａのライン１４を参照)。処理９０４は、制御オブジェクト階層中にテーブルリスト制御オブジェクトを作成する。処理９０６は、データテーブルをテーブルリスト制御オブジェクトのプロパティとして格納する。
【００８６】
処理９０８において、テーブルリスト制御オブジェクトはデータテーブルの各データセットに対し繰り返し参照する。探知した各データセットに対し、関連するテンプレート宣言に基づいて、テーブルリスト制御オブジェクトは結合コンテナ制御オブジェクト(例えば、リスト行制御オブジェクト)を作成する。各結合コンテナ制御オブジェクトは、テーブルリスト制御オブジェクトの子として扱われる。処理９１０は、データソース（たとえば、"MyOrders.Row(1)"）のデータセットと等しくなるように結合コンテナ制御オブジェクトのデータ結合プロパティを設定することにより、各結合コンテナ制御オブジェクトをデータテーブルのデータセットに関連させる。
【００８７】
処理９１２において、各結合コンテナ制御オブジェクトは、データソースの結合コンテナ対応データセットのプロパティに対応する下層制御オブジェクトを作成する。あるいは、各結合コンテナ制御オブジェクトは子制御オブジェクトを作成するが、それは最終的に、データソースの結合コンテナ対応データセットのプロパティに対応する下層制御オブジェクトを作成することになる。処理９１４は、データソースの対応データセットのプロパティにおいて、下層制御オブジェクトのプロパティ間の結合関係を確立する。この結合関係は、下層制御オブジェクトのプロパティに格納されたPropertyBindingオブジェクトによって定義することができる。
【００８８】
決定処理９１６は、制御オブジェクトプロパティからのデータが、対応する結合コンテナプロパティに送信されるべきかどうかを探知する。送信されるべきと探知した場合、処理９１８は下層制御オブジェクト内のPushControl PropertyToBindingContainer()メソッドを呼び出して、データを結合コンテナに送信する。その後、手順は決定処理９２０に進む。あるいはまた、決定処理９１６が、制御オブジェクトプロパティからのデータは対応する結合コンテナプロパティに送信されるべきと判断しない場合もまた、手順は決定処理９１６から決定処理９２０へと進み、決定処理９２０が、データを結合コンテナプロパティから対応する制御オブジェクトプロパティに送信すべきかどうかを判断する。送信されるべきと探知した場合、処理９３２は下層制御オブジェクト内のPushBindingContainerPropertyToControl()メソッドを呼び出して、結合コンテナからデータを受信する。その後、処理９２４に進む。あるいは、決定処理９２０が、結合コンテナプロパティからのデータは制御オブジェクトプロパティに送信すべきでないと判断した場合もまた、手順は決定処理９２０から決定処理９２４へ進む。このページが、サーバ側データベースへの一方向データ結合あるいはサーバ側データベースと制御オブジェクト階層との間の二方向データ結合をサポートする場合、処理９２４は、COM+リフレクションによって、ローカルのデータテーブルをサーバ側データ格納部の一部へ保存する。次いで、手順は図５のレンダリング処理５１８へと続く。
【００８９】
図１０は、本発明のある実施形態における、サーバ側プロパティ結合コレクションクラスの一例の表記を示す。サーバ側プロパティ結合コレクションクラスは、プロパティ結合コレクションオブジェクトのメソッドとプロパティとを定義する(図８のサーバ側制御クラスの結合プロパティを参照)。プロパティ結合コレクションクラス１０００は、プロパティ１０００およびメソッド１００４に格納するメモリを含むものとして示されている。データメンバとメソッドとの組み合わせが異なる他のプロパティ結合コレクションクラスの実施形態もまた、本発明の範囲内であると考えられる。
【００９０】
表示された実施形態において、プロパティ１００２および方法１００４はパブリックである。プロパティ"All"は、プロパティ結合オブジェクトの読み取りおよび書き取り可能なスナップショットアレイであり、インデックスにより順序付けて、コレクションにおけるすべてのプロパティ結合を表す。プロパティ"this[int index]"は、インデックスで順序付けられたコレクション内のプロパティ結合オブジェクトへのリファレンスを戻す読み取り可能なプロパティ結合オブジェクトである。プロパティ"Count"は、コレクション内のプロパティ結合オブジェクトの数を示す読み取り可能な整数値である。
【００９１】
メソッド１００４は、プロパティ結合コレクションオブジェクトのデータにアクセスするための方法を含む。メソッド"Add(PropertyBinding value)"は、特定のプロパティ結合オブジェクトをコレクションに追加するのに用いられる。メソッド"IndexOf(PropertyBinding value)"は、コレクション内のプロパティ結合オブジェクトの順序インデックスを得るために用いられる。メソッド"GetEnumerator(boolAllowRemove)"は、コレクション内のすべてのプロパティ結合のエニュメレータ（enumerator）を得るのに用いられる。メソッド"Remove(PropertyBinding value)は、特定のプロパティ結合オブジェクトをコレクションから除去するのに用いられる。メソッド"Remove(int index)"は、インデックスにより特定されたプロパティ結合オブジェクトをコレクションから除去するのに用いられる。メソッド"Clear()"は、コレクションからすべてのプロパティ結合オブジェクトを除去するのに用いられる。
【００９２】
図１１は、本発明のある実施形態における、サーバ側プロパティ結合クラスの一例の表記を示す。サーバ側プロパティ結合クラスは、プロパティ結合オブジェクトのメソッドおよびプロパティを定義し(図１１のプロパティ結合コレクションクラスの"All"および"this[int index]"のプロパティを参照)、これにより制御オブジェクトとサーバ側データソースとの間のデータ結合関係を定義する。プロパティ結合クラス１１００は、プロパティ１１０２を格納するメモリを含むものとして示される。データメンバおよびメソッドの組み合わせが異なる他のクラスの実施形態もまた、本発明の範囲内であると考えられる。
【００９３】
例示した実施形態において、プロパティ１１０２はパブリックである。プロパティ"BindingContainer"は、読み取りおよび書き込み可能な結合コンテナインタフェース（すなわち、IBindingContainerオブジェクト）であり、結合コンテナデータソースを識別し、そこへのアクセスを得るのに用いられる。IBindingContainerオブジェクトは、マーカインタフェースであり、自身のパブリックプロパティをその下層の結合に利用させる制御を識別する。したがって、"BindingContainer"プロパティは、結合された制御オブジェクトが結合先のサーバ側データソースを探し出しアクセスを可能にする結合コンテナ識別子を提供する。プロパティ"Property"は、結合コンテナオブジェクト内の結合されたプロパティを識別する読み取りおよび書き込み可能なストリング値（すなわち、プロパティ識別子）である。プロパティ"Control"は、読み取りおよび書き込み可能な制御オブジェクトである（すなわち、データソースプロパティが結合されるターゲットの制御オブジェクトを識別する）。プロパティ"ControlProperty"は、ターゲット制御オブジェクトのターゲットプロパティを識別する読み取りおよび書き込み可能なストリング値（すなわち、プロパティ識別子）である。プロパティ"FormatString"は、読み取りおよび書き込み可能なストリング値であり、オプショナルフォーマット集中ストリングを識別する。
【００９４】
本明細書中の本発明の実施形態は、１つ以上のコンピュータシステムの論理ステップとして実行される。本発明の論理処理は、（１）１つ以上のコンピュータシステムで実行処理されるプロセッサ実行ステップシーケンスとして、（２）１つ以上のコンピュータシステム内の相互接続された機械モジュールとして実行される。実行は選択の問題であり、本発明を実行するコンピュータシステムの性能要件に依存する。したがって、本明細書に記載の本発明の実施形態を構成する論理処理は、処理、ステップ、オブジェクトまたはモジュールと様々に表現することができる。
【００９５】
上記の明細書、実施例およびデータは、本発明の実施形態の構造および使用の完全な説明を提供している。本発明は、本発明の精神および範囲から逸脱することなく多数の形態で実施することができるので、本発明は添付の請求項にある。
【００９６】
【発明の効果】
以上のように本発明によれば、１つ以上のサーバ側制御オブジェクトと１つ以上のサーバ側データ格納部とを結合する階層データを提供し、サーバ側制御オブジェクトのプロパティが、その結合コンテナを介して、サーバ側データ格納部のプロパティに結合されるようにすることで、ユーザインタフェース要素を処理することが要求されるプログラミングを適切にカプセル化することができ、ページ開発のみならずアプリケーションプログラム開発についても、データベース構造やプログラミングに関する深い知識を必要とすることなく、開発労力の軽減を図ることが可能となる。
【図面の簡単な説明】
【図１】  本発明のある実施形態におけるクライアントに表示するウェブページコンテンツを動的に生成するウェブサーバを示す。
【図２】  本発明のある実施形態におけるサーバ側制御オブジェクトを用いてクライアント側ユーザインタフェース要素の処理およびレンダリングのための処理のフローチャートを示す。
【図３】  本発明のある実施形態で用いるウェブサーバのモジュールの一例を示す。
【図４】  本発明のある実施形態を実行するのに有用なシステムの一例を示す。
【図５】  本発明のある実施形態におけるページオブジェクトの処理を表すプロセスフローチャートを示す。
【図６Ａ】  本発明のある実施形態におけるデータ結合制御オブジェクトを宣言する動的コンテンツ資源（例えば、ASP+リソース）の一例を示す。
【図６Ｂ】  本発明のある実施形態におけるサーバ側データテーブルへの第２のタイプの一方向データ結合を宣言するコード宣言ブロックの一例を示す。
【図７】  本発明のある実施形態における図６Ａの動的コンテンツ資源（例えば、ASP+リソース）例の処理の結果生ずる制御オブジェクト階層の一部を示す。
【図８】  本発明のある実施形態におけるサーバ側制御クラスの一例の表記を示す。
【図９】  本発明のある実施形態におけるサーバ側制御オブジェクトのプロパティとサーバ側データアレイのプロパティとを結合させるデータ処理のフローチャートを示す。
【図１０】  本発明のある実施形態におけるサーバ側プロパティ結合コレクションクラスの一例の表記を示す。
【図１１】  本発明のある実施形態におけるサーバ側プロパティ結合クラスの一例の表記を示す。
【符号の説明】
１００  クライアント
１０２  ブラウザ
１０４  ウェブページ
１１２  HTTPレスポンス
１１４  HTTPリクエスト
１１６  ウェブサーバ
１１８  HTTPパイプライン
１２０  ハンドラ
１２２  静的コンテンツ資源
１２４  動的コンテンツ資源
１２６  サーバ側制御クラスライブラリ
１２８  クライアント側制御クラスライブラリ
１３０  非UIサーバコンポーネント
１３１  サーバ側データ格納部
３００  ウェブサーバ
３０４  HTTPパイプライン
３０８  ページファクトリ
３１０  ASP+リソース
３１２  制御クラスライブラリ
３１４  ページオブジェクト
３１８  テキストボックスオブジェクト
３２０、３２２  ボタンオブジェクト
３３０  アプリケーションコンポーネント
３３１  サーバ側データ格納部
４００  コンピュータ
４０２  ＣＰＵ
４０４  メモリ
４１２  ハードディスクドライブ
４１４  磁気ディスクドライブ
４１６  着脱可能記憶媒体
４１８  光ディスクドライブ
４１９  光ディスク
４２０、４２２、４２４  Ｉ／Ｆ
４２６  オペレーティングシステム
４２８  アプリケーションプログラム
４３０  プログラムモジュール
４３２  プログラムデータ
４３４  キーボード
４３６  マウス
４４０  シリアルポートインタフェース
４４２  モニタ
４４４  ビデオアダプタ
４４６  リモートコンピュータ
４４８  ＬＡＮ
４５０  ＷＡＮ
４５２  ネットワークアダプタ
４５４  モデム
７０２  フォーム
７０４、７１４、７３２  テーブルリスト
８００  制御クラス
８０２、１００２、１１０２  プロパティ
８０４、１００４  メソッド
１０００  プロパティ結合コレクションクラス
１１００  プロパティ結合クラス
【図１】
0004694031.tif 000002
【図２】
0004694031.tif 000003
【図３】
0004694031.tif 000004
【図４】
0004694031.tif 000005
【図５】
0004694031.tif 000006
【図６Ａ】
0004694031.tif 000007
【図６Ｂ】
0004694031.tif 000008
【図７】
0004694031.tif 000009
【図８】
0004694031.tif 000010
【図９】
0004694031.tif 000011
【図１０】
0004694031.tif 000012
【図１１】
0004694031.tif 000013