
マスカットフレームワーク 2.0.0
RELNOTES.txt - リリースノート

最終更新日: 2008/5/21

マスカットプロジェクト
http://maskat.sourceforge.jp/


 1. 概要
───────────────────────────────────

マスカットフレームワークは Web ブラウザ上で動作するリッチクライアント
アプリケーションのための実行環境および開発フレームワークです。

マスカットフレームワーク バージョン 2.0 は 2006 年 9 月のプロジェクト
発足から最初のメジャー・バージョンアップにあたり、その間のコミュニティ
から寄せられた多くの改善要望・バグ修正を含んだリリースとなっています。

この文書では、マスカットフレームワーク 1.x の開発者向けに、マスカット
フレームワーク 2.0 における変更点を説明します。


 2. コンテナ HTML に関する変更
───────────────────────────────────

2.1 フレームワークの読み込み

マスカット 2.0 では、アプリケーションの動作に必用な JavaScript や CSS
スタイルシートが自動的に読み込まれます。HTML ファイルのヘッダ部分にマ
スカットの JavaScript ファイル (maskat.js) を読み込む指定を記述するだ
けでフレームワークが導入できます。

  ・例:
  <script type="text/javascript" src="path/to/maskat/core/maskat.js">
  </script>

フレームワークの詳細設定は JSON 形式のプロパティファイル (properties.
json) で記述します。プロパティファイルの例を以下に示します:

{
    "maskat.core.plugins": {
        "compat": { "enabled": true },
        "html": { "enabled": false },
        "google": { "enabled": false, "key": "ABCDE" },
        "rialto": {
            "enabled": false,
            "isDebug": false,
            "traceLevel": 0,    
            "isTestVersion": false,
            "language": "en",
            "skin": "standart"
        },
        ... (省略) ...
    }

    "maskat.log.default.level" : "INFO",
    "maskat.log.factory" : "maskat.log.SimpleLogFactory",
    ... (省略) ...
}

プロパティファイルではプラグインの有効／無効の切り替えや、プラグインの
動作設定を行います。


 3. フレームワーク・コアに関する変更
───────────────────────────────────

3.1 公開 API の変更

マスカット 2.0 の公開 API は maskat.core.Application クラスのメソッド
として実装されています。これらのメソッドは コンテナ HTML の onload イ
ベントの発生以降であれば maskat.app オブジェクトを経由して呼び出すこと
ができます。

  ・例1: レイアウトをロードする
   maskat.app.loadLayout("myLayout.xml", "myLayout_e.xml", element);

  ・例2: JavaScript ファイルを非同期でロードする
   maskat.app.loadJavaScript("util.js", true);


3.2 マスカット 1.x の公開 API (非推奨)

マスカット 1.x の公開 API (maskat.* 関数) の一部は、互換性プラグイン
(compat) を有効にすることで利用可能になります。マスカット 2.0 以降では
これらの API の利用を推奨しません。また、利用する際は以下の順番で呼び
出す必要があります:

  1) maskat.loadJSFile 関数
  2) maskat.loadLayoutFile 関数
  3) maskat.loadEventFile 関数

maskat.loadEventFile 関数は maskat.loadLayoutFile 関数で最後に読み込ん
だレイアウト内の GUI オブジェクトに対してイベント処理を関連付けます。
イベント定義 XML の読み込み時に参照エラーを発生させないために、
maskat.loadJSFile 関数はイベント定義 XML の読み込みより前に実行する必
要があります。


 4. レイアウト定義 XML に関する変更
───────────────────────────────────

4.1 部品拡張 API の変更

マスカット 1.x はオープンソースの AJAX ツールキットの一つである Rialto
をベースに拡張したフレームワークでした。このため、拡張部品はホスト・ラ
イブラリである Rialto コンポーネント (rialto.widget.AbstractComponent
クラス) を継承して実装する必要がありました。

これに対して、マスカット 2.0 のコア・アーキテクチャは Rialto API に依
存しません。マスカット 2.0 では開発者が独自の部品や、それらを集めた部
品ライブラリを定義するための API と拡張インタフェースを提供します。部
品開発者は、以下のクラスを定義する必要があります。

  ・プラグイン (maskat.core.Plugin クラスを継承)
  ・部品ライブラリ (maskat.layout.WidgetLibrary クラスを継承)
  ・マスカット部品 (maskat.widget.Widget クラスを継承)


4.2 マスカット 1.x の拡張部品

マスカット 1.x 向けに開発された拡張部品はマスカット 2.0.0 と互換性があ
りません。このため、マスカットプロジェクトから以前に提供されていた下記
の拡張部品が利用できなくなっています。

  ・メニュー (menu, マスカット 1.4.5 から提供)
  ・スクリーン (screen, マスカット 1.4.4 から提供)


4.3 Rialto API の利用方法

マスカット 2.0 では、Rialto API (JavaScript および CSS) は部品ライブラ
リを提供するプラグインの一つとして位置付けられており、プロパティファイ
ル(properties.json) に以下の設定を記述することで利用可能になります。

        "rialto": {
            "enabled": true,
            "isDebug": false,
            "traceLevel": 0,    
            "isTestVersion": false,
            "language": "en",
            "skin": "standart"
        },

ここでは、プラグインの有効／無効を切り替える "enabled" プロパティ以外
はすべて、rialtoConfig オブジェクトのプロパティになっていることに注意
してください。

  ・rialtoConfig.js を編集する必要はありません。
  ・rialtoConfig.pathRialtoE の値 (パス) は自動的に設定されます。


4.4 Google Maps API の利用方法

マスカット 2.0 では Google Maps を利用するための部品を google プラグイ
ンとして分離しています。このプラグインでは、Google Maps API の読み込み
を Google AJAX loader 経由で行います。

この機能を利用するためには、公開先の Web サイトの URL に応じたGoogle
Maps の API キーを取得し、プロパティファイル (properties.json) の設定
値に以下のようにキーを指定してください。

        "google": { "enabled": true, "key": "ABCDE" },

プラグインを有効化してレイアウト定義 XML に googleMap タグを記述すると、
Google Maps を配置することができます。


4.5 XML 名前空間のサポート

マスカット 2.0 ではレイアウト定義 XML における XML 名前空間のサポート
が追加されました。部品ライブラリがそれぞれ独自の XML 名前空間を宣言す
ることで、同じタグ名でも異なる部品として使い分けることが可能です。

XML 名前空間サポートに伴い、レイアウト定義 XML では以下の点が変更され
ています。

  ・デフォルト (無名) 名前空間はマスカット 1.x との互換性のために予約
    されています。拡張部品ライブラリの開発者は、独自の XML 名前空間を
    定義する必要があります。
    
  ・レイアウト定義 XML における DTD 宣言は不要になりました。記述しても
    エラーにはなりませんが、マスカット 2.0 では推奨しません。


 5. イベント定義 XML に関する変更
───────────────────────────────────

5.1 参照整合性のチェック

マスカット 2.0 では、イベント定義 XML の読み込み時に、参照している GUI
オブジェクト名、変数名、JavaScript 関数が定義されているかどうかを検証
します。参照エラーを避けるために、JavaScript ファイルやレイアウト定義
XML は、イベント定義 XML よりも先に読み込んでおく必要があります。


5.2 入力値検証機能の分離

マスカット 2.0 では、入力値検証機能を LiveValidation プラグインで提供
しています。このプラグインでは、入力値検証に関する設定値を別の XML フ
ァイル (バリデーション定義XML) から読み込みます。

このため、イベント定義 XML の source 要素に以下に示す入力値検証用の属
性を記述しても無視されます。マスカット 1.x 向けに記述されたイベント定
義 XML との互換性のため、エラーや警告は発生しません。

  ・type (入力値のデータ型)
  ・regexp (入力文字列の正規表現)
  ・min (入力文字列の最少文字数)
  ・max (入力文字列の最大文字数)
  ・desc (検証エラー時のメッセージ文字列)


5.3 データバインドにおけるデータ取得元／取得先の指定

マスカット 1.x ではイベント定義 XML の一部の属性に JavaScript 式を記述
することができました。これらは eval 関数によって評価されるため、柔軟な
データバインドを実現できる利点がある反面、デバッグが難しくなったり、フ
レームワークの内部に不正にアクセスできるという問題点を含んでいました。

  ・例1: データの取得元としてメソッド呼び出し結果を指定する (エラー)
  <source obj="user.getName()" ... >

  ・例2: データの格納先として配列インデックスを指定する (エラー)
  <target out="result[0]" ... >

マスカット 2.0 ではこれらの属性に GUI オブジェクト名または変数名を指定
する仕様に変更され、イベント定義 XML の読み込み時に参照先の存在チェック
が行われます。JavaScript 式は指定できません。


5.4 データバインドにおける JavaScript 式の利用方法

マスカット 1.x 向けに開発されたアプリケーションからの移行手段として、
マスカット 2.0 では evaluator と呼ばれる疑似部品を提供します。この疑似
部品を使用すると、マスカット 1.x と同様にデータバインド時に JavaScript
式を評価できます。利用方法は以下のとおりです:

  1) レイアウト定義 XML に evaluator タグを 1 つだけ記述します。このタ
     グは疑似部品を生成しますが、画面上には何も表示しません。
  <evaluator name="expr" />

  2) データ取得元や格納先として 1) で作成した疑似部品を指定し、teleType
     属性で任意の JavaScript 式を記述します。

    ・例1: 文字列リテラルを送信
    <source obj="expr" teleType="'Hello, World!'" ... />

    ・例2: オブジェクトのプロパティを送信
    <source obj="expr" teleType="navigator.userAgent" ... />

    ・例3: オブジェクトのプロパティを受信
    <target out="expr" teleType="global.userId" ... />


5.5 応答メッセージにおける XML 名前空間

マスカット 1.x では param タグの ns 属性を用いて送信メッセージに XML
名前空間を指定できましたが、応答メッセージについては指定できませんでし
た。マスカット 2.0 からは result タグにも ns 属性が追加されており、応
答メッセージの名前空間を指定することができます。

  ・例:
   <result rootNode="foo" ns="http://maskat.sourceforge.jp/example/" ... >


5.6 要求・応答メッセージにおける SOAP エンベロープの付与の廃止

マスカット 1.x では param タグ、result タグの soap 属性を設定すること
により、要求・応答メッセージを SOAP エンベロープでラップすることがで
きました。

マスカット 2.x ではこの動作をサポートしておらず、soap 属性の指定は無視
されます。マスカット 1.x 向けに記述されたイベント定義 XML との互換性の
ため、エラーや警告は発生しません。


5.7 要求メッセージ／応答メッセージのカスタム処理関数

マスカット 2.0 では、リモートイベントにおける要求・応答メッセージの生
成・解析処理を ユーザ定義の JavaScript 関数で置き換えることができます。
この拡張機構を使うためには、event タグの marshal 属性、unmarshal 属性
に関数名を指定してください。

  ・例:
   <event type="remote" marshal="myfunc1" unmarshal="myfunc2" ... >

これらの関数は以下の仕様に従って実装してください:

  ・function marshal(layout)
    レイアウトからデータを取得し、要求メッセージとして送信する XML 文
    字列を返却します。
    【引数】  layout:データの取得対象となるレイアウト
    【返却値】  XML 文書を表す文字列

  ・function unmarshal(message, layout)
    応答メッセージとして受信した XML DOM もしくは文字列を解析し、レイ
    アウトにデータを格納する処理を行います。
    【引数】  message: 受信した XML DOM または文字列
               layout:データの格納対象となるレイアウト


 6. ログ出力に関する変更
───────────────────────────────────

6.1 ログ出力設定の分離

マスカット 2.0 では log4javascript を用いたログ出力機能がプラグインで
提供されています。ログ出力設定を XML ファイル (ログ出力定義XML) に分離
しているため、複雑な JavaScript API を呼び出す必要はありません。

また、log4javascript が利用できない場合にも最低限のログメッセージを
ポップアップウインドウで表示する簡易ロガーを標準で提供しています。


以上

───────────────────────────────────
Copyright(C) 2006-2008 マスカットプロジェクト