OpenAjax Metadata仕様におけるマッシュアップ可能なウィジェット(Mashable Widget)
OpenAjax Metadataとは、Ajaxツールキットの互換性を確保するためにAjaxのウィジェットやAPIのためのメタデータをXMLで表現する形式を定義した仕様で、現在バージョン1.0のドラフト版が公開されています。
OpenAjax Metadata仕様の対象とするウィジェットは、コンボボックスやメニューバーのようないわゆるUIコンポーネントと、前節で述べたような独立した機能を提供するウィジェットの両方を含みます。この仕様中では、特に他のウィジェットと連携してマッシュアップを可能とするようなウィジェットを mashable widgetと呼んでいます。ウィジェットを他のウィジェットと連携させ、マッシュアップ可能にするためには次のようなメタデータを定義する必要があります。
- <widget> 要素の jsClass属性: <widget> はウィジェットのメタデータ定義のルート要素です。<widget> 要素のjsClass属性にはウィジェットの振る舞いを実装したJavaScriptクラス名を指定します。この属性を指定することで、そのウィジェットが mashable widgetであることを宣言することになります。同時に、そのウィジェットはOpenAjax Metadata仕様に定義されたWidget APIをサポートする必要があります。
- <property> 要素の sharedAs 属性 :デフォルトではウィジェットのプロパティは他のウィジェットから参照することができませんが、sharedAs属性を指定することでパブリック・プロパティとしてウィジェット間で参照することができるようになります。
- <topic> 要素: ウィジェットが発行 (publish) したり購読 (subscribe) したりするメッセージ・トピックを指定します。ウィジェットは、OpenAjax Hub 2.0 HubClient クラスのpublish関数とsubscribe関数を使ってメッセージを発行したり購読したりできます。
また、 mashable widgetを実装した JavaScript クラスの中で、以下のようなWidget APIを実装する必要があります。
- ウィジェットのロードやアンロードなどのライフサイクルイベント処理
- ウィジェットのプロパティの読み書きや、プロパティ変更時のイベント処理
- topicへのメッセージの発行・購読などのイベント処理
- ウィジェットのサイズ制御
- モード(view, edit, help)
- ドメインをまたがったHTTPリクエストをプロキシ経由でアクセスためのURL書き換え処理
その他に、マッシュアップを円滑に行うために、以下のような属性を使用可能です。
- <widget> 要素の sandbox 属性により、ウィジェットを iframeによるサンドボックスに閉じ込めるべきかどうかのヒントを指定する
- <widget> 要素の scrolling 属性により、ウィジェットにスクロールバーを表示するかどうかを指定する
- <widget> 要素の singleton 属性により、そのウィジェットがWebページ内に一つ以上存在してもよいかどうかを指定する
- <content> 要素の mode 属性により、そのウィジェットが閲覧 (view) モードか編集 (edit) モードか、などを指定する
まとめ
今回は、ブラウザ上でマッシュアップ可能なウィジェットを扱うための標準仕様であるOpenAjax Hub 2.0仕様 と OpenAjax Metadata 1.0仕様についてサンプルコードを交えてご紹介しました。
今回ご紹介したコードについては、OpenAjax Allianceにより公開されているOpenAjax Hub 2.0 のリファレンス実装により動作確認を行いました。OpenAjax Hub やOpenAjax Metadataの詳細については、 OpenAjax Allianceにより公開されている仕様をご覧ください。
参考文献
- OpenAjax Hub 2.0の詳細な仕様については、OpenAjax Hub 2.0 Specificationをご覧ください。
- OpenAjax Metadata のドラフト仕様は、こちらで公開されています。