(57)【要約】  ページに関するページ・レイアウトを継承するための方法を提供する。クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、現行ページが１組の祖先ページを有するかどうかについて判断を行う。この１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるようにこの１組の祖先ページを配置する。この１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別する。識別されたレイアウト・ページを現行ページと結合して結合ページを形成する。結合ページをクライアント・ブラウザに送信する。【選択図】  図４
2009543167.tif 000002
【特許請求の範囲】
【請求項１】
ページに関するページ・レイアウトを継承するためのコンピュータで実行される方法であって、
クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、前記現行ページが１組の祖先ページを有するかどうかを判断するステップと、
前記１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるように前記１組の祖先ページを配置するステップと、
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するステップと、
前記識別されたレイアウト・ページを前記現行ページと結合して結合ページを形成するステップと、
前記結合ページを前記クライアント・ブラウザに送信するステップと、
を含む、コンピュータで実行される方法。
【請求項２】
前記ページが、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂ環境内のページである、請求項１記載のコンピュータで実行される方法。
【請求項３】
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別する前記ステップが、
整合祖先ページを形成するために前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出するためにデータベースに照会するステップと、
前記整合祖先ページに関連する前記レイアウト・ページを決定するステップと、
をさらに含む、請求項１記載のコンピュータで実行される方法。
【請求項４】
前記ページ・テーブル内の項目が、１つのページと、前記ページに関連するレイアウト・ページとを含む、請求項３記載のコンピュータで実行される方法。
【請求項５】
前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出しなかったことに応答して、前記１組の祖先ページのうちの１つの祖先ページにデフォルト・レイアウト・ページを関連付けるステップ
をさらに含む、請求項３記載のコンピュータで実行される方法。
【請求項６】
前記現行ページが前記１組の祖先ページのリストを含む、請求項１記載のコンピュータで実行される方法。
【請求項７】
前記１組の祖先ページのうちで前記最も近い祖先ページが、最後の名前セグメントの直前に発生する名前セグメントに対応するページであって、前記最後の名前セグメントが前記現行ページに対応する、請求項１記載のコンピュータで実行される方法。
【請求項８】
ページに関するページ・レイアウトを継承するためのコンピュータ使用可能プログラム・コードを含むコンピュータ使用可能媒体を含むコンピュータ・プログラムであって、
クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、前記現行ページが１組の祖先ページを有するかどうかを判断するためのコンピュータ使用可能プログラム・コードと、
前記１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるように前記１組の祖先ページを配置するためのコンピュータ使用可能プログラム・コードと、
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するためのコンピュータ使用可能プログラム・コードと、
前記識別されたレイアウト・ページを前記現行ページと結合して結合ページを形成するためのコンピュータ使用可能プログラム・コードと、
前記結合ページを前記クライアント・ブラウザに送信するためのコンピュータ使用可能プログラム・コードと、
を含む、コンピュータ・プログラム。
【請求項９】
前記ページが、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂ環境内のページである、請求項８記載のコンピュータ・プログラム。
【請求項１０】
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するための前記コンピュータ使用可能プログラム・コードが、
整合祖先ページを形成するために前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出するためにデータベースに照会するためのコンピュータ使用可能プログラム・コードと、
前記整合祖先ページに関連する前記レイアウト・ページを決定するためのコンピュータ使用可能プログラム・コードと、
をさらに含む、請求項８記載のコンピュータ・プログラム。
【請求項１１】
前記ページ・テーブル内の項目が、１つのページと、前記ページに関連するレイアウト・ページとを含む、請求項９記載のコンピュータ・プログラム。
【請求項１２】
前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出しなかったことに応答して、前記１組の祖先ページのうちの１つの祖先ページにデフォルト・レイアウト・ページを関連付けるためのコンピュータ使用可能プログラム・コード
をさらに含む、請求項９記載のコンピュータ・プログラム。
【請求項１３】
前記現行ページが前記１組の祖先ページのリストを含む、請求項８記載のコンピュータ・プログラム。
【請求項１４】
前記１組の祖先ページのうちで前記最も近い祖先ページが、最後の名前セグメントの直前に発生する名前セグメントに対応するページであって、前記最後の名前セグメントが前記現行ページに対応する、請求項８記載のコンピュータ・プログラム。
【請求項１５】
ページに関するページ・レイアウトを継承するためのデータ処理システムであって、
コンピュータ使用可能プログラム・コードを保管する記憶装置と、
クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、前記現行ページが１組の祖先ページを有するかどうかを判断し、前記１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるように前記１組の祖先ページを配置し、前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別し、前記識別されたレイアウト・ページを前記現行ページと結合して結合ページを形成し、前記結合ページを前記クライアント・ブラウザに送信するためのコンピュータ使用可能プログラム・コードを実行するプロセッサと、
を含む、データ処理システム。
【請求項１６】
前記ページが、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂ環境内のページである、請求項１５記載のデータ処理システム。
【請求項１７】
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するための前記コンピュータ使用可能プログラム・コードを実行することが、
整合祖先ページを形成するために前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出するためにデータベースに照会し、前記整合祖先ページに関連する前記レイアウト・ページを決定するためのコンピュータ使用可能プログラム・コードを実行すること
をさらに含む、請求項１５記載のデータ処理システム。
【請求項１８】
前記ページ・テーブル内の項目が、１つのページと、前記ページに関連するレイアウト・ページとを含む、請求項１７記載のデータ処理システム。
【請求項１９】
前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出しなかったことに応答して、前記１組の祖先ページのうちの１つの祖先ページにデフォルト・レイアウト・ページを関連付けるためのコンピュータ使用可能プログラム・コードを実行すること
をさらに含む、請求項１７記載のデータ処理システム。
【請求項２０】
前記現行ページが前記１組の祖先ページのリストを含む、請求項１５記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、改良されたデータ処理システムに関し、特に、プログラミング・モデルのための方法および装置に関する。さらに詳細には、本発明は、ブラウザを使用してコンテンツを操作するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードに関する。
【背景技術】
【０００２】
インターネットとは、送信側ネットワークのプロトコルから受信側ネットワークのプロトコルにメッセージを変換する際にデータ転送を処理するゲートウェイによってまとめて結合されたコンピュータおよびネットワークのグローバル・ネットワークである。インターネット上では、どのコンピュータでも他の任意のコンピュータと通信することができ、そこではプロトコルと呼ばれる様々な言語によりインターネットを越えて情報が移動する。インターネット上で最も一般的に使用される１組のプロトコルは、伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ：transmission control protocol/Internet protocol）と呼ばれる。
【０００３】
インターネットは、情報とエンターテインメントの両方のソースであるだけでなく、通信と商取引に大変革をもたらした。より頻繁に使用されるようになった、あるタイプのソフトウェアはＷｉｋｉソフトウェアである。Ｗｉｋｉソフトウェアは、Ｗｉｋｉ環境で実行される、あるタイプの共同ソフトウェアである。このソフトウェアは、インターフェースを介してユーザ・グループによってアクセス可能な共用環境で提供される。Ｗｉｋｉアプリケーションは、ユーザがコンテンツを操作できるようにする、あるタイプのＷｅｂサイトである。ユーザは、非常に迅速かつ容易に、コンテンツの追加、削除、またはその他の編集、および変更を行うことができる。Ｗｉｋｉアプリケーションは、共同作成のための効果的なツールとして使用される場合が多い。Ｗｉｋｉアプリケーションの現行の使用法は、オンライン百科事典またはその他の知識ベースなどの共同コンテンツ作成に向けられている。ユーザは、典型的には、共用環境でコンテンツを作成することができる。この環境では、前のバージョンを復元できるようにするために、ページの改訂版が保存される。さらに、ページ間リンクを作成するために、マークアップ・ショートカットが提供される。さらに、「見たまま印字」（ＷＹＳＩＷＹＧ：what you see is what you get）編集モード／エディタが使用される場合も多い。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
模範的な諸実施形態は、ページに関するページ・レイアウトを継承するためのコンピュータで実行される方法、コンピュータ・プログラム（computer program product）、およびデータ処理システムについて記述する。
【課題を解決するための手段】
【０００５】
クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、現行ページが１組の祖先ページを有するかどうかについて判断を行う。この１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるようにこの１組の祖先ページを配置する。この１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別する。識別されたレイアウト・ページを現行ページと結合して結合ページを形成する。結合ページをクライアント・ブラウザに送信する。
【０００６】
次に、添付図面に関連して、一例として、本発明の好ましい諸実施形態について説明する。
【図面の簡単な説明】
【０００７】
【図１】本発明の例示的な諸実施形態を実装可能なデータ処理システムのネットワークの図表現である。
【図２】本発明の例示的な諸実施形態を実装可能なデータ処理システムのブロック図である。
【図３】本発明の例示的な一実施形態によりＷｉｋｉアプリケーションを生成し使用する際に使用するためのコンポーネントを例示する図である。
【図４】本発明の例示的な一実施形態によるＷｉｋｉアーキテクチャを例示する図である。
【図５】本発明の例示的な一実施形態によりページを描画する際のデータフローを例示する図である。
【図６】本発明の例示的な一実施形態によりＷｉｋｉアプリケーションのためのクライアントおよびサーバ上のコンポーネントを例示する図である。
【図７】本発明の例示的な一実施形態によりライブ・コンテンツをドラッグするための模範的なディスプレイ画面である。
【図８】本発明の例示的な一実施形態によりコマンドのプロパティを編集するためのディスプレイ画面である。
【図９】本発明の例示的な一実施形態によるページ・ツリー・ビューである。
【図１０】本発明の例示的な一実施形態によるＷｉｋｉページのためのディスプレイ画面である。
【図１１】本発明の例示的な一実施形態による抽象構文ツリーのブロック図である。
【図１２】本発明の例示的な一実施形態によるコマンドのブロック図である。
【図１３】本発明の例示的な一実施形態によるプロパティ編集コンポーネントを示す図である。
【図１４】本発明の例示的な一実施形態によりＷｉｋｉアプリケーションのためのクライアントおよびサーバ上のコマンド間のデータフローを例示する図である。
【図１５】本発明の例示的な一実施形態により初期ページ描画プロセス中のサーバ上のコマンド間のデータフローを例示する図である。
【図１６】本発明の例示的な一実施形態によりユーザからのページ要求に応答して生成されたＷｉｋｉページを例示する図である。
【図１７】本発明の例示的な一実施形態によりクライアント・ブラウザで表示された描画ページを例示する図である。
【図１８】本発明の例示的な一実施形態により新しいページがロードされ、クライアント・ブラウザで表示された後のクライアント側データ・ハブ上のコンポーネント間のデータフローを例示する図である。
【図１９】本発明の例示的な一実施形態によりページ更新中のクライアント側データ・ハブとサーバ側データ・ハブとの間のデータフローを例示する図である。
【図２０】本発明の例示的な一実施形態によりページ更新中のクライアント側データ・ハブとサーバ側データ・ハブとの間のデータフローを例示する図である。
【図２１】本発明の例示的な一実施形態によりページ更新中のサーバ側データ・ハブとクライアント側データ・ハブとの間のメッセージ・フローを例示する図である。
【図２２】本発明の例示的な一実施形態によるサーバ側データ・ハブ・オブジェクトを例示する図である。
【図２３】本発明の例示的な一実施形態によるクライアント側データ・ハブ・オブジェクトを例示する図である。
【図２４】本発明の例示的な一実施形態によりＷｉｋｉレイアウト・ページのボディにＷｉｋｉページ・コンテンツを埋め込むプロセスを例示するブロック図である。
【図２５】本発明の例示的な一実施形態によりページ・コンポーネントのコンテンツの可視性を決定するためのチェックボックスを描写するブロック図である。
【図２６】本発明の例示的な一実施形態によりＷｉｋｉページを作成するためのプロセスの流れ図である。
【図２７】本発明の例示的な一実施形態によりページを表示するためのプロセスの流れ図である。
【図２８】本発明の例示的な一実施形態によりページ・ツリー・ビューを生成するためのプロセスの流れ図である。
【図２９】本発明の例示的な一実施形態によりライブ・コンテンツをドラッグするためのプロセスの流れ図である。
【図３０】本発明の例示的な一実施形態によりＷｉｋｉページのコンテンツを結合するためのプロセスの流れ図である。
【図３１】本発明の例示的な一実施形態によりコマンドを編集するためのプロセスの流れ図である。
【図３２】本発明の例示的な一実施形態によりＷｉｋｉコマンドを描画するためのプロセスの流れ図である。
【図３３】本発明の例示的な一実施形態によるプロパティ編集のための予備プロセスの流れ図である。
【図３４】本発明の例示的な一実施形態によるプロパティ編集のためのプロセスの流れ図である。
【図３５】本発明の例示的な一実施形態によりプロパティ・エディタを選択するためのプロセスの流れ図である。
【図３６】本発明の例示的な一実施形態によりページを削除するためのプロセスの流れ図である。
【図３７】本発明の例示的な一実施形態によりページを改訂するためのプロセスの流れ図である。
【図３８】本発明の例示的な一実施形態によりページをコピーするためのプロセスの流れ図である。
【図３９】本発明の例示的な一実施形態によりページを名称変更するためのプロセスの流れ図である。
【図４０】本発明の例示的な一実施形態によりページを復旧する（undelete）ためのプロセスの流れ図である。
【図４１】本発明の例示的な一実施形態によるパレット構築のためのプロセスの流れ図である。
【図４２】本発明の例示的な一実施形態による構成のためのプロセスの流れ図である。
【図４３】本発明の例示的な一実施形態によるエクスポートのためのプロセスの流れ図である。
【図４４】本発明の例示的な一実施形態によるインポートのためのプロセスの流れ図である。
【図４５】本発明の例示的な一実施形態によりツリーを検索し構文解析するためのプロセスの流れ図である。
【図４６】本発明の例示的な一実施形態によりＷｉｋｉで表示するためのＷｅｂページを処理するためのプロセスである。
【図４７】本発明の例示的な一実施形態によりイベントを処理する流れ図である。
【図４８】本発明の例示的な一実施形態によりサーバ側データ・ハブ・オブジェクトがインスタンス化されるときに行われる動作の流れ図である。
【図４９】本発明の例示的な一実施形態によりクライアント側データ・ハブ・オブジェクトがインスタンス化されるときに行われる動作の流れ図である。
【図５０】本発明の例示的な一実施形態によりサーバ側データ・ハブがクライアント側データ・ハブからイベントを処理するための要求を受信するときに行われる動作の流れ図である。
【図５１】本発明の例示的な一実施形態によりプロデューサ・コマンドがイベントを処理するときに行われる動作の流れ図である。
【図５２】本発明の例示的な一実施形態によりコンシューマ・コマンドがイベントを処理するときに行われる動作の流れ図である。
【図５３】本発明の例示的な一実施形態によりクライアント側データ・ハブがイベントを受信するときに行われる動作の流れ図である。
【図５４】本発明の例示的な一実施形態によりサーバ側データ・ハブがイベントを処理するときに行われる動作の流れ図である。
【図５５】本発明の例示的な一実施形態によりクライアント側データ・ハブが処理のためにサーバにイベントを送信すべきかどうかを判断するときに行われる動作の流れ図である。
【図５６】本発明の例示的な一実施形態によりサーバ側データ・ハブがｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔメソッド呼び出しの結果としてクライアント側データ・ハブからイベントを受信するときに行われる動作の流れ図である。
【図５７】本発明の例示的な一実施形態によりＷｉｋｉ引数オブジェクトが最小十分引数（minimum sufficient argument）プロセスを実行するときに行われる動作の流れ図である。
【図５８】本発明の例示的な一実施形態によりコマンドの最小必須引数（minimum required argument）が設定されているかどうかをＷｉｋｉ引数オブジェクトが判断するときに行われる動作の流れ図である。
【図５９】本発明の例示的な一実施形態により引数／使用可能イベントを始動（fire）すべきかどうかを検出するためのｓｅｔＣｈｅｃｋＡｒｇｕｍｅｎｔｓメソッドを例示する流れ図である。
【図６０】本発明の例示的な一実施形態によりＷｉｋｉページによってＷｉｋｉページ・レイアウトを定義する動作を例示する流れ図である。
【図６１】本発明の例示的な一実施形態によりＷｉｋｉページを描画する動作の流れ図である。
【図６２】本発明の例示的な一実施形態によるサーバ側データ・ハブ・オブジェクト・クラスのためのクラス定義の例証である。
【図６３】本発明の例示的な一実施形態によるデータ・ハブ管理メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図６４】本発明の例示的な一実施形態によるプロデューサおよびコンシューマ・メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図６５】本発明の例示的な一実施形態によるトピック・メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図６６】本発明の例示的な一実施形態によるイベント処理メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図６７】本発明の例示的な一実施形態によるコマンド管理メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図６８】本発明の例示的な一実施形態によるクライアント側データ・ハブ・オブジェクト・クラスのためのクラス定義の例証である。
【図６９】本発明の例示的な一実施形態によるプロデューサおよびコンシューマ・メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図７０】本発明の例示的な一実施形態によるトピック・メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図７１】本発明の例示的な一実施形態によるイベント処理メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図７２】本発明の例示的な一実施形態によるコマンド管理メソッドのクラスのための１組のメソッド・インターフェースの例証である。
【図７３】本発明の例示的な一実施形態によるデータ・ハブ・トピック・オブジェクトのクラスのためのクラス定義およびメソッド・インターフェースの例証である。
【図７４】本発明の例示的な一実施形態によるデータ・ハブ・イベント・オブジェクトのクラスのためのクラス定義およびメソッド・インターフェースの例証である。
【図７５】本発明の例示的な一実施形態によるＷｉｋｉ引数オブジェクト・クラスのためのクラス定義の例証である。
【図７６】本発明の例示的な一実施形態により引数／使用可能イベントを始動すべきかどうかを検出するためのアルゴリズムの擬似コードの例証である。
【発明を実施するための形態】
【０００８】
次に添付図面に関連して、特に図１〜図２に関連して、本発明の例示的な諸実施形態を実装可能なデータ処理環境の対応する図について説明する。図１〜図２は模範的なものに過ぎず、種々の実施形態を実装可能な環境に関するいかなる制限も主張または暗示するためのものではないことを認識されたい。描写された環境に対して多くの変更を行うことができる。
【０００９】
次に添付図面に関連して説明すると、図１は、本発明の例示的な諸実施形態を実装可能なデータ処理システムのネットワークの図表現を描写している。ネットワーク・データ処理システム１００は、諸実施形態を実装可能なコンピュータのネットワークである。ネットワーク・データ処理システム１００はネットワーク１０２を含み、このネットワークは、ネットワーク・データ処理システム１００内でまとめて接続された様々なデバイスおよびコンピュータ間の通信リンクを提供するために使用される媒体である。ネットワーク１０２は、ワイヤ、無線通信リンク、または光ファイバ・ケーブルなどの接続部を含むことができる。
【００１０】
描写されている例では、サーバ１０４およびサーバ１０６は記憶装置１０８とともにネットワーク１０２に接続している。加えて、クライアント１１０、１１２、および１１４はネットワーク１０２に接続している。これらのクライアント１１０、１１２、および１１４は、たとえば、パーソナル・コンピュータまたはネットワーク・コンピュータにすることができる。描写されている例では、サーバ１０４は、クライアント１１０、１１２、および１１４にブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータを提供する。クライアント１１０、１１２、および１１４は、この例ではサーバ１０４に対するクライアントである。ネットワーク・データ処理システム１００は、図示されていない追加のサーバ、クライアント、およびその他のデバイスを含むことができる。
【００１１】
描写されている例では、ネットワーク・データ処理システム１００は、相互に通信するために伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）というプロトコル・スイートを使用するネットワークおよびゲートウェイの世界的集合を表すネットワーク１０２を備えたインターネットである。インターネットの中心には、データおよびメッセージを経路指定する数千の商用、行政、教育、およびその他のコンピュータ・システムからなる、大ノードまたはホスト・コンピュータ間の高速データ通信回線のバックボーンがある。当然のことながら、ネットワーク・データ処理システム１００は、たとえば、イントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、または広域ネットワーク（ＷＡＮ）などのいくつかの異なるタイプのネットワークとして実装することもできる。図１は、一例としてのものであり、種々の実施形態に関するアーキテクチャ上の制限としてのものではない。
【００１２】
次に図２に関連して説明すると、本発明の例示的な諸実施形態を実装可能なデータ処理システムのブロック図が示されている。データ処理システム２００は、図１のサーバ１０４またはクライアント１１０などのコンピュータの一例であり、本発明の様々な例示的な諸実施形態のプロセスを実装するコンピュータ使用可能コードまたは命令をそこに配置することができる。
【００１３】
描写されている例では、データ処理システム２００は、ノース・ブリッジおよびメモリ・コントローラ・ハブ（ＭＣＨ）２０２と、サウス・ブリッジおよび入出力（Ｉ／Ｏ）コントローラ・ハブ（ＩＣＨ）２０４とを含む、ハブ・アーキテクチャを使用する。プロセッサ２０６、メイン・メモリ２０８、およびグラフィックス・プロセッサ２１０は、ノース・ブリッジおよびメモリ・コントローラ・ハブ２０２に結合されている。グラフィックス・プロセッサ２１０は、たとえば、アクセラレイテッド・グラフィックス・ポート（ＡＧＰ）を介してＭＣＨに結合することもできる。
【００１４】
描写されている例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２はサウス・ブリッジおよび入出力コントローラ・ハブ２０４に結合され、オーディオ・アダプタ２１６、キーボードおよびマウス・アダプタ２２０、モデム２２２、読み取り専用メモリ（ＲＯＭ）２２４、ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよびその他の通信ポート２３２、ならびにＰＣＩ／ＰＣＩｅデバイス２３４はバス２３８を介してサウス・ブリッジおよび入出力コントローラ・ハブ２０４に結合され、ハード・ディスク・ドライブ（ＨＤＤ）２２６およびＣＤ−ＲＯＭドライブ２３０はバス２４０を介してサウス・ブリッジおよび入出力コントローラ・ハブ２０４に結合されている。ＰＣＩ／ＰＣＩｅデバイスは、たとえば、イーサネット・アダプタ、アドイン・カード、およびノートブック・コンピュータ用のＰＣカードを含むことができる。ＲＯＭ２２４は、たとえば、フラッシュ・バイナリ入出力システム（ＢＩＯＳ）にすることができる。ハード・ディスク・ドライブ２２６およびＣＤ−ＲＯＭドライブ２３０は、たとえば、インテグレーテッド・ドライブ・エレクトロニクス（ＩＤＥ）またはシリアル・アドバンスド・テクノロジー・アタッチメント（ＳＡＴＡ）インターフェースを使用することができる。図示の通り、スーパー入出力（ＳＩＯ）デバイス２３６もバス２３８を介してサウス・ブリッジおよび入出力コントローラ・ハブ２０４に結合することができる。
【００１５】
図２の例示的な実施形態では、オペレーティング・システムはプロセッサ２０６上で実行され、データ処理システム２００内の様々なコンポーネントを調整し、その制御を行う。オペレーティング・システムは、Ｍｉｃｒｏｓｏｆｔ（商標）のＷｉｎｄｏｗｓ（商標）ＸＰなどの市販のオペレーティング・システムにすることができる（ＭｉｃｒｏｓｏｆｔおよびＷｉｎｄｏｗｓは、米国、その他の国、またはその両方におけるマイクロソフト社の商標である）。Ｊａｖａ（商標）プログラミング・システムなどのオブジェクト指向プログラミング・システムは、オペレーティング・システムに併せて実行することができ、データ処理システム２００上で実行されるＪａｖａプログラムまたはアプリケーションからオペレーティング・システムに呼び出しを行う（ＪａｖａおよびすべてのＪａｖａベースの商標は、米国、その他の国、またはその両方におけるサンマイクロシステムズ社の商標である）。
【００１６】
オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムのための命令は、ハード・ディスク・ドライブ２２６などの記憶装置上に位置し、プロセッサ２０６による実行のためにメイン・メモリ２０８にロードすることができる。例示的な諸実施形態のプロセスは、たとえば、メイン・メモリ２０８、読み取り専用メモリ２２４などのメモリあるいは１つまたは複数の周辺装置に位置することができるコンピュータ実行可能命令を使用してプロセッサ２０６によって実行することができる。
【００１７】
図１〜図２のハードウェアは実装例に応じて様々になる可能性がある。フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどのその他の内部ハードウェアまたは周辺装置は、図１〜図２に描写されたハードウェアに加えてまたはその代わりに使用することができる。また、例示的な諸実施形態のプロセスはマルチプロセッサ・データ処理システムに適用することもできる。
【００１８】
いくつかの例示的な例では、データ処理システム２００は携帯情報端末（ＰＤＡ）にすることができ、これは一般にオペレーティング・システム・ファイルまたはユーザ生成データあるいはその両方を保管するための不揮発性メモリを提供するためにフラッシュ・メモリとともに構成されている。バス２３８および２４０などのバス・システムは、システム・バス、入出力バス、およびＰＣＩバスなどの１つまたは複数のバスで構成することができる。当然のことながら、このバス・システムは、任意のタイプの通信ファブリックまたはアーキテクチャに接続された種々のコンポーネントまたはデバイス間でデータの転送を可能にするファブリックまたはアーキテクチャを使用して実装することができる。通信装置は、モデムまたはネットワーク・アダプタなど、データを送受信するために使用される１つまたは複数のデバイスを含むことができる。メモリは、たとえば、メイン・メモリ２０８またはノース・ブリッジおよびメモリ・コントローラ・ハブ２０２内に検出されるようなキャッシュにすることができる。処理装置は１つまたは複数のプロセッサまたはＣＰＵを含むことができる。図１〜図２に描写されている例および上記の例は、アーキテクチャ上の制限を暗示するためのものではない。たとえば、データ処理システム２００は、ＰＤＡの形を取ることに加えて、タブレット・コンピュータ、ラップトップ・コンピュータ、または電話装置にすることもできる。
【００１９】
例示的な例では、サーバ１０４はホストとしてＷｉｋｉアプリケーションを処理することができる。サーバ１０４の環境は、例示的な一実施形態によりクライアント１１０、１１２、および１１４などのクライアントが共同作業し、アプリケーションを開発できるようにする。これらのアプリケーションとしては、たとえば、気象関連アプリケーション、学校用の学籍登録および名簿、電子メール・アプリケーション、その他のタイプのビジネス指向アプリケーションを含むことができる。この種々の実施形態は、例示的な一実施形態によりＷｉｋｉアプリケーションを開発するための共同環境を提供する際のサーバ側、クライアント側、またはその両方のプロセスを含むことができる。
【００２０】
例示的な諸実施形態では、現行のＷｉｋｉアプリケーションが知識ベースまたは文書としてのテキストとファイルの協調を越えるアプリケーションの共同開発に適していないことを認識している。
【００２１】
次に図３を参照すると、本発明の例示的な一実施形態によりＷｉｋｉアプリケーションを生成し使用する際に使用するためのコンポーネントを例示する図が描写されている。この例では、ユーザは、クライアント環境３００と対話して、Ｗｉｋｉ環境３０２によってサポートされるアプリケーションを生成し使用することができる。クライアント環境３００は、図１のクライアント１１０などのクライアント上で実行されるソフトウェア・アプリケーションまたは環境である。Ｗｉｋｉ環境３０２は、図１のサーバ１０４などのデータ処理システム上で実行される。
【００２２】
これらの例では、クライアント環境３００のユーザは、あるページに関してＷｉｋｉ環境３０２に要求を送信することができる。ユーザは、これらの例ではクライアント環境３００内のブラウザを介して要求を行う。Ｗｉｋｉ環境３０２はそのページをユーザに返す。これらの例示的な例では、このページは、生成すべきページに関するコンテンツをユーザが操作し選択できるようにするＪａｖａＳｃｒｉｐｔを含む。例示的な諸実施形態では、これらのページは、アプリケーションへのユーザ・アクセスを可能にする共同Ｗｅｂページである。これらのアプリケーションは、クライアント・コンピュータのユーザによって使用し変更可能な共同アプリケーションである。
【００２３】
特に、種々の例示的な実施形態は、ユーザが共同作成ツールの機能を上回る機能を備えたアプリケーションを生成するための方法および装置を提供する。
【００２４】
これらの例の特徴の多くはハイパーテキスト・プリプロセッサ（ＰＨＰ：HypertextPreprocessor）を介して提供される。ＰＨＰは、Ｗｉｋｉ環境３０２上で実行されるＷｅｂアプリケーションを作成するためのプログラミング言語である。ＰＨＰは、動的Ｗｅｂコンテンツを生成するための高レベル・ツールとして設計されたスクリプト言語に埋め込まれたオープン・ソースのハイパーテキスト・マークアップ言語である。
【００２５】
特定の実装例に応じて、例示的な諸実施形態で提供される種々の特徴は、Ｊａｖａ仮想マシン（ＪＶＭ：Java virtual machine）などの仮想マシンの使用によって促進することができる。また、特定の環境に応じて、ＪａｖａＳｃｒｉｐｔ以外のその他のスクリプト言語を使用して、これらのプロセスを実装することもできる。
【００２６】
次に図４を参照すると、本発明の例示的な一実施形態によるＷｉｋｉアーキテクチャを例示する図が描写されている。これらの特定の例では、このアーキテクチャは、非常に簡単に完了（ＱＥＤ：quite easily done）のＷｉｋｉアーキテクチャである。例示されている通り、Ｗｉｋｉ環境４００はＷｉｋｉエンジン４０２を含む。このエンジンは、要求ハンドラ４０４と、コマンド・プロセッサ４０６と、ページ・コンポーザ４０８とを含む。要求ハンドラ４０４はクライアントから要求を受信する。
【００２７】
たとえば、ユーザは、ユニバーサル・リソース・ロケータ（ＵＲＬ：universalresource locator）の形でユニバーサル・リソース識別子（ＵＲＩ：universalresource identifier）をＷｉｋｉ環境４００に送信することができる。この要求は処理のために要求ハンドラ４０４によって受信される。これらの例では、要求ハンドラ４０４によって処理される各要求ごとに１つのページが生成される。また、要求ハンドラ４０４は、完全なハイパーテキスト・マークアップ・ページでなく、ハイパーテキスト・マークアップ言語ソース・フラグメントであるＡＪＡＸベースの対話を処理するために「ページ・フラグメント（page fragment）」も生成する。
【００２８】
コマンド・プロセッサ４０６は、要求ハンドラ４０４によって受信された要求に応答して、ページまたはページ・フラグメントを構築するために種々のコマンドを処理する。さらに、コマンド・プロセッサ４０６は、コマンドおよびテキスト・フラグメントの処理が完了したときにページを描画する。ページ・コンポーザ４０８もユーザによるページ要求の生成に関係する。これらの例では、ページ・コンポーザ４０８は、あるページに関するレイアウト、ページ・ボディ・コンテンツ、およびスクリプト・コレクションに使用される。
【００２９】
Ｗｉｋｉ環境４００は補助機能４１０も含む。この例では、補助機能４１０は、リスト４１２と、コメント４１４と、電子メール４１６と、添付物（attachment）４１８とを含む。リスト４１２により、ユーザは他のユーザが見るためのリストを生成することができる。さらに、コメント４１４を使用して、ユーザは種々のページに注解またはその他のテキストを追加することができる。添付物４１８により、ユーザは特定のページにファイルを添付することができる。電子メール４１６により、ページが更新または変更されたときにユーザに通知するか、あるいはユーザが添付物としてあるページに電子メールを送信することができる。また、電子メール４１６により、単一または複数のユーザが指定のページに対する変更についてメッセージを受信することができる。ユーザは、Ｗｉｋｉのリッチ・サイト・サマリ（ＲＳＳ：rich site summary）フィードに加入して、Ｗｉｋｉのページが変更される時期を判断することができる。
【００３０】
さらに、Ｗｉｋｉ環境４００はＷｉｋｉコマンド４２０を含む。例示された実施形態内のＷｉｋｉコマンド４２０は、組み込みコマンド４２２とカスタム・コマンド４２４という２つのタイプのコマンドを含む。組み込みコマンド４２２は、Ｗｉｋｉ環境４００内に存在するコマンドまたはサービスである。カスタム・コマンド４２４は、外部ソースを介して提供されるコマンドを参照する。基本的に、これらのコマンドにより、ユーザはあるページに関するデータを含め処理することができる。
【００３１】
１つまたは複数の実施形態では、Ｗｉｋｉコマンド４２０は、サービス指向アーキテクチャ（ＳＯＡ：service oriented architecture）の使用を伴う。このようなＳＯＡコマンドにより、ユーザはページとともにサービスを含めることができる。これらの例では、コマンドは、アプリケーションおよびそれらが実行される競合プラットフォームとは無関係の明確なインターフェースによってサービスを参照することができる。
【００３２】
描写されている例では、サービスはソフトウェア・モジュールである。これらのタイプのサービスは、典型的には、ウェブ・サービス記述言語（ＷＳＤＬ：web service description language）などの標準準拠インターフェースに基づくものである。当然のことながら、Ｗｉｋｉコマンド４２０によって参照されるサービスは任意のタイプのインターフェースを伴う可能性がある。これらのコマンドは様々な形を取ることができる。たとえば、コマンドは、金融、気象、マッピング、ニュースおよびイベント、検索、行政、または国際情報に関するものにすることができる。
【００３３】
データベース４２６は、ユーザによって要求され作成されたページなどの情報を含む。さらに、ページの改訂、添付物、コメント、およびその他の情報がデータベース４２６内に保管される。情報は、典型的には、例示的な諸実施形態では、データベース４２６内のテーブル４２８の形で保管される。
【００３４】
次に図５を参照すると、本発明の例示的な一実施形態によりページを描画する際のデータフローを例示する図が描写されている。これらの例では、ページの処理が完了し、そのページがクライアントに送信できる状態になると、そのページがサーバ上に描画される。図５に例示されている種々のコンポーネントは、図４のＷｉｋｉエンジン４０２などのＷｉｋｉエンジンを介して操作される。
【００３５】
これらの例示的な諸実施形態に例示されているプログラミング・アーキテクチャおよびモデルは、クライアント上のブラウザを使用してＷｉｋｉコンテンツの視覚的アセンブリを可能にする。クライアントによって要求されたものはいずれも、概念上、ページである。たとえば、ページおよび変数名などのユニバーサル・リソース識別子モデルを使用して変数が参照される。さらに、これらの例では、ページがデータ構造として使用される。変数は、その後の使用のために保管される。これらの変数としては、セッション変数、要求変数、および永続変数を含む。
【００３６】
例示的な例では、ユーザはリストを介して構造化データを作成する。これらのリストについては、照会、検索、または結合、あるいはそれらの組み合わせを行うことができる。リストを操作する際に、ユーザは、作成検索更新削除（ＣＲＵＤ：create, retrieve, update, and delete）プロセスを使用する。
【００３７】
Ｗｉｋｉコントローラ５００はユーザからユニバーサル・リソース識別子５０６を受信する。Ｗｉｋｉコントローラ５００は、ルータ５０２とオブジェクト変数５０４とを含む。ルータ５０２は、要求処理を適切な要求ハンドラに委任する。オブジェクト変数５０４は、処理コンポーネント間の相互接続を提供する。たとえば、Ｗｉｋｉコントローラ５００は、Ｗｉｋｉオブジェクト５０８へのポインタである「Ｗｉｋｉ」というオブジェクト変数５０４を有する。図５の各オブジェクトは、オブジェクト対話に必要なその他のリソースへの参照であるオブジェクト変数を有する。Ｗｉｋｉコントローラ５００は、図４の要求ハンドラ４０４などの要求ハンドラによって処理される。
【００３８】
ユニバーサル・リソース識別子５０６を受信したことに応答して、Ｗｉｋｉコントローラ５００は、Ｗｉｋｉオブジェクト５０８のインスタンスをインスタンス化する。例示されている通り、Ｗｉｋｉオブジェクト５０８は、オブジェクト変数５１０、変数５１２、ＰＨＰセキュリティ５１４、電子メール・チェック５１６、ユーザ５１８、およびページ５２０を含む。Ｗｉｋｉオブジェクト５０８は、要求が受信されたときに必ずインスタンス化されるインスタンスであり、ページ５２０に関するコンテンツを生成するために使用されるオブジェクトのすべてに関するリポジトリとして動作する。
【００３９】
これらの例では、オブジェクト変数５１０は、ページ５２０を処理するために必要な情報を含む。変数５１２は、セッション５２２に保管されたセッション情報を含む。このセッション情報は、これらの例では、あるページとのユーザ対話中またはあるページの生成中に使用される情報である。オブジェクト変数５１０内のより永続的なデータはデータベース５２４に保管される。データベース５２４は、描写されている例では、ページを生成するためにまたはユーザによって行われた変更を保管するために使用可能なすべての情報を保管する。
【００４０】
ＰＨＰセキュリティ５１４は、クライアントによって識別されたコードを実行可能であるかどうかを判断するためにならびにそのコードの実行を開始するために使用される機能である。ＰＨＰは、主にサーバ側アプリケーション上で使用されるオープン・ソース・プログラミング言語である。これらの例示的な例では、ＰＨＰコードは、Ｗｉｋｉ環境内の種々のオブジェクトによって実行することができる。これらの例では、ユーザは、クライアント側ならびにサーバ側からＰＨＰコードを実行することができる。電子メール・チェック５１６は、ページ５２０が描画され、ユーザに送信されたときにページ５２０上に表示可能な電子メール・メッセージの有無をチェックするために、Ｗｉｋｉオブジェクト５０８内に提供される。ユーザ５１８は、ユーザ特権レベル、ＩＤ、およびセッション・ログなど、ユーザに関する情報を含む。
【００４１】
ページ５２６は、Ｗｉｋｉオブジェクト５０８内に含まれるページ５２０のより詳細な例である。この例では、ページ５２６は、オブジェクト変数５２８、添付物５３０、プロセス５３２、アクセス５３４、レイアウト５３６、スクリプト５３８、およびコンテンツ５４０を含む。
【００４２】
これらの例では、オブジェクト変数５２８は、ページ・データ構造に関する変数のインスタンスを含む。たとえば、レイアウト情報を提供するためにセクション・アレイが存在する可能性がある。コンテキスト・ポインタはルートＷｉｋｉコマンドを参照することができる。内部ページＩＤを参照するためにオブジェクト変数５２８内にインスタンスＩＤが存在する可能性がある。これらの種々の変数は、ユーザに送信すべき、ページ５２６などのページを描画するために必要な情報を含む。
【００４３】
添付物５３０は、あるページ上に提示可能な添付物の識別コードである。ユーザがある添付物を選択した場合、その添付物はその時点でユーザにダウンロードすることができる。プロセス５３２は、ユーザに配信すべきページを生成するために使用されるコードを含む。これらの例示的な例では、プロセスは、たとえば、そのページに関するコンテンツを識別し、任意の添付物を識別し、ユーザに送信すべきページに含めることができる任意のスクリプトを識別するためのメソッドである。
【００４４】
アクセス５３４は、そのページに配置すべきコンテンツについてユーザがどのアクセス特権を有するかを判別するために使用される。このようなアクセス特権は、アクセス制御リスト（ＡＣＬ）５４２を使用する一実施形態で識別される。含めるべきコンテンツは、そのページを要求している特定のユーザが有するアクセス権に応じて、ページ５２６について様々になる可能性がある。このユーザは、ページ５２６を要求しているユーザである。ページ５２６に関するコンテンツを生成する際に、オブジェクト変数５２８はＷｉｋｉコマンド・コンテキスト５４４を参照する。このコマンド・コンテキストは、オブジェクト変数５４６とコンテンツ５４８を含む。オブジェクト変数５４６は、あるページのコンテンツのメモリ内バージョンを表す。これらの変数は、コマンドのリストと、現行ページを含むテキスト・フラグメントのリストとを含む。コンテンツ５４８は、ページ・コンテンツを操作するために使用されるオブジェクト・メソッドを表す。
【００４５】
ページ５２６内のプロセス５３２を実行する際に、コマンド５５０からの１組のコマンドがＷｉｋｉコマンド・コンテキスト５４４を介して識別される。Ｗｉｋｉコマンド・コンテキスト５４４は、コマンド５５０から１組のコマンド・インスタンスを生成する。Ｗｉｋｉコマンド・コンテキスト５４４は、コンテンツ５４０を構文解析し、コマンドをロードして、フラグメント５５２などのフラグメントのツリー構造を作成する。フラグメント５５２は、オブジェクト変数５５４およびコンテンツ５５６も含む。フラグメント５５２は、描画されていない形のページ５２６の一部分である。この例では、Ｗｉｋｉコマンド・コンテキスト５４４は、そのページに含めるべきコマンドの構造を表すフラグメントを含む。これらは、ユーザ操作可能なコマンドである。プロセス５３２が完了すると、ページ５２６は要求側ユーザに送信される。データ・ハブ５５８は、その対話で後で使用するために保存される。また、この例では、データ・ハブ５５８は、ユーザがページ５２６内のコンポーネントと対話するときに復元され、プロセスおよびデータ構造を含む。データ・ハブ５５８内のプロセスは、フラグメント５５２内のページに関するどのコマンドが、データ・ハブ５５８によって受信可能な任意のデータまたはコマンドのコンシューマであるかを識別するために使用される。さらに、データ・ハブ５５８は、結果をクライアントに返すことになる。これらの結果は、クライアント上に位置するデータ・ハブに送信される。
【００４６】
次に図６を参照すると、本発明の例示的な一実施形態によりＷｉｋｉアプリケーションのためのクライアントおよびサーバ上のコンポーネントを例示する図が描写されている。この例では、クライアント環境６００は、図３のクライアント環境３００のより詳細な例証である。これらの例示的な諸実施形態のクライアント環境６００は、インターネットなどのネットワークに対する接続性を有するクライアントＷｅｂブラウザまたはその他の何らかのアプリケーションの形を取ることができる。Ｗｉｋｉ環境６０１は、図１のサーバ１０４などのデータ処理システム上で実行される。
【００４７】
この例では、クライアント環境６００はページ６０２を受信する。ページ６０２は、ヘッダ６０４、フッタ６０６、左マージン６０８、右マージン６１０、メニュー６１２、およびボディ６１４などの複数のコンポーネントを含む。ヘッダ６０４、フッタ６０６、左マージン６０８、および右マージン６１０は、ページをレイアウトするためのページ・コンポーネントである。これらのコンポーネントは、ハイパーテキスト・マークアップ言語（ＨＴＭＬ）コンテンツなどの様々なコンテンツを含む。
【００４８】
メニュー６１２は、ページ６０２上でまたはページ６０２に併せてユーザが実行できるアクションまたは機能へのアクセスを可能にする。たとえば、メニュー６１２は、サーバに要求を送信するためのメニュー項目であって、授与されたときに、ユーザがＷＹＳＩＷＹＧエディタでページ・コンテンツを編集できるようにするメニュー項目を含むことができる。
【００４９】
この例では、ボディ６１４内に種々のタイプのコンテンツが検出される。この例では、ボディ６１４は、ＨＴＭＬコンテンツ６１６、日付情報６１８、および変数６２０を含む。また、ボディ６１４は、コマンド６２２、６２４、６２６、６２８、６３０、および６３２も含む。コマンド６２２、６２４、６２６、６２８、６３０、および６３２は、図４のＷｉｋｉコマンド４２０などのＷｉｋｉコマンドである。これらのコマンドは、ページ６０２を介して提示されるＷｉｋｉアプリケーション用のコマンドである。データ・ハブ６３４とともにコマンド６２２、６２４、６２６、６２８、６３０、および６３２により、ページ６０２内の動的コンテンツを提供する。
【００５０】
データ・ハブ６３４は、図５のデータ・ハブ５５８と同様に、Ｗｉｋｉ環境内のデータ・ハブ・オブジェクトである。しかし、データ・ハブ６３４はクライアント側データ・ハブである。データ・ハブ６３４は、ページ６０２内のコマンドとＷｉｋｉ環境６０１内のコマンドとの間でイベント・オブジェクトを送受信するための属性および１組のメソッドを含む。データ・ハブ６３４は、ページ６０２内のコマンドとＷｉｋｉ環境６０１内のコマンドとの間でイベントまたはデータあるいはその両方を送受信するための属性および１組のメソッドを含む。
【００５１】
イベント・オブジェクトは、ページ６０２などのＷｉｋｉページに関連するコマンド間で伝送されるイベントを定義するデータ・オブジェクトである。イベント・オブジェクトは、イベント・データを含むことができるが、これを含むよう要求されているわけではない。これらの例では、イベントは、タスク、プログラム、またはコマンドにとって重要な出現または出来事など、何かが発生したことを示すメッセージである。たとえば、イベントは、ユーザ入力の受信、最小必須引数セットの収集、コマンド動作の完了、所与の時間の発生、あるいは任意のその他の活動、入力またはデータの受信、出現、出来事、または活動を含むことができる。
【００５２】
ページ６０２内の種々のタイプのコンテンツの例証は、Ｗｉｋｉアプリケーションをユーザに提示できる方法を描写するために提示されている。しかし、この例証は、Ｗｉｋｉアプリケーションで使用可能なコンテンツのタイプおよび範囲に関する制限を暗示するためのものではない。たとえば、ページ６０２は、本発明の例示的な諸実施形態の範囲を逸脱せずに、図６に例示されていないその他の追加のコンテンツ、コマンド、またはコンポーネント、あるいはそれらの組み合わせを含むことができる。
【００５３】
ユーザは、ページ６０２内のコンテンツを操作して、Ｗｉｋｉアプリケーションを使用するか、またはＷｉｋｉアプリケーションが実行する方法を変更するか、あるいはその両方を行うことができる。換言すれば、ユーザは、ページ６０２用のコンテンツまたは機能あるいはその両方を生成または変更するために、これらのコマンドの図解表現を操作することにより、ページ６０２からコマンドなどのコンテンツの追加またはコンテンツの削除を行うことができる。
【００５４】
この例では、Ｗｉｋｉ環境６０１は、図３のＷｉｋｉ環境３０２および図４のＷｉｋｉ環境４００などのＷｉｋｉ環境である。Ｗｉｋｉ環境６０１は、コマンド・ツリーまたは抽象構文ツリーの形でコマンド６４０〜６５０を含む。コマンド６４０〜６５０はＷｉｋｉ環境で更新される。コマンド６４０〜６５０およびコマンド６２４〜６３２は、実装例が異なるが、同様のコマンドを参照する。たとえば、コマンド６３２は、クライアント環境に関連付けられ、ユーザによってクライアント環境６００で更新される。対応するコマンド６５０は、ネットワーク接続によるＡＪＡＸ６３６を使用して非同期ＪａｖａＳｃｒｉｐｔおよび拡張可能マークアップ言語によりＷｉｋｉ環境６０１で更新される。
【００５５】
ＡＪＡＸ６３６は、Ｗｉｋｉページなどの対話型Ｗｅｂアプリケーションを作成するためのＷｅｂ開発技法である。ＡＪＡＸ６３６は、要求されたページに対してユーザが変更を行うたびにページ全体がリロードされないように、シーンの背後で関連ホスト・サーバと少量のデータを交換する。ＡＪＡＸ６３６は、ページ６０２などのページの対話性、速度、応答性、および有用性を高めるためのものである。例示的な諸実施形態ではＡＪＡＸまたはＪＳＯＮを介するデータ交換を描写しているが、所与の１組のコンポーネント間で合意に達した任意の通信プロトコルを使用して、本発明の例示的な諸実施形態によりデータを交換することができる。
【００５６】
Ｗｉｋｉ環境６０１内のコマンド６４０、６４２、６４４、６４６、６４８、および６５０は、データ・ハブ６３８と対話する。データ・ハブ６３８は、図５のデータ・ハブ５５８などのサーバ側データ・ハブである。この例示的な例では、クライアント環境６００のデータ・ハブ６３４と、データ・ハブ６３８は、ＡＪＡＸ６４０を介してイベントまたはデータあるいはその両方を交換する。ＡＪＡＸ６３６および６４０は、クライアント環境６００とＷｉｋｉ環境６０１との間でデータを転送するためのフォーマットとして拡張可能マークアップ言語（ＸＭＬ：extensible markup language）を使用して通信することができるが、プリフォーマット・ハイパーテキスト・マークアップ言語（ＨＴＭＬ）、プレーン・テキスト、およびＪａｖａＳｃｒｉｐｔオブジェクト表記（ＪＳＯＮ：JavaScript object notation）を含む、いずれのフォーマットでも機能する。ＪａｖａＳｃｒｉｐｔオブジェクト表記は、軽量コンピュータ・データ交換フォーマットである。ＪＳＯＮはＪａｖａＳｃｒｉｐｔのオブジェクト・リテラル表記のサブセットであるが、その使用はＪａｖａＳｃｒｉｐｔを必要としない。
【００５７】
例示的な諸実施形態は、アプリケーションＷｉｋｉのためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードを提供する。Ｗｉｋｉアプリケーションは、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂ環境である。Ｗｉｋｉページは、Ｗｉｋｉアプリケーション内のページである。本発明の例示的な諸実施形態により、ユーザはＷｉｋｉページを容易に作成し管理することができる。ユーザは、ライブ・コンテンツをドラッグ・アンド・ドロップすることにより、Ｗｉｋｉページを編集することができる。ライブ・コンテンツは、変化する情報に基づいて更新される動的コンテンツである。たとえば、ライブ・コンテンツは、気象レーダー基地にリンクされたサーバによって更新される、指定の地理的位置に関する気象グラフィックを含むことができる。
【００５８】
Ｗｉｋｉページはページ・ツリー・ビューに保存される。ページ・ツリー・ビューは、ページとサブページを含むコンテンツ階層である。ページ・ツリー・ビューは、Ｗｉｋｉスペース、ページ空間、ツリー、またはその他のコンテンツ階層と呼ぶこともできる。現在の記述内の各ページは、必要なその他のサブページ用のコンテンツ・プロバイダとコンテナの両方にすることができる。すべてのページがコンテンツを含むことができ、同時にコンテナと見なすことができるので、ページ・ツリー・ビューは他のファイル構造とは異なる。ページ・ツリー・ビュー内のページは、各ページに割り当てられた名前によって区別される。ページはノードおよびリーフ・ノードを含む。ノードは、他のＷｉｋｉページ用のフォルダまたはコンテナとしてコンテンツおよび機能を表示することができる。リーフ・ノードは厳密にコンテンツを提供する。
【００５９】
次に図７を参照すると、本発明の例示的な一実施形態によりライブ・コンテンツをドラッグするための模範的なディスプレイ画面が描写されている。Ｗｉｋｉページ７００は、図６のページ６０２などのページである。Ｗｉｋｉページ７００は、設計モードで具体的に編集することができる。たとえば、ユーザは、Ｗｉｋｉページが編集されていることを示す、非常に簡単に完了（ＱＥＤ）のチェックボックスをチェックすることができる。設計モードでは、Ｗｉｋｉページ７００はパレット７０２を表示することができる。パレット７０２は、協力してＷｅｂページを操作するために使用されるツールバーまたは１組のツールである。たとえば、ユーザは、パレット７０２を使用して、Ｗｉｋｉページ７００のボディ７０４に表示するためのライブ・コンテンツを選択することができる。ボディ７０４は、Ｗｉｋｉページ７００の一部分であり、ユーザ指定のコンテンツを表示するためにカスタマイズし編集することができる部分である。
【００６０】
パレット７０２は、任意の数のアイコン７０６、７０８、および７１０を含むことができる。各アイコンは使用可能なコマンドの図解表現である。パレット７０２は、コマンド、データ、ページ・コンテンツ、Ｗｉｋｉユーティリティ、データ・サービス、カスタマイズ済みリスト、および任意の数のその他の特徴を含むことができるコンテンツを表示するために使用することができる。
【００６１】
アイコン７０６は、たとえば、アイコンの形でＧｏｏｇｌｅ（商標）検索ツールへのライブ・リンクにすることができる。アイコン７０８は、Ｇｏｏｇｌｅ（商標）マップへのライブ・リンクにすることができる（Ｇｏｏｇｌｅ、Ｇｏｏｇｌｅ  Ｓｅａｒｃｈ、およびＧｏｏｇｌｅ  Ｍａｐｓは、米国、その他の国、またはその両方におけるグーグル社の商標である）。アイコン７１０は、リッチ・サイト・サマリまたはリアリー・シンプル・シンジケーション（ＲＳＳ：really simple syndication）フィードにすることができる。リッチ・サイト・サマリは、Ｗｅｂコンテンツを配信（syndicate）し集成（aggregate）するオープン・メソッドを提供する、拡張可能マークアップ言語（ＸＭＬ）のプロトコルおよびアプリケーションである。リッチ・サイト・サマリを使用すると、ユーザは、Ｗｅｂサイトからの見出し、リンク、記事要約（article summary）を供給するデータ・フィードを作成することができる。ユーザは、ボディ７０４内のニュース・アグリゲータ（news aggregator）を介してＷｉｋｉページ７００に配信されたＷｅｂサイトからのコンテンツを絶えず更新している可能性がある。ニュース・アグリゲータは、これらのタイプのフィードを受信するように具体的に調整されたソフトウェアの１つである。
【００６２】
一例では、ユーザは、アイコン７０８をパレット７０２からボディ７０４にドラッグすることにより、ボディ７０４にＧｏｏｇｌｅ（商標）マップを表示することができる。ユーザは、図８に記載されるように、プロパティ・エディタを使用して、Ｗｉｋｉコマンドによって表示されたコンテンツをさらにカスタマイズすることができる。ページ・コンテンツ内の既存のＷｉｋｉコマンドは、既存のＷｉｋｉコマンドのプロパティを編集可能であることを示す、アイキャッチャ（eye-catcher）７１２などのアイキャッチャを表示する。
【００６３】
次に図８を参照すると、本発明の例示的な一実施形態によりコマンドのプロパティを編集するためのディスプレイ画面が示されている。現代のアプリケーションＷｉｋｉは、不快なページ・リフレッシュおよび概念的なコンテキスト・スイッチなしでユーザがコマンド設定を変更できるようにし、ユーザがページを編集することを要求しない、Ｗｉｋｉ「マークダウン（markdown）」コマンド属性を編集する視覚的手段を必要とする。
【００６４】
アプリケーションＷｉｋｉは、ユーザがハイパーテキスト・マークアップ言語のマークアップを把握または学習しなければならないという負担を軽減する。これらの例では、アプリケーションＷｉｋｉは、短い文字シーケンス、行位置（line position）、および空白（white space）の組み合わせを使用する、リストおよびテーブルならびにその他のハイパーテキスト・マークアップ言語構成体を作成するための速記構文（shorthand syntax）を導入する。たとえば、リスト項目は、ある行の１桁目の単一アステリスク（＊）と、それに続く単一スペースによって定義されるのに対し、ハイパーテキスト・マークアップ言語では＜ＯＬ＞＜ＬＩ＞＜／ＬＩ＞＜／ＯＬ＞というタグが必要である。アプリケーションＷｉｋｉによって導入された速記構文は、ハイパーテキスト・マークアップ言語によるコンテンツの作成とＷｉｋｉ環境でのコンテンツの作成との相違点を強調するために「マークダウン」と呼ばれる。Ｗｉｋｉコマンド・クラスは、「マークダウン」コマンドを編集するための視覚的プロパティ・エディタの生成をサポートする。
【００６５】
Ｗｉｋｉページ８００は、図７のＷｉｋｉページ７００などのＷｉｋｉページの部分図である。パレット８０２は、図７のパレット７０２と同様のものである。Ｗｉｋｉページ８００は、ストア（store）およびリストというアイキャッチャ８０４および８０６を表示するＷｉｋｉコマンドを含む。
【００６６】
アイキャッチャ８０４および８０６を表示するＷｉｋｉコマンドのプロパティは、プロパティ・エディタ８０８を使用して編集することができる。プロパティとは、図７のＷｉｋｉページ７００上にコンテンツを表示するためにアイキャッチャによって表されるコマンドによって使用される属性、データ、フィールド、およびその他の情報である。プロパティ・エディタ８０８により、ユーザはライブ・コンテンツによって表示された情報をカスタマイズすることができる。プロパティ・エディタ８０８は、ハイパーテキスト・マークアップ言語と、Ｗｉｋｉページ・コンテンツとともにブラウザ・クライアントにダウンロードされるＪａｖａＳｃｒｉｐｔから構成される。たとえば、ユーザは、Ｇｏｏｇｌｅ（商標）マップを表示するための特定のアドレスを指定することができる。同様に、ユーザは、照会を行い、Ｗｉｋｉページ８００に表示される情報を制限することができる。
【００６７】
ユーザは、プロパティ・エディタ８０８を使用して、その視覚表現をサイズ設定できるようにするＷｉｋｉコマンド用の幅と高さの値を入力することができる。さらに、プロパティ・エディタ８０８を使用して倍率を入力することができ、データ・ソースの名前ならびに最大値および最小値は他のいくつかの例である。プロパティ・エディタ８０８は、Ｗｉｋｉコマンドの可変性のポイントをユーザに対して表面化するために使用される。
【００６８】
たとえば、図５のプロセス５３２は、必要に応じて各コマンド用のデフォルト・プロパティ・エディタを生成することができる。各Ｗｉｋｉコマンドは、Ｗｉｋｉコマンド用の可変性の固有のポイントを表面化するためにカスタム・プロパティ・エディタに寄与することができる。あるコマンドのためのアイキャッチャ８０４または８０６を選択すると、その関連コマンド用のプロパティ・エディタが表示される。
【００６９】
次に図９を参照すると、本発明の例示的な一実施形態によるページ・ツリー・ビューが描写されている。ページ・ツリー・ビュー９００は、Ｗｉｋｉページの編成をユーザに対して視覚的に表示するための視覚的記憶構造である。ページ・ツリー・ビュー９００は、Ｗｉｋｉアプリケーション内のＷｉｋｉページの名前またはタグを示している。タグは、Ｗｉｋｉのコンテンツをカテゴリ化するために使用されるユーザ割り当てラベルである。これらの例の各ページはノードまたはリーフ・ノードである。
【００７０】
Ｗｉｋｉスペース９０２は、ページ・ツリー・ビュー９００のベース・ページであり、ページ・ツリー・ビュー９００のコンテンツを参照するために使用することもできる。テスト（test）９０４、試験（testing）９０６、トップレベル９０８、およびＷｉｋｉ９１０を含むＷｉｋｉスペース９０２およびその他のベース・ページまたはノードは、他のＷｉｋｉページに関するフォルダまたはコンテナとしてコンテンツおよび機能を表示できるので、ページ・ツリー・ビュー９００は他のファイル・システムおよびデータ構造とは異なる。「＋」符号などのグラフィカル・インジケータは、Ｗｉｋｉページがノードであることを示すことができる。Ｗｉｋｉスペース９０２は、ノードによって表される各ページがコンテナおよびコンテンツ・プロバイダになり得る、平らな階層を使用する。たとえば、Ｗｉｋｉスペース９０２は、コンテンツを含むが、ハローワールド（helloworld）９１２、ホームページ９１４、およびメニューテスト（menutest）９１６を含む、Ｗｉｋｉサブページまたはリーフ・ノードにリンクするために使用することもできる。ページ・ツリー・ビュー９００内のベース・ページは、これらの例ではコンテンツ・プロバイダおよびページ・コンテナの両方として表示することができる。
【００７１】
ユーザは、ページ・ツリー・ビュー９００を使用して、Ｗｉｋｉページをナビゲートすることができる。たとえば、Ｗｉｋｉページをクリックすることにより、Ｗｉｋｉページのコンテンツまたはサブページあるいはその両方が表示される。その結果、ユーザは、ページ名を選択することにより、容易にＷｉｋｉをナビゲートすることができる。
【００７２】
次に図１０を参照すると、本発明の例示的な一実施形態によるＷｉｋｉページのためのディスプレイ画面が示されている。Ｗｉｋｉページ１０００は、図６のＷｉｋｉページ６０２などのページである。ユーザは、図７のアイキャッチャ７０８およびパレット７０２などのパレット内のアイキャッチャを使用して、ライブ・コンテンツをＷｉｋｉページ１０００にドラッグしている可能性がある。
【００７３】
たとえば、出張者は、来るべき出張のために行き先のリスト１００２を表示するようにＷｉｋｉページ１０００を前に変更している可能性がある。行き先のリスト１００２内のそれぞれの位置をクリックすることにより、Ｗｉｋｉページは、その番地に関する全米地図１００４、天気予報１００６、ならびに局地的警報１００８を表示する。カスタマイズされた情報により、ユーザは、その出張に関する気象その他の状況を考慮して計画するとともに、それぞれの会議の場所を視覚的に描くことができる。局地的警報１００８は、営業会議に関連する可能性のあるローカル・イベントをユーザに通知して、指定の地理的位置に関する進行中のイベントおよび新しいストアへのリンクを含む可能性がある。
【００７４】
例示的な諸実施形態は、Ｗｉｋｉ環境で表示するためのＷｅｂページを処理するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードをさらに提供する。追加されたコンポーネントは、最終的なビューを描画する前に他のコンポーネントと対話することができる。コンポーネントは、ページ供給コンテキスト（page serve context）から新しい属性およびパラメータ設定を発見できるようになっている。最終的なビューを描画する前にコンポーネントが入力を妥当性検査し、エラーを報告するために、妥当性検査メカニズムが使用される。ターゲットになっているイベントは、ページ供給シーケンスのライフサイクル内で処理される。単一サーバ上で同じコンポーネントの複数バージョンが管理される。
【００７５】
次に図１１を参照すると、本発明の例示的な一実施形態による抽象構文ツリーのブロック図が示されている。抽象構文ツリー環境１１００は、抽象構文ツリー１１０２を形成し処理するために使用される様々なコンポーネントを含む。
【００７６】
Ｗｉｋｉコマンド・テキスト（ＷＣＣ：Wiki commandcontext）１１０４は、図６のページ６０２などのＷｉｋｉページのマークアップ言語から抽象構文ツリー１１０２を作成するオブジェクトである。Ｗｉｋｉコマンド・テキスト１１０４は、コマンドの抽象構文ツリーの親である。Ｗｉｋｉコマンド・テキスト１１０４は、あるページまたはソース・フラグメントに関するコマンドをロードする責任がある。抽象構文ツリー１１０２は、Ｗｉｋｉソースに関する図６のコマンド６４０、６４２、６４４、６４６、６４８、および６５０などのコマンドから構成される。ツリーは、リーフまたはノードを含むように広がるソースまたはベースを含むデータ構造である。ツリー内の相互接続ノードは、他の相互接続ノードに依存しているコマンドを表す。ノード１１０６〜１１１０などのノードは抽象構文ツリー１１０２内の種々のコマンドを表す。
【００７７】
たとえば、ノード１１０６は、アコーディオンと命名され、アコーディオンに対してユーザによって割り当てられた属性および変数を内面化し、クライアント・ブラウザ環境をターゲットにするアコーディオン用のハイパーテキスト・マークアップ言語フラグメントを放出するために必要なステップを実行する。ノード１１０８は、テンプレートと命名され、アコーディオンと命名されたノード１１０６の子である。ノード１１０６は、クライアント・ブラウザ環境上で表示するためにアコーディオン内のタブの名前を提供する。ノード１１１０は、予報と命名され、Ｗｉｋｉページ内に天気予報を挿入するためのコマンドである。
【００７８】
データ・ハブ１１１２は、図６のデータ・ハブ６３８などのデータ・ハブである。データ・ハブ１１１２は、前順走査（pre-order traversal）で抽象構文ツリー１１０２を進み、各ノードで特定の機能を呼び出すことにより、抽象構文ツリー１１０２を処理する。たとえば、ノード１１１４は、緯度と経度を提供するための機能を有する。ノード１１１４は、指定のアドレスに関する緯度と経度を提供する、Ｇｏｏｇｌｅ（商標）マップのコマンドにすることができる。
【００７９】
そのページの複雑さに応じて、Ｗｉｋｉコマンド・コンテキスト（ＷＣＣ）１１０４によって表された抽象構文ツリー１１０２は、２つのタイプの子ノードを含むことができ、第１のタイプは前に記述されたものであり、第２のタイプはそのルートがもう１つのＷｉｋｉコマンド・コンテキストである他の抽象構文ツリーである。もう１つのＷｉｋｉコマンド・コンテキストは、同じく処理する必要のある他のＷｉｋｉソース・フラグメントを生成するユニフォーム・リソース・インジケータ要求を処理するときに使用される。
【００８０】
本発明の例示的な諸実施形態は、Ｗｉｋｉ環境の機能を拡張するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードをさらに提供する。Ｗｉｋｉは、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂページである。共同環境を容易に作成するためにオブジェクトをどのように拡張するかを定義するためにオブジェクト指向フレームワークが使用される。Ｗｉｋｉ環境は、中核ランタイム・コンポーネントに対する変更を必要とせずに中核環境を拡張するための基本メカニズムをサポートする必要がある。
【００８１】
例示的な諸実施形態は、任意の数のＷｉｋｉコマンドを含む配備済み環境を管理するためにＷｉｋｉコマンドを処理する、クライアントおよびサーバ側エレメントを含む。さらに記述するように、Ｗｉｋｉコマンド・クラスの具象実装例を処理するために、Ｗｉｋｉ環境内のベース・クラスと中核処理エンジンの抽象セットが使用される。中核処理エンジンは、Ｗｉｋｉ環境の機能を拡張するために中核ランタイム・コンポーネントの処理およびライフサイクル管理をサポートする。中核処理エンジンは、図４のＷｉｋｉエンジン４０２などのエンジンである。
【００８２】
次に図１２を参照すると、本発明の例示的な一実施形態によるコマンドのブロック図が描写されている。Ｗｉｋｉコマンドは、図３のＷｉｋｉ環境３０２などのＷｉｋｉの機能およびプロセスを実装するために使用されるコマンドである。図１２は、Ｗｉｋｉコマンド・メタデータ・インターフェースと関連コマンド１２００を記述している。コマンド１２００は、図５のコマンド５５０などのコマンドである。
【００８３】
コマンド１２００は、カタログ１２０２、ライフサイクル１２０４、プロパティ編集１２０６、およびページ処理１２０８を含むことができる、様々なコマンド・カテゴリを含む。コマンド１２００には、いくつかの例しか示されていない。たとえば、コマンドとしては、Ｇｅｔ／ｓｅｔＣａｔｅｇｏｒｙ１２１０、ｇｅｔＮａｍｅ１２１２、およびｇｅｔＤｅｓｃｒｉｐｔｉｏｎ１２１４を含む。Ｇｅｔ／ｓｅｔＣａｔｅｇｏｒｙ１２１０は、そのＷｉｋｉコマンドが属すカテゴリを記述する。ｇｅｔＮａｍｅ１２１２はそのコンポーネントの簡略名である。ｇｅｔＤｅｓｃｒｉｐｔｉｏｎ１２１４は、ユーザがそのコマンドを理解するのを支援するためのＷｉｋｉコマンドのテキスト記述である。
【００８４】
カタログ１２０２は、以下のような他のコマンドも含むことができる。
ｇｅｔＨｅｌｐは、ユーザがそのページまたはパレット内のＷｉｋｉコマンドについて躊躇しているときに提示されるヘルプ・テキストである。
ｇｅｔＳａｍｐｌｅは、そのコマンドを挿入するために使用されるサンプルＷｉｋｉコマンド・ソースを返す。
ｇｅｔＩｃｏｎは、そのパレット内のＷｉｋｉコマンドについて表示すべきアイコンを返す。
ｇｅｔＤｒａｇＣｏｎｔｅｎｔは、そのＷｉｋｉコマンドに関するパレットからの初期ドラッグ中に使用されるＷｉｋｉソース・フラグメントを返す。
ｇｅｔＤｒｏｐＣｏｎｔｅｎｔは、そのＷｉｋｉコマンドが初期配置にドロップされるときに挿入されるＷｉｋｉソース・フラグメントを返す。
【００８５】
ライフサイクル１２０４は、ｗａｓＳａｖｅｄ１２１６、ｗａｓＤｅｌｅｔｅｄ１２１８、およびｗａｓＣｏｐｉｅｄ１２２０などのコマンドを含むことができる。ｗａｓＳａｖｅｄ１２１６は、そのコマンドがサーバ環境で保存された後に呼び出される。これらの例では、ｗａｓＤｅｌｅｔｅｄ１２１８は、そのコマンドがサーバ・ページ環境から除去されたときに呼び出される。ｗａｓＤｅｌｅｔｅｄ１２１８は、所与のページ上のＷｉｋｉコマンドに関連する永続リソースをＷｉｋｉコマンドが一掃するための手段を提供する。ｗａｓＣｏｐｉｅｄ１２２０は、所与のＷｉｋｉコマンドを含むページが他の名前にコピーされたときに呼び出される。ｗａｓＣｏｐｉｅｄ１２２０は、新たにコピーされたページ上で必要な任意の永続変更をＷｉｋｉコマンドが適用するための手段を提供する。
【００８６】
ライフサイクル１２０４は、以下のような他のコマンドも含むことができる。
ｇｅｔＶｅｒｓｉｏｎは、そのＷｉｋｉコマンドのバージョンを返す。
ｇｅｔＰａｒａｍｅｔｅｒｓは、そのＷｉｋｉコマンドに関連するパラメータのリストを返す。
ａｂｏｕｔＴｏＳａｖｅは、そのコマンドがサーバ環境に保存されようとしているときに呼び出され、そのコマンドを持続するために必要な任意の活動を実行するための機会をそのコマンドに提供する。
ｃｏｎｆｉｇｕｒｅは、そのコマンドを構成する必要があるときに呼び出される。
ｇｅｔ／ｓｅｔＰｌｕｇｉｎＤａｔａは、ｃｏｎｆｉｇｕｒｅコマンド中にそのＷｉｋｉコマンドに関連するデータを保存／取得する。
ｗａｓＵｎｄｅｌｅｔｅは、前に所与のページから削除された後でそのコマンドがそのページに戻されたときに呼び出される。
ｗａｓＲｅｎａｍｅｄは、そのＷｉｋｉコマンドを含むページが名称変更されたときに呼び出される。
ａｂｏｕｔＴｏＥｘｐｏｒｔは、そのＷｉｋｉコマンドがＷｉｋｉの保存フォーマットにエクスポートされる直前に呼び出される。
ｗａｓＩｍｐｏｒｔｅｄは、そのＷｉｋｉコマンドがＷｉｋｉ保存フォーマットからインポートされた直後に呼び出される。
【００８７】
プロパティ編集１２０６は、ｇｅｎｅｒａｔｅＰｒｏｐｅｒｔｙＥｄｉｔｏｒ１２２２およびａｌｌｏｗＥｄｉｔ１２２４などのコマンドを含むことができる。例示的な実施形態では、ｇｅｎｅｒａｔｅＰｒｏｐｅｒｔｙＥｄｉｔｏｒ１２２２は、そのコマンドがクライアント側編集画像（client side editing visual）を生成できるようにするために中核エンジンによって呼び出される。ｇｅｎｅｒａｔｅＰｒｏｐｅｒｔｙＥｄｉｔｏｒ１２２２が実装されない場合、Ｗｉｋｉコマンドのパラメータを編集するためにデフォルト・プロパティ・エディタが生成される。プロパティ・エディタは、ユーザがそのＷｉｋｉコマンドに関するパラメータ、値、テキスト、変数、およびその他のデータを入力できるようにするインターフェースである。ａｌｌｏｗＥｄｉｔ１２２４は、そのＷｉｋｉコマンドが編集可能であるかどうかを判断する。
【００８８】
ページ処理１２０８は、ｒｅｎｄｅｒ１２２６、ｄｒａｗＥｙｅＣａｔｃｈｅｒ１２２８、ｒｅｆｒｅｓｈＯｎＵｐｄａｔｅ１２３０、およびｇｅｔＴａｒｇｅｔＤＩＶ１２３２などのコマンドを含むことができる。ｒｅｎｄｅｒ１２２６は、そのＷｉｋｉコマンドがハイパーテキスト・マークアップ言語用の出力ストリームにそれ自体を表示する必要があるときに呼び出される。ｄｒａｗＥｙｅＣａｔｃｈｅｒ１２２８は、クライアント上でそのＷｉｋｉコマンドを操作するためにクリックすることができるコンテンツを提供するためにそのコマンドがそのページ上に描かれるときに呼び出され、通常、選択されたコマンド上でプロパティ・エディタを呼び出す。アイキャッチャは、単集合編集機能を追跡するために使用される。ｒｅｆｒｅｓｈＯｎＵｐｄａｔｅ１２３０は、プロパティ・エディタを使用してそのコマンドの引数が更新された後でそのページ全体をリフレッシュしなければならないかどうかを判断するために呼び出される。ｇｅｔＴａｒｇｅｔＤＩＶ１２３２は、更新すべきハイパーテキスト・マークアップ言語ＤＩＶの名前を返す。ＤＩＶは、ハイパーテキスト・マークアップ言語ファイル内のディビジョン／セクションを表す。各コマンドは、クライアント・ブラウザ上のＤＩＶ内に表示される。ＤＩＶは、Ｗｉｋｉエンジンが自動的に生成するか、またはそのコマンドがｇｅｔＴａｒｇｅｔＤＩＶプロトコルを実装することによって１つを提供する可能性のある、関連識別コードを有する。
【００８９】
ページ処理１２０８は、以下のような他のコマンドも含むことができる。
ｇｅｔＤｅｓｔｉｎａｔｉｏｎＤｉｖは、そのコマンドがページ上で再描画されたときに更新すべきハイパーテキスト・マークアップ言語／ＤＩＶの名前識別コードを返す。コマンドを描画することは、コード化されたデータを指定の方法で再生または表示することである。たとえば、アイキャッチャは、そのアイキャッチャを表示するためにＷｉｋｉページに描画されたハイパーテキスト・マークアップ言語を生成することによって描画される。
ｇｅｔＡｒｇｕｍｅｎｔｓは、処理のためにコマンドに渡される実引数のリストを返す。引数は、そのコマンドの仮引数リストを返すｇｅｔＰａｒａｍｅｔｅｒｓ呼び出しによって返されるパラメータの「実際の」値を含む。
ｒｅｆｒｅｓｈＯｎＩｎｓｅｒｔは、そのコマンドがＷｉｋｉページ上に配置された後でそのページ全体をリフレッシュしなければならないかどうかを判断するために呼び出される。
ａｒｅＡｒｇｕｍｅｎｔｓＳｅｔは、そのコマンドがそのｉｎｖｏｋｅメソッドを「始動（fire）」してモデル・アクションを実行できるようにそのＷｉｋｉコマンドに関するすべての入力引数が満足されているかどうかを指定する値を返す。
ｉｎｉｔは、内部Ｗｉｋｉコマンドを初期設定するために呼び出される。
【００９０】
上記のメソッドおよびコマンドは、図３２〜図４４のプロセスを提供するために使用される。
【００９１】
次に図１３を参照すると、本発明の例示的な一実施形態によるプロパティ編集コンポーネントを示す図が描写されている。プロパティ編集システム１３００は、アイキャッチャ１３０２と、プロパティ・エディタ１３０４と、セレクタ・エディタ１３０６とを含む。
【００９２】
アイキャッチャ１３０２は、選択されたコマンドの図解表現である。たとえば、アイキャッチャ１３０２は、指定のアドレスのマップを表示するためのＧｏｏｇｌｅ（商標）マップのコマンドを表すことができる。アイキャッチャ１３０２は、選択されたコマンドをユーザが編集できるようにするプロパティ・エディタ１３０４を呼び出すためにアイコン形式でクリックすることができる。
【００９３】
プロパティ・エディタ１３０４は、コマンドの属性を確立するために使用される。たとえば、属性は、情報のタイプ、プロパティ、パラメータ、その属性に関するバインディング情報、ならびにデフォルト値および許容値を指定することができる。たとえば、プロパティ・エディタ１３０４により、ユーザは、Ｇｏｏｇｌｅ（商標）マップ用のアドレスを指定して、要求されたマップを生成することができる。セレクタ・エディタ１３０６は、ユーザが特定の属性メタデータを確立できるようにする専門のプロパティ・エディタである。たとえば、ユーザは、セレクタ・エディタ１３０６を使用してアドレス編集を指定することができる。プロパティ・エディタ１３０４で属性を確立している間に、特定の属性は、自動的にセレクタ・エディタ１３０６を開き、プロパティ・エディタ１３０４内のある属性またはフィールドに関するより具体的な情報を入力することができる。
【００９４】
本発明の例示的な諸実施形態は、サーバ側データ・ハブのリモート・データ処理システムでクライアント側データ・ハブから受信したＷｉｋｉページに関する要求を処理するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードをさらに提供する。サーバ側データ・ハブは、そのページ要求がサーバによって受信されたときにインスタンス化される、サーバ上のデータ・ハブ・オブジェクト・インスタンスである。サーバ側データ・ハブは、特定のページ・インスタンスに関連付けられる。したがって、サーバが、そのページの変更または更新などのそのページに関連するクライアントからの要求を受信するたびに、特定のページに関連するサーバ側データ・ハブのインスタンスを検索しロードして、その要求を処理することができる。
【００９５】
サーバ側データ・ハブは、複数の属性と１組のメソッドとを含む。この１組のメソッドはデータ・ハブ上の１つまたは複数のメソッドであり、サーバ上のプロデューサ・コマンドから共同アプリケーションのインスタンスに関連する１組のコンシューマ・コマンドにイベントを送信するために使用される。この１組のコンシューマ・コマンドは、これらの例ではサーバ側、クライアント側、またはその両方に位置することができる。
【００９６】
コンシューマ・コマンドは、そのコマンドの機能を処理するかまたは実行するかあるいはその両方を行うためにイベントまたはデータあるいはその両方を受信する必要があるか、または受信することを希望するコマンドである。コンシューマ・コマンドは、所与のトピックに関連するイベント・オブジェクトを受信するためにそのデータ・ハブに登録する。
【００９７】
たとえば、検索コンポーネントは、検索コンポーネントの検索機能を実行するために検索入力語を受信する必要があるか、または受信することを希望する。したがって、検索コンポーネントは、検索入力語のコンシューマである。したがって、検索コマンドは、検索語および使用可能なトピックに関連するイベントのコンシューマである。
【００９８】
また、コンシューマ・コマンドは、１つまたは複数の特定のトピックに関連するイベントを聴取しているかまたは待っているので、リスナ・コマンド（listener command）と呼ぶこともできる。上記の例では、検索コンポーネントは、使用可能な検索語に関連するトピックを聴取している。
【００９９】
これらの例では、１組のコンシューマは、単一コンシューマならびに２つ以上のコンシューマを含む。
【０１００】
クライアント側データ・ハブは、要求されたページがクライアントで受信されたときにクライアントに作成される。このクライアント側データ・ハブは、Ｗｉｋｉアプリケーションなどの共同アプルケーションのインスタンスに関連付けられる。
【０１０１】
サーバ側データ・ハブと対応するクライアント側データ・ハブを使用すると、要求されたページに関連するＷｉｋｉコマンドは、サーバ側データ・ハブまたはクライアント側データ・ハブあるいはその両方を介してコマンド間で伝送されたイベントを経路指定することにより、ページ要求の処理中に、より容易に対話することができる。
【０１０２】
本発明の例示的な諸実施形態により、サーバ側データ・ハブまたはクライアント側データ・ハブあるいはその両方を使用して、イベント・メカニズム（eventing mechanism）を使用して任意のアプリケーション内のコマンド間でイベントを経路指定することができる。イベント・メカニズムは、Ｗｉｋｉコマンドなど、アプリケーション内のモジュールがそのアプリケーション内の他のモジュールと通信できるようにするメカニズムである。たとえば、Ｗｅｂブラウザはイベント・メカニズムを使用する。加えて、電子メール・コンポーネントおよびニュースリーダなどのＷｅｂアプリケーションもイベント・メカニズムを使用する。
【０１０３】
次に図１４を参照すると、本発明の例示的な一実施形態によりＷｉｋｉアプリケーションのためのクライアントおよびサーバ上のコマンド間のデータフローを例示する図が描写されている。サーバ１４００は、図１のサーバ１０４および１０６などのサーバである。サーバ１４００は、図３のＷｉｋｉ環境３０２、図４のＷｉｋｉ環境４００、および図６のＷｉｋｉ環境６０１などのＷｉｋｉ環境の一部である。
【０１０４】
データ・ハブ１４０２は、図５のデータ・ハブ５５８および図６のデータ・ハブ６３８などのサーバ側データ・ハブである。データ・ハブ１４０２は、ページに関する要求がクライアント１４０８から受信されたときにサーバ１４００上に作成される。したがって、サーバ側データ・ハブ１４０２は、クライアント側データ・ハブから要求を受信するとインスタンス化される。サーバ側データ・ハブ１４０２は、Ｗｉｋｉ環境内のコマンド間でイベントを伝搬または経路指定するための属性およびメソッドを有するデータ・ハブ・オブジェクトのインスタンスである。クライアント１４０８上のユーザから受信したページ要求に関連するイベントおよびコマンドを処理するために、サーバ側データ・ハブ１４０２上の１組のメソッドが使用される。
【０１０５】
Ｗｉｋｉコマンド１４０４は、図４のコマンド４２２、図５のコマンド５５０、および図６のコマンド６４０〜６５０など、Ｗｉｋｉシステム内に存在するＷｉｋｉコマンド・オブジェクトである。Ｗｉｋｉコマンド１４０４により、ユーザは、ページにデータを含めるかまたはページに関するデータを処理するか、あるいはその両方を行うか、もしくは要求されたＷｉｋｉページに関連する任意のその他の機能を行うことができる。この例では、Ｗｉｋｉコマンド１４０４は、図５のＷｉｋｉページ・オブジェクト５２６などのＷｉｋｉページ・オブジェクトのページ・プロセス・ループによって処理される。
【０１０６】
データ・ハブ１４０２は、Ｗｉｋｉコマンド１４０４の引数パラメータによって要求された必須データまたは入力値あるいはその両方が存在するかどうかを判断する。すべての必須データまたは入力値あるいはその両方が存在する場合、データ・ハブ１４０２は、Ｗｉｋｉコマンド１４０４上でｉｎｖｏｋｅメソッドをトリガする。ｉｎｖｏｋｅメソッドは、Ｗｉｋｉコマンド１４０４をトリガして、サーバ側データ・ハブ１４０２へのイベント１４０６を始動する。イベント１４０６は、イベントを定義するイベント・オブジェクトである。
【０１０７】
この例示的な例では、イベント１４０６は、サーバ１４００上のＷｉｋｉコマンド１４０４によって始動される。しかし、本発明の例示的な諸実施形態により、イベント１４０６は、クライアント側データ・ハブ１４１０からサーバ側データ・ハブ１４０２によって受信されたイベントも含むことができる。このような場合、イベント１４０６は、クライアント側Ｗｉｋｉコマンド１４１２によって始動されたイベント・オブジェクトであるイベント１４０７など、クライアント上のコマンドによって始動されたイベントになるであろう。他の例示的な例により、イベント１４０７は、クライアント側Ｗｉｋｉコマンド１４１２によって生成され、クライアント上で処理するかまたはサーバ１４００上で処理するためにサーバ側データ・ハブに経路指定するためにクライアント側データ・ハブ１４１０に送信されたイベントを含むことができる。
【０１０８】
Ｗｉｋｉコマンド１４０４からイベント１４０６を受信すると、データ・ハブ１４０２は、処理のためにイベント・キューにイベント１４０６を送信する。イベント・キューは、イベント・オブジェクトが処理されるまでそのイベント・オブジェクトを保管するためのバッファまたはデータ構造である。
【０１０９】
ｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズ中に、サーバ側データ・ハブ１４０２はイベント１４０６を処理する。イベント１４０６の処理中に、サーバ側データ・ハブ１４０２は、Ｗｉｋｉコマンド１４０４などのコマンドがイベント１４０６のコンシューマ・コマンドとして登録されるかどうかを判断する。コンシューマ・コマンドは、所与のイベント・トピックに関連するイベントを必要とするコマンドである。イベント・トピックは、イベント・オブジェクトに関連する主題またはテーマである。たとえば、ユーザが検索語を入力した結果として始動されたイベント・オブジェクトは、「検索（search）」または「検索使用可能（search available）」イベント・トピックを有することになるであろう。
【０１１０】
コンシューマ・コマンドは、所与のトピックに関するコンシューマ・コマンドとして、データ・ハブに登録する。したがって、所与のトピックに関するイベント・オブジェクトがデータ・ハブによって受信されると、データ・ハブは、所与のイベント・トピックについて登録された１組のコンシューマ・コマンドにそのイベントを送信することができる。
【０１１１】
登録されたコンシューマ・コマンドは、所与のトピックのイベントのコンシューマとして登録したコマンドである。たとえば、表示コマンドは、事故などのトピックに関する複数のデータ・セットを集約する。このコマンドは、マップ・ディスプレイ上に表示するために報告し、トピック「事故」に関するコンシューマ・コマンドとしてデータ・ハブに登録することになる。データ・ハブが事故に関するイベントを受信すると、表示コマンドを含む、トピック「事故」について登録されたすべてのコンシューマ・コマンドに事故イベント・オブジェクトが送信される。表示コマンドが事故トピック・イベントを受信すると、表示コマンドは、そのデータを消費または使用して、事故データを示すマップ・ディスプレイを生成するか、または前に表示されたマップを更新して新しい事故データを示すことになる。
【０１１２】
データ・ハブ１４１０は、処理のためにＷｉｋｉコマンド１４１２にイベント１４０６を送信する。データ・ハブ１４１０は、Ｗｉｋｉコマンド１４１２によって要求された所与の引数／パラメータに関する必須データまたは入力値あるいはその両方がすべてＷｉｋｉコマンド１４１２に存在するかどうかを判断する。すべての必須データまたは入力値あるいはその両方が存在する場合、データ・ハブ１４１０は、Ｗｉｋｉコマンド１４１２上でｉｎｖｏｋｅメソッドをトリガする。データ・ハブ１４１０がＷｉｋｉコマンド１４１２上でｉｎｖｏｋｅメソッドを呼び出したことに応答して、Ｗｉｋｉコマンド１４１２は処理のためにデータ・ハブ１４１０にイベント１４０７を送信するかまたは始動する。イベント１４０７が完全に処理されると、データ・ハブ１４１０は表示のためにブラウザまたはクライアントにイベント１４０６を送信することになる。イベントがハイパーテキスト・マークアップ言語コードなど、ブラウザで表示するために適切なフォーマットになっていると、そのイベントは完全に処理される。
【０１１３】
したがって、例示的な諸実施形態は、ページに関する要求を処理するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードを提供する。サーバ側データ・ハブは、リモート・データ処理システム上のクライアント側データ・ハブからそのページに関する要求を受信する。クライアント側データ・ハブは、共同アプリケーションのインスタンスに関連付けられる。サーバ側データ・ハブは、１組のメソッドを使用して、初期ページ描画プロセス中にその要求を処理する。この１組のメソッドは、共同アプリケーションに関連する１組のコンシューマ・コマンドにサーバ上のプロデューサ・コマンドからイベントを送信するために使用される。
【０１１４】
次に図１５を参照すると、本発明の例示的な一実施形態により初期ページ描画プロセス中のサーバ上のコマンド間のデータフローを例示する図が描写されている。データ・ハブ１５００は、図５のデータ・ハブ５５８および図６のデータ・ハブ６３８などのサーバ側データ・ハブである。この例示的な例では、データ・ハブ１５００は、ハイパーテキスト・プリプロセッサ（ＰＨＰ）で実装される。Ｗｉｋｉコマンド・プロデューサ１５０２は、サーバに関連するコマンドである。プロデューサは、他のＷｉｋｉコンポーネントによって使用または消費可能なデータを提供するＷｉｋｉコマンド・コンポーネントである。この例示的な例では、Ｗｉｋｉコマンド・プロデューサ１５０２は、トピック「自動車（car）」に関するイベントのプロデューサとして登録する。トピック「自動車」のプロデューサとしてＷｉｋｉコマンド・プロデューサ１５０２を登録するために、データ・ハブ１５００は、トピック「自動車」に関連するプロデューサＩＤに関するオブジェクト変数にＷｉｋｉコマンド・プロデューサ１５０２のＩＤを追加する。
【０１１５】
Ｗｉｋｉコマンド・コンシューマ１５０６は、サーバに関連するコマンドである。Ｗｉｋｉコマンド・コンシューマ１５０６は、トピック「自動車」１５０８に関するコンシューマとしてデータ・ハブ１５００に登録する。トピック「自動車」のコンシューマとしてＷｉｋｉコマンド・コンシューマ１５０６を登録するために、データ・ハブ１５００は、データ・ハブ１５００上のコンシューマ・オブジェクト変数内のコンシューマ・コマンドＩＤのアレイにＷｉｋｉコマンド・コンシューマ１５０６のＩＤを追加する。
【０１１６】
Ｗｉｋｉページ１５１０は、Ｗｉｋｉ環境にロードされている所与の要求されたページに関連するプロセス・ループを有するオブジェクトである。ｉｎｉｔフェーズ中に、サーバはｉｎｉｔメソッドを呼び出して、Ｗｉｋｉコマンド・プロデューサ１５０２など、所与の要求されたページに関連するすべてのコマンドを初期設定する。初期設定時に、コマンドは、Ｗｉｋｉコマンド・プロデューサ１５０４などのプロデューサ・コマンドとして、またはＷｉｋｉコマンド・コンシューマ１５０６などのコンシューマ・コマンドとして、データ・ハブに登録する。
【０１１７】
Ｗｉｋｉコマンド・プロデューサ１５０２は、データを検索し、Ｗｉｋｉコマンド・プロデューサ１５０２が有するデータまたはイベントが始動できる状態になると、トピック「自動車／使用可能」を有するイベントを始動する。Ｗｉｋｉコマンド・プロデューサ１５０２がイベント・トピック「自動車／使用可能」イベント１５１２を始動すると、そのイベントはデータ・ハブ１５００に送信される。データ・ハブ１５００は、データ・ハブ１５００内のイベント・キュー１５１４にトピック「自動車／使用可能」イベントを追加する。イベント・キューからトピック「自動車／使用可能」イベントを処理した後、イベント・トピック「自動車」について登録したすべてのコンシューマにトピック「自動車／使用可能」イベントが送信される。
【０１１８】
Ｗｉｋｉページ・オブジェクトのＷｉｋｉページ・プロセス・ループは、第一のｐｒｏｃｅｓｓＥｖｅｎｔｓメソッドを呼び出す。このｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズ中に、データ・ハブは、Ｗｉｋｉコマンド・プロデューサ１５０２によって始動された「自動車／使用可能」イベント・オブジェクトを含む、サーバ側データ・ハブ上のイベント・キュー内のイベントを処理する。データ・ハブ１５００は、イベント・キューからイベント「自動車／使用可能」を検索する。データ・ハブ１５００は、Ｗｉｋｉコマンド・コンシューマ１５０６を含む、イベント・トピック「自動車」１５１８用のコンシューマとして登録された各コマンド上でｃａｌｌｂａｃｋメソッドを呼び出す。このイベントは、ｃａｌｌｂａｃｋメソッドへの引数／パラメータとしてＷｉｋｉコマンド・コンシューマ１５０６に渡される。ｃｏｎｓｕｍｅｒ  ｃａｌｌｂａｃｋメソッドは、ｃａｌｌｂａｃｋメソッド内でコードを実行することにより、イベント・オブジェクトを処理する。
【０１１９】
すべてのコンポーネントを初期設定した後であって、要求されたページを描画する前に実行すべき追加の処理が存在する場合、各コマンドは、ｄｉｓｃｏｖｅｒメソッドを呼び出すことにより、コードを実行する機会を有する。第２のｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズ１５２０は、ｄｉｓｃｏｖｅｒフェーズ中に始動した可能性のあるすべてのイベントを処理するために呼び出される。
【０１２０】
最後に、Ｗｉｋｉページ・オブジェクト１５１０は、すべてのコマンド上でｒｅｎｄｅｒフェーズを呼び出す。ｒｅｎｄｅｒフェーズ中に、すべてのコマンドは、クライアント・ブラウザで要求されたページとして描画するために、ハイパーテキスト・マークアップ言語コードを生成し、クライアントに送信できるように、その使用可能なデータのすべてを備えていなければならない。Ｗｉｋｉコンシューマ１５０６がプロデューサによって生成された「自動車」データのテーブル表示である場合、ｒｅｎｄｅｒフェーズは図１６に示されているような自動車のテーブルを生成できるであろう。
【０１２１】
次に図１６を参照すると、本発明の例示的な一実施形態によりユーザからのページ要求に応答して生成されたＷｉｋｉページ１６００を例示する図が示されている。上記で述べた通り、あるページに関連するすべてのコマンドは、プロデューサおよびコンシューマとしてデータ・ハブに登録することができる。イベントはプロデューサによって生成されるので、そのイベントは、ページ全体またはページ・フラグメントを描画するためにハイパーテキスト・マークアップ言語またはＪａｖａＳｃｒｉｐｔを描画するためにコンシューマによって使用される。ハイパーテキスト・マークアップ言語またはＪａｖａＳｃｒｉｐｔは、表示のためにクライアント・ブラウザに送信される。
【０１２２】
したがって、すべての対話は、Ｗｉｋｉページ・プロセス・ループ中にデータ・ハブ全体に波及する。これらの対話の結果として、すべてのイベントが描画時に処理される。したがって、ページ１６００などの初期描画ページは、Ｗｉｋｉページの正確なビューを完全に描写する。換言すれば、サーバから新しいページをロードすることに関連するすべてのイベントはサーバ側データ・ハブにより処理されるので、クライアントは、初期描画ページを変更してページ・ビューを正確なものにするためにイベントを始動する必要はない。
【０１２３】
あるページに関する初期要求がサーバで処理されると、そのサーバは、要求されたページに関するハイパーテキスト・マークアップ言語コードまたはＪａｖａＳｃｒｉｐｔあるいはその両方を生成する。ハイパーテキスト・マークアップ言語コードまたはＪａｖａＳｃｒｉｐｔあるいはその両方がクライアントで受信されると、クライアント・ブラウザで表示するために新しいページがクライアントでロードされる。
【０１２４】
ページ・ロード・プロセス中に、そのページに関するハイパーテキスト・マークアップ言語コードまたはＪａｖａＳｃｒｉｐｔコードあるいはその両方がクライアント側データ・ハブ・オブジェクトを作成する。クライアント側データ・ハブ・オブジェクトは、サーバでの初期ページ・プロセス・ループ中にサーバ側データ・ハブに登録されたサーバ上のコマンドと同じように、クライアント上のすべてのコマンドをプロデューサ・コマンドおよびコンシューマ・コマンドとしてクライアント側データ・ハブに登録する。
【０１２５】
初期ページがロードされた後でクライアントで行われるコマンド対話をクライアント上で完全に含み処理することができる場合、これらの例ではそのコマンド対話はサーバに送信されない。換言すれば、Ｗｉｋｉコマンドは、クライアント上で対話して、クライアント側のユーザ・アクションまたはその他の出現によってトリガされた追加の入力またはイベントを反映するように表示されたページを変更する。コンポーネント対話をクライアント上で完全に処理することができる場合、クライアント生成イベントはサーバに送信されない。このイベントは、クライアントで完全に処理することができる可能性がある。その通りである場合、サーバは、いずれにしてもそのイベントの処理に関係する必要はない。描写されている諸実施形態では、変更（modify）という用語は、新しいデータまたは新しいページ・コンテンツあるいはその両方を反映するために、ページを更新することまたはページに対してその他の変更を行うことを含む。
【０１２６】
したがって、本発明の例示的な諸実施形態は、クライアント側データ・ハブがイベントを処理するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードを提供する。クライアント側データ・ハブは、所与のトピックに関するイベントを受信する。このイベントは、クライアントに関連するプロデューサ・コマンドによって生成される。クライアント側データ・ハブは、イベントを処理し、所与のトピックに関する１組のコンシューマ・コマンドを識別する。クライアント側データ・ハブは、所与のトピックに関する１組のコンシューマにそのイベントを送信する。クライアント側データ・ハブは、その１組のコンシューマのうちの１つまたは複数のコンシューマから新しいページ・コンテンツを受信し、表示されたページはその新しいページ・コンテンツで更新されて、更新済みページを形成する。
【０１２７】
次に図１７を参照すると、本発明の例示的な一実施形態によりクライアント・ブラウザで表示された描画ページを例示する図が描写されている。描画ページ１７００には、コンポーネント１７０２からの検索入力がイベント・トピック「検索／使用可能」のプロデューサとしてクライアント側データ・ハブに登録している。エコー・コンシューマ・コンポーネント１７０４は、トピック・イベント「検索／使用可能」のコンシューマとしてクライアント側データ・ハブに登録している。コンシューマ・コンポーネント１７０４は、検索コンポーネントが「検索／使用可能」イベントを始動したときにユーザが検索コンポーネント１７０２に入力したものを反響するように機能する。
【０１２８】
図１８は、本発明の例示的な一実施形態により新しいページがロードされ、クライアント・ブラウザで表示された後のクライアント側データ・ハブ上のコンポーネント間のデータフローを例示する図である。データ・ハブ１８００は、図６のデータ・ハブ６３４および図１４のデータ・ハブ１４１０などのクライアント側データ・ハブである。データ・ハブ１８００は、ページ・ロード中にクライアント上に作成される。この例示的な例では、クライアント側データ・ハブ１８００はＪａｖａＳｃｒｉｐｔおよびハイパーテキスト・マークアップ言語で実装される。
【０１２９】
Ｗｉｋｉコマンド・プロデューサ１８０２は、他のＷｉｋｉコマンドによって消費可能なデータを提供するかまたは特定のイベントが発生したことを他のコンポーネントに通知することを希望する、クライアント上のコマンドである。Ｗｉｋｉコマンド・プロデューサ１８０２は１８０４により、トピック「検索／使用可能」に関するプロデューサとしてデータ・ハブ１８００に登録する。この例では、Ｗｉｋｉコマンド・プロデューサ１８０２は図１７の検索コンポーネント１７０２である。
【０１３０】
Ｗｉｋｉコマンド・コンシューマ１８０６は、イベント・オブジェクトを消費するか、データを消費するか、またはイベントが通知されることを希望する、クライアント上のコマンドである。Ｗｉｋｉコマンド・コンシューマ１８０６は１８０８により、イベント・トピック「検索／使用可能」に関するコンシューマとしてクライアント側データ・ハブ１８００に登録する。この例では、Ｗｉｋｉコマンド・コンシューマ１８０６は図１７のエコー・コンシューマ・コンポーネント１７０４である。Ｗｉｋｉコマンド・コンシューマ１８０６は、サーバ上の対応するＷｉｋｉコマンド・オブジェクトのクライアント・バージョンである。クライアント上のＷｉｋｉコマンド・コンシューマ１８０６は、サーバ上のＷｉｋｉコマンド・オブジェクトのすべてのデータを含むが、サーバ上の対応するＷｉｋｉコマンドで検出されるすべてのメソッドを含むわけではない。
【０１３１】
Ｗｉｋｉコマンド・プロデューサ１８０２は、図１７に示されている「Ｗｉｋｉ」検索語などの検索語を入力した後でユーザが「実行（go）」ボタンを押すと、「検索／使用可能」イベントを始動する。Ｗｉｋｉコマンド・プロデューサ１８０２は、イベント・オブジェクトを作成し、そのイベント・オブジェクトにデータを添付し、次にデータ・ハブ１８００にイベントを送信するためにデータ・ハブ１８００上でｆｉｒｅＥｖｅｎｔメソッド１８１０を呼び出すことにより、そのイベント・オブジェクトを始動する。データ・ハブでイベントをキューに入れ、ｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズ中にイベントを処理するサーバ側データ・ハブとは異なり、クライアント側データ・ハブ１８００はイベント・キューにイベントを送信しない。その代わりに、クライアント側データ・ハブ１８００は、直ちにイベントを処理し、そのイベントのために登録された１組のコンシューマにそのイベントを送信する。
【０１３２】
この例示的な例では、エコー・コンポーネント・コールバック１８１２がデータ・ハブ１８００によって呼び出される。Ｗｉｋｉコマンド・コンシューマ１８０６は、ＪａｖａＳｃｒｉｐｔを使用してテキスト「検索語：Ｗｉｋｉ」を表示されたページに挿入して、図１７のページ１７００などの描画ページを変更する。Ｗｉｋｉコマンド・コンシューマ１８０６によって描画ページのコンテンツを動的に更新するために使用されるＪａｖａＳｃｒｉｐｔの模範的な例証は以下のように含む。
var divId =document.getElementById('echoDivId');
divId.innerHTML = "検索語："+event.getValue();
【０１３３】
しかし、本発明の例示的な一実施形態により、ドキュメント・オブジェクト・モデル（ＤＯＭ：document object model）操作を含むがこれに限定されない、ページを変更するための任意の既知のまたは使用可能なメソッドを使用して、Ｗｉｋｉコマンド・コンシューマ１８０６によって描画ページを変更することができる。
【０１３４】
しかし、サーバがイベントの処理に関係することを対話が要求している場合、そのイベントはサーバに送信される。データはサーバ上に存続するかまたはサーバによって検索されるので、クライアント上で始動されたイベントにより、そのイベントがサーバ・データ・ハブに送信されることを要求することは、ありそうなことである。
【０１３５】
換言すれば、あるページがクライアント側で表示された後、新しいイベントまたは新しいデータがユーザから受信される。このイベントは、全部または一部をサーバで処理することを必要とする可能性がある。その通りである場合、クライアントは、表示されたページを更新する前にサーバにイベントを送信する。
【０１３６】
クライアントおよびサーバ上のデータ・ハブ・オブジェクトにより、Ｗｉｋｉコンポーネントおよびコマンドは、クライアント上で対話し、サーバ上で対話し、トピック・ベースのイベント・メカニズムを使用してコンポーネントを効果的に配線／接続することができる。ユーザ対話の結果により、クライアント上では不可能な何らかの動作またはプロセスを実行するためにサーバにアクセスすることが要求される場合、クライアント側データ・ハブはそのイベントをサーバ側データ・ハブに送信する。
【０１３７】
たとえば、データベース・テーブルなど、所与のユーザ対話に必要なデータであって、クライアントが所有していないかまたはアクセスできないものを、サーバが所有しているかまたはアクセスできる場合、そのイベントがサーバに送信される。加えて、データ・フィードなど、ユーザ対話に必要なデータを検索するためにサーバが必要である場合、そのイベントがサーバに送信される。これらの場合、イベントは、取り扱い／処理のためにサーバに送信される。サーバ上でのそのイベントの取り扱い／処理が完了すると、サーバは、クライアントで表示されたページを変更するために、更新済みページ・コンテンツをクライアントに送信する。
【０１３８】
たとえば、検索コンポーネントは、ユーザからの入力を受け入れるコンポーネントである。ユーザによって入力されたテキストに基づいて、検索テキストがサーバに送信される。サーバはこの検索を実行する。サーバは、テーブル・コンポーネントを使用して、検索の結果を描画する。サーバ上でテーブル・コンポーネントによって生成された描画テーブルは、表示のためにクライアントに返される。
【０１３９】
また、本発明の例示的な実施形態は、データ・ハブがイベントを処理するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードも提供する。クライアント側データ・ハブは、現在表示されているページに関連する所与のトピックに関するイベントを受信する。クライアント側データ・ハブは、サーバ上でイベントを処理するためにイベント・データをサーバ側データ・ハブに送信する。
【０１４０】
サーバ側データ・ハブは、あるページに関連するイベントを受信したことに応答して、サーバ側データ・ハブ上のイベント・キューに所与のトピックに関するイベントを追加する。サーバ側データ・ハブは、イベント・キュー内のイベントを処理する。そのイベントに関連する所与のトピックに関する１組のコンシューマ・コマンドが識別される。コンシューマ・コマンドは、所与のトピックに関するイベントを受信するコマンドである。サーバ側データ・ハブは、所与のトピックに関する１組のコンシューマ・コマンドにイベントを送信する。その１組のコンシューマ・コマンドのうちの１つまたは複数のコンシューマがイベントを処理し、そのページに関するページ・コンテンツを描画する。次にサーバ側データ・ハブは、イベントを処理した結果をクライアント側データ・ハブに返送する。
【０１４１】
クライアント側データ・ハブは、イベント処理の結果をサーバ側データ・ハブから受信する。イベントを処理した結果は新しいページ・コンテンツを含む。現在表示されているページは、クライアント・ブラウザでその新しいページ・コンテンツで更新されて、更新済みページを形成する。
【０１４２】
次に図１９および図２０に関連して説明すると、本発明の例示的な一実施形態によりページ更新中のクライアント側データ・ハブとサーバ側データ・ハブとの間のデータフローを例示する図が示されている。Ｗｉｋｉページが最初にロードされると、図８〜図９に示されているように、ユーザに表示するためにクライアントに送信される初期ページ描画を生成するために、サーバ側コマンドが処理される。この例示的な例では、そのページが最初にロードされると、サーバ側データ・ハブ１９００が作成される。Ｗｉｋｉコマンド・プロデューサ１９０２は検索コンポーネントである。
【０１４３】
ｉｎｉｔフェーズ中に、Ｗｉｋｉコマンド・プロデューサ１９０２は１９０４により、イベント・トピック「検索／使用可能」および「検索／クリック済み」のプロデューサとして、初期設定し、データ・ハブ１９００に登録する。Ｗｉｋｉコマンド・プロデューサ１９０２の検索コンポーネントは、クライアントによって生成される「検索／クリック済み」イベント・トピックに関するコンシューマとしても登録する。このように、Ｗｉｋｉコンポーネントのクライアント表現は、サーバ側コンポーネントと通信するか、またはサーバ側コンポーネント上でメソッドを呼び出すことができる。
【０１４４】
Ｗｉｋｉコマンド・コンシューマ１９０６はリスト・コンポーネントである。Ｗｉｋｉコマンド・コンシューマ１９０６は１９０８により、「検索／使用可能」イベント・トピックのコンシューマとして、初期設定し、データ・ハブ１９００に登録する。第１のｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズ中に、サーバ側データ・ハブ上でｐｒｏｃｅｓｓＥｖｅｎｔｓメソッドが呼び出される。データ・ハブ１９００は、Ｗｉｋｉコマンド・プロデューサ１９０２上でｉｎｖｏｋｅメソッドを呼び出す。応答として、Ｗｉｋｉコマンド・プロデューサ１９０２は、検索を実行し、「検索／使用可能」イベント・オブジェクト内に含まれるデータを生成する。Ｗｉｋｉコマンド・プロデューサ１９０２は、イベント・オブジェクト「検索／使用可能」を始動し、検索データの準備ができていることを示す。
【０１４５】
データ・ハブ１９００は、Ｗｉｋｉコマンド・コンシューマ１９０６のリスト・コンポーネント上でｃａｌｌｂａｃｋメソッドを呼び出して、「検索／使用可能」イベント・オブジェクトをＷｉｋｉコマンド・コンシューマ１９０６に送信する。次に、ｄｉｓｃｏｖｅｒおよび２次ｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズが実行される。最後に、ｒｅｎｄｅｒフェーズ中に、データ・ハブ１９００は、要求されたページに関連するすべてのコマンド上でｒｅｎｄｅｒを呼び出す。Ｗｉｋｉコマンド・プロデューサ１９０２は、ハイパーテキスト・マークアップ言語およびＪａｖａＳｃｒｉｐｔを描画して、検索フォームを表示する。Ｗｉｋｉコマンド・コンシューマ１９０６のリスト・コンポーネントは、ここではプロデューサ・コンポーネントであり、ハイパーテキスト・マークアップ言語およびＪａｖａＳｃｒｉｐｔを描画して、テーブルを表示する。描画コンポーネントの結果は、ハイパーテキスト・マークアップ言語の残りと結合され、表示のためにクライアントに送信される。そのページがブラウザによってロードされている間、ＪａｖａＳｃｒｉｐｔコードはクライアント側データ・ハブ１９１０を作成し、すべてのプロデューサ１９１２およびすべてのコンシューマ１９１４をクライアント側データ・ハブ１９１０に登録する。これは初期ページ描画である。
【０１４６】
そのページが最初に表示されると、ユーザ対話により、１つまたは複数のコンポーネントの描画に対する変更を引き起こす可能性がある。たとえば、ユーザが検索語を入力し、「実行」を押すと、データを変更するユーザ対話が行われる。クライアント側検索コンポーネントＷｉｋｉコマンド・プロデューサ１９１６は１９１８により、トピック「検索／クリック済み」を有するイベントを始動する。検索フェーズはデータとしてイベント・オブジェクトに添付される。クライアント側データ・ハブ１９１０は、イベント・オブジェクトを受信し、それをイベント・トピック「検索」に関するコンシューマとして登録されたクライアント上の任意のリスナに送信する。サーバ側データ・ハブ内とは異なり、クライアント側データ・ハブはイベント・キューにイベントを入れない。
【０１４７】
クライアント側データ・ハブ１９１０は、サーバ側データ・ハブに関連するサーバ上のコンシューマ・コマンドにそのイベントを送信しなければならないかどうかを判断する。サーバ上のコンシューマ・コマンドにそのイベントを送信しなければならない場合、クライアント側データ・ハブは、ＡＪＡＸ、ＪＳＯＮ、または任意のその他の既知のまたは使用可能なリモート・メソッド呼び出し方法を介してｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔメソッド１９２０を呼び出すことにより、サーバにイベントを送信する。
【０１４８】
サーバ側データ・ハブ１９００は、受信したイベントをイベント・キュー１９２２に追加する。サーバ側データ・ハブ１９００はイベント・キュー内のイベントを処理し、そのうちの１つはクライアントから受信された「検索／クリック済み」イベントである。サーバ側データ・ハブ１９００は１９２４により、イベント・トピック「検索／クリック済み」に関するコンシューマとして登録されたＷｉｋｉコマンド・プロデューサ１９０２の検索コンポーネントに「検索／クリック済み」イベントを送信する。Ｗｉｋｉコマンド・プロデューサ１９０２の検索コンポーネントは、検索を実行し、検索データを生成／作成する。Ｗｉｋｉコマンド・プロデューサ１９０２は、トピック「検索／使用可能」を有するイベント・オブジェクトを作成し、生成された検索データをそのイベント・オブジェクトに添付する。
【０１４９】
サーバ側データ・ハブ１９００は、「検索／使用可能」イベント・オブジェクトをイベント・キューに追加する。サーバ側データ・ハブ１９００は依然としてｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズでイベントを処理しているので、「検索／使用可能」イベント・オブジェクトは直ちにイベント・キューから除去され、サーバ側データ・ハブ１９００によって処理される。次に、Ｗｉｋｉコマンド・コンシューマ１９０６は１９２６により「検索／使用可能」トピックに関するコンシューマとして登録されるので、サーバ側データ・ハブ１９００は、「検索／使用可能」イベント・オブジェクトをＷｉｋｉコマンド・コンシューマ１９０６に送信する。
【０１５０】
Ｗｉｋｉコマンド・コンシューマ１９０６は、「検索／使用可能」イベント・オブジェクトからの新しいデータを保存する。サーバ側データ・ハブ１９００は１９２８により、クライアント側データ・ハブ１９１０から受信した元のイベント「検索／クリック済み」の処理に関係していたすべてのコンポーネント上でｒｅｎｄｅｒメソッドを呼び出す。Ｗｉｋｉコマンド・コンシューマ１９０６のリスト・コンポーネントのｒｅｎｄｅｒメソッドは、ハイパーテキスト・マークアップ言語およびＪａｖａＳｃｒｉｐｔを使用して、新しいリストを構築する。Ｗｉｋｉコマンド・コンシューマ１９０６は、新しいリスト・コンテンツをサーバ側データ・ハブ１９００に返す。サーバ側データ・ハブ１９００は、Ｗｉｋｉコマンド・コンシューマ１９０６を含む、関係するすべてのコンポーネント／コマンドから新しい描画を収集し、クライアント側データ・ハブ１９１０に返すために新しい描画をバンドルする。クライアント側データ・ハブは、１９３０によりｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔメソッドの結果を受信し、新しいページ・コンテンツ１９３２でクライアント上のコマンド描画を更新する。
【０１５１】
次に、図２１は、本発明の例示的な一実施形態によりページ更新中のサーバ側データ・ハブとクライアント側データ・ハブとの間のメッセージ・フローを例示する図である。このメッセージ・フローは、クライアント側プロデューサ・コンポーネントがイベントの名前と連結されたトピック「クリック済み」を有するイベントを始動したときに始まる（メッセージ１）。メッセージ２．１で、クライアント側データ・ハブはそのイベントを受信し、それをクライアント上の任意のリスナに送信する。
【０１５２】
クライアント側データ・ハブは、そのイベントをサーバ上のリスナに送信しなければならないかどうかを判断する（メッセージ２．２）。これらの例示的な例では、リスナは、所与のイベント・トピックに関するコンシューマとして登録されたコマンドまたはコンポーネントである。そのイベントをサーバ上のリスナに送信しなければならない場合、クライアント側データ・ハブは、ｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔを呼び出すかまたは他のリモート・メソッド呼び出し方法により、サーバにイベントを送信する（メッセージ２．３）。サーバ側データ・ハブは、受信したイベントをイベント・キューに追加する（メッセージ３）。
【０１５３】
メッセージ４．１で、サーバ側データ・ハブはキュー内のイベントを処理し、そのうちの１つはクライアントからのイベントである。サーバ側データ・ハブは、リスナとして登録された、対応するコンシューマに「クリック済み」イベントを送信する（メッセージ４．２）。
【０１５４】
コンポーネントは、イベントによって要望されたアクションを実行する（メッセージ５．１）。そのイベントがクライアントから受信されたかサーバから受信されたかにかかわらず、すべてのイベントはサーバ側データ・ハブによって同じように扱われる。コンポーネントは、その結果が使用可能であることを示す、新しい「使用可能」イベントを作成する（メッセージ５．２）。サーバ・データ・ハブは「使用可能」イベントをキューに追加する（メッセージ６）。
【０１５５】
サーバ側データ・ハブは、「使用可能」イベントを処理し、そのイベントをサーバ上の１組のコンシューマに送信する（メッセージ７）。コンシューマ・コンポーネントは、「使用可能」イベント・オブジェクトからのデータを使用する。サーバ側データ・ハブは、すべてのコンポーネント上でｒｅｎｄｅｒメソッドを呼び出す（メッセージ８．１）。すべてのコンポーネントは、ハイパーテキスト・マークアップ言語およびＪａｖａＳｃｒｉｐｔで新しい描画をサーバ側データ・ハブに返す（メッセージ８．２）。サーバ側データ・ハブは、すべての関係するコンポーネントから収集した描画をクライアント・データ・ハブに返す（メッセージ９）。クライアント側データ・ハブは、サーバがイベントを処理した結果を受信する。クライアントは、クライアント・ブラウザ上でページ更新を描画するためにその結果をクライアント上のリスナに送信する（メッセージ１０）。
【０１５６】
代替一実施形態では、クライアント側データ・ハブからイベントを受信せずに、サーバ側データ・ハブが本発明の例示的な諸実施形態により動作するシステムにおいて、ページ要求を処理し、コマンド間の対話を可能にすることも可能にすることができる。他の例では、クライアントがＰＤＡ、携帯電話、ＧＰＳナビゲータ、またはＪａｖａＳｃｒｉｐｔをサポートしない任意のその他のクライアント・デバイスであるシステムにおいて、ページ要求の処理を実装することもできる。
【０１５７】
図２２は、本発明の例示的な一実施形態によるサーバ側データ・ハブ・オブジェクトを例示する図である。描写されている例では、データ・ハブ２１００は、図５のデータ・ハブ５５８、図６のデータ・ハブ６３８、および図７のデータ・ハブ７０２などのデータ・ハブ・オブジェクトである。この例示的な例では、データ・ハブ２１００はＰＨＰで実装されたデータ・ハブ・オブジェクトである。
【０１５８】
データ・ハブ２１００などのデータ・ハブは、ユーザによって要求されたＷｉｋｉページの各インスタンスごとに作成される。ページ・インスタンスは、特定のページ・ビューと、そのページの関連データ・ハブ・インスタンスを参照するために使用される。所与のページに関連するクライアント上の要求またはイベントがサーバに送信されると、サーバはその所与のページに関連する指定のデータ・ハブ・インスタンスをロードする。
【０１５９】
換言すれば、データ・ハブのインスタンスは、クライアントによって要求されたＷｉｋｉページの各インスタンスごとにサーバ上に作成される。ページ・インスタンスがクライアント上にロードされ表示された後、クライアント上のそのページに関するデータ・ハブ・インスタンスはもはや必要ではない。データ・ハブ・インスタンスは、図１の記憶装置１０８などの記憶装置に保存される。ユーザが新しい入力を入力するか、またはそのページに関するアクションを要求すると、特定のページ・ビューに関連するデータ・ハブの前にシリアル化されたインスタンスをリロードすることにより、特定のページ・ビューに関するＷｉｋｉ環境がサーバ上に再現される。データ・ハブの保存されリロードされたインスタンスは、クライアント・ブラウザ上の特定のページの現行状態を反映する。データ・ハブ２１００は、属性／オブジェクト変数および１組のメソッドを含む。
【０１６０】
この１組のメソッドは、５通りのカテゴリまたは分類のメソッドを含む。このメソッドのカテゴリは、データ・ハブ管理２１０２、プロデューサおよびコンシューマ２１０４、トピック２１０６、イベント処理２１０８、ならびにコマンド管理２１１０である。これらの例示的な例では、データ・ハブ２１００など、１つまたは複数のオブジェクトに関連するアクションまたはプロセスを実行するためのプロシージャ、関数、またはルーチンである。
【０１６１】
データ・ハブ２１００に関する１組のメソッドは、データ・ハブ・インスタンスの保存、データ・ハブ・インスタンスの検索／リロード、コマンドの追加、プロシージャの追加、プロシージャの除去などの様々な機能を実行するためのメソッドに関するメソッド・インターフェースを含む。たとえば、データ・ハブ管理２１０２という１組のメソッド・インターフェースは、図１の記憶装置１０８などのデータ記憶装置からデータ・ハブの保管インスタンスを検索するためのメソッドに関する「ｐｕｂｌｉｃ  ｓｔａｔｉｃ  ｆｕｎｃｔｉｏｎ  ｉｎｉｔ  （ｐａｇｅ  ｉｎｓｔａｎｃｅ）」というメソッド・インターフェースを含む。
【０１６２】
また、データ・ハブ２１００は、Ｗｉｋｉ環境およびクライアント環境内でコマンド間のイベントの転送を可能にするために、データ・ハブ・トピック・オブジェクト２１１２およびデータ・ハブ・イベント・オブジェクト２１１４上でメソッドを呼び出す。データ・ハブ・トピック・オブジェクト２１１２は、主として、コンシューマ・コマンドが加入できるトピックを定義するデータ・オブジェクトである。これらの例示的な例では、コンシューマは、コマンド／コンポーネントの特定の機能を実行するために、ユーザ、他のコマンド、他のコンポーネント、または他のオブジェクト、あるいはこれらの組み合わせから、データ、イベント、または入力を必要とするかまたは要求するかあるいはその両方を行う、コマンド、コンポーネント、またはオブジェクトである。これらの例示的な例では、プロデューサは、ユーザ、他のコマンド、他のコンポーネント、または他のオブジェクト、あるいはこれらの組み合わせからのデータ、イベント、または出力を提供する、コマンド、コンポーネント、またはオブジェクトである。
【０１６３】
データ・ハブ・イベント・オブジェクト２１１４は、イベント・オブジェクトに関連する所与のイベント・トピックに関する、プロデューサによって作成されコンシューマに送信される、データ・ハブ・イベントを定義するデータ・オブジェクトである。
【０１６４】
図２３は、本発明の例示的な一実施形態によるクライアント側データ・ハブ・オブジェクトを例示する図である。データ・ハブ２２００は、図６のデータ・ハブ６３４および図１４のデータ・ハブ１４１０などのデータ・ハブ・オブジェクトである。この例示的な例では、データ・ハブ２２００はＪａｖａＳｃｒｉｐｔで実装されたクライアント側データ・ハブ・オブジェクトである。
【０１６５】
データ・ハブ２２００は、Ｗｉｋｉコンポーネントがサーバ上の他のＷｉｋｉコンポーネントおよびクライアント上の他のＷｉｋｉコンポーネントと対話できるようにするクライアント・データ・ハブである。また、データ・ハブ２２００は、Ｗｉｋｉコンポーネントが処理のためにクライアント上で生成されたイベントをサーバに送信できるようにする。
【０１６６】
データ・ハブ２２００は、属性および１組のメソッドを含む。この例示的な例では、この１組のメソッドは、４通りのカテゴリのメソッドを含む。このメソッドのカテゴリは、プロデューサおよびコンシューマ２２０２、トピック２２０４、イベント処理２２０６、ならびにコマンド管理２２０８である。
【０１６７】
また、クライアント側データ・ハブ２２００は、Ｗｉｋｉ環境およびクライアント環境内でコマンド間のイベントの転送を可能にするために、クライアント側データ・ハブ・トピック・オブジェクト２２１０およびクライアント側データ・ハブ・イベント・オブジェクト２２１２上でメソッドを呼び出す。データ・ハブ・トピック・オブジェクト２２１０は、図２２のデータ・ハブ・トピック・オブジェクト２１１２などのデータ・ハブ・トピック・オブジェクトである。データ・ハブ・イベント・オブジェクト２２１２は、図２２のデータ・ハブ・イベント・オブジェクト２１１４などのデータ・ハブ・イベント・オブジェクトである。
【０１６８】
Ｗｉｋｉページ・レイアウトは、本発明の１つまたは複数の実施形態では静的である場合が多い。さらに、Ｗｉｋｉページ・レイアウトの性的特徴と１組のページの各ページのレイアウトを個別に変更しなければならないという要件により、それらがすべて同じ特定のレイアウトを共用するようにＷｉｋｉページまたは１組のＷｉｋｉサブページのレイアウトを編集することは非常に時間のかかるものになる。Ｗｉｋｉページ・レイアウトは、すべてのコンポーネントが所定の位置にある完全なＷｉｋｉページを作成するために使用されるページ・コンポーネントのアセンブリを示すページである。図６に戻って説明すると、ページ６００は、ヘッダ６０４、フッタ６０６、左マージン６０８、右マージン６１０、メニュー６１２、およびボディ６１４などのページ・コンポーネントの例を示している。ＷｉｋｉページはＷｉｋｉアプリケーション内のページである。したがって、ユーザが新しいＷｉｋｉページを作成するのと同じように単純に新しいＷｉｋｉページ・レイアウトを作成できるように、Ｗｉｋｉページ・レイアウトを動的に構成可能なものにし、Ｗｉｋｉページ内に定義させることは、望ましいことになるであろう。また、関連Ｗｉｋｉページの集合に同じＷｉｋｉレイアウト・ページを共用させることも、望ましいことになるであろう。
【０１６９】
本発明の例示的な諸実施形態は、Ｗｉｋｉレイアウト・ページのボディにＷｉｋｉページ・コンテンツを埋め込むことを可能にする。Ｗｉｋｉレイアウト・ページは、Ｗｉｋｉページに関するページ・レイアウトを定義するＷｉｋｉページである。さらに、具体的なレイアウトをＷｉｋｉページに関連付けることができる。ユーザは、単純に新しいＷｉｋｉページを作成し、新たに作成したＷｉｋｉページのコンテンツを編集することにより、新しいＷｉｋｉレイアウト・ページを作成することができる。新たに作成したＷｉｋｉページの各ページ・コンポーネントのデフォルト・コンテンツは、コマンドがコンテンツを提供するページ・コンポーネントにちなんで命名されたＷｉｋｉコマンドによって提供される。Ｗｉｋｉコマンドは、Ｗｉｋｉアプリケーションの機能またはプロセスあるいはその両方を実装するために使用されるコマンドである。たとえば、本発明の例示的な一実施形態では、Ｗｉｋｉコマンドは、ヘッダ、フッタ、メニュー、左マージン、および右マージンと命名される。
【０１７０】
ユーザは、ＨＴＭＬページ・フローを使用することにより、ユーザが希望するＷｉｋｉページ上の任意の位置にこれらのＷｉｋｉコマンドからのコンテンツを含めることができる。ＨＴＭＬページ・フローは、ページ・ソースを含むＨＴＭＬタグに反応して、ブラウザがＷｅｂページのコンテンツをどのように位置決めするかである。たとえば、Ｗｅｂページのソース内にＨＴＭＬの＜ＴＡＢＬＥ＞タグがあると、ブラウザは、上から下に垂直に流れる行と列に分割された表形式表示を描画する。したがって、ユーザは、任意の他のＷｉｋｉページに使用されているものと同じ手法を使用してＷｉｋｉレイアウト・ページを編集することができる。ユーザは、ユーザが適合すると見なすように、その他の静的ＨＴＭＬコンテンツおよびその他の動的Ｗｉｋｉコマンドを新たに作成したＷｉｋｉページ内に含めることができる。したがって、本発明の例示的な諸実施形態により、ユーザは、たとえば、会社のロゴまたはイメージなど、どのコンテンツがヘッダ内に現れるか、ならびにメニューがどこに現れるかなど、共通外観およびレイアウトを共用するページを作成することができる。さらに、本発明の例示的な諸実施形態により、ユーザは、ユーザが実行することに精通しているもの、すなわち、Ｗｉｋｉページの作成および編集と一貫する単純な方法でこの共通外観を作成することができる。
【０１７１】
ユニバーサル・リソース・ロケータを入力することにより、ユーザがＷｉｋｉページを要求するときはいつでも、Ｗｉｋｉページ・テーブルがチェックされ、そのページまたは１組のサブページに関連するレイアウト・ページ名が存在するかどうかを判断する。レイアウト・ページが要求されたＷｉｋｉページに関連付けられている場合、レイアウト情報が追加され、要求されたＷｉｋｉページをラップアラウンドして、Ｗｉｋｉページが描画され、結合ページを形成する。
【０１７２】
本発明の例示的な一実施形態では、特殊テンプレート変数がＷｉｋｉレイアウト・ページに含まれる。特殊テンプレート変数は、新しいＷｉｋｉレイアウト・ページが使用されるときに、ターゲットＷｉｋｉページのコンテンツによって置き換えられる。これらの例では、テンプレート変数は文字列変数である。この特殊テンプレート変数に命名するときに、ユーザは、可能な限り新たに要求されたページ上の他のテキストとの衝突を回避したいと希望する。したがって、特殊テンプレート変数の名前は、典型的には、自然に発生しそうもないパターンである。本発明の例示的な一実施形態では、特殊テンプレート変数は％＿ＢＯＤＹ＿％と呼ばれる。特殊テンプレート変数は、Ｗｉｋｉレイアウト・ページのボディ・フィールド内に位置する。ボディ・フィールドは、図５のオブジェクト変数５２８などのＷｉｋｉレイアウト・ページ・オブジェクトのオブジェクト変数である。ボディ・フィールドは、Ｗｉｋｉページの生の未描画コンテンツを含む。
【０１７３】
本発明の例示的な諸実施形態は、あるＷｉｋｉページが祖先ＷｉｋｉページからそのＷｉｋｉページのレイアウトを継承することを可能にする。各Ｗｉｋｉページは、そのＷｉｋｉページに関する祖先Ｗｉｋｉページであって、そのＷｉｋｉページに関連するＷｉｋｉページのリストを有する。祖先Ｗｉｋｉページは、ページ命名階層内のより上位レベルに発生するＷｉｋｉページである。たとえば、あるＷｉｋｉページが「ＬｅｖｅｌＯｎｅ／ＬｅｖｅｌＴｗｏ」と命名され、「ＬｅｖｅｌＯｎｅ」というＷｉｋｉページが存在する場合、「ＬｅｖｅｌＯｎｅ」というＷｉｋｉページは「ＬｅｖｅｌＯｎｅ／ＬｅｖｅｌＴｗｏ」というＷｉｋｉページの祖先と見なされる。この１組の祖先Ｗｉｋｉページのリストは、Ｗｉｋｉページ・オブジェクトのフィールドに保管される。１組の祖先Ｗｉｋｉページは１つまたは複数の祖先Ｗｉｋｉページを含むことができる。本発明の例示的な一実施形態では、そのフィールドはパス・フィールドと呼ばれる。Ｗｉｋｉページ・レイアウト修飾子（specifier）を含む祖先Ｗｉｋｉページのリスト内で逆階層順に第１のＷｉｋｉページを検出する照会が使用される。本発明の例示的な一実施形態では、図５のデータベース５２４などのデータベース内のＷｉｋｉ＿ｐａｇｅｓテーブルと照らし合わせて、祖先ページのリストがチェックされる。Ｗｉｋｉ＿ｐａｇｅｓテーブルは項目のリストを含む。各項目は、あるＷｉｋｉページと、その特定のＷｉｋｉページに関連する任意のＷｉｋｉレイアウト・ページとを含む。祖先Ｗｉｋｉページのリスト内の各Ｗｉｋｉページは、Ｗｉｋｉ＿ｐａｇｅｓテーブル内の項目と比較される。祖先Ｗｉｋｉページのリスト内のＷｉｋｉページと一致する項目が、関連Ｗｉｋｉレイアウト・ページを有することが判明すると、継承すべきターゲットＷｉｋｉページについて、指定のレイアウト・ページが選択される。
【０１７４】
次に図２４は、本発明の例示的な一実施形態によりＷｉｋｉレイアウト・ページのボディにＷｉｋｉページ・コンテンツを埋め込むプロセスを例示するブロック図である。図２４のこのプロセスは、図４のＷｉｋｉエンジン４０２などのＷｉｋｉエンジンによって実装することができる。現行ページ・オブジェクト２３０２は、図５のＷｉｋｉページ５２６などのＷｉｋｉページ・オブジェクトである。ボディ２３１０は、図５のオブジェクト変数５２８などのＷｉｋｉページ・オブジェクトのオブジェクト変数である、Ｗｉｋｉページのボディ・フィールドである。レイアウト・ページ・オブジェクト２３０４は、ページ・コンポーネント・ヘッダ２３２２、メニュー２３２４、右マージン２３２６、左マージン２３２８、フッタ２３３０、およびボディ２３２０を含む。レイアウト・ページ・オブジェクト２３０４内のページ・コンポーネントは、図５のオブジェクト変数５２８など、レイアウト・ページ・オブジェクトのオブジェクト変数である、レイアウト・ページ・オブジェクト２３０４のボディ・フィールドに含まれる。現行ページ・オブジェクト２３０２のボディ・フィールドのコンテンツであるボディ２３１０は、レイアウト・ページ・オブジェクト２３０４のボディ・コンポーネントであるボディ２３２０内に置かれる。次に、ページ・コンポーネント・ヘッダ２３２２、メニュー２３２４、右マージン２３２６、左マージン２３２８、フッタ２３３０、およびボディ２３２０を含む、レイアウト・ページ・オブジェクト２３０４のボディ・フィールドのコンテンツは、現行ページ・オブジェクト２３０２のボディ・フィールドであるボディ２３１０内に置かれる。
【０１７５】
次に現行ページ・オブジェクト２３０２は結合ページ２３０６として描画される。現行ページ２３０６は、現行ページ・オブジェクト２３０２とレイアウト・ページ・オブジェクト２３０４を結合した結果である。結合ページ２３０６は、レイアウト・ページ・オブジェクト２３０４からのレイアウト・ページ・コンポーネント・ヘッダ２３２２、メニュー２３２４、右マージン２３２６、左マージン２３２８、およびフッタ２３３０とともに、ボディ２３１０によって表される現行ページ・オブジェクト２３０２のボディ・フィールドのコンテンツを含む。
【０１７６】
従来のＷｉｋｉアプリケーションでは、Ｗｉｋｉページ・レイアウトの特定のページ・コンポーネントを条件付きで示したり隠したりできるように、Ｗｉｋｉレイアウト・ページを動的に構成可能なものにするためのメソッドは、現在のところ、まったく存在しない。Ｗｉｋｉページ・レイアウトは、すべてのコンポーネントが所定の位置にある完全なＷｉｋｉページを作成するために使用されるページ・コンポーネントのアセンブリを示すページである。ＷｉｋｉページはＷｉｋｉアプリケーション内のページである。
【０１７７】
本発明の例示的な諸実施形態は、Ｗｉｋｉページ・レイアウト・コンポーネントをプログラムにより隠したり示したりすることができる。Ｗｉｋｉレイアウト・ページは１組のページ・コンポーネントに分割される。このページ・コンポーネントは、ヘッダ、メニュー、左、右、ボディ、およびフッタ・コンポーネントと呼ばれる。図６は、ヘッダ６０４、フッタ６０６、左マージン６０８、右マージン６１０、メニュー６１２、およびボディ６１４などのページ・レイアウト・コンポーネントの例を示している。各コンポーネントのコンテンツはＷｉｋｉコマンドによって生成される。Ｗｉｋｉコマンドは、Ｗｉｋｉアプリケーションの機能またはプロセスあるいはその両方を実装するために使用されるコマンドである。本発明の例示的な一実施形態では、Ｗｉｋｉコマンドは、それらがコンテンツを生成するページ・コンポーネントと同じ名前を有する。Ｗｉｋｉページ・レイアウトは、埋め込みＷｉｋｉコマンド・マークアップを有する単純なＨＴＭＬマークアップを含む。そのページが描画されると、Ｗｉｋｉコマンドは、ページ・コンポーネントがＷｉｋｉコマンドによって生成されたコンテンツを表示しなければならないかどうかを制御するＷｉｋｉページ設定について問い合わせる。
【０１７８】
本発明の例示的な一実施形態では、Ｗｉｋｉページ設定は、ユーザがＷｉｋｉページを設定するときにユーザによって編集可能なチェックボックスとして実装される。チェックボックスにチェックを付け、チェックをはずすことにより、ユーザは、様々なページ・コンポーネント、ならびに、ページ・コメント、添付物、および電子メールの可視性を制御する。この設定は、それに照らし合わせて表示論理がチェックできるビット・マスクとして「コンポーネント」列において、図５のデータベース５２４などのデータベースの一部であるＷｉｋｉ＿ｐａｇｅｓテーブルに保存される。このページ・テーブル内の項目は、アイデンティティ（ＩＤ）、アカウント、タグ、時間、ボディ、所有者アイデンティティ（所有者ＩＤ）、ｍｏｄｉｆｉｅｄ＿ｂｙ、ｉｓＬａｔｅｓｔ、レイアウト、ｉｓＬａｙｏｕｔ、ｉｓＥｄｉｔｉｎｇ、ｃｏｍｍｅｎｔＯｎ、セクション、パス、属性（ａｔｔｒｉｂ）、およびエラーというフィールドを含む。ビット・マスクは、各ビットが別個の変数に関するｙｅｓ値またはｎｏ値（１または０）を表す２進数である。高速ビット単位動作を使用することにより、特定変数の値を決定または変更することができる。したがって、ビット・マスクは、このような変数を保管する、小型かつ効率的な手段である。
【０１７９】
次に図２５を参照すると、本発明の例示的な一実施形態によりページ・コンポーネントのコンテンツの可視性を決定するためのチェックボックスを描写するブロック図が描写されている。可視性設定２４０２は、それによりユーザが様々なページ・レイアウト・コンポーネントの可視性を制御できる表示領域である。可視性設定２４０２は、Ｗｉｋｉページのコンテンツの一部として実装することができる。本発明の例示的な代替一実施形態では、可視性設定２０４２は、クライアント・ブラウザ上のメニュー・オプションとして実装される。ボディ２４０６はチェックボックス２４０８を含む。チェックボックス２４０８は、ヘッダ、メニュー、左、右、およびフッタ・レイアウト・ページ・コンポーネント用のチェックボックスとともに、コメント、添付物、および電子メール用のチェックボックスを含む。チェックボックスにチェックを付けるかまたはチェックをはずすことにより、ユーザは、指名されたレイアウト・ページ・コンポーネントのコンテンツならびにページ・コメント、添付物、および電子メールの可視性を制御することができる。本発明の例示的な一実施形態では、ボックスにチェックを付けると、指名されたレイアウト・ページ・コンポーネントならびにページ・コメント、添付物、および電子メールのコンテンツがクライアント・ブラウザに表示される。このような実装例では、可視性設定２４０４の最上部分は、表示（show）または可視（visible）という単語または同等の意味の何らかのその他の用語を含むことになるであろう。図２５の最上部２４０４は表示という単語を含み、チェックボックスにチェックを付けると、そのレイアウト・ページ・セクションに属すコンテンツがクライアント・ブラウザに表示されることを示している。
【０１８０】
本発明の例示的な代替一実施形態では、可視性設定２４０２のチェックボックスにチェックを付けると、対応するレイアウト・ページ・コンポーネントのコンテンツがクライアント・ブラウザで隠される。このような実装例では、上部領域である最上部２４０４は、たとえば、隠蔽（hide）など、この実装例を示す用語を含むことになるであろう。
【０１８１】
本発明の例示的な一実施形態では、チェックボックス２４０８にチェックを付けたり、チェックをはずした結果は、ビット・マスクとしてデータベースに保管される。表示のためにページを描画するプロセス中に、表示論理はビット・マスクをチェックして、どのコンテンツをクライアント・ブラウザに表示すべきかを判断する。
【０１８２】
次に図２６を参照すると、本発明の例示的な一実施形態によりＷｉｋｉページを作成するためのプロセスの流れ図が描写されている。図２６のプロセスは、図６のＷｉｋｉページ６０２などのＷｉｋｉページを作成するためのものである。図２６のプロセスは、新しいＷｉｋｉページを作成するためにユーザ入力を受信することにより始まる（プロセス・ブロック２５０２）。ユーザは、プロセス・ブロック２５０２でユーザ入力を提供するためのメニューから新しいページ・コマンドを選択するためにクライアント・ブラウザを使用することができる。
【０１８３】
次に、プロセスは、新しいＷｉｋｉページ用の名前を入力するようプロンプトでユーザに指示する（プロセス・ブロック２５０４）。一例では、ページ名は、ＣａｍｅｌＣａｓｅルールに従う英字および数字を含むことができる。また、Ｗｉｋｉのページ名は、階層内のディビジョンまたはレベルを示す「／」という文字も含むことができる。たとえば、新しいＷｉｋｉページは図９のテスト９０４にすることができる。
【０１８４】
次に、プロセスは、編集要求ユニフォーム・リソース・ロケータ（ＵＲＬ）を構築し、対応するハイパーテキスト転送プロトコル（ＨＴＴＰ）要求をサーバに送信する（プロセス・ブロック２５０６）。編集要求は、クライアント・ブラウザ上のＪａｖａＳｃｒｉｐｔ機能によって構築することができ、新しいページ・アクションおよび新しいページ名を指定することができる。
【０１８５】
次に、プロセスは、適切なエディタをロードし、ハイパーテキスト転送プロトコル応答でそのページをクライアント・ブラウザに供給する（プロセス・ブロック２５０８）。プロセス・ブロック２５０８は、図５のＷｉｋｉコントローラ５００によって実装することができる。
【０１８６】
次に、プロセスは、ユーザ変更を受信し、ハイパーテキスト転送プロトコル・フォーム送信をサーバにサブミットする（プロセス・ブロック２５１０）。プロセス・ブロック２５１０は、ユーザがクライアント・ブラウザでＷｉｋｉページを編集し、保存すべきコンテンツをサブミットしたことに応答して発生する可能性がある。
【０１８７】
次に、プロセスは、サブミットされたコンテンツを有するＷｉｋｉページを作成して保存し（プロセス・ブロック２５１２）、その後、プロセスは終了する。プロセス・ブロック２５１２では、Ｗｉｋｉコントローラは、ページ・ハイパーテキスト転送プロトコル要求を処理し、ｃｒｅａｔｅＰａｇｅおよびｓａｖｅメソッドを使用して、Ｗｉｋｉページ・オブジェクトをインスタンス化し、その後、そのＷｉｋｉページ・オブジェクトを保存することができる。図５のＷｉｋｉオブジェクト５０８などのＷｉｋｉページ・オブジェクトは、新しいＷｉｋｉページを表すために、図５のデータベース５２４などのＷｉｋｉページ・データベース・テーブル内に行を作成する。
【０１８８】
次に図２７を参照すると、本発明の例示的な一実施形態によりページを表示するためのプロセスの流れ図が描写されている。プロセスは、Ｗｉｋｉページのユーザ指定ユニフォーム・リソース・ロケータ（ＵＲＬ）を受信し、ハイパーテキスト転送プロトコル要求をサーバに送信することにより始まる（プロセス・ブロック２６０２）。プロセス・ブロック２６０２は、図３のクライアント環境３００でクライアント・ブラウザによって受信することができる。
【０１８９】
次に、プロセスは、要求を処理し、Ｗｉｋｉページ上のオブジェクトをインスタンス化し、Ｗｉｋｉページを処理し、ハイパーテキスト転送プロトコル応答としてＷｉｋｉページのコンテンツをクライアント・ブラウザに描画し（プロセス・ブロック２６０４）、その後、プロセスは終了する。プロセス・ブロック２６０４は、図５のＷｉｋｉコントローラ５００によって実装することができる。Ｗｉｋｉコントローラは、Ｗｉｋｉオブジェクト上でｓｈｏｗＰａｇｅメソッドを呼び出すことができる。ｓｈｏｗＰａｇｅメソッドは、Ｗｉｋｉページ・データベース・テーブル内の指定の行のＷｉｋｉページ・コンテンツを維持するＷｉｋｉページ・オブジェクトをインスタンス化する。次にＷｉｋｉコントローラは、Ｗｉｋｉページを処理し、そのページのコンテンツをクライアント・ブラウザに描画する、Ｗｉｋｉページ・オブジェクト上のプロセス・メソッドを呼び出す。
【０１９０】
次に図２８を参照すると、本発明の例示的な一実施形態によりページ・ツリー・ビューを生成するためのプロセスの流れ図が描写されている。図２８のプロセスは、図９のページ・ツリー・ビュー９００を作成するために使用することができる。図２８のプロセスは、図５のコマンド５５０内でＰａｇｅＴｒｅｅＣｏｍｍａｎｄによって実装することができる。
【０１９１】
プロセスは、ＰａｇｅＴｒｅｅＣｏｍｍａｎｄがＷｉｋｉページ・データベース・テーブル内のすべての行を読み取り、ページ名列値を抽出することから始まる（プロセス・ブロック２７０２）。ページ名はタグにすることもできる。タグは、Ｗｉｋｉページのコンテンツをカテゴリ化するために使用されるページ名またはラベルである。データベースは、図５のデータベース５２４などのデータベースにすることができる。
【０１９２】
次に、ＰａｇｅＴｒｅｅＣｏｍｍａｎｄは、ページ・ツリー・ビューを構築するためにページ名値について繰り返す（プロセス・ブロック２７０４）。プロセス・ブロック２７０４中に、ページの階層はノードおよびリーフ・ノードにグループ分けされ、視覚的ツリー構造を形成する。ノードはコンテナとコンテンツ・プロバイダの両方であり、リーフ・ノードはもっぱらコンテンツ・プロバイダのみである。たとえば、ページ名が「／」という文字で終わる場合、そのページは、コンテナおよびコンテンツ・プロバイダとして扱われ、図９のテスト９０４など、包含を表す適切なアイコンで表される。「／」を含むその名前で始まるすべてのＷｉｋｉページ名は、そのページの子孫と見なされる。Ｗｉｋｉページの残りの部分が「／」を含む場合、そのＷｉｋｉページはコンテナおよびコンテンツ・プロバイダとも見なされる。Ｗｉｋｉページの残りの部分が「／」を含まない場合、Ｗｉｋｉページはリーフ・ノードと見なされ、図９のハローワールド９１２などの適切なアイコンで表される。あるページがノードまたはリーフ・ノードであることを指定するために、「／」などの任意の数の異なるページ・インジケータを使用することができる。
【０１９３】
次に、ＰａｇｅＴｒｅｅＣｏｍｍａｎｄはページ・ツリー・ビューのハイパーテキスト・マークアップ言語表現を返し（プロセス・ブロック２７０６）、その後、プロセスは終了する。ページ・ツリー・ビューのハイパーテキスト・マークアップ言語表現は、ユーザがＷｉｋｉページをナビゲートする際に使用するために、クライアント・ブラウザ上に表示される。
【０１９４】
次に図２９を参照すると、本発明の例示的な一実施形態によりライブ・コンテンツをドラッグするためのプロセスの流れ図が示されている。本発明の例示的な諸実施形態により、動的コンテンツをＷｉｋｉページ上にドラッグすることができ、動的コンテンツがページ上にドラッグされるとコンテンツのサンプルが提供される。ＸＭＬＨｔｔｐＲｅｑｕｅｓｔを使用して、Ｗｉｋｉコンポーネントはリモートで呼び出され、コンテンツはドラッグ・ビジュアル（drag visual）としてＸＭＬＨｔｔｐＲｅｓｐｏｎｓｅで返される。要求は、ブラウザ・アカウントからＷｅｂサーバに送信されるデータである。応答は、受信した要求データへの反応（応答）としてＷｅｂサーバからブラウザ・アクションに送信されるデータである。ハイパーテキスト転送プロトコルは、Ｗｅｂサーバとの間で送信される要求および応答に関する特定のフォーマットおよびコンテンツを定義する国際標準である。ＸＭＬＨｔｔｐＲｅｑｕｅｓｔ／Ｒｅｓｐｏｎｓｅは、拡張可能マークアップ言語データ・コンテンツおよび特定の応答フォーマットをサポートする、ハイパーテキスト転送プロトコル要求／応答をさらに専門化したものである。図２９のプロセスは、図７のＷｉｋｉページ７００を使用して実装することができる。
【０１９５】
プロセスは、ドラッグ・アンド・ドロップ動作を実行するためにユーザ入力を受信し、選択されたＷｉｋｉコンポーネントのサンプル出力を要求するサーバにＸＭＬＨｔｔｐＲｅｑｕｅｓｔを送信するＪａｖａＳｃｒｉｐｔ機能を呼び出すことにより始まる（プロセス・ブロック２８０２）。プロセス・ブロック２８０２のユーザ入力は、ユーザが図７のアイキャッチャ７０８などのアイコンをパレット７０２からＷｉｋｉページ７００のボディ７０４上にドラッグすることによって生成することができる。プロセス・ブロック２８０２のプロセスは、図３のクライアント環境３００でクライアント・ブラウザによって受信することができる。
【０１９６】
次に、プロセスは、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔを処理し、選択されたＷｉｋｉコンポーネントに関するＷｉｋｉコマンド・サブクラスのインスタンスを作成し、ドラッグしたコンテンツを検索するためのメソッドを呼び出す（プロセス・ブロック２８０４）。プロセス・ブロック２８０４中に、図５のＷｉｋｉコントローラ５００は、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔを処理し、Ｗｉｋｉコマンド・オブジェクト・インスタンス上のｇｅｔＤｒａｇＣｏｎｔｅｎｔなどのメソッドを呼び出す前にＷｉｋｉコマンド・サブクラスのインスタンスを作成するＡＪＡＸフォーマッタにその要求を経路指定することができる。ＡＪＡＸフォーマッタは、図４の要求ハンドラ４０４などの要求ハンドラの一部であり、図５のＷｉｋｉコントローラ５００の拡張部分と見なされる。前に記載したように、図５のルータ５０２は、着信要求をデコードし、その要求を正しい要求ハンドラに経路指定する。ＡＪＡＸフォーマッタは要求ハンドラの１つである。
【０１９７】
次に、プロセスは、Ｗｉｋｉオブジェクトから現行Ｗｉｋｉページ・インスタンスを検索し、描画した出力をＸＭＬＨｔｔｐＲｅｓｐｏｎｓｅでクライアント・ブラウザに返す前にｒｅｎｄｅｒメソッドを呼び出す（プロセス・ブロック２８０６）。プロセス・ブロック２８０６のプロセスは、ＡＪＡＸフォーマッタによって実行することができ、ｇｅｔＤｒａｇＣｏｎｔｅｎｔ呼び出しの結果をｒｅｎｄｅｒＦｒａｇｍｅｎｔなどのメソッドに渡すことができる。
【０１９８】
次に、プロセスは、ＸＭＬＨｔｔｐＲｅｓｐｏｎｓｅを処理し、ハイパーテキスト・マークアップ言語ドラッグ・コンテンツを抽出して表示し（プロセス・ブロック２８０８）、その後、プロセスは終了する。プロセス・ブロック２８０８のプロセスは、クライアント・ブラウザ上で非同期ＪａｖａＳｃｒｉｐｔコードによって実行される。ＪａｖａＳｃｒｉｐｔコードは、ドラッグ・コンテンツを半透明に出現させるカスケーディング・スタイル・シート（ＣＳＳ：cascading style sheet）スタイルを使用することができる。応答が処理され、抽出され、表示されると、プロセスの制御をドラッグ・サポートに手渡すことができる。
【０１９９】
ドラッグ・サポートは、マウス移動イベントに応答するイベント駆動型ＪａｖａＳｃｒｉｐｔコードで構成される。ユーザがマウス・ボタンを押し下げられて、マウスを移動する間、ブラウザＪａｖａＳｃｒｉｐｔランタイムはマウス移動イベントを始動する。ドラッグ・サポートは、マウス移動イベントを処理するために呼び出されたマウス移動イベント・ハンドラＪａｖａＳｃｒｉｐｔ機能を実装する。ドラッグ・サポートは、ブラウザのＪａｖａＳｃｒｉｐｔドキュメント・オブジェクト・モデル（ＤＯＭ）アプリケーション・プログラミング・インターフェース（ＡＰＩ）機能を使用して、マウス・カーソルの現行位置を決定する。次に、ドラッグ・サポートは、ドキュメント・オブジェクト・モデル・アプリケーション・プログラミング・インターフェース機能を使用して、ＡＪＡＸ要求からｇｅｔＤｒａｇＣｏｎｔｅｎｔに返された半透明視覚などのドラッグ・コンテンツの位置を設定する。次に、プロセスは、ユーザがマウス・ボタンを押し下げた状態で保持する限り繰り返され、マウスを移動し続ける。ユーザがマウス・ボタンを解除すると、ブラウザのＪａｖａＳｃｒｉｐｔランタイムによってマウス・アップ・イベントが始動される。ドロップ・サポートは、マウス・アップ・イベントを処理するために呼び出されたマウスアップ・イベント・ハンドラＪａｖａＳｃｒｉｐｔ機能を実装する。ドロップ・サポートは、ブラウザのドキュメント・オブジェクト・モデル・アプリケーション・プログラミング・インターフェース機能を使用して、マウス・カーソルの現行位置を設定する。次に、ドロップ・サポートは、コンテンツをＷｉｋｉページに挿入させるために、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔとサーバに送信する。
【０２００】
次に図３０を参照すると、本発明の例示的な一実施形態によりＷｉｋｉページのコンテンツを結合するためのプロセスの流れ図である。補員発明の例示的な諸実施形態のアプリケーションは、様々なページ上で作成されたコンテンツを合成するためにパワフルで一貫した方法を必要とする。Ｗｉｋｉコンポーネントは、２つの「｛」文字と、その直後に続くＷｉｋｉコンポーネント名と、それに続くホワイト・スペースと、さらにそれに続く「ｎａｍｅ＝“ｖａｌｕｅ”」構文内の任意選択のスペースで分離された引数から構成される、「ｍａｒｋｄｏｗｎ」構文を介してＷｉｋｉページ・ソースに含まれる。たとえば、｛｛ＩｍｐｏｒｔＰａｇｅ  ｐａｇｅ＝“ＨｏｍｅＰａｇｅ”／｝｝では、「ＩｍｐｏｒｔＰａｇｅ」はＷｉｋｉコンポーネントの名前である。任意のＷｉｋｉページのコンテンツは、Ｗｉｋｉコンポーネントと同じＷｉｋｉ「ｍａｒｋｄｏｗｎ」構文を使用して、他のページ内に含めることができる。「ＨｏｍｅＰａｇｅ」というＷｉｋｉページのコンテンツを現行ページに含めるために、Ｗｉｋｉユーザは、｛｛ＨｏｍｅＰａｇｅ／｝｝と入力するだけで良く、このＨｏｍｅＰａｇｅコンテンツはインライン展開されることになる。
【０２０１】
図３０のプロセスは、図１０のＷｉｋｉページ１０００などの複合コンテンツ上で実装することができる。プロセスは、Ｗｉｋｉページ・ソースを、静的テキスト・コンテンツとＷｉｋｉコンポーネントを表す構文解析フラグメント・オブジェクトに構文解析することにより始まる（プロセス・ブロック２９０２）。プロセス・ブロック２９０２のプロセスは、図５のＷｉｋｉコマンド・コンテキスト５４４などのＷｉｋｉコマンド・コンテキスト・オブジェクトによって実装される。プロセス・ブロック２９０２中に、そのページは、Ｗｉｋｉページ・コンテンツのメモリ内の内部表現である抽象構文ツリー（ＡＳＴ）と呼ばれるツリー構造に編成された構文解析フラグメントに構文解析される。これで、今後のステップの動作は、ツリーを走査し、ツリー・ノード上で動作を実行することにより、ページ・コンテンツを操作することができる。
【０２０２】
次に、プロセスは、Ｗｉｋｉページ上のＷｉｋｉコンポーネントのリストについて繰り返す、ｌｏａｄ  ｐｌｕｇｉｎメソッドを呼び出す（プロセス・ブロック２９０４）。ｌｏａｄＰｌｕｇｉｎｓなどのメソッドは、各Ｗｉｋｉコンポーネントの機能性を実装する適切なＷｉｋｉコマンド・サブクラスをインスタンス化するために各Ｗｉｋｉコンポーネントごとに呼び出される。プロセス・ブロック２９０４は、ページ・コンテンツのメモリ内表現の作成をさらに改良したものであり、過渡的プロセスである。
【０２０３】
次に、プロセスは、Ｗｉｋｉオブジェクトのｌｏａｄ  ｃｏｍｍａｎｄメソッドを呼び出して、Ｗｉｋｉコマンド・クラス・ロードを実行する。ｌｏａｄ  ｃｏｍｍａｎｄメソッドが適切なＷｉｋｉコマンド・クラスを検出し損なった場合、このメソッドは例外をスローする（throw）（プロセス・ブロック２９０６）。プロセス・ブロック２９０６のｌｏａｄ  ｐｌｕｇｉｎメソッドはｌｏａｄＰｌｕｇｉｎにすることができる。プロセス・ブロック２９０６は、サポート・コマンド・オブジェクトをＷｉｋｉコンポーネント構文解析フラグメントに関連付けることにより、Ｗｉｋｉページのメモリ内表現の作成を完了する。
【０２０４】
次に、プロセスは、例外をキャッチし、Ｗｉｋｉオブジェクトのｐａｇｅ  ｅｘｉｓｔｓメソッドを呼び出して、指名されたＷｉｋｉコンポーネントが実際にＷｉｋｉページであるかどうかを判断する。有効なページ名がインポート・ページ・コンポーネントにロードされる（プロセス・ブロック２９０８）。プロセス・ブロック２９０８では、ｐａｇｅＥｘｉｓｔｓなどのメソッドが有効なページを返す場合、Ｗｉｋｉコマンド・コンテキストは、ｌｏａｄＰｌｕｇｉｎメソッドを呼び出して、Ｗｉｋｉページ名を提出するインポート・ページ・コンポーネントをロードする。インポート・ページ・コンポーネントは、指名されたページのコンテンツを埋め込むように機能する。
【０２０５】
次に、プロセスは、インポート・ページ・コンポーネントをＷｉｋｉコマンド・コンテキスト・コンポーネントのリストに追加する（プロセス・ブロック２９１０）。次に，プロセスは、描画中に指名されたＷｉｋｉページのコンテンツにインポート・ページ・コンポーネントを展開し（プロセス・ブロック２９１２）、その後、プロセスは終了する。プロセス・ブロック２９１２では、プロセスは、ｉｍｐｏｒｔＰａｇｅコマンド・インスタンスをコンポーネントのリストに追加する。
【０２０６】
次に図３１を参照すると、本発明の例示的な一実施形態によりコマンドを編集するためのプロセスの流れ図が示されている。図３１のプロセスは、図８のＷｉｋｉページ８００などのページ上で実装することができる。プロセスは、Ｗｉｋｉページを編集するためのユーザ入力を受信したことに応答して、Ｗｉｋｉコンポーネントのパレットを表示することから始める（プロセス・ブロック３００２）。プロセス・ブロック３００２では、ユーザは、非常に簡単に完了チェックボックスを選択することにより、ユーザ入力を提供することができる。パレットは、図８のパレット８０２などのパレットである。Ｗｉｋｉページ８００などのページは、そのコンポーネントを選択し編集できるという視覚的合図をユーザに与える、任意の数のアイキャッチャを含むことができる。プロセス・ブロック３００２は、図３のクライアント環境３００でクライアント・ブラウザによって受信することができる。
【０２０７】
次に、プロセスは、ユーザがアイキャッチャを選択したことに応答して、選択されたＷｉｋｉコンポーネントに関するプロパティ・エディタを検索するために、ＸＭＬＨｔｔｐＲｅｑｕｅｓｔをサーバに送信するＪａｖａＳｃｒｉｐｔ機能を呼び出す（プロセス・ブロック３００４）。アイキャッチャは、図７のアイキャッチャ７０８などのＧｏｏｇｌｅ（商標）マップ・アイコンにすることができる。
【０２０８】
次に、プロセスは、要求を処理し、ＡＪＡＸフォーマッタに処理を委任する。ＡＪＡＸフォーマッタは、Ｗｉｋｉコマンド・コンテキスト・オブジェクトを作成し、プロパティ・エディタＷｉｋｉコンポーネントをロードすることを要求する関連ｌｏａｄ  ｐｌｕｇｉｎメソッドを呼び出す（プロセス・ブロック３００６）。プロセス・ブロック３００６は、図５のＷｉｋｉコントローラ５００によって実行される。
【０２０９】
次に、プロセスは、選択されたＷｉｋｉコンポーネント名を提出するプロパティ・エディタ・コンポーネントのｄｒａｗメソッドを呼び出す。ｄｒａｗメソッドの結果は、ＸＭＬＨｔｔｐＲｅｓｐｏｎｓｅでクライアントに返される（プロセス・ブロック３００８）。
【０２１０】
次に、プロセスは、選択されたコンポーネントに関するプロパティ・エディタのハイパーテキスト・マークアップ言語およびＪａｖａＳｃｒｉｐｔを含むＸＭＬＨｔｔｐＲｅｓｐｏｎｓｅを処理し、プロパティ・エディタを視覚化する（プロセス・ブロック３０１０）。処理は非同期で実行され、プロパティ・エディタはカスケーディング・スタイル・シート（ＣＳＳ）を使用して視覚化することができる。プロセス・ブロック３０１０のプロセスは、図５のＷｉｋｉコントローラ５００内のＡＪＡＸフォーマッタによって実装することができる。
【０２１１】
次に、プロセスは、プロパティ・エディタでユーザ入力を受信し、サーバに対してＸＭＬＨｔｔｐＲｅｑｕｅｓｔを発行して、選択されたＷｉｋｉコンポーネントのプロパティを更新する（プロセス・ブロック３０１２）。プロセス・ブロック３０１２は、プロパティ・エディタおよび対応するクライアント・ブラウザによって実行される。
【０２１２】
次に、プロセスは、要求を処理し、ＡＪＡＸフォーマッタに処理を委任する。ＡＪＡＸフォーマッタは、Ｗｉｋｉコマンド・コンテキスト・オブジェクトを作成し、ｕｐｄａｔｅコマンドＷｉｋｉコンポーネントをロードすることを要求する関連ｌｏａｄ  ｐｌｕｇｉｎメソッドを呼び出す（プロセス・ブロック３０１４）。次に、プロセスは、選択されたＷｉｋｉコンポーネント名を提出するｕｐｄａｔｅコマンド・コンポーネントのｄｒａｗメソッドを呼び出す。ｕｐｄａｔｅコマンド・コンポーネントは、サーバ上でＷｉｋｉコンポーネント・ソースの「ｍａｒｋｄｏｗｎ」を更新し、成功または失敗を示すＸＭＬＨｔｔｐＲｅｓｐｏｎｓｅを返し（プロセス・ブロック３０１６）、その後、プロセスは終了する。プロセス・ブロック３０１６のプロセスは、図５のＷｉｋｉコントローラ５００内のＡＪＡＸフォーマッタによって実装することができる。
【０２１３】
したがって、本発明の例示的な諸実施形態は、アプリケーションＷｉｋｉに関するコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードを提供する。本発明の例示的な諸実施形態により、ユーザは、Ｗｉｋｉページを容易に作成し管理することができる。ユーザは、ライブ・コンテンツをドラッグ・アンド・ドロップすることにより、Ｗｉｋｉページを編集することができる。Ｗｉｋｉページは、ユーザによって要求された通りに結合することができ、プロパティ・エディタを使用して編集することができる。Ｗｉｋｉページは、Ｗｉｋｉをナビゲートするためにノードおよびリーフ・ノードを含むページ・ツリー・ビューに保存される。
【０２１４】
次に図３２を参照すると、本発明の例示的な一実施形態によりＷｉｋｉコマンドを描画するためのプロセスの流れ図が描写されている。図３２のプロセスは、図４のＷｉｋｉエンジン４０４で実装することができる。Ｗｉｋｉページは、いくつかのＷｉｋｉコマンドを含むことができる。各Ｗｉｋｉコマンドは他のＷｉｋｉコマンドも含むことができる。図３２のプロセスは、ＷｉｋｉエンジンがＷｉｋｉコマンド上でｒｅｎｄｅｒメソッドを呼び出すことから始まる（プロセス・ブロック３１０２）。Ｗｉｋｉエンジンは、図４のＷｉｋｉエンジン４０２などのエンジンにすることができる。ｒｅｎｄｅｒメソッドは、図１２のｒｅｎｄｅｒ１２２６などのページ処理メソッドにすることができる。
【０２１５】
次に、プロセスは、ｏｐｅｎメソッドを呼び出す（プロセス・ブロック３１０４）。プロセス・ブロック３１０４のｏｐｅｎメソッドは、Ｗｉｋｉコマンドが描画コンテンツの表示を開始するためのメカニズムを提供する。たとえば、コマンドは、＜ＳＰＡＮ＞Ｆｏｒｅｃａｓｔコマンドなど、ハイパーテキスト・マークアップ言語の「開始（opening）」フラグメントを生成することができる。ＳＰＡＮの終了フラグメントは、ｃｌｏｓｅメソッドを使用して生成されることになる。次に、プロセスは、Ｗｉｋｉコマンドが編集を許可するかどうかについて判断を行う（プロセス・ブロック３１０６）。Ｗｉｋｉコマンドは、ａｌｌｏｗＥｄｉｔの設定を無効にし、そのコマンドがコマンドのコンテンツの編集を許可するかどうかを判断する。真（true）という値は、コマンドを編集できることを示す。Ｗｉｋｉコマンドが編集を許可する場合、プロセスはアイキャッチャを生成する（プロセス・ブロック３１０８）。
【０２１６】
Ｗｉｋｉコマンドが編集を許可しない場合、プロセスはｒｅｎｄｅｒＢｏｄｙを呼び出す（プロセス・ブロック３１１０）。ｒｅｎｄｅｒＢｏｄｙは、コマンドが対応するハイパーテキスト・マークアップ言語コンテンツを描画または放出するための機会を提供する。次に、ｒｅｎｄｅｒＢｏｄｙは、アイキャッチャを表示し、次に任意の既存の子のそれぞれでｒｅｎｄｅｒを呼び出す（プロセス・ブロック３１１２）。たとえば、プロセス・ブロック３１１２では、ｄｒａｗメソッドを使用してアイキャッチャを表示することができる。Ｗｉｋｉコマンドは階層を形成することができ、すなわち、Ｗｉｋｉコマンドは他のＷｉｋｉコマンドを含むことができる。その結果、Ｗｉｋｉコマンドはコマンドのツリーを形成する。子は、含まれるかまたは埋め込まれたＷｉｋｉコマンドの第一世代である。次に、プロセスはｃｌｏｓｅメソッドを呼び出し（プロセス・ブロック３１１４）、その後、プロセスは終了する。
【０２１７】
次に図３３を参照すると、本発明の例示的な一実施形態によるプロパティ編集のための予備プロセスの流れ図が描写されている。図３３のプロセスは、Ｗｉｋｉコマンドのプロパティを編集するためのものである。プロセスは、コマンドを描画することにより始まる（プロセス・ブロック３２０２）。コマンドは、図３２のプロセスなどの描画プロセスで描画される。次に、プロセスは、デフォルト・プロパティ・エディタを生成し、生成されたページ上のプロパティ・エディタを隠し（プロセス・ブロック３２０４）、その後、プロセスは終了する。ほとんどの場合、ユーザはプロパティ・エディタと対話しないので、プロパティ・エディタのデフォルト状態は、ユーザによって必要とされるまで隠される。コマンドがそれ自体を実装しないことを選んだ場合、デフォルト・プロパティ・エディタはプロセス・ブロック３２０４で生成される。コマンドは、ｇｅｎｅｒａｔｅＰｒｏｐｅｒｔｙＥｄｉｔｏｒプロトコルを無効にすることにより、プロパティ・エディタを実装することができる。
【０２１８】
次に図３４を参照すると、本発明の例示的な一実施形態によるプロパティ編集のためのプロセスの流れ図が描写されている。図３４のプロセスは図３３のプロセスの後で行うことができる。まず、プロセスは、選択されたコマンド上で呼び出すべきプロパティ・エディタをトリガするためにユーザから信号を受信する（プロセス・ブロック３３０２）。たとえば、プロセス・ブロック３３０２では、ユーザは、プロパティ・エディタをトリガするＷｉｋｉコマンドのアイキャッチャをクリックすることができる。
【０２１９】
次に、プロセスは、クライアント側プロパティ・エディタ・サブシステムに対して選択されたコマンドを識別する（プロセス・ブロック３３０４）。Ｗｉｋｉ環境は、生成されたアイキャッチャ上のマウス・クリックを追跡することにより、選択されたコンポーネントを追跡するＪａｖａＳｃｒｉｐｔベース・サブシステムを含む。アイキャッチャをクリックするアクションによって、選択されたコマンドが識別される。プロセス・ブロック３３０４は、図１３のアイキャッチャ１３０２などのアイキャッチャによって実行することができる。
【０２２０】
次に、プロセスは、クライアント側プロパティ・エディタを描画するようにサーバ側コマンド代表に要求するためのＡＪＡＸ呼び出しを生成する（プロセス・ブロック３３０６）。プロセス・ブロック３３０６は、図１３のプロパティ・エディタ１３０４などのプロパティ・エディタによって実行することができる。プロセス・ブロック３３０６の実行中に、ＡＪＡＸ呼び出しは、要求のオブジェクト変数で識別されたサーバにページをロードしたＷｉｋｉコマンド・プロセッサのサーバ・ユニフォーム・リソース・インジケータを呼び出す。また、ユニフォーム・リソース・インジケータは、Ｗｉｋｉコマンドに関する入力値の新しい値を表す１組の新しいオブジェクト変数も含む。次に、エンジンは、Ｗｉｋｉコマンドの入力値を更新し、新しい値に基づいて対応する視覚表現を更新するようＷｉｋｉコマンドに要求する。プロセス・ブロック３３０６は、図１２のｇｅｎｅｒａｔｅＰｒｏｐｅｒｔｙＥｄｉｔｏｒ１２２２などのコマンドによって開始することができる。
【０２２１】
次に、プロセスは、プロパティ・エディタを選択する（プロセス・ブロック３３０８）。プロセス・ブロック３３０８では、選択されたＷｉｋｉコマンドが、ｇｅｎｅｒａｔｅＰｒｏｐｅｒｔｙＥｄｉｔｏｒメソッドを無効にすることにより、専門のプロパティ・エディタを提供することを選ぶ場合もあれば、デフォルト実装例を継承する場合もある。代わって、Ｗｉｋｉコマンドは、Ｗｉｋｉコマンドのパラメータ、プロパティ、および属性を編集するために必要なハイパーテキスト・マークアップ言語から構成される、それ自体のプロパティ・エディタを提供することもできる。プロパティ・エディタは、選択されたコマンドの属性に基づいて、プロセス・ブロック３３０８で選択することができる。
【０２２２】
次に、プロパティ・エディタは、ユーザ対話を受信し、その後、Ｗｉｋｉコマンドのパラメータにｕｐｄａｔｅをサブミットする（プロセス・ブロック３３１０）。次に、プロパティ・エディタは、所与のページ上の選択されたＷｉｋｉコマンドに関するパラメータのリストを更新するようサーバ・ページ・プロセッサに指示する、ＡＪＡＸベースの要求を生成する（プロセス・ブロック３３１２）。次に、コマンド・プロセッサは、そのコマンドを配置し、そのコマンドをインスタンス化し、クライアントから渡された新しい値にそのコマンドの値を設定する（プロセス・ブロック３３１４）。次に、コマンド・プロセッサは、ｒｅｆｒｅｓｈＯｎＵｐｄａｔｅメソッドを呼び出すことによりページ全体を更新しなければならないかどうかをコマンドに尋ねる（プロセス・ブロック３３１６）。プロセス・ブロック３３１６は、図４のコマンド・プロセッサ４０６によって実装される。ページ全体を更新しなければならないことをコマンドが示している場合。そのページ全体がクライアント上で再表示され（プロセス・ブロック３３１８）、その後、プロセスは終了する。ページ全体を更新する必要がないことをコマンドが示している場合、コマンドはそれ自体を描画し、クライアントのハイパーテキスト・マークアップ言語文書上のｇｅｔＴａｒｇｅｔＤＩＶ領域に新しいコンテンツが表示され（プロセス・ブロック３３２０）、その後、プロセスは終了する。
【０２２３】
プロセス・ブロック３３２０の一例として、ユーザは、プロパティ・エディタを使用して、以下の例で記述するプロセスを実装することができるＦｏｒｅｃａｓｔ  Ｗｉｋｉコマンドのプロパティ値を更新することができる。ユーザは、プロパティ・エディタを使用して郵便番号プロパティを更新する。プロパティ・エディタは、ｕｐｄａｔｅコマンド要求を生成し、そのコマンドをサーバに送信する。サーバは、要求を受信し、Ｆｏｒｅｃａｓｔコマンドを含むページをロードし、新しい郵便番号をそのページに配置し、更新済みページを保存し、そのコマンドがそのページをリフレッシュする必要があるかどうかをＦｏｒｅｃａｓｔコマンドに尋ねる。ＦｏｒｅｃａｓｔコマンドがＮＯと応答し、その結果、サーバは、プロパティ・エディタから送信された入力値の新しい値を使用してそれ自体を描画するようＦｏｒｅｃａｓｔコマンドに要求する。生成されたハイパーテキスト・マークアップ言語フラグメントは、クライアントに返送され、ｇｅｔＴａｒｇｅｔＤＩＶプロトコルによって識別されたハイパーテキスト・マークアップ言語エレメント内に配置される。コマンドは、図３２のプロセスなどのプロセスでそれ自体を描画することができる。
【０２２４】
次に図３５を参照すると、本発明の例示的な一実施形態によりプロパティ・エディタを選択するプロセスの流れ図が示されている。図３５のプロセスは、図３４のプロセス・ブロック３３０８をより詳細に記載したものである。プロセスは、デフォルト・プロパティ・エディタがｇｅｔＰｒａｍｅｔｅｒｓを呼び出して、選択されたコマンドに関連するパラメータのリストおよびタイプを決定することから始まる（プロセス・ブロック３４０２）。次に、プロセスは、返された各パラメータごとにクライアント側エディタを生成する（プロセス・ブロック３４０４）。パラメータ・リストは、返されたパラメータに関する名前、ヘルプ文字列、および可能な値を提供する。
【０２２５】
次に、プロセスは、クライアント・プロパティ・エディタで描画するために集約されたコンテンツをクライアントに配信し（プロセス・ブロック３４０６）、その後、プロセスは終了する。集約されたコンテンツは、特定のコマンドについてプロパティ・エディタから受信した情報である。たとえば、集約されたコンテンツは、プロパティ・エディタを示すために表示されたコマンドについてプロセス・ブロック３４０２および３４０４で入手された、それぞれのメタデータおよびパラメータを含む。集約されたコンテンツは、図３４のプロセス・ブロック３３０６などのステップ中に定義されたクライアント・プロパティ・エディタで描画することができる。
【０２２６】
図３６〜図３７は、Ｗｉｋｉページのライフサイクル中に使用されるページ・ライフサイクル・プロセスである。次に図３６を参照すると、本発明の例示的な一実施形態によりページを削除するためのプロセスの流れ図が示されている。プロセスは、削除のためにページにマークを付けることから始まる（プロセス・ブロック３５０２）。ユーザは、コンテンツが古いこと、無関係であること、または任意のその他の理由により、ページにパークを付けることができる。プロセス・ブロック３５０２では、削除されるページにマークが付けられる。そのページは、実際にデータベースから除去されるわけではない。次に、そのページの各コマンドに対し、そのコマンドの所有ページが除去されたことが通知され（プロセス・ブロック３５０４）、その後、プロセスは終了する。各コマンドは、図１２のｗａｓＤｅｌｅｔｅｄ１２１８などのメソッドを使用して、通知を受けることができる。プロセス・ブロック３５０４は、所与のページ上のＷｉｋｉコマンドに関連する永続リソースを一掃するために使用される。
【０２２７】
次に図３７を参照すると、本発明の例示的な一実施形態によりページを改訂するためのプロセスの流れ図が描写されている。プロセスは、新しい空ページを作成することにより始まる（プロセス・ブロック３６０２）。次に、プロセスは、既存のページのクローンを新しいページに作成する（プロセス・ブロック３６０４）。次に、プロセスは、それがａｂｏｕｔＴｏＳａｖｅであることをページ上の各コマンドに通知する（プロセス・ブロック３６０６）。ａｂｏｕｔＴｏＳａｖｅは、図１２のライフサイクル１２０４などのライフサイクル・コマンドにすることができる。
【０２２８】
次に、ページはデータベースに保存される（プロセス・ブロック３６０８）。次に、プロセスは、ｗａｓＤｅｌｅｔｅｄメソッドを呼び出して、もはやそのページの一部ではなくなることにより、それがそのページから削除されたことをそのページに通知する（プロセス・ブロック３６１０）。プロセス・ブロック３６１０は、もはやそのページの一部ではない各コマンドごとに実行される。次に、プロセスは、そのページがｗａｓＳａｖｅｄであることをそのページ上の各コマンドに通知し（プロセス・ブロック３６１２）、その後、プロセスは終了する。プロセス・ブロック３６１２は、図１２のｗａｓＳａｖｅｄ１２１６などのメソッドを使用することができる。
【０２２９】
次に図３８を参照すると、本発明の例示的な一実施形態によりページをコピーするためのプロセスの流れ図が描写されている。プロセスは、新しい空ページを作成することにより始めることができる（プロセス・ブロック３７０２）。次に、プロセスは、既存のページのクローンを新しいページに作成する（プロセス・ブロック３７０４）。次に、プロセスは、ページ上の各コマンドごとにｗａｓＣｏｐｉｅｄメソッドを呼び出す（プロセス・ブロック３７０６）。プロセス・ブロック３７０６は、図１２のｗａｓＣｏｐｉｅｄ１２２０などのメソッドを使用することができる。
【０２３０】
次に、プロセスは、そのページ上の各コマンドについてｗａｓＳａｖｅｄを呼び出して、クローン・ページを保存し（プロセス・ブロック３７０８）、その後、プロセスは終了する。
【０２３１】
次に図３９を参照すると、本発明の例示的な一実施形態によりページを名称変更するためのプロセスの流れ図が描写されている。図３９のプロセスは、元のページをロードすることにより始まる（プロセス・ブロック３８０２）。次に、プロセスは、そのページによって含まれるすべての子ページについてそのページの新しい名前を反映するために、そのページのタグ名を更新する（プロセス・ブロック３８０４）。次に、プロセスは、ｗａｓＲｅｎａｍｅｄを呼び出して、そのページ上の各Ｗｉｋｉコマンドについてそれが名称変更されたことをＷｉｋｉコマンドに通知し（プロセス・ブロック３８０６）、その後、プロセスは終了する。
【０２３２】
次に図４０を参照すると、本発明の例示的な一実施形態によりページを復旧するためのプロセスの流れ図が描写されている。図４０のプロセスは、ｉｓＬａｔｅｓｔフラグを真に設定することにより、そのページを失効状態からアクティブに除去することにより始まる（プロセス・ブロック３９０２）。次に、プロセスは、そのページがｗａｓＵｎｄｅｌｅｔｅｄであることをそのページ上の各コマンドに通知し（プロセス・ブロック３９０４）、その後、プロセスは終了する。ｗａｓＵｎｄｅｌｅｔｅｄは、前にそのページから削除された後でそのコマンドが所与のページ上に戻されたときに呼び出される。
【０２３３】
次に図４１を参照すると、本発明の例示的な一実施形態によるパレット構築のためのプロセスの流れ図が示されている。Ｗｉｋｉ環境は、Ｗｉｋｉにインストールされた使用可能コマンドのパレットを提供する。このパレットは、Ｗｉｋｉ環境内で使用可能なＷｉｋｉコマンドを表示するための可視メカニズムを提供する。このパレットは、ｇｅｔＣａｔｅｇｏｒｙプロトコルによって定義されたカテゴリに定義される。このパレットは、図４１のプロセスを使用して、Ｗｉｋｉ内の各コマンドについて生成される。
【０２３４】
まず、プロセスは、そのコマンドが編集をサポートするかどうかを判断する（プロセス・ブロック４００２）。Ｗｉｋｉが編集をサポートする場合、プロセスは、所与のＷｉｋｉコマンドに関連するページに挿入すべきデフォルトＷｉｋｉマークアップを返すｇｅｔＤｒｏｐＣｏｎｔｅｎｔを呼び出し（プロセス・ブロック４００４）、その後、プロセスは終了する。プロセス・ブロック４００４は、Ｗｉｋｉコマンドがパレットからドラッグされ、そのページ上に置かれたことに応答して、実行することができる。
【０２３５】
プロセス・ブロック４００２でそのコマンドが編集をサポートしないとプロセスが判断した場合、プロセスはそのコマンドのカテゴリを検索する（プロセス・ブロック４００６）。カテゴリは、Ｗｉｋｉ環境内のコマンドによって定義される。いくつかの模範的なカテゴリとしては、「データ・サービス」および「ページ・コンテンツ」を含む。同じカテゴリ内の各コマンドは、バレット・ビュー上の同じタブに表示される。次に、プロセスは名前を検索する（プロセス・ブロック４００８）。名前は、図１２のｇｅｔＮａｍｅ１２１２などのメソッドを使用して検索することができる。次に、プロセスは記述を検索する（プロセス・ブロック４０１０）。記述は、図１２のｇｅｔＤｅｓｃｒｉｐｔｉｏｎ１２１４などのメソッドを使用して検索することができる。次に、プロセスはアイコンを検索する（プロセス・ブロック４０１２）。アイコンは、ｇｅｔＩｃｏｎなどのメソッドを使用して検索することができる。次に、プロセスは、ドラッグ・コンテンツを検索し、各コマンド用のパレット上にそのエレメントを配置する（プロセス・ブロック４０１４）。ドラッグ・コンテンツは、ｇｅｔＤｒａｇＣｏｎｔｅｎｔなどのメソッドを使用して検索することができる。
【０２３６】
コマンドは、そのコマンドの使い方を伝達する固有のアイコンまたはアイキャッチャを表示することができる。ｇｅｔＩｃｏｎプロトコルは、描画されたときにそのコマンドのアイコンを表示するハイパーテキスト・マークアップ言語フラグメントを検索するために使用される。往々にして、コマンドは、新しいコマンドをそのページに挿入するためにそのページ上にコンポーネントが最初にドロップされたときにそのページ内に置かれるパレットからドラッグするためのハイパーテキスト・マークアップ言語コンテンツの異なる部分をユーザに提供する必要がある場合がある。実際にパレットからドラッグされるコンテンツは、ｇｅｔＤｒａｇＣｏｎｔｅｎｔメソッドを無効にすることによって指定することができる。
【０２３７】
次に、プロセスは、プロセス・ブロック４００４に戻り、所与のＷｉｋｉコマンドに関連するページに挿入すべきデフォルトＷｉｋｉマークアップを返すｇｅｔＤｒｏｐＣｏｎｔｅｎｔを呼び出し、その後、プロセスは終了する。
【０２３８】
次に図４２を参照すると、本発明の例示的な一実施形態による構成のためのプロセスの流れ図が示されている。Ｗｉｋｉ環境内に存在するＷｉｋｉコマンドは、構成を必要とする場合がある。たとえば、ＧｏｏｇｌｅＭａｐコマンドは、アプリケーション・プログラミング・インターフェースとともに使用するためのキーを必要とする。
【０２３９】
図４２のプロセスは、コマンドがそれ自体を構成し、特定のＷｉｋｉコマンドに関連する１組の構成データを維持できるようにするために使用される。図４２のプロセスは、一般カタログ作成情報を表示することにより始まる（プロセス・ブロック４１０２）。次に、プロセスは、ｃｏｎｆｉｇｕｒｅメソッドを呼び出す（プロセス・ブロック４１０４）。ｃｏｎｆｉｇｕｒｅメソッドにより、コマンドは、Ｗｉｋｉ内でＷｉｋｉコマンドに関連するデータを編集するためにハイパーテキスト・マークアップ言語ビューを生成することができる。次に、プロセスは、ｇｅｔ／ｓｅｔＰｌｕｇｉｎＤａｔａメソッドを呼び出し（プロセス・ブロック４１０６）、その後、プロセスは終了する。ｇｅｔ／ｓｅｔＰｌｕｇｉｎＤａｔａメソッドは、Ｗｉｋｉサイトに影響するＷｉｋｉコマンド・データを検索し保管するために使用される。たとえば、コマンド・データは、登録キーなど、そのコマンドを呼び出すために必要な初期設定データを含む。
【０２４０】
次に図４３を参照すると、本発明の例示的な一実施形態によるエクスポートのためのプロセスの流れ図が描写されている。Ｗｉｋｉは、完全なＷｉｋｉまたはＷｉｋｉのサブセットのインポートおよびエクスポートをサポートする。エクスポート・フォーマットは、エクスポートされるページのリストと、コマンドおよび添付物を含むページ・コンテンツとを含む。Ｗｉｋｉエンジンは、１組のページのエクスポートを支援するために図４３のプロセスを呼び出す。１組のページは１つまたは複数のＷｉｋｉページである。
【０２４１】
図４３のプロセスは、ページの名前を含む一般ページ情報をエクスポートすることにより始まる（プロセス・ブロック４２０２）。次に、プロセスは、ページ上の各ＷｉｋｉコマンドについてａｂｏｕｔＴｏＥｘｐｏｒｔを呼び出す（プロセス・ブロック４２０４）。次に、プロセスは、ｇｅｔＶｅｒｓｉｏｎメソッドを呼び出し、それを出力の一部として保管する（プロセス・ブロック４２０６）。プロセス・ブロック４２０４で呼び出されたａｂｏｕｔＴｏＥｘｐｏｒｔがデータを返す場合、そのデータは、プロセス・ブロック４２０６で出力ストリーム内の専門ＰＨＰオブジェクトとして保存される。
【０２４２】
次に，プロセスは、ページに関連するコマンドをエクスポートし（プロセス・ブロック４２０８）、その後、プロセスは終了する。各ページに関するユーザ注解を表すコメントを書くＷｉｋｉページに添付することができる。コメントは、Ｗｉｋｉ内で共同作業するためのメカニズムとして使用される。たとえば、弁理士は、Ｗｉｋｉページ上でどのようなコメントが使用されるかを発明者に尋ねることができる。
【０２４３】
次に図４４を参照すると、本発明の例示的な一実施形態によるインポートのためのプロセスの流れ図が描写されている。Ｗｉｋｉエンジンは、図４４のプロセスを呼び出して、ページ上の各Ｗｉｋｉコマンドをインポートする。
【０２４４】
図４４のプロセスは、ページの名前を含む一般ページ情報をインポートすることにより始まる（プロセス・ブロック４３０２）。次に、プロセスは、コマンドがデータを保存したかどうかを判断する（プロセス・ブロック４３０４）。たとえば、プロセスは、図４３のプロセス・ブロック４２０６などのステップでコマンドがデータを保存したかどうかを判断する。コマンドがデータを保存した場合、プロセスは、データをシリアル化解除する（プロセス・ブロック４３０６）。デフォルト実装例では、保存されたバージョン名が現行のインストール済みＷｉｋｉコマンド・バージョンのものと一致することを保証する。次に、プロセスは、シリアル化解除されたデータとともにｗａｓＩｍｐｏｒｔｅｄを呼び出し（プロセス・ブロック４３０８）、その後、プロセスは終了する。プロセス・ブロック４３０４でデータが保存されなかった場合、プロセスは新しいページを返し（プロセス・ブロック４３１０）、その後、プロセスは終了する。
【０２４５】
したがって、本発明の例示的な諸実施形態は、Ｗｉｋｉ環境の機能を拡張するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードをさらに提供する。共同環境を容易に作成するためにオブジェクトをどのように拡張するかを定義するためにオブジェクト指向フレームワークが使用される。Ｗｉｋｉコマンド・クラスは、再使用性、適応性、および使いやすさを促進する配備された環境を効果的に管理するために処理される。
【０２４６】
次に図４５を参照すると、本発明の例示的な一実施形態によりツリーを検索し構文解析するためのプロセスの流れ図が描写されている。ツリーは、例示的な諸実施形態によって使用される中核プロセス・データ構造である。ツリーは、図１１の抽象構文ツリー１１０２などの抽象構文ツリーにすることができる。図４５のプロセスは、図１１のＷｉｋｉコマンド・コンテキストなどのＷｉｋｉコマンド・コンテキストによって実装される。Ｗｉｋｉコマンド・コンテキストは、ページを検索し、それを抽象構文ツリーに構文解析し（プロセス・ブロック４４０２）、その後、プロセスは終了する。ＷｉｋｉページはＷｉｋｉによってロードされる。Ｗｉｋｉページは、ツリーを作成するＷｉｋｉコマンド・コンテキストをインスタンス化する。
【０２４７】
次に図４６を参照すると、本発明の例示的な一実施形態によりＷｉｋｉで表示するためのＷｅｂページを処理するためのプロセスが描写されている。図４６のプロセスは、Ｗｉｋｉエンジンによって、より具体的には、図４のＷｉｋｉエンジン４０２およびコマンド・プロセッサ４０６などのコマンド・プロセッサによって実装することができる。図４６のプロセスは、抽象構文ツリー内に存在するコマンド上でｉｎｉｔｉａｔｉｏｎメソッドを呼び出して、プロセス・エンジンが抽象構文ツリー内の各ノードを訪問することから始まる（プロセス・ブロック４５０２）。ｉｎｉｔｉａｔｉｏｎメソッドはｉｎｉｔと命名することができる。ｉｎｉｔは、抽象構文ツリーの各ノード内のコマンドを検出し、そのコマンドを他のコマンドにとって使用可能なものにする。その結果、コマンドは、他の同一コマンドを含む他のコマンドと通信することができる。プロセス・ブロック４５０２中に、コマンドは、そのコマンドの内部データ構造を初期設定し、提供されたトピックを公表し、データ・ハブ上で関心のあるトピックに加入する責任を負っている。トピックは、提供者（publisher）と加入者（subscriber）との間で関心のある領域を表す。たとえば、提供者／加入者環境で重要なトピックの１つは「データ／使用可能」である。トピックの他の例としては「アドレス」および「ｌａｔｌｏｎｇ」を含む。プロセス・ブロック４５０２中に、コマンドは、ｉｎｉｔメソッドを使用して、すべてのコマンドが呼び出された後で処理する必要があるイベントをキューに入れることができる。イベントは、ある状態から他の状態への状態変化を伝達する。イベントは、状態変化を実装するための通信を刺激する。
【０２４８】
イベントを規則正しい順次方式で処理することができ、ＪａｖａＳｃｒｉｐｔクライアントなどの単一スレッド式実行環境で失われないように、イベントのキューイングが実行される。イベントのキューイングにより、中核実行環境は、すべてのコンポーネントが適切に初期設定され、イベントがディスパッチされる前にイベントを処理できる状態になることを保証する。コマンドは、本発明の例示的な諸実施形態のすべてのフェーズを実行することができ、デフォルト実装例を無効にすることができる。
【０２４９】
次に、コマンド・プロセッサは、データ・ハブ上でｐｒｏｃｅｓｓＥｖｅｎｔｓを呼び出して、任意のキューイングされたイベントを配信する（プロセス・ブロック４５０４）。公表および加入モデルは、データ・ハブから受信するために、加入者が関心のあるイベントについてデータ・ハブに登録することを指図する。提供者は、データ・ハブ上でキューイングされたイベントをトリガする。ｐｒｏｃｅｓｓＥｖｅｎｔｓフェーズ中に、データ・ハブは、各キューイングされたイベントを処理し、関心がある加入者を決定し、そのイベントを配信するために加入者を呼び出す。キューイングされたイベントは、プロセス・ブロック４５０２でキューに入れられたイベントである。次に、コマンド・プロセッサは、抽象構文ツリー内に存在するコマンド上でｄｉｓｃｏｖｅｒメソッドを呼び出して、抽象構文ツリー内の各ノードを訪問する（プロセス・ブロック４５０６）。
【０２５０】
ｄｉｓｃｏｖｅｒメソッドは、コマンド間のより詳細な対話のためにコマンド関連情報ソースの場所を突き止める。プロセス・ブロック４５０６中に、プロデューサ、コンシューマ、またはコントローラ・コマンドは、データ・ハブを使用して相互に場所を突き止め、データ・ハブの代わりに相互の直接イベント接続を確立することができる。コマンドは、上記のようにデータ・ハブを介して間接的に対話するかまたは発見フェーズ中に他のコマンドの場所を突き止めることを選ぶことができる。発見フェーズの処理中に、コマンドは、提供者、加入者、およびトピックについてデータ・ハブに問い合わせることができる。また、コマンドは、上記で確立された間接通信方法をバイパスして、必要であれば直接的に通信することもできる。この機能により、より効率的なイベントの処理が可能になり、通信インターフェースとしてのデータ・ハブの必要性が解消される。さらに、コマンドは、データ・ハブからそれ自体を除去することができる。コマンドは、ｉｎｉｔｉａｔｉｏｎメソッドを使用して、すべてのコマンドが呼び出された後で処理する必要があるイベントをエンキューすなわちキューに入れることができる。
【０２５１】
次に、コマンド・プロセッサは、データ・ハブ上でｐｒｏｃｅｓｓＥｖｅｎｔｓを呼び出して、任意のキューイングされたイベントを配信する（プロセス・ブロック４５０８）。キューイングされたイベントは、プロセス・ブロック４５０６でエンキューされたイベントである。次に、コマンド・プロセッサは、抽象構文ツリー内に存在するコマンド上でｒｅｎｄｅｒメソッドを呼び出して、抽象構文ツリー内の各ノードを訪問し（プロセス・ブロック４５１０）、その後、プロセスは終了する。プロセス・ブロック４５１０中に、コマンドはそのページに関する視覚的コンテンツと非視覚的コンテンツの両方を描画する。たとえば、視覚的コンテンツは、リスト・データのテーブル表示を含むことができる。非視覚的コンテンツは、データのリストを検索し、いかなる視覚的コンテンツも持たない、ＳｅａｒｃｈＬｉｓｔコマンドを含むことができる。そのページのテキスト・フラグメントなどの非コマンド・ノードもプロセス・ブロック４５１０中に描画される。図４６のステップのいずれでも、コマンドは、ページ・ソース・フラグメント上で図４６のプロセスを再帰的に呼び出すことにより、ページ・ソース・フラグメントの他の部分をさらに処理することができる。ページ・ソース・フラグメントは、すべての非コマンド・コンテンツである。ページ・ソース・フラグメントは、そのページ上のコマンド間のすべての非コマンド・コンテンツを収集する。
【０２５２】
次に図４７を参照すると、本発明の例示的な一実施形態によりイベントを処理する流れ図が描写されている。図４７の処理ステップは、図１１のデータ・ハブ１１１２などのデータ・ハブによって実行される。図４７は、図４６のプロセス・ブロック４５０４のより詳細な説明である。
【０２５３】
プロセスは、データ・ハブがキューからイベントを除去することから始まる（プロセス・ブロック４６０２）。次に、データ・ハブは、登録加入者にイベントを配信する（プロセス・ブロック４６０４）。登録加入者は、一般にコマンドであるが、代わって独立型機能ユニットにすることもできる。登録加入者は、コマンドが他のすべてのコマンドに対する関心を公表、加入、または登録する開始処理中に登録される。次に、データ・ハブは、登録加入者に配信された任意の結果イベントをキューに入れる（プロセス・ブロック４６０６）。プロセス・ブロック４６０６のイベントは、プロセス・ブロック４６０６で登録加入者に配信されたものである。
【０２５４】
次に、データ・ハブは、データ・ハブのデータ配信メカニズムによってその入力値が履行されているコマンド上でｉｎｖｏｋｅメソッドをトリガし（プロセス・ブロック４６０８）、その後、プロセスは終了する。コマンドは、その機能を実行するために１組の入力値を提供する。入力値は静的または動的である可能性がある。入力値が動的である場合、Ｗｉｋｉエンジンは、そのコマンドへの入力として使用されるデータが使用可能になる時期を追跡する。入力が使用可能になると、それは、コマンドに配信され、その結果、「履行された」状態になる。
【０２５５】
したがって、本発明の例示的な諸実施形態は、Ｗｉｋｉ環境で表示するためのＷｅｂページを処理するためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードをさらに提供する。新たに追加されたコンポーネントは、最終的なビューを描画する前に抽象構文ツリーの形で他のコンポーネントと対話することができる。コンポーネントは、抽象構文ツリーのノードの形でページ供給コンテキストから新しい属性およびパラメータ設定を発見できるようになっている。最終的なビューを描画する前にコンポーネントが入力を妥当性検査し、エラーを報告するために、処理および妥当性検査メカニズムが使用される。ターゲットになっているイベントは、ページ供給シーケンスのライフサイクル内で処理される。単一サーバ上で同じコンポーネントの複数バージョンが管理される。
【０２５６】
次に図４８を参照すると、本発明の例示的な一実施形態によりサーバ側データ・ハブ・オブジェクトがインスタンス化されるときに行われる動作の流れ図が示されている。プロセスは、図４のＷｉｋｉエンジン４０２によって実装される。
【０２５７】
プロセスは、クライアントから新しいページをロードするための要求を受信することにより始まる（プロセス・ブロック４７０２）。新しいページをロードするための要求がサーバによって受信されると、プロセスは、サーバ側Ｗｉｋｉデータ・ハブ・クラス変数およびメソッドによって指定された属性およびメソッドにより、要求された新しいページに関連するクライアント側データ・ハブ・オブジェクトのインスタンスを作成する（プロセス・ブロック４７０４）。プロセスは、サーバ上のすべてのコンポーネントをサーバ側データ・ハブ・オブジェクトに登録し（プロセス・ブロック４７０６）、その後、プロセスは終了する。
【０２５８】
次に図４９を参照すると、本発明の例示的な一実施形態によりクライアント側データ・ハブ・オブジェクトがインスタンス化されるときに行われる動作の流れ図が示されている。プロセスは、図２のクライアント２００内の処理装置２０６などのクライアント上の処理装置によって実装される。
【０２５９】
プロセスは、サーバから受信した新しいページをロードすることにより始まる（プロセス・ブロック４８０２）。クライアント上の処理装置がそのページに関するハイパーテキスト・マークアップ言語またはＪａｖａＳｃｒｉｐｔをロードすると、プロセスは、クライアント側Ｗｉｋｉデータ・ハブ・クラス変数およびメソッドによって指定された属性およびメソッドにより、要求された新しいページに関連するクライアント側データ・ハブ・オブジェクトのインスタンスを作成する（プロセス・ブロック４８０４）。プロセスは、クライアント上のすべてのコンポーネントをクライアント側データ・ハブ・オブジェクトに登録し（プロセス・ブロック４８０６）、その後、プロセスは終了する。
【０２６０】
次に図５０を参照すると、本発明の例示的な一実施形態によりサーバ側データ・ハブがクライアント側データ・ハブからイベントを処理するための要求を受信するときに行われる動作の流れ図が示されている。データ・ハブは、図５のデータ・ハブ５５８および図６のデータ・ハブ６３８などのサーバ上のデータ・ハブによって実装される。
【０２６１】
データ・ハブ・オブジェクトは、クライアント側データ・ハブからページ要求またはイベントあるいはその両方を受信することにより始まる（プロセス・ブロック４９０２）。データ・ハブ・オブジェクトは、１組のメソッドを使用して、要求／イベントを処理する（プロセス・ブロック４９０４）。要求／イベントは、クライアントに関連するプロデューサ・コマンドによって生成される。１組のメソッドは、データ・ハブ・オブジェクトの１組のメソッド、データ・ハブ・トピック・オブジェクトの１組のメソッド、データ・ハブ・イベント・オブジェクト、もしくは、データ・ハブ・オブジェクト、データ・ハブ・トピック・オブジェクト、またはデータ・ハブ・イベント・オブジェクトあるいはこれらの組み合わせに関連するメソッドの任意の組み合わせにすることができる。データ・ハブ・オブジェクトは、処理されたイベントを１組のコンシューマ・コマンドに送信し（プロセス・ブロック４９０６）、その後、プロセスは終了する。
【０２６２】
次に図５１を参照すると、本発明の例示的な一実施形態によりプロデューサ・コマンドがイベントを処理するときに行われる動作の流れ図が示されている。この例示的な例では、プロセスは、図１４のＷｉｋｉコマンド・オブジェクト１４０４および１４１２などのコマンド・オブジェクトによって実装される。
【０２６３】
プロセスは、コマンドがそのコマンド上のｉｎｉｔメソッドの呼び出しの結果として初期設定するときに始まる（プロセス・ブロック５００２）。コマンドを初期設定するためのｉｎｉｔメソッドはデータ・ハブによって呼び出される。コマンドは、トピックＡなどの所与のイベント・トピックに関するプロデューサとしてデータ・ハブに登録する（プロセス・ブロック５００４）。コマンドはデータを検索する（プロセス・ブロック５００６）。この例示的な例では、データを検索することは、ユーザから入力を受信することとともに、データベースまたはその他のデータ記憶装置からデータを検索することを含むことができる。コマンドは、データ・ハブに対してトピックＡに関するイベント・オブジェクトを始動し（プロセス・ブロック５００８）、その後、プロセスは終了する。
【０２６４】
次に図５２を参照すると、本発明の例示的な一実施形態によりコンシューマ・コマンドがイベントを処理するときに行われる動作の流れ図が示されている。この例示的な例では、プロセスは、図１４のＷｉｋｉコマンド・オブジェクト１４０４および１４１２などのコマンド・オブジェクトによって実装される。
【０２６５】
プロセスは、データ・ハブがすべてのコマンド上でｉｎｉｔｉａｌｉｚｅメソッドを呼び出したことに応答してコンシューマ・コマンドが初期設定することから始まる（プロセス・ブロック５１０２）。コマンドは、トピックＡなどの所与のイベント・トピックに関するコンシューマ・コマンドとしてデータ・ハブに登録する（プロセス・ブロック５１０４）。コマンドは、データ・ハブがコンシューマ・コマンド上でｃａｌｌｂａｃｋメソッドを呼び出したときにデータ・ハブからトピックＡに関するイベントを受信する（プロセス・ブロック５１０６）。コマンドはイベントを処理する（プロセス・ブロック５１０８）。コマンドは、データ・ハブがコマンド上でｒｅｎｄｅｒメソッドを呼び出したことに応答して、処理の結果をハイパーテキスト・マークアップ言語またはＪａｖａＳｃｒｉｐｔに描画する（プロセス・ブロック５１１０）。最後に、コマンドは、描画された結果をデータ・ハブに送信し（プロセス・ブロック５１１２）、その後、プロセスは終了する。
【０２６６】
次に図５３を参照すると、本発明の例示的な一実施形態によりクライアント側データ・ハブがイベントを受信するときに行われる動作の流れ図が示されている。この例示的な例では、プロセスは、図６のデータ・ハブ６３４、図１４のデータ・ハブ１４１２、および図１９のデータ・ハブ１９１０などのクライアント側データ・ハブによって実装される。
【０２６７】
プロセスは、クライアント側データ・ハブがプロデューサ・コンポーネントなどのユーザまたはコンポーネントあるいはその両方からイベントを受信するときに始まる（プロセス・ブロック５２０２）。クライアント側データ・ハブは直ちにイベントを処理する（プロセス・ブロック５２０４）。このステップでは、クライアント側データ・ハブは、１つまたは複数のコマンドがイベント・オブジェクトに関連する所与のトピックに関するコンシューマとして登録しているかどうかを判断する。１つまたは複数のコマンドが所与のトピックに関するコンシューマとして登録している場合、クライアント側データ・ハブは１組の登録されたコンシューマ上でｃａｌｌｂａｃｋメソッドを呼び出して（プロセス・ブロック５２１２）、登録されたコンシューマにイベントを送信し、その後、プロセスは終了する。
【０２６８】
次に図５４を参照すると、本発明の例示的な一実施形態によりサーバ側データ・ハブがイベントを処理するときに行われる動作の流れ図が示されている。この例示的な例では、プロセスは、図６のデータ・ハブ６３４、図１４のデータ・ハブ１４０４、および図１５のデータ・ハブ１５００などのサーバ側データ・ハブによって実装される。プロセスは、サーバ側データ・ハブがサーバに関連するすべてのコマンド上でｉｎｉｔｉａｌｉｚｅ「ｉｎｉｔ（）」メソッドを呼び出すときに始まる（プロセス・ブロック５３０２）。
【０２６９】
サーバ側データ・ハブは、所与のトピック・イベントに関するコンシューマとしてのコマンドの登録を受信する（プロセス・ブロック５３０４）。サーバ側データ・ハブは所与のイベント・トピックに関するイベントを受信する（プロセス・ブロック５３０６）。イベントはデータを含むことができる。イベントは、ユーザ入力からまたは他のコマンドから受信することができる（プロセス・ブロック５３０８）。サーバ側データ・ハブはイベントをイベント・キューに追加する（プロセス・ブロック５３１０）。
【０２７０】
サーバ側データ・ハブは、ｐｒｏｃｅｓｓＥｖｅｎｔｓメソッド・フェーズ中にイベント・キュー内のイベントを処理する。サーバ側データ・ハブは、所与のトピックについて登録されたすべてのコンシューマ・コマンド上でｃａｌｌｂａｃｋメソッドを呼び出す。サーバ側データ・ハブは、ｃａｌｌｂａｃｋメソッドを呼び出して、そのイベントに関連するイベント・トピックについて登録されたコンシューマにイベントを送信する（プロセス・ブロック５３１６）。
【０２７１】
サーバ側データ・ハブは、処理中の所与のイベント・トピックについて新しいイベントが受信されるかどうかについて判断を行う（プロセス・ブロック５３１８）。新しいイベントが受信される場合、サーバ側データ・ハブは、次のｐｒｏｃｅｓｓＥｖｅｎｔフェーズ中に処理するためにイベントをイベント・キューに追加する（プロセス・ブロック５３１０）。プロセス・ブロック５３１８に戻り、新しいイベント・データがまったく受信されない場合、サーバ側データ・ハブは、イベントの処理に関係するすべてのコマンド上でｒｅｎｄｅｒメソッドを呼び出す（プロセス・ブロック５３２０）。サーバ側データ・ハブは、イベントの処理に関係するすべてのコマンドから受信された描画された結果を収集し、表示のためにそのコンテンツをクライアントに送信し（プロセス・ブロック５３２２）、その後、プロセスは終了する。クライアントに返されたコンテンツは、クライアント・ブラウザで表示するためにハイパーテキスト・マークアップ言語またはＪａｖａＳｃｒｉｐｔで返される。
【０２７２】
次に図５５を参照すると、本発明の例示的な一実施形態によりクライアント側データ・ハブが処理のためにサーバにイベントを送信すべきかどうかを判断するときに行われる動作の流れ図が示されている。この例示的な例では、プロセスは、図６のデータ・ハブ６３４、図１４のデータ・ハブ１４１２、および図１９のデータ・ハブ１９１０などのクライアント側データ・ハブによって実装される。
【０２７３】
プロセスは、クライアント側データ・ハブがプロデューサ・コマンドによって始動されたイベントを受信するときに始まる（プロセス・ブロック５４０２）。クライアント側データ・ハブは、そのイベントに関連するイベント・トピックのコンシューマとしてデータ・ハブに登録されたクライアント上の任意のコマンドにそのイベントを送信する（プロセス・ブロック５４０４）。クライアント側データ・ハブは、サーバ側データ・ハブにそのイベントを送信しなければならないかどうかについて判断を行う（プロセス・ブロック５４０６）。サーバ側データ・ハブにそのイベントを送信する必要はないとクライアント側データ・ハブが判断した場合、クライアント側データ・ハブはクライアント上でそのイベントを処理する（プロセス・ブロック５４０８）。サーバにそのイベントを送信しなければならないとクライアント側データ・ハブが判断した場合、クライアント側データ・ハブは、ｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔを呼び出して、処理のためにサーバ側データ・ハブにイベントを送信する（プロセス・ブロック５４１０）。クライアント側データ・ハブは、サーバ側データ・ハブからｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔの結果を受信する（プロセス・ブロック５４１２）。クライアント側データ・ハブは、サーバからｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔの結果として受信した新しいＷｉｋｉページ・コンテンツでクライアント上に表示されたＷｉｋｉページを更新し（プロセス・ブロック５４１４）、その後、プロセスは終了する。
【０２７４】
次に図５６を参照すると、本発明の例示的な一実施形態によりサーバ側データ・ハブがｐｒｏｃｅｓｓＣｌｉｅｎｔＥｖｅｎｔメソッド呼び出しの結果としてクライアント側データ・ハブからイベントを受信するときに行われる動作の流れ図が示されている。この例示的な例では、プロセスは、図６のデータ・ハブ６３４、図１４のデータ・ハブ１４０４、および図１５のデータ・ハブ１５００などのサーバ側データ・ハブによって実装される。
【０２７５】
プロセスは、クライアント側データ・ハブからトピックＢなどの所与のイベント・トピックに関するイベントを受信するときに始まる（プロセス・ブロック５５０２）。サーバ側データ・ハブは、トピックＢに関するイベントをイベント・キューに送信する（プロセス・ブロック５５０４）。サーバ側データ・ハブは、次のｐｒｏｃｅｓｓＥｖｅｎｔフェーズ中にイベント・キュー内のトピックＢに関するイベントを処理する（プロセス・ブロック５５０６）。サーバ側データ・ハブは、トピックＢに関するリスナ／コンシューマとして登録されたサーバ上の１組のコンシューマにトピックＢに関するイベントを送信する（プロセス・ブロック５５０８）。サーバ側データ・ハブは、サーバ上のプロデューサからトピックＢに関する新しいイベント・データを受信する（プロセス・ブロック５５１０）。新しいイベント・データを始動するプロデューサは、プロセス・ブロック５５０８でイベント・データを受信したコンシューマのうちの１つまたは複数であった。サーバ側データ・ハブは、新しいイベント・データをイベント・キューに追加する（プロセス・ブロック５５１２）。
【０２７６】
サーバ側データ・ハブは、次のｐｒｏｃｅｓｓＥｖｅｎｔフェーズ中にトピックＢに関する新しいイベントを処理する（プロセス・ブロック５５１４）。サーバ側データ・ハブは、トピックＢに関するリスナ／コンシューマとして登録されたサーバ上のコンシューマに新しいイベントを送信する（プロセス・ブロック５５１６）。サーバ側データ・ハブは、トピックＢに関するイベントの処理に関係するすべてのコマンド上でｒｅｎｄｅｒメソッドを呼び出す（プロセス・ブロック５５１８）。サーバ側データ・ハブは、ハイパーテキスト・マークアップ言語またはＪａｖａＳｃｒｉｐｔでの描画の形でイベントのコマンド処理の結果を受信する（プロセス・ブロック５５２０）。サーバ側データ・ハブは、すべてのコマンドからの描画をバンドルし、その描画をクライアント側データ・ハブに送信し（プロセス・ブロック５５２２）、その後、プロセスは終了する。
【０２７７】
また、本発明の例示的な諸実施形態は、イベント始動のための引数検出のためのコンピュータで実行される方法、装置、およびコンピュータ使用可能プログラム・コードも提供する。イベント始動は、処理のためにデータ・ハブにイベントを送信するプロセスを指す。
【０２７８】
プロセスは、１組のソースからの引数データを集約して、集合データ・セットを形成する。プロセスは、１組の最小引数を形成するためのイベントを始動するために最小十分引数のリストを生成する。プロセスは、集合データ・セットを１組の最小引数と比較して、１組の最小引数が使用可能であるかどうかを判断する。プロセスは、１組の最小引数が使用可能であると判断したことに応答して、イベントを始動するためのコマンドをトリガする。
【０２７９】
次に図５７を参照すると、本発明の例示的な一実施形態によりＷｉｋｉ引数オブジェクトが最小十分引数プロセスを実行するときに行われる動作の流れ図が示されている。この例示的な例では、プロセスは、図１４のＷｉｋｉコマンド１４０４またはＷｉｋｉコマンド１４１２などのＷｉｋｉコマンド・オブジェクトによって実装される。
【０２８０】
プロセスは、Ｗｉｋｉ引数オブジェクトが１組のソースからの引数データを集約するときに始まる（プロセス・ブロック５６０２）。Ｗｉｋｉ引数オブジェクトは、引数セットを形成するための宣言されたパラメータ基準に基づいて最小十分引数セットを生成する（プロセス・ブロック５６０４）。プロセスは、集合データ・セットを最小引数セットと比較する（プロセス・ブロック５６０６）。Ｗｉｋｉ引数オブジェクトは、十分引数が存在するかどうかについて判断を行う（プロセス・ブロック５６０８）。十分引数が存在するとＷｉｋｉ引数オブジェクトが判断した場合、Ｗｉｋｉオブジェクトは、イベントを始動するために必須データが使用可能であることを示す、ｄａｔａＡｖａｉｌａｂｌｅイベントを始動し（プロセス・ブロック５６１０）、その後、プロセスは終了する。
【０２８１】
十分引数が存在しないとＷｉｋｉ引数オブジェクトが判断した場合、Ｗｉｋｉ引数オブジェクトは、新しいデータが受信されたかどうかについて判断を行う（プロセス・ブロック５６１２）。新しいデータが受信されている場合、プロセスはプロセス・ブロック５６０４に戻り、そこでＷｉｋｉ引数が新しい集合引数データ・セットを生成して、この時点で十分引数が存在していたかどうかを判断する。新しいデータがまったく受信されていない場合、プロセスは、その後、終了する。
【０２８２】
次に図５８を参照すると、本発明の例示的な一実施形態によりコマンドの最小必須引数が設定されているかどうかをＷｉｋｉ引数オブジェクトが判断するときに行われるａｒｅＡｒｇｕｍｅｎｔｓセット・メソッドに関するプロセスの流れ図が描写されている。この例示的な例では、プロセスは、図１４のＷｉｋｉコマンド１４０４またはＷｉｋｉコマンド１４１２などのＷｉｋｉコマンド・オブジェクトによって実装される。
【０２８３】
プロセスは、引数を始動する前に最小十分セットの引数値が存在することを要求するイベントを始動するために、オブジェクトから呼び出しを受信することにより始まる（プロセス・ブロック５７０２）。プロセスは、引数リスト内に必須引数のリストを生成する（プロセス・ブロック５７０４）。次に、プロセスは、引数のリスト内に、まだチェックされていない引数がそれ以上存在するかどうかについて判断を行う（プロセス・ブロック５７０６）。換言すれば、プロセスは、引数リスト内のどの引数がリスト内で次にチェックすべき引数であるかを判断することにより、次にチェックまたは処理すべき引数を識別する。プロセスは、可用性および有効性についてリスト内のすべての引数をチェックするまで、その引数が使用可能かつ有効であるかどうかについて繰り返し判断を行うことにより、リスト内の次の引数をチェックする。リストが任意の追加の未処理または未チェックの引数を含まない場合、プロセスは、呼び出し側オブジェクトに「真」というブール値を返し（プロセス・ブロック５７１０）、その後、プロセスは終了する。
【０２８４】
プロセス・ブロック５７０６に戻り、リストが次の未処理または未チェックの引数を含む場合、プロセスは、引数リスト内の次の引数が設定されているかどうかについて判断を行う（プロセス・ブロック５７０８）。プロセスは、未処理引数のリストから次の引数を除去する（プロセス・ブロック５７０６）。プロセス・ブロック５７０８で引数が設定されているとプロセスが判断した場合、プロセスはプロセス・ブロック５７０６に戻り、引数のリスト内のすべての引数がチェックされるまで、リストの処理を続行する。引数が設定されていないとプロセスが判断した場合、メソッドは呼び出し側に「偽」というブール値を返し（プロセス・ブロック５７１２）、その後、プロセスは終了する。
【０２８５】
次に図５９を参照すると、本発明の例示的な一実施形態により引数／使用可能イベントを始動すべきかどうかを検出するためのｓｅｔＣｈｅｃｋＡｒｇｕｍｅｎｔｓメソッドのためのプロセスの流れ図が示されている。この例示的な例では、プロセスは、図１４のＷｉｋｉコマンド１４０４またはＷｉｋｉコマンド１４１２などのＷｉｋｉコマンド・オブジェクトによって実装される。
【０２８６】
プロセスは、ＩＤ引数が設定されているかどうかについて判断を行うことにより始まる（プロセス・ブロック５８０２）。ＩＤ引数は、データ・ハブ・コマンドに属すデフォルト引数である。ＩＤ引数は、データ・ハブ内のその存在を通じてイベントを明確に識別するために使用される。ＩＤ引数が設定されていないとプロセスが判断した場合、その後、プロセスは終了する。
【０２８７】
プロセス・ブロック５８０２に戻り、ＩＤ引数が設定されている場合、プロセスは、識別されたイベントを始動する前に存在することが要求されるすべての引数が使用可能であるかどうかについて判断を行う（プロセス・ブロック５８０６）。プロセスは、前に定義された１組の必須引数内のすべての引数が使用可能であるかどうかを判断するフラグをチェックすることにより、この判断を行う。１組の必須引数内の前に定義された引数が使用可能ではないという判断をプロセスが行った場合、プロセスはａｒｅＡｒｇｕｍｅｎｔｓＳｅｔメソッドを呼び出す（プロセス・ブロック５８０８）。プロセスがａｒｅＡｒｇｕｍｅｎｔｓＳｅｔメソッドから「偽」という戻り値を受信した場合、その後、プロセスは終了する。
【０２８８】
次にステップ５８０８に戻り、引数設定プロセスが真という値を返した場合、プロセスはデータ使用可能イベント・オブジェクトを作成する（プロセス・ブロック５８１０）。データ使用可能イベント・オブジェクトは、識別されたイベントを始動する前に存在することが要求されるすべての引数が存在することを示している。プロセスは、データ使用可能イベント・オブジェクトを始動して、識別されたイベントを始動するために識別されたイベントに関連するコマンドをトリガする（プロセス・ブロック５８１２）。
【０２８９】
プロセス・ブロック５８０６に戻り、図５８のプロセス・ブロック５７０８に示されているようにａｒｅＡｒｇｕｍｅｎｔｓＳｅｔメソッドが「真」を返すとプロセスが判断した場合、プロセスはデータ使用可能イベント・オブジェクトを作成する（プロセス・ブロック５８１０）。次に、プロセスは、イベント・オブジェクトを始動するためのメソッドへの引数としてデータ使用可能イベントを有するデータ・ハブ・オブジェクト上でｆｉｒｅＥｖｅｎｔメソッドを呼び出す（プロセス・ブロック５８１２）。ｆｉｒｅＥｖｅｎｔメソッドは、そのイベントを任意の聴取プロセスにリレーする。その後、プロセスは終了する。
【０２９０】
図６０は、本発明の例示的な一実施形態によりＷｉｋｉページによってＷｉｋｉページ・レイアウトを定義する動作を例示する流れ図である。Ｗｉｋｉページに関するＷｉｋｉページ・レイアウトを継承する動作は、プロセス・ブロック５９１２〜５９２０で特に強調されている。図６０の動作は、図４のＷｉｋｉエンジン４０２などのＷｉｋｉエンジン、より具体的には、図５のＷｉｋｉコントローラ５００などのＷｉｋｉコントローラによって実装することができる。動作は、Ｗｉｋｉエンジンがページを表示するための要求を受信するときに始まる（プロセス・ブロック５９０２）。この要求は、典型的には、リモート・クライアント・ブラウザによって発行されたＨＴＴＰ要求である。Ｗｉｋｉコントローラ・オブジェクトがこの要求を処理する。Ｗｉｋｉコントローラ・オブジェクトは、レイアウト・ページと結合された要求されたページを描画するプロセスを開始する（プロセス・ブロック５９０４）。
【０２９１】
本発明の例示的な一実施形態では、要求されたページを描画するプロセスは、図５のＷｉｋｉオブジェクト５０８などのＷｉｋｉオブジェクトのｓｈｏｗＰａｇｅメソッドを呼び出すことによって呼び出される。ｓｈｏｗＰａｇｅメソッドは、要求されたＷｉｋｉページを検索し、要求されたＷｉｋｉページのＨＴＭＬバージョンを描画し、これはクライアント・ブラウザで表示することができる。Ｗｉｋｉオブジェクトは、新たに要求されたＷｉｋｉページに関するコンテンツを生成するために使用されるオブジェクトおよびフィールドのすべてに関するリポジトリとして動作する。ページ描画プロセスの一部として、第１のサブプロセスが呼び出される（プロセス・ブロック５９０６）。第１のサブプロセスは、要求されたページのデータ・モデルを作成するために必要なデータ操作を実行する。本発明の例示的な一実施形態では、要求されたＷｉｋｉページのデータ・モデルは、図５のＷｉｋｉページ５２６などのＷｉｋｉページ・オブジェクトである。本発明の例示的な一実施形態では、第１のサブプロセスは、ｓｈｏｗＰａｇｅメソッドによって呼び出されるｐｒｏｃｅｓｓＰａｇｅメソッドである。
【０２９２】
第１のサブプロセスは第２のサブプロセスを呼び出す（プロセス・ブロック５９０８）。第２のサブプロセスの目的は、現行要求の主題である、Ｗｉｋｉページに関連するＷｉｋｉレイアウト・ページをロードすることである。本発明の例示的な一実施形態では、第２のサブプロセスはｌｏａｄＬａｙｏｕｔメソッドである。
【０２９３】
第２のサブプロセスは、要求されたＷｉｋｉページのデータ・モデルのレイアウト・フィールドがＷｉｋｉレイアウト・ページ名を含むかどうかについて判断を行う（プロセス・ブロック５９１０）。本発明の例示的な一実施形態では、レイアウト・フィールドは、図５のページ５２６などのオブジェクト変数５２８などのＷｉｋｉページ・オブジェクトのオブジェクト変数である。レイアウト・フィールドが現在要求されているＷｉｋｉページ用のＷｉｋｉレイアウト・ページ名を含まないと第２のサブプロセスが判断した場合（プロセス・ブロック５９１０に対するＮＯの出力）、第２のサブプロセスは、現在要求されているＷｉｋｉページが祖先Ｗｉｋｉページを有するかどうかについて判断を行う（プロセス・ブロック５９１２）。祖先Ｗｉｋｉページは、ページ命名階層内のより上位レベルで発生するＷｉｋｉページである。たとえば、Ｗｉｋｉページが「レベル１／レベル２」と命名され、「レベル１」と命名されたＷｉｋｉページが存在する場合、「レベル１」と命名されたＷｉｋｉページは、「レベル１／レベル２」というＷｉｋｉページの「祖先（ancestor）と見なされる。本発明の他の例示的な実施形態では、第２のサブプロセスは、Ｗｉｋｉページ・オブジェクトのパス・フィールドをチェックすることにより、現在要求されているＷｉｋｉページが祖先Ｗｉｋｉページを有するかどうかを判断する。パス・フィールドがＷｉｋｉページの名前を含む場合、現在要求されているＷｉｋｉページは祖先Ｗｉｋｉページを有するものと判断される。
【０２９４】
現在要求されているＷｉｋｉページが祖先Ｗｉｋｉページを有すると第２のサブプロセスが判断した場合（プロセス・ブロック５９１２に対するＹＥＳの出力）、第２のサブプロセスは、パスを検索し、パスをアレイにロードし、最も近い祖先が最初に現れるようにアレイの順序を逆にする（プロセス・ブロック５９１４）。ページ名階層では、最も近い祖先ページは、最後のセグメントの直前に発生する名前セグメントである。たとえば、あるページが「レベル１／レベル２／レベル３」と命名されている場合、そのページの最も近い祖先ページは「レベル２」と命名されたページである。そのページの最も遠い祖先ページは「レベル１」と命名されたページである。次に、第２のサブプロセスは、Ｗｉｋｉ＿ｐａｇｅｓテーブル内の行または項目がパス・アレイ内のページ・アイデンティティの１つと一致するかどうかについて判断を行う（プロセス・ブロック５９１６）。Ｗｉｋｉ＿ｐａｇｅｓテーブルは、Ｗｉｋｉページ・オブジェクトのオブジェクト変数を含むデータベース内のテーブルである。本発明の例示的な一実施形態では、ページ・テーブル内の項目または行は、アイデンティティ（ＩＤ）、アカウント、タグ、時間、ボディ、所有者アイデンティティ（所有者ＩＤ）、ｍｏｄｉｆｉｅｄ＿ｂｙ、ｉｓＬａｔｅｓｔ、レイアウト、ｉｓＬａｙｏｕｔ、ｉｓＥｄｉｔｉｎｇ、ｃｏｍｍｅｎｔＯｎ、パス、属性（ａｔｔｒｉｂ）、およびエラーというフィールドを含む。
【０２９５】
一致が存在すると第２のサブプロセスが判断した場合（プロセス・ブロック５９１６に対するＹＥＳの出力）、第２のサブプロセスは、一致として返されるＷｉｋｉレイアウト・ページをロードする（プロセス・ブロック５９１８）。Ｗｉｋｉ＿ｐａｇｅｓテーブル内に一致項目を有することが判明した祖先ページは、整合（matched）祖先ページと呼ばれる。本発明の例示的な一実施形態では、第２のサブプロセスは、照会から一致として返されるＷｉｋｉレイアウト・ページをロードする第３のサブプロセスを呼び出すことにより、照会から一致として返されるＷｉｋｉレイアウト・ページをロードする。本発明の他の例示的な実施形態では、第３のサブプロセスはＷｉｋｉオブジェクトのｌｏａｄＰａｇｅメソッドである。次に動作はプロセス・ブロック５９２４に移行する。
【０２９６】
一致が存在しないと第２のサブプロセスが判断した場合（プロセス・ブロック５９１６に対するＮＯの出力）、第２のサブプロセスは、デフォルト・レイアウト・ページをロードする（プロセス・ブロック５９２０）。本発明の例示的な一実施形態では、デフォルト・レイアウト・ページをロードするためにＷｉｋｉオブジェクトのｌｏａｄＰａｇｅメソッドが呼び出される。その後、動作はプロセス・ブロック５９２４に移行する。
【０２９７】
現在要求されているＷｉｋｉページが祖先Ｗｉｋｉページを有していないと第２のサブプロセスが判断した場合（プロセス・ブロック５９１２に対するＮＯの出力）、第２のサブプロセスは、第２のサブプロセスは、デフォルト・レイアウト・ページをロードする（プロセス・ブロック５９２０）。本発明の例示的な一実施形態では、デフォルト・レイアウト・ページをロードするためにＷｉｋｉオブジェクトのｌｏａｄＰａｇｅメソッドが呼び出される。その後、動作はプロセス・ブロック５９２４に移行する。
【０２９８】
レイアウト・フィールドが現在要求されているＷｉｋｉページ用に設定されていると第２のサブプロセスが判断した場合（プロセス・ブロック５９１０に対するＹＥＳの出力）、第２のサブプロセスは、レイアウト・フィールドで指名されたレイアウト・ページをロードする（プロセス・ブロック５９２２）。本発明の例示的な一実施形態では、指名されたレイアウト・ページをロードするためにＷｉｋｉオブジェクトのｌｏａｄＰａｇｅメソッドが呼び出される。
【０２９９】
次に、第２のサブプロセスは、レイアウトＷｉｋｉページ・オブジェクトを第１のサブプロセスに返す（プロセス・ブロック５９２４）。本発明の例示的な一実施形態では、第２のサブプロセスは、第３のサブプロセスを介してレイアウトＷｉｋｉページ・オブジェクトを第１のサブプロセスに返す。第１のサブプロセスは、現在要求されているＷｉｋｉページのＷｉｋｉページ・オブジェクトのボディ・フィールドのコンテンツをＷｉｋｉレイアウト・ページ・オブジェクトのボディ・フィールドの一部であるページ・コンポーネント「ボディ」に入れる（プロセス・ブロック５９２６）。ボディ・フィールドは、図５のページ５２６のオブジェクト変数５２８などのＷｉｋｉページ・オブジェクトのオブジェクト変数である。本発明の例示的な一実施形態では、第１のサブプロセスは、Ｗｉｋｉレイアウト・ページ・オブジェクトの特殊テンプレート変数を現在要求されているＷｉｋｉページのＷｉｋｉページ・オブジェクトのボディ・フィールドで置き換えることにより、現在要求されているＷｉｋｉページのＷｉｋｉページ・オブジェクトのボディ・フィールドのコンテンツをＷｉｋｉレイアウト・ページ・オブジェクトのボディ・フィールドに入れる。本発明の例示的な一実施形態では、特殊テンプレート変数は文字列変数である。本発明の他の例示的な実施形態では、第１のサブプロセスは、文字列置換により特殊テンプレート変数を現在要求されているＷｉｋｉページのボディで置き換える。
【０３００】
次に、現在要求されているページのＷｉｋｉページ・オブジェクトのボディ・フィールドは、Ｗｉｋｉレイアウト・ページ・オブジェクトのボディ・フィールドで置き換えられる（プロセス・ブロック５９２８）。Ｗｉｋｉレイアウト・ページ・オブジェクトのボディ・フィールドは、ヘッダ、メニュー、右マージン、左マージン、フッタ、およびボディなどのページ・コンポーネントを含む。クライアント・ブラウザでページを描画するための処理は、通常通り続行され（プロセス・ブロック５９３０）、その後、動作は終了する。したがって、クライアント・ブラウザで描画されると、現在要求されているＷｉｋｉページは、関連Ｗｉｋｉレイアウト・ページに包まれた現在要求されているＷｉｋｉページの元のコンテンツを含む。
【０３０１】
したがって、本発明の例示的な諸実施形態は、Ｗｉｋｉレイアウト・ページのボディにＷｉｋｉページ・コンテンツを埋め込むことを可能にする。さらに、具体的なレイアウトをＷｉｋｉページに関連付けることができる。ユーザは、単純に新しいＷｉｋｉページを作成し、新たに作成したＷｉｋｉページのコンテンツを編集することにより、新しいＷｉｋｉレイアウト・ページを作成することができる。新たに作成したＷｉｋｉページの各セクションのデフォルト・コンテンツは、コマンドがコンテンツを提供するセクションにちなんで命名されたＷｉｋｉコマンドによって提供される。ユーザは、ＨＴＭＬページ・フローを使用することにより、ユーザが希望するそのページ上の任意の位置にこれらのＷｉｋｉコマンドからのコンテンツを含めることができる。ユーザは、ユーザが適合すると見なすように、その他の静的ＨＴＭＬコンテンツおよびその他の動的Ｗｉｋｉコマンドを新たに作成したＷｉｋｉページ内に含めることができる。
【０３０２】
さらに、本発明の例示的な諸実施形態は、あるＷｉｋｉページが祖先ページからそのＷｉｋｉページのレイアウトを継承することを可能にする。各Ｗｉｋｉページは、そのＷｉｋｉページに関する祖先ページであって、そのＷｉｋｉページに関連するページのリストを有する。祖先ページのリストは、Ｗｉｋｉオブジェクト内のフィールドに保管される。本発明の例示的な一実施形態では、そのフィールドはパス・フィールドと呼ばれる。Ｗｉｋｉページ・レイアウト修飾子を含む祖先リスト内で逆階層順に第１のＷｉｋｉページを検出する照会が使用される。継承すべきターゲットＷｉｋｉページについて、指定のレイアウト・ページが選択される。
【０３０３】
図６１は、本発明の例示的な一実施形態によりＷｉｋｉページを描画する動作の流れ図である。図６１の動作は、図４のＷｉｋｉエンジン４０２などのＷｉｋｉエンジン、より具体的には、図５のＷｉｋｉコントローラ５００などのＷｉｋｉコントローラによって実装することができる。動作は、ＷｉｋｉエンジンがＷｉｋｉページを表示するための要求を受信するときに始まる（プロセス・ブロック６００２）。この要求は、典型的には、リモート・クライアント・ブラウザによって発行されたＨＴＴＰ要求である。Ｗｉｋｉコントローラ・オブジェクトがこの要求を処理する。Ｗｉｋｉコントローラ・オブジェクトは、Ｗｉｋｉレイアウト・ページと結合された要求されたＷｉｋｉページを描画するプロセスを開始する（プロセス・ブロック６００４）。
【０３０４】
本発明の例示的な一実施形態では、要求されたＷｉｋｉページを描画するプロセスは、図５のＷｉｋｉオブジェクト５０８などのＷｉｋｉオブジェクトのｓｈｏｗＰａｇｅメソッドを呼び出すことによって呼び出される。ｓｈｏｗＰａｇｅメソッドは、要求されたＷｉｋｉページを検索し、要求されたＷｉｋｉページのＨＴＭＬバージョンを描画し、これはクライアント・ブラウザで表示することができる。Ｗｉｋｉオブジェクトは、新たに要求されたＷｉｋｉページに関するコンテンツを生成するために使用されるオブジェクトおよびフィールドのすべてに関するリポジトリとして動作する。次に、Ｗｉｋｉエンジンは、コンポーネント・フィールドという図５のＷｉｋｉページ５２６などの要求されたＷｉｋｉページのフィールドに保管されたビット・マスクのビット・マスク設定をテストする（プロセス・ブロック６００６）。コンポーネント・フィールド・ビット・マスクは、ヘッダ、メニュー、フッタなど、Ｗｉｋｉページ内の各ページ・コンポーネントに対応するビットを含む。所与のページ・コンポーネントに関するビットまたは設定が１という値を有する場合、レイアウト・ページ内の対応するページ・コンポーネントのＷｉｋｉコマンドは、Ｗｉｋｉコマンドによって生成されたコンテンツをＷｉｋｉページに付与することができる。所与のページ・コンポーネントに関するビットまたは設定が０という値を有する場合、レイアウト・ページ内の対応するページ・コンポーネントのＷｉｋｉコマンドは、Ｗｉｋｉコマンドが生成することになっているコンテンツをＷｉｋｉページに付与することができない。
【０３０５】
次に、動作は、要求されたＷｉｋｉページを関連Ｗｉｋｉレイアウト・ページと結合し（プロセス・ブロック６００８）、結合ページを形成する。本発明の例示的な一実施形態では、要求されたＷｉｋｉページに関連するＷｉｋｉレイアウト・ページを決定するために、ページ・テーブルをチェックして、要求されたＷｉｋｉページに関連する特定のＷｉｋｉレイアウト・ページを決定する。本発明の例示的な一実施形態では、ページ・テーブルはＷｉｋｉ＿ｐａｇｅテーブルと呼ばれる。要求されたＷｉｋｉページがページ・テーブル内のＷｉｋｉページに関連する特定のＷｉｋｉレイアウト・ページを備えていない場合、デフォルトＷｉｋｉレイアウト・ページが要求されたＷｉｋｉページに関連付けられ、結合される。
【０３０６】
したがって、本発明の例示的な諸実施形態は、Ｗｉｋｉページ・レイアウト・セクションをプログラムにより隠したり示したりすることができる。Ｗｉｋｉページ設定は、ユーザがＷｉｋｉページを設定するときにユーザによって編集可能なチェックボックスとして実装される。チェックボックスにチェックを付け、チェックをはずすことにより、ユーザは、様々なページ・コンポーネント、ならびに、ページ・コメント、添付物、および電子メールの可視性を制御する。
【０３０７】
次に図６２を参照すると、本発明の例示的な一実施形態によるサーバ側データ・ハブ・オブジェクト・クラスのためのクラス定義の例証が描写されている。図２２のサーバ側データ・ハブ・オブジェクト２１００などのサーバ側データ・ハブ・オブジェクトは、コード６１０２内のクラス変数などのＷｉｋｉデータ・ハブ・クラス定義によって定義された属性およびオブジェクト変数を有する。
【０３０８】
この例示的なＷｉｋｉデータ・ハブ・クラス定義は、Ｗｉｋｉコマンド・オブジェクトのアレイ６１０４、コンシューマＩＤのアレイ６１０６、およびプロデューサＩＤのアレイ６１０８を提供する。したがって、所与のページ・インスタンスについてサーバ側データ・ハブがインスタンス化されるたびに、サーバ側データ・ハブ・インスタンスに関するデータ・ハブ属性は、上記に示すＷｉｋｉデータ・ハブ・クラス定義などのＷｉｋｉデータ・ハブ・クラス定義によって定義される。
【０３０９】
次に図６３を参照すると、本発明の例示的な一実施形態によるデータ・ハブ管理メソッドのクラスのための１組のメソッド・インターフェースの例証が描写されている。この１組のデータ・ハブ管理メソッド６２００は、図１４のデータ・ハブ管理１４０２などのサーバ側データ・ハブに関連するデータ・ハブ管理メソッド・インターフェースである。コード６２０２は、図１の記憶装置１０８など、ファイル・システムまたはその他のデータ記憶装置に保存されたデータ・ハブ・オブジェクトを復元するためのメソッドの一例である。コード６２０４は、データ・ハブ・オブジェクトのインスタンスをファイル・システムに保存またはキャッシュするためのメソッドの一例である。
【０３１０】
次に図６４を参照すると、本発明の例示的な一実施形態によるプロデューサおよびコンシューマ・メソッドのクラスのための１組のメソッド・インターフェースの例証が示されている。この１組のプロデューサおよびコンシューマ・メソッド６３００は、図２２のプロデューサおよびコンシューマなどのサーバ側データ・ハブに関連するデータ・ハブ・メソッド・インターフェースである。この１組のデータ・ハブ管理メソッド６２００は、図２２のプロデューサおよびコンシューマなどのデータ・ハブ管理メソッド・インターフェースである。
【０３１１】
コード６３０２は、データ・ハブにコマンドを追加するためのメソッドである。コード６３０４は、データ・ハブのメンバであるコマンドを取得するためのメソッドである。コード６３０６は、コマンドを取得するためのメソッドである。コード６３０８は、プロデューサ・コマンドを追加するために呼び出されるメソッドである。コード６３１０は。編集可能プロデューサ・コマンドを追加するためのメソッドである。編集可能プロデューサ・コマンドは、作成動作、更新動作、および削除動作のために編集できるデータを提供する。
【０３１２】
コード６３１２は、正規または編集可能プロデューサ・コマンドなどのプロデューサ・コマンドを除去するためのメソッドである。コード６３１４は、すべてのプロデューサのリストを取得するためのメソッドである。コード６３１６は、特定のトピックに関するリスナとしてのコンシューマ・コマンドを追加するためのメソッドである。コード６３１８は、特定のトピックに関するリスナとしてのコンシューマ・コマンドを除去するためのメソッドである。コード６３２０は、特定のトピックを聴取しているコンシューマ・コマンドのリストを取得するためのメソッドである。コード６３２２は、特定のコマンドに関するリスナとしてのクライアント・コンシューマ・コマンドを追加するためのメソッドである。
【０３１３】
コード６３２４は、クライアントＪａｖａＳｃｒｉｐｔハンドラを追加するためのコマンドである。コード６３２６は、特定のトピックに関するリスナとしてのコンシューマ・コマンドを除去するためのコードである。コード６３２８は、特定のトピックを聴取しているコンシューマ・コマンドのリストを取得するためのメソッドである。コード６３３０は、特定のトピックに関するリスナとしてのクライアント・コンシューマを追加するためのメソッドである。コード６３３２は、クライアント側データ・ハブに属すコマンドに関するクライアント上のＪａｖａＳｃｒｉｐｔコードを生成するためのメソッドである。
【０３１４】
次に図６５を参照すると、本発明の例示的な一実施形態によるトピック・メソッドのクラスのための１組のメソッド・インターフェースの例証が示されている。この１組のトピック・メソッド６３４０は、図２２のトピック２１０６などのサーバ側データ・ハブ上のトピック・メソッドに関するメソッド・インターフェースである。たとえば、コード６３４２は、イベント・トピックを追加するためのメソッドの一例である。コード６３４４は、イベント・トピックを除去するためのメソッドである。
【０３１５】
次に図６６を参照すると、本発明の例示的な一実施形態によるイベント処理メソッドのクラスのための１組のメソッド・インターフェースの例証が示されている。この１組のイベント処理メソッド６４００は、図２２のイベント処理２１０８などのサーバ側データ・ハブ上のイベント処理メソッドに関するメソッド・インターフェースである。たとえば、コード６４０２は、イベントを始動するためのメソッドである。コード６４０４は、サーバ上のイベントを処理するためのメソッドである。コード６４０４は、サーバ向けのクライアント・イベントを処理するためのメソッドである。複数のイベントをバッチとしてサーバに送信することができる。
【０３１６】
次に図６７を参照すると、本発明の例示的な一実施形態によるコマンド管理メソッドのクラスのための１組のメソッド・インターフェースの例証が示されている。この１組のコマンド管理メソッド６５００は、図２２のコマンド管理２１１０などのサーバ側データ・ハブ上のコマンド管理メソッドに関するメソッド・インターフェースである。たとえば、コード６５０２は、コマンドに関する引数を設定するためのメソッドである。これにより、ソース内の引数が変更される。コード６５０４は、ページ・ソースからコマンドを削除するためのメソッドである。
【０３１７】
次に図６８を参照すると、本発明の例示的な一実施形態によるクライアント側データ・ハブ・オブジェクト・クラスのためのクラス定義の例証が描写されている。データ・ハブ属性およびオブジェクト変数は、コード６６００に示されているように、クライアント側データ・ハブに関するＷｉｋｉデータ・ハブ・クラス定義によって定義される。コード６６−２は、コンシューマＩＤに関するオブジェクト変数である。コード６６０４は、トピックに関するオブジェクト変数である。コード６６０６は、イベントに関するオブジェクト変数である。
【０３１８】
次に図６９を参照すると、本発明の例示的な一実施形態によるプロデューサおよびコンシューマ・メソッドのクラスのための１組のメソッド・インターフェースの例証が示されている。この１組のプロデューサおよびコンシューマ・メソッド６７００は、図２３のプロデューサおよびコンシューマ２２０２などのクライアント側データ・ハブ上のプロデューサおよびコンシューマ・メソッド・インターフェースである。たとえば、コード６７０２は、コンシューマ・コマンドを追加するためのメソッドである。コード６７０４は、コンシューマ・コマンドを除去するためのメソッドである。
【０３１９】
次に図７０を参照すると、本発明の例示的な一実施形態によるトピック・メソッドのクラスのための１組のメソッド・インターフェースの例証が描写されている。この１組のトピック・メソッド６８００は、図２３のトピック２２０４などのクライアント側データ・ハブ上のトピック・メソッドに関するメソッド・インターフェースである。たとえば、コード６８０２は、他のコンシューマ・コマンドに使用可能なトピックを追加するためのメソッドである。コード６８０４は、使用可能なトピックのリストを取得するためのメソッドである。
【０３２０】
次に図７１を参照すると、本発明の例示的な一実施形態によるイベント処理メソッドのクラスのための１組のメソッド・インターフェースの例証が示されている。この１組のイベント処理メソッド６９００は、図２３のイベント処理２２０６などのクライアント側データ・ハブ上のイベント処理メソッドに関するメソッド・インターフェースである。たとえば、コード６９０２は、すべての待機（queued up）イベントを始動するためのメソッドである。コード６９０４は、イベントを始動するためのメソッドである。コード６９０６は、実行のためにイベントをサーバに送信するためのメソッドである。
【０３２１】
次に図７２を参照すると、本発明の例示的な一実施形態によるコマンド管理メソッドのクラスのための１組のメソッド・インターフェースの例証が示されている。この１組のコマンド管理メソッド７０００は、図２３のコマンド管理２２０８などのクライアント側データ・ハブ上のコマンド管理メソッドに関するメソッド・インターフェースである。たとえば、コード７００２は、Ｗｉｋｉコマンドを追加するためのメソッドである。コード７００４は、コマンドを削除するためのメソッドである。
【０３２２】
データ・ハブ・トピック・オブジェクトは、コンシューマが加入できるトピックならびにプロデューサ・コマンドが公表または始動できるトピックを定義する。たとえば、検索コンポーネントは、ある検索トピックに加入するコンシューマである。ユーザ・インターフェースがユーザから検索語を受信すると、そのユーザ・インターフェースは検索トピックに関するイベントを始動する。換言すれば、ユーザ・インターフェースは、コンシューマ検索コンポーネントによって加入されたトピックを公表するプロデューサである。
【０３２３】
次に図７３を参照すると、本発明の例示的な一実施形態によるデータ・ハブ・トピック・オブジェクトのクラスのための１組のオブジェクト変数およびメソッド・インターフェースの例証が描写されている。オブジェクト変数７１００は、トピック・オブジェクトの属性を定義する。この１組のメソッドは、図２２のデータ・ハブ・トピック・オブジェクト２１１２および図２３のデータ・ハブ・トピック・オブジェクト２２１０などのクライアント側データ・ハブまたはサーバ側データ・ハブ上のデータ・ハブ・トピック・オブジェクトに関するメソッド・インターフェースである。本発明のこの例示的な実施形態では、サーバに関連するデータ・ハブ・トピック・オブジェクトとクライアントに関連するデータ・ハブ・トピック・オブジェクトは同じオブジェクト変数およびメソッドを有する。
【０３２４】
次に図７４を参照すると、本発明の例示的な一実施形態によるデータ・ハブ・イベント・オブジェクトのクラスのためのクラス定義およびメソッド・インターフェースの例証が描写されている。クラス定義７２００は、イベント・オブジェクトの属性を定義する。たとえば、コード７２０２は、トピックに関するオブジェクト変数を定義する。すべてのイベント・オブジェクトは、トピック・オブジェクト変数でトピック値を有する。コード７２０４は、値に関するオブジェクト変数を定義する。イベント・オブジェクトは、オブジェクト変数値に保管されたデータを有する可能性がある。しかし、すべてのイベント・オブジェクトがデータを含むわけではない。
【０３２５】
本発明のこの例示的な実施形態では、１組のメソッドは、図２２のデータ・ハブ・イベント・オブジェクト２１１４および図２３のデータ・ハブ・イベント・オブジェクト２２１２などのデータ・ハブ・イベント・オブジェクトに関するメソッド・インターフェースである。サーバに関連するデータ・ハブ・イベント・オブジェクトとクライアントに関連するデータ・ハブ・イベント・オブジェクトは同じオブジェクト変数およびメソッドを有する。
【０３２６】
データ・ハブ・オブジェクト、データ・ハブ・トピック・オブジェクト、またはデータ・ハブ・イベント・オブジェクト、あるいはこれらの組み合わせは、本発明の例示的な諸実施形態の範囲を逸脱せずに、例示的な諸実施形態に示されていない追加のメソッドを含むことができる。加えて、データ・ハブ・オブジェクト、データ・ハブ・トピック・オブジェクト、またはデータ・ハブ・イベント・オブジェクト、あるいはこれらの組み合わせに関連するメソッドのうちの１つまたは複数は、本発明の例示的な諸実施形態によるデータ・ハブ・オブジェクト、データ・ハブ・トピック・オブジェクト、またはデータ・ハブ・イベント・オブジェクト、あるいはこれらの組み合わせのための１組のメソッドにはない可能性がある。
【０３２７】
イベント・ベースのＷｉｋｉコンポーネント・モデルでは、Ｗｉｋｉコンポーネントによっては、コンポーネントが応答するかまたはイベント・オブジェクトを始動する前に最小十分セットの引数値が存在することを要求する。これらの最小十分引数は、複数の異種ソースからのものである可能性がある。したがって、本発明の例示的な諸実施形態の諸態様は、宣言された／定義されたパラメータ基準を満足するための最小十分引数が存在する場合のみ、「データ／使用可能」イベントが始動されるように、潜在的に複数のソースからの引数データを集約し、宣言されたパラメータ基準に対して引数セットを突き合わせる、最小十分引数検出スキームを提供する。
【０３２８】
Ｗｉｋｉ引数オブジェクトは、図１４のＷｉｋｉコマンド１４０４およびＷｉｋｉコマンド１４１２などのＷｉｋｉコマンドに関連するオブジェクトである。Ｗｉｋｉ引数オブジェクトは、コマンドが始動するために必要な引数が設定され、有効であるかどうかを示す「効用（avail）」プロパティを有する。
【０３２９】
図７５は、本発明の例示的な一実施形態によるＷｉｋｉ引数オブジェクトのためのクラス定義の例証である。引数／使用可能イベントを始動すべきかどうかを検出するためのアルゴリズムは、図１４のＷｉｋｉコマンド・オブジェクト１４０４および１４１２などのコマンド・オブジェクト上のＷｉｋｉ引数オブジェクトによって実行される。コード７３０２は、引数オブジェクトが有効であるかどうかを示すオブジェクト変数である。コード７３０４は、引数が設定され、使用可能であるかどうかを示す引数オブジェクトである。
【０３３０】
次に図７６を参照すると、本発明の例示的な一実施形態により引数／使用可能イベントを始動すべきかどうかを検出するためのアルゴリズムの擬似コードの例証が示されている。
【０３３１】
この例では、コード７４００は、データ・ハブ・イベント・オブジェクトを始動するための最小必須引数セット内の各引数が使用可能であるかどうかを判断するアルゴリズムに関するものである。使用可能な変数がヌルであるかどうかを判断するために、各引数がコード７４０２でチェックされる。セット内の各引数が使用可能であることをアルゴリズムが示す場合、コード７４０６は、その引数が使用可能であり、設定されている可動化について判断を行う。その引数が使用可能であり、設定されている場合、コード７４０８は、引数セットに関連する新しいデータ・ハブ・イベント・オブジェクトを始動する。
【０３３２】
したがって、例示的な諸実施形態の諸態様は、Ｗｉｋｉ環境およびクライアント環境内のコマンド間でイベント・オブジェクトを伝搬または経路指定するためのサーバ側データ・ハブ・オブジェクトおよびそれに対応するクライアント側データ・ハブ・オブジェクトを提供する。データ・ハブ・オブジェクトの使用により、コマンドは、所与のＷｉｋｉページに関連するイベントの処理中により容易く対話することができる。
【０３３３】
上記で詳述した本発明の例示的な諸実施形態はＷｉｋｉ環境内のＷｉｋｉアプリケーションに関して記載されているが、本発明の上記の例示的な諸実施形態はＷｉｋｉ環境内のＷｉｋｉアプリケーションに限定されないことに留意されたい。この説明における一例としてのＷｉｋｉ環境内のＷｉｋｉアプリケーションの使用は、いずれにしても本発明の範囲を制限するためのものではない。本発明の上記の例示的な諸実施形態は、インターフェースを介してユーザ・グループによりアクセス可能な任意の共用環境にも等しく適用されることは、当業者にとって明白になるであろう。さらに、上記の例示的な諸実施形態の特定の態様はＪａｖａＳｃｒｉｐｔ言語に関して説明されているが、この説明における一例としてのＪａｖａＳｃｒｉｐｔ言語の使用は、いずれにしても本発明の範囲を制限するためのものではない。当業者であれば、任意のオブジェクト指向スクリプト言語を使用して上記の例示的な諸実施形態を実装可能であることを認識するであろう。
【０３３４】
図面内の流れ図およびブロック図は、本発明の様々な諸実施形態による方法、装置、およびコンピュータ・プログラムについて可能な実装例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能（複数も可）を実装するための１つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実装例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることに留意されたい。たとえば、連続して示されている２つのブロックは、関係する機能に応じて、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。
【０３３５】
本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェアとソフトウェアの両方の要素を含む実施形態の形を取ることができる。好ましい一実施形態では、本発明は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェアで実装される。
【０３３６】
さらに、本発明は、コンピュータまたは任意の命令実行システムによりあるいはそれに関連して使用するためのプログラム・コードを提供するコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータ・プログラムの形を取ることができる。この説明のために、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容、保管、通信、伝搬、または伝送可能な任意の有形装置にすることができる。
【０３３７】
この媒体は、電子、磁気、光、電磁、赤外線、または半導体システム（あるいは装置またはデバイス）もしくは伝搬媒体にすることができる。コンピュータ可読媒体の例としては、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、剛性磁気ディスク、および光ディスクを含む。光ディスクの現在の例としては、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクト・ディスク（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【０３３８】
プログラム・コードの保管または実行あるいはその両方に適したデータ処理システムは、システム・バスを介して記憶素子に直接または間接的に結合された少なくとも１つのプロセッサを含むことになる。記憶素子としては、プログラム・コードの実際の実行中に使用されるローカル・メモリと、大容量記憶装置と、実行中に大容量記憶装置からコードを検索しなければならない回数を削減するために少なくとも何らかのプログラム・コードの一時記憶を提供するキャッシュ・メモリとを含むことができる。
【０３３９】
入出力またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、直接あるいは介在する入出力コントローラを介してシステムに結合することができる。
【０３４０】
また、データ処理システムが介在する私設網または公衆網を介してその他のデータ処理システムあるいはリモート・プリンタまたは記憶装置に結合された状態になれるようにするために、ネットワーク・アダプタもシステムに結合することができる。モデム、ケーブル・モデム、およびイーサネット・カードは、現在使用可能なタイプのネットワーク・アダプタのうちのいくつかに過ぎない。
【０３４１】
本発明の説明は、例証および解説のために提示されたものであり、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は当業者にとって明白なものになるであろう。この実施形態は、本発明の原理、実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【図１】
2009543167.tif 000003
【図２】
2009543167.tif 000004
【図３】
2009543167.tif 000005
【図４】
2009543167.tif 000006
【図５】
2009543167.tif 000007
【図６】
2009543167.tif 000008
【図７】
2009543167.tif 000009
【図８】
2009543167.tif 000010
【図９】
2009543167.tif 000011
【図１０】
2009543167.tif 000012
【図１１】
2009543167.tif 000013
【図１２】
2009543167.tif 000014
【図１３】
2009543167.tif 000015
【図１４】
2009543167.tif 000016
【図１５】
2009543167.tif 000017
【図１６】
2009543167.tif 000018
【図１７】
2009543167.tif 000019
【図１８】
2009543167.tif 000020
【図１９】
2009543167.tif 000021
【図２０】
2009543167.tif 000022
【図２１】
2009543167.tif 000023
【図２２】
2009543167.tif 000024
【図２３】
2009543167.tif 000025
【図２４】
2009543167.tif 000026
【図２５】
2009543167.tif 000027
【図２６】
2009543167.tif 000028
【図２７】
2009543167.tif 000029
【図２８】
2009543167.tif 000030
【図２９】
2009543167.tif 000031
【図３０】
2009543167.tif 000032
【図３１】
2009543167.tif 000033
【図３２】
2009543167.tif 000034
【図３３】
2009543167.tif 000035
【図３４】
2009543167.tif 000036
【図３５】
2009543167.tif 000037
【図３６】
2009543167.tif 000038
【図３７】
2009543167.tif 000039
【図３８】
2009543167.tif 000040
【図３９】
2009543167.tif 000041
【図４０】
2009543167.tif 000042
【図４１】
2009543167.tif 000043
【図４２】
2009543167.tif 000044
【図４３】
2009543167.tif 000045
【図４４】
2009543167.tif 000046
【図４５】
2009543167.tif 000047
【図４６】
2009543167.tif 000048
【図４７】
2009543167.tif 000049
【図４８】
2009543167.tif 000050
【図４９】
2009543167.tif 000051
【図５０】
2009543167.tif 000052
【図５１】
2009543167.tif 000053
【図５２】
2009543167.tif 000054
【図５３】
2009543167.tif 000055
【図５４】
2009543167.tif 000056
【図５５】
2009543167.tif 000057
【図５６】
2009543167.tif 000058
【図５７】
2009543167.tif 000059
【図５８】
2009543167.tif 000060
【図５９】
2009543167.tif 000061
【図６０】
2009543167.tif 000062
【図６１】
2009543167.tif 000063
【図６２】
2009543167.tif 000064
【図６３】
2009543167.tif 000065
【図６４】
2009543167.tif 000066
【図６５】
2009543167.tif 000067
【図６６】
2009543167.tif 000068
【図６７】
2009543167.tif 000069
【図６８】
2009543167.tif 000070
【図６９】
2009543167.tif 000071
【図７０】
2009543167.tif 000072
【図７１】
2009543167.tif 000073
【図７２】
2009543167.tif 000074
【図７３】
2009543167.tif 000075
【図７４】
2009543167.tif 000076
【図７５】
2009543167.tif 000077
【図７６】
2009543167.tif 000078
【手続補正書】
【提出日】平成21年4月14日(2009.4.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ページに関するページ・レイアウトを継承するためのコンピュータで実行される方法であって、
クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、前記現行ページが１組の祖先ページを有するかどうかを判断するステップと、
前記１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるように前記１組の祖先ページを配置するステップと、
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するステップと、
前記識別されたレイアウト・ページを前記現行ページと結合して結合ページを形成するステップと、
前記結合ページを前記クライアント・ブラウザに送信するステップと、
を含む、コンピュータで実行される方法。
【請求項２】
前記ページが、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂ環境内のページである、請求項１記載のコンピュータで実行される方法。
【請求項３】
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別する前記ステップが、
整合祖先ページを形成するために前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出するためにデータベースに照会するステップと、
前記整合祖先ページに関連する前記レイアウト・ページを決定するステップと、
をさらに含む、請求項１記載のコンピュータで実行される方法。
【請求項４】
前記ページ・テーブル内の項目が、１つのページと、前記ページに関連するレイアウト・ページとを含む、請求項３記載のコンピュータで実行される方法。
【請求項５】
前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出しなかったことに応答して、前記１組の祖先ページのうちの１つの祖先ページにデフォルト・レイアウト・ページを関連付けるステップ
をさらに含む、請求項３記載のコンピュータで実行される方法。
【請求項６】
前記現行ページが前記１組の祖先ページのリストを含む、請求項１記載のコンピュータで実行される方法。
【請求項７】
前記１組の祖先ページのうちで前記最も近い祖先ページが、最後の名前セグメントの直前に発生する名前セグメントに対応するページであって、前記最後の名前セグメントが前記現行ページに対応する、請求項１記載のコンピュータで実行される方法。
【請求項８】
ページに関するページ・レイアウトを継承するためのコンピュータ使用可能プログラム・コードを含むコンピュータ使用可能媒体を含むコンピュータ・プログラムであって、
クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、前記現行ページが１組の祖先ページを有するかどうかを判断するためのコンピュータ使用可能プログラム・コードと、
前記１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるように前記１組の祖先ページを配置するためのコンピュータ使用可能プログラム・コードと、
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するためのコンピュータ使用可能プログラム・コードと、
前記識別されたレイアウト・ページを前記現行ページと結合して結合ページを形成するためのコンピュータ使用可能プログラム・コードと、
前記結合ページを前記クライアント・ブラウザに送信するためのコンピュータ使用可能プログラム・コードと、
を含む、コンピュータ・プログラム。
【請求項９】
前記ページが、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂ環境内のページである、請求項８記載のコンピュータ・プログラム。
【請求項１０】
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するための前記コンピュータ使用可能プログラム・コードが、
整合祖先ページを形成するために前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出するためにデータベースに照会するためのコンピュータ使用可能プログラム・コードと、
前記整合祖先ページに関連する前記レイアウト・ページを決定するためのコンピュータ使用可能プログラム・コードと、
をさらに含む、請求項８記載のコンピュータ・プログラム。
【請求項１１】
前記ページ・テーブル内の項目が、１つのページと、前記ページに関連するレイアウト・ページとを含む、請求項９記載のコンピュータ・プログラム。
【請求項１２】
前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出しなかったことに応答して、前記１組の祖先ページのうちの１つの祖先ページにデフォルト・レイアウト・ページを関連付けるためのコンピュータ使用可能プログラム・コード
をさらに含む、請求項９記載のコンピュータ・プログラム。
【請求項１３】
前記現行ページが前記１組の祖先ページのリストを含む、請求項８記載のコンピュータ・プログラム。
【請求項１４】
前記１組の祖先ページのうちで前記最も近い祖先ページが、最後の名前セグメントの直前に発生する名前セグメントに対応するページであって、前記最後の名前セグメントが前記現行ページに対応する、請求項８記載のコンピュータ・プログラム。
【請求項１５】
ページに関するページ・レイアウトを継承するためのデータ処理システムであって、
コンピュータ使用可能プログラム・コードを保管する記憶装置と、
クライアント・ブラウザから現行ページを示すための要求を受信したことに応答して、前記現行ページが１組の祖先ページを有するかどうかを判断し、前記１組の祖先ページのうちで最も近い祖先ページが祖先ページのリスト内で最初に現れるように前記１組の祖先ページを配置し、前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別し、前記識別されたレイアウト・ページを前記現行ページと結合して結合ページを形成し、前記結合ページを前記クライアント・ブラウザに送信するためのコンピュータ使用可能プログラム・コードを実行するプロセッサと、
を含む、データ処理システム。
【請求項１６】
前記ページが、単一または複数のユーザが静的および対話型コンテンツを効率よく統合できるようにする共同Ｗｅｂ環境内のページである、請求項１５記載のデータ処理システム。
【請求項１７】
前記１組の祖先ページのうちの１つの祖先ページに関連するレイアウト・ページを識別するための前記コンピュータ使用可能プログラム・コードを実行することが、
整合祖先ページを形成するために前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出するためにデータベースに照会し、前記整合祖先ページに関連する前記レイアウト・ページを決定するためのコンピュータ使用可能プログラム・コードを実行すること
をさらに含む、請求項１５記載のデータ処理システム。
【請求項１８】
前記ページ・テーブル内の項目が、１つのページと、前記ページに関連するレイアウト・ページとを含む、請求項１７記載のデータ処理システム。
【請求項１９】
前記１組の祖先ページのうちの１つの祖先ページと一致する項目を有するページ・テーブル内の第１の行を検出しなかったことに応答して、前記１組の祖先ページのうちの１つの祖先ページにデフォルト・レイアウト・ページを関連付けるためのコンピュータ使用可能プログラム・コードを実行すること
をさらに含む、請求項１７記載のデータ処理システム。
【請求項２０】
前記現行ページが前記１組の祖先ページのリストを含む、請求項１５記載のデータ処理システム。
【国際調査報告】
2009543167.tif 000079
2009543167.tif 000080