隨著XML的廣泛應用,RIA環境下客戶端內容數據一般都采用XML格式作為其存儲和數據交換的格式。這種格式的內容數據有其本身的結構和語義信息,因此數據也更復雜更難以處理。GUI XML規范為了解決這種RIA中普遍存在的問題,對內容數據處理提出如下要求: 能夠在XML格式的內容數據基礎上定義內容數據模型,同時又不破壞原有內容數據的結構和語義信息。另一方面,面對RIA環境的特殊要求,在內容數據處理的基礎上還需要增加一系列內容數據交互功能,例如,運行時數據的導入、網絡傳輸以及內容緩沖機制等。
HTML表單的出現在相當大程度上促進了當今的電子商務革命。但其本身在很多方面仍然存在著設計和功能上的不足。其中最重要的一點是HTML表單將數據與用於表現這些數據的構件標簽混雜在一起,違反了良好的標記語言設計的主要原則。另外,表單的可重性也較差,因為我們很難將需要重用的表單部分從HTML頁面中抽取出來。這些缺陷限制了對客戶端浏覽器計算能力的充分利用,大量處理過程不得不依賴於遠程服務器的計算能力,同時也對網絡負載造成了壓力。在RIA應用中亟待著一種能夠替代Html表單的新技術。
此時,W3C的XForms推薦標准應運而生。XForms可以看作是XHTML(一種符合 XML 格式的 HTML)的擴展模塊。與HTML表單的不同之處除了是基於XML語言之外,主要在於XForms實現了MVC設計模式,做到了數據模型、視圖和控制器的分離。簡化了表單設計的難度,使表單可重用性提高。另外一點不同之處在於,雖然XForms是為XHtml語言設計的表單系統,但這並不影響該標准可方便地與其他合適的標記語言集成在一起。
考慮到XForms標准所具有的以上卓越特點,我們在GUI XML的數據綁定模塊與交互模塊中部分地采用了XForms標准。
XForms
被稱為“下一代Web表單”的XForms最初起源於HTML工作組的工作。W3C組織力圖將XForms制定成為HTML表單的替代標准,用於包括桌面電腦、手持設備、信息家電等領域在內的各種平台之上。傳統的Html Web表單沒有將表單的設計目的和表現形式分離開來,表單設計的靈活性很低,同時客戶端計算能力也無法充分利用。
為了克服以上缺點,XForms對表單進行了抽象定義,將表單區分為數據、邏輯和表現三方面。規范中沒有規定實現細節,因此XForms處理器的實現形式是多樣的:既可以基於浏覽器嵌入HTML頁面中,利用Html和Javascript進行表現; 也可以用Java Swing應用程序等形式表現。另外XForms還為應用提供了事件驅動模型,這使得用戶可以像開發普通的GUI應用程序一樣對鼠標、鍵盤等事件進行相應的編程。
XForms標准的成功之處就是將表單的作用和表現方式分離,由相互獨立的部分分別負責描述。這使得XForms的表現方式更靈活。
● 數據定義: XForms中最重要的概念是XForms Model,即XForms模型。其中包括對XML實例數據(instance data)的定義,用於表單收集數據。模型規定了表單中能夠使用的實例數據作為用戶的輸入請求。實例數據可以直接在模型中引用也可以以鏈接形式引用外部XML文件。實例數據對應的模式信息可以進一步提供數據類型和合法性驗證等約束。
● 邏輯定義: 模型中還包括與特定表單和合法性驗證行為相對應的操作的描述。在這一部分定義中設計者可以指定表單中值不能為空的區域,以及該值所需滿足的條件等。這樣XForms處理器可以直接處理表現和用戶交互等操作,而不必與遠程服務器進行實時交互,充分利用了客戶端的計算資源。
● 表現定義: XForms提供了一組標准的UI可視化構件,稱為XForms用戶界面(XForms User Interface)。但對構件的描述只提供了抽象概念,具體實現由XForms處理器來決定。這給XForms的使用留下了極大的空間,推動了XForms的實用化。
XForms中定義的可視化構件已經可以在SVG等XML形式的語言中使用。同時,像Voice Browser工作組也在為XForms等開發用戶界面構件。
以上所提到的數據、邏輯和表現各部分通過XForms提交協議(XForms Submit Protocol)連接起來。該協議定義了XForms如何接收和發送實例數據,以及如何掛起和恢復表單填寫的過程。
XForms的設計目標包括:
● 支持手持設備、電視、桌面浏覽器,以及打印機和掃描儀等;
● 豐富的用戶界面滿足商務、消費和設備控制等各種應用;
● 消除數據、邏輯和表現之間的耦合;
● 增強的國際化功能;
● 支持結構化表單數據;
● 先進的表單邏輯;
● 單頁面多表單以及單表單多頁面;
● 掛起和恢復功能的支持;
● 和XML標簽集的無縫集成。
電子商務表單示例
在一個簡單的電子商務表單中,首先需要選擇是使用現金支付還是使用信用卡支付。如果選擇使用信用卡的話,需要輸入卡號和有效期。
可以想象,為了實現這一表單,我們很難做到從表現(表單控件input)中分離表單作用(數據集合)。而在XForms中我們可以使用如下的定義。
首先定義XForms模型元素(如果使用XHTML作為宿主語言,我們通常需要將該段定義放在head部分)。該XForms模型定義用於收集三部分實例數據,分別位於method,number和expiry元素中。與Html表單類似,數據被提交到的URL由action屬性指定。
< xforms:model>
< xforms:instance>
< ecommerce XMLns="">
< method/>
< number/>
< expiry/>
< /ecommerce>
< /xforms:instance>
< xforms:submission action="http://example.com/submit" method="post" id="submit" includenamespaceprefixes=""/>
< /xforms:model>
其次表單所需要的表現構件用如下的設備無關,平台獨立通用目的的方式定義如下:
< select1 ref="method">
< label>Select Payment Method:< /label>
< item>
< label>Cash< /label>
< value>cash< /value>
< /item>
< item>
< label>Credit< /label>
< value>cc< /value>
< /item>
< /select1>
< input ref="number">
< label>Credit Card Number:< /label>
< /input>
< input ref="expiry">
< label>Expiration Date:< /label>
< /input>
< submit submission="submit">
< label>Submit< /label>
< /submit>
由此可見,XForms的特點非常明顯: 沒有硬編碼痕跡(例如沒有使用radio按鈕這樣的定義),不同設備可以按需繪制“select one”這一構件類型; 表現與用途明顯分離。各自的作用明晰。在表現定義中可以通過構件的ref屬性引用模型中的定義。
鏈接:XForms和GUI XML
GUI XML是一種用於描述圖形化用戶界面構造過程所需應用邏輯的語言,其描述的界面具有設備獨立性模式。這裡所說的“設備”,意味著個人計算機、多種信息應用設備(例如手持式電腦、桌面電話、蜂窩式電話和PCS 電話),以及其他人類可以與之交互的設備。GUI XML是一種說明性的、符合XML 規范的語言。
為了開發一個用戶界面,設計者需要編寫一個GUI XML文檔,其中包含了適用於最終使用此用戶界面的設備的表示風格信息。之後GUI XML將被使用特定的編程語言工具包完成用戶界面的構造(例如JFC、SWT 等),或者自動映射為目標設備所使用的語言(例如Html、WML)。其設計目標如下:
● 使得設計者不需要學習針對特定設備的語言和API 就可以設計出符合設備要求的UI;
● 縮短針對一系列不同設計開發用戶界面的時間;
● 提供了將UI代碼與應用邏輯代碼相分離的特性;
● 使得非程序員能夠設計UI;
● 簡化國際化和本地化的工作量;
● 實現了通過網絡將UI下載到客戶端的高效性;
● 有助於強化安全性;
● 實現了對支撐UI技術的擴展。
顯然GUI XML是實現RIA的一個強大工具,與XForms標准在某些方面具有共同之處。因此在GUI XML 1.1規范的設計過程中,設計者對於XForms標准給予了充分的重視。最終在該版本的GUI XML中引入了基於XForms標准的數據模型定義模塊。