1 關於XForms標準
1.1 背景
表單是Web的一個重要組成部分,一直是交互式Web應用的主要實現方式。Web應用和電子商務解決方案對Web表單提出了新的需求,即更好的帶有豐富交互體驗的Web表單。XForms就是響應這種需求而產生的,它提供了一種新的平臺無關的標記語言,用戶可以使用XForms(通過XForms Processor)與遠程的用戶或代理進行在線交互。XForms是HTML 表單的替代者,吸取了HTML表單的經驗教訓。
關於XForms的更多背景信息,請參考http://www.w3.org/MarkUp/Forms。
1.2 標準閱讀說明
在編寫這個標準時,我們已經考慮到了各種不同類型的讀者,特別是XForm表單的設計者和Xforms規範的實現者。我們希望這個標準能夠爲表單設計者提供一些手段從而創作高效的、富有吸引力的、易於使用的、而且無需關注太多實現細節的文檔(表單)。而對於XForms的實現者,可以在這個標準中找到他們實現標準的XForms 處理器所需要的信息。這個標準首先對XForms 進行了概括介紹,然後對XForms各個組成部分的技術細節進行了詳細說明。
這份標準有各種不同的表述模式。爲了避免矛盾,規定在線電子版本是權威版本。
文檔中使用的術語:must, must not, required, shall, shall not, recommended, should, should not, may 和 optional符合[RFC 2119]標準。
1.3 標準的組織
本標準被組織成以下章節:
第一、二章
對XForms的入門介紹,勾勒了XForms的設計原理,還包括XForms的快速指南。
第三章及後續章節
XForms參考手冊。參考手冊的大部分由XForms標準組成,定義了XForms和XformsProcessors必須如何規範的解釋各個組成部分。
附錄
附錄包含了描述XForms的XML Schema, 參考文獻, 舉例和其他一些有用信息。
1.4 文檔中使用的命名方法
在文檔中使用了以下名稱空間前綴和相應的名稱空間標識符:
xforms:XForms名字空間。例如http://www.w3.org/2002/xforms
(參考
3.1 XForms
名稱空間)
html
:
XHTML
名字空間。例如
http://www.w3.org/1999/xhtml
(參考
[XHTML 1.0])
xs:XML Schema名字空間http://www.w3.org/2001/XMLSchema
(參考
[XML Schema part 1])
xsd
:
XML Schema名字空間http://www.w3.org/2001/XMLSchema
(參考
[XML Schema part 2])
xsi:XML Schema實例(instances)名字空間
http://www.w3.org/2001/XMLSchema-instance
(參考
[XML Schema part 1])
ev
:
XML
事件(
events
)名字空間
http://www.w3.org/2001/xml-events
(參考
[XML Events])
my
:
用戶自定義的名字空間
這只是一個約定,在實際中可以使用任何名字空間前綴。
文檔中使用以下排版方式來描述技術材料。
通過以下方式定義官方術語:[定義: 大多數術語可在第13章術語表中找到]。術語鏈接必要時可能會突出顯示。
XForms中的各種元素的XML表示法使用XHTML Modularization[XHTML Modularization]中Abstract Modules的語法。
舉例子會突出排版:
Example item
Example Item
對外部文檔的引用,如下所示:[Sample Reference],也會帶有引用本文檔部分的鏈接。
引用實例(Sample Reference)
引用—-指向引用
註釋使用以下排版約定:
注意:
向讀者的解釋。
編輯註釋:編輯註釋的名稱 |
|
編輯註釋, 最終發表中不可見。 |
問題(實例實現問題)
問題-名稱
實現者提出的特定問題,例如作爲候選推薦的一部分。
解析
沒有記錄。
1.5 XForms1.1與XForm1.0的區別
本節概括了XForms 1.1的新特點和變化。
model元素現在提供了一個version屬性來幫助表單設計者過渡XForm 1.0到XForms 1.1的轉變。
instance元素現在提供了一個resource屬性,如果實例不包含數據,則可以從URI來獲取實例數據。相比之下,src屬性覆蓋了一個實例中的內部內容。resource屬性在必須支持保存和重新載入基於Xforms的文檔的系統中比較有用。
submission元素提供了許多新的特性,大大改進了XForms的數據通信功能。包括:
- 訪問基於SOAP的網絡服務(web services),RESTful服務,基於ATOM的服務和非XML服務。
- 改進了對提交處理和序列化的控制
- 對提交地址(URI)和實例數據頭(headers with instance data)的控制能力
- 目標實例數據的替換功能
submission元素現在有一個resource屬性和一個resource子元素,實例數據可以通過該屬性或子元素動態的控制提交地址。因此,action屬性不再提倡使用,雖然XForms 1.1仍然支持。
在XForms1.0中,提交功能已經比AJAX強大了,可以根據HTTP和HTTPS服務的結果自動更新表單,包括RSS feeds。在XForms1.1中,method屬性支持delete及其他QName。實例數據可以通過method子元素動態控制方法(method)。現在可以使用header子元素添加甚至通過實例數據動態的控制提交頭(submission headers)。這些特性完善了ATOM和RESTful服務需要的功能。XForms1.1還通過mediatype屬性提供了特定的提交頭行爲來與SOAP1.1和1.2 網絡服務進行通信。
submission元素現在支持relevant和validate屬性,表單設計者可以使用這兩個屬性關閉實例數據的相關性修改和有效性驗證,從而可以使用submission來在服務器或本地文件系統中保存和重新載入未完成的數據。
submission元素現在支持target屬性,可以通過指定需要替換的節點用提交結果進行部分實例替換。replace屬性現在還支持text設置,可以使用非XML(文本)提交結果替換目標節點的內容而不是目標節點本身。
submission元素還支持xforms-submit-serialize事件,表單設計者可以通過該事件提供定製的序列化作爲提交數據(submitssion data),如純文本或完整的XForms文檔。serialization屬性還支持對提交數據序列化的增強的控制(increased control),包括設置成none,使得sumbission用於簡單的地址激活(URI activation)。
xforms-submit-done和xforms-submit-error事件現在有事件上下文信息,提供了更多關於成功和失敗提交的信息,例如成功提交的響應頭和失敗提交的原因代碼。
最後,還添加了許多新的舉例來說明submission的使用。
XForms1.1現在提供了email和card-number 數據類型,因此,表單設計者可以輕鬆的驗證電子郵件地址和信用卡號的輸入值。
爲了進一步簡化表單的設計,XForms1.1 還提供了它自己的XML Schema數據類型定義,XForms版本的數據類型允許值爲空字符串。允許空字符串意味着如年齡或生日等的輸入可以不使用必需的輸入驗證(XML schema數據類型的詞彙空間如xsd:positiveInteger和xsd:date中沒有空字符串)。如果一個輸入是必需的,表單設計者仍然可以結合使用XForms版本的數據類型和required模型條目特性。在XForms定義的數據類型中,當模型的默認名字空間設置成XForms時,允許類型定義可以忽略名字空間的限定,例如,定義成 type=”date”,而不是type=”xsd:date”,這樣簡化了表單的設計。
readonly模型條目特性被用來定義數據模型的不可修改屬性。這意味着不可以在任何模型條目特性系統外來改變它,不僅包括表單控件還包括XForms的動作和通過DOM接口的實例數據訪問。
XForms 1.1 現在包含了許多可用於calculate的函數和其他XPath表達式來支持各種特點,包括:
- 基本的日期運算和處理本地日期和時間:
local-date()
,local-dateTime()
,days-to-date()
,seconds-to-dateTime()
和adjust-dateTime-to-timezone()
current()
,choose()
和context()
基本的安全功能:
digest(), hmac(),
和
random()
改進的數字和字符串處理:
power()
,is-card-number()
和compare()
模型的實例之間交叉搜索:使用兩個參數的
id()
函數
訪問
XForms
事件中的上下文信息:
event()
- 本規範對綁定表達式類型
(
binding expression types
)
提供了更好的分類,對動態依賴(dynamic dependencies
)提供了更嚴格的定義。這些定義保證了表單控件中的XPath表達式和使用index()的動作在需要時自動的重新評估(re-evaluated)。
因爲增加了choose()函數, 所以if()函數不再推薦使用雖然仍然支持,這是爲了避免未來與XPath 2.0中的if關鍵字衝突。
改進了對所有表單控件的通用行爲描述,使其指定了默認的佈局風格和對必需數據的顯示要求。
改進了output表單控件來顯示從實例數據中獲取的非文本類型,特別是圖片。
添加了一個例子來展示 如何使用input控件上的DOMActivate處理器(handler),一旦用戶輸入或者確認輸入時,處理器就可以自動發起提交,例如一個搜索請求。
對選擇控件(selection control)的處理模型(processing model)和實現需求進行了詳細闡述,以確保表示成純文本列表和元素列表的選擇數據之間行爲的一致性。
改進了利用動態可用的表單控件創建類似於嚮導接口的能力。詳見描述動作改進的部分。
標準對錶單控件提供了更嚴格的定義和分類,這些定義和分類的使用貫穿在標準中,以確保正確的支持與表單控件相關的不同的特性,例如事件、模型條目特性的適應性、及可聚焦性(focusability)。
XForms重複(repeat)更加強大和靈活,現在標準對重複的內容提供了嚴格的定義和處理模型描述,包括創建,銷燬,IDREF 解析(resolution)及重複內容和包含內容(containing content)(其本身可能是重複的)間的事件流。repeat現在可以在任何節點集上使用,而不僅僅是同構集合(homogeneous collection)。定義了重複索引處理(repeat index handling)的正式處理模型。
insert和delete動作已經從對repeat的專有動作轉變成對通用的數據插入和刪除操作。附錄中添加了15個例子來詳細的說明這個附加的功能。
所有的XForms動作,包括動作集,可以有條件的或者迭代的(conditionally or iteratively)執行。加上通用的insert和delete,這意味着XForms1.1的信息處理能力是圖靈完備的(Turing-complete)。
dispatch動作現在允許通過實例數據(instance data)指定事件名稱和目標。添加了一個新的屬性delay來使得事件可以預定在一個延遲時間後分發。因爲某事件的事件處理器可以設置相同的事件延遲分發,因此在XForms1.1中可以創建後臺任務。
改進了setfocus和toggle動作來幫助創建嚮導界面和處理動態可用的內容。獲取焦點的控件和被選中的條目(the case to select)可以通過實例數據來指定。這些動作相對於重算(recalculation)處理模型也被改進了。這些動作在它們的常規處理前執行延遲更新(deferred update),以確保用戶界面被自動刷新。
作爲對重複索引的管理的一部分改進,setindex動作現在更像setvalue, 這意味着它對自動重新計算、重新驗證和用戶界面刷新設置標誌位。 並且,這個動作現在也在它的常規處理前執行延遲更新,以確保用戶界面是最新的。
最後,通過額外的context()函數改進了setvalue動作。現在可以根據用於計算單節點綁定的相同上下文節點表達value屬性。這改進了根據repeat節點集內部值來使用 repeat內部setvalue來設置在repeat節點集之外的實例節點值的能力。
轉載請註明出處:CKword技術博客
譯者:
竇文敏,IBM CDL 軟件工程師,主要從事 IBM Lotus Forms 的測試工作。對XML、Web 技術、軟件過程和軟件測試有濃厚的興趣。可以通過[email protected]與她聯繫。
崔康,軟件工程師,熱愛技術,聯繫方式:[email protected]