胡 星,武友新
(南昌大學 信息工程學院 計算機科學與技術系,江西 南昌330031)
目前,對于不同移動端的應用系統,其電子表單[1]的設計與實現主要是基于原生控件和移動中間件[2]。原生控件是Android系統、iOS系統、Windows Phone等智能手機系統自帶的一些原生控件,而移動中間件是基于構件模型,對智能手機的一些原生功能進行了構件化和模塊化。
基于智能手機系統的原生控件來設計電子表單,往往是根據不同的功能需求設計出不同的電子表單,每個電子表單都需要單獨地進行設計和編碼。
基于移動中間件電子表單的設計和開發,主要是用HTML、CSS和JS等相關技術。移動中間件雖然是基于構件模型,但電子表單的設計與開發是基于WebKit瀏覽器引擎,電子表單主要是由Html元素構成,而不是Android原生控件構成,這樣電子表單UI元素加載會延遲,調用手機底層功能緩慢,交互性較差。
目前市場上還沒有很成熟的專門針對移動應用的第三方電子表單的軟件系統。軟件構件普遍存在于計算機軟件的開發和應用當中[3],本文是在軟件構件的基礎上,遵循軟件構件的設計原則[4],研究基于Android的電子表單構件模型設計、電子表單構件的實現技術和方法。
在講述電子表單模型的設計之前,先簡單介紹下XForms[5],XForms是下一代的基于Web的數據處理技術規范,其可替換傳統的HTML 表單,使用XML 數據模型和呈現元素。XForms將電子表單分成3個邏輯塊:模型、表現和提交協議,其實就是MVC的設計模式。
根據XForms模型的設計原理,電子表單模型的設計采用MVC的軟件架構模式,把電子表單構件模型[6]分為3個基本部分:模型 (model)、視圖 (view)和控制器 (controller)。模型為數據模型,視圖為電子表單控件,而控制器包括通用數據接口和數據處理機制兩個部分。數據模型定義了電子表單數據的結構化模型和數據交互協議,電子表單控件是模塊化后的自定義控件和系統原生控件,控制器主要是實現電子表單與服務端的數據交互,主要包括通用數據接口和數據交互機制兩部分。
因此,電子表單構件模型可細化為數據模型、模塊化控件、通用數據接口、數據交互機制4個主要部分。電子表單構件模型和電子表單構件的實現技術兩部分構成了電子表單構件,電子表單構件的實現是基于Android操作系統,由此得到電子表單構件系統框架如圖1所示。

圖1 電子表單構件系統框架
數據模型是 以XML[7,8](extensible markup language)的形式對電子表單數據進行模塊化定義,并對數據與服務端交互協議進行了定義,所以數據模型主要包括數據域和數據交互協議兩個部分,如圖2所示。

圖2 數據模型
圖2中數據模型中節點的前綴mf是mobile form 的縮寫,由圖可知根節點是mf:model,根節點下定義了數據域節點mf:region和數據交互協議節點mf:interaction。
數據域節點mf:region的子節點定義了一個數據對象節點object,也可以定義多個數據對象節點,對象節點object下又定義了自己的屬性節點,屬性節點中定義了屬性節點id和屬性數據類型type。通過數據對象節點的id和屬性節點的id和數據類型type,數據對象可以與電子表單數據進行綁定。
數據交互協議節點mf:interaction用于定義電子表單與服務器的數據交互協議,屬性值包括服務器地址url,交互方式post或者get,節點id。
數據域節點可以包含表單數據,也可以包含url地址所需的參數數據。當數據域節點包含參數數據時,首先需要將參數數據組裝到url地址中,然后以post或者get的方式與服務器進行交互。下面以移動應用的登陸模塊進行簡要說明。
移動應用的登陸模塊作為一個簡單的電子表單,該電子表單包含用戶名輸入、密碼輸入和登陸驗證這3個部分。這樣登陸電子表單的數據模型定義如圖3所示。

圖3 登陸模塊數據模型
該數據模型的數據域是user節點信息,user節點包括name和password兩個子節點,其數據類型為string,表示了登陸表單中用戶名輸入、密碼輸入顯示的數據內容。數據交互協議表示了進行用戶登錄驗證的方式,該數據模型定義的提交方式為post。當用戶輸入用戶名name和password,點擊登錄驗證按鈕時,name和password 分別裝載到數據域user節點的子節點name節點和password節點中,然后將其組裝到url地址中進行登陸驗證。
控件模塊化是將電子表單中的常用控件進行模塊化和封裝,并在控件模塊化的基礎上,重新定義數據的引用。
電子表單可以分為電子表單頭和電子表單體兩部分,電子表單頭包含編碼方式,電子表單體包含命名空間、自定義控件、手機系統原生控件。
電子表單是基于XML,其符合XML1.0的規范,編碼方式采用UTF-8方式,使用XML語言描述如下:

電子表單體包括命名空間、自定義控件、系統原生控件。命名空間表示控件的屬性資源,對系統屬性資源或者自定義屬性資源的引用。自定義控件是在原生控件的基礎上進行擴展和封裝,以滿足UI的設計要求,而原生控件則是手機系統自帶的一些控件,不需要重新定義數據引用。自定義控件需要重新定義數據引用,可以增加屬性ref,表示對數據模型中數據域的引用。根據電子表單結構圖,結合XML特性,電子表單體的樹形結構可以描述如圖4所示。

圖4 電子表單體樹形結構
通用數據接口是指將電子表單從服務端獲取數據的接口和電子表單提交數據到服務端的接口通用化。
電子表單顯示的數據,其獲取的方式是通過調用服務器端編寫的通用數據接口代碼,調用的方式在數據模型中的mf:interaction節點中進行了定義。通用數據接口包括服務端的數據組裝接口,客戶端數據調用接口,客戶端的數據解析接口。
表單數據在服務端是以表單對象的形式存在的,表單對象的屬性類型可能是整數類型、字符串類型或者集合類型。因此,服務端的數據組裝接口將查詢得到的表單對象轉化成XML數據流的形式時,需要在XML 數據流的節點屬性上中加上數據類型標志type,用來表示該屬性對應的數據類型。
客戶端數據調用接口是獲取表單數據流的通用化方法,而客戶端數據解析接口是將獲取的表單數據流解析成表單對象,作為電子表單的數據集進行加載。
根據電子表單從服務端獲取數據的接口,可以逆向得到電子表單提交數據到服務端的接口,通用數據接口如圖5所示。
數據交互機制主要包括數據處理機制、數據綁定機制、數據展現機制3 個部分,下面對這3 個部分進行詳細的說明。

圖5 通用數據接口
1.4.1 數據處理機制
數據處理機制主要是指如何將客戶端數據解析接口獲取的表單對象數據裝載到數據模型的數據域中,或者將數據域的數據解析成表單對象傳遞給客戶端數據解析接口。
1.4.2 數據綁定機制
數據綁定機制主要是指數據域中的數據如何與電子表單中的控件進行關聯。當數據域中的數據與電子表單中的控件進行關聯后,相當于在數據域和電子表單間建立了一座橋梁,實現了數據域和電子表單控件數據的互通。
1.4.3 數據展現機制
數據展現機制是建立在數據處理機制和數據綁定機制的基礎上,主要是指如何將數據域的數據裝載到電子表單控件中,或者將電子表單控件數據裝載到數據域中。
本文研究的電子表單構件的實現是基于電子表單構件模型,以Android開發技術[9]為基礎。下面從電子表單構件模型的組成來介紹電子表單構件模型的實現。
電子表單組成控件的模塊化主要是對控件的屬性集和數據操作進行擴展。數據集的擴展主要包括重新定義原有屬性集和增加數據引用屬性兩部分,數據操作擴展是將控件數據注入到數據模型的數據域中,也可以從數據模型的數據域中獲取數據注入到控件中。
Android中控件自定義屬性集要在XML 文件中進行注冊,屬性集的注冊方法如下:

電子表單可以作為一個整體控件,需要增加數據模型引用屬性model,數據交互協議屬性action,數據交互協議方法屬性method。自定義控件需要增加數據引用屬性ref,同時建立ref到控件id的映射,即可以根據屬性ref得到控件id值,也可以根據控件id值得到屬性ref值。自定義控件和電子表單屬性注冊方法如圖6所示。

圖6 自定義屬性注冊
圖6中的declare-styleable節點的name值是該控件對應的視圖類的類名,attr節點的name值是屬性名,fomat是屬性值的數據類型。在XML文件中注冊了屬性集后,可以在該控件的視圖類中通過屬性名獲取屬性值,將屬性值注入到控件或者數據模型的數據域中。
電子表單和自定義控件注冊了自定義屬性后,在Android布局文件引用格式是:包名+類名。
通用數據接口分為服務端的數據組裝、客戶端的數據調用和數據解析接口3個部分,下面分別介紹這3個接口的實現。
服務端的數據組裝接口主要是將查詢到的表單對象數據組裝成XML格式的數據流,或者將XML 格式的數據流解析成表單對象,運用了XStream[10]技術。通過XStream技術編寫數據組裝接口方法,而運用WebService技術可以將數據組裝接口方法部署到Axis[11]服務器上。Axis是一個獨立的SOAP[12](簡單對象訪問協議)服務器和一個嵌入Servlet引擎的服務器。客戶端通過Post或者Get請求調用Axis的WebService接口方法,由此得到客戶端數據調用接口如圖7所示。
客戶端數據調用接口圖中HttpPost/HttpGet以HTTP協議的形式調用服務端的WebService方法,其包括URL和FormEntity兩部分。

圖7 客戶端數據調用接口
URL對應于數據模型中數據交互協議節點屬性action的值url,url一般是WebService接口方法的地址,其向服務端請求的方式是post或者get。
FormEntity包括Params和Result兩部分,Params是向服務器發送請求所需的參數,可以是數據模型中數據域的值,也可以是自定義的參數變量值,而Result是服務端發送給客戶端或者客戶端提交給服務端的XML數據。
客戶端數據解析接口則是將從客戶端數據調用接口獲得的XML數據流運用XStream 技術解析成表單對象,或者將從數據處理機制獲取的表單對象解析成XML數據流。
數據交互機制包括數據處理機制、數據綁定機制、數據展現機制3個部分。因為數據展現機制是建立在數據處理機制和數據綁定機制的基礎上,下面將先介紹數據處理機制和數據綁定機制的實現,最后介紹數據展現機制的實現。
2.3.1 數據處理機制
數據處理機制的實現包括將表單對象裝載到數據域,或者將數據域中的數據轉化成表單對象。
表單對象對應類的類名,屬性名和對象節點的名稱,屬性節點的名稱保持一致,而表單對象的屬性數據類型和屬性節點的type值保持一致。表單對象裝載到數據域,主要運用了DOM[13,14](document object model)技術。數據對象轉化成表單對象,除了用到了DOM 技術外,還用到了JAVA 反射機制,得到的數據處理機制的實現方法如圖8所示。
2.3.2 數據綁定機制
模塊化控件的實現,可以自定義數據引用屬性,數據綁定機制正是在這些控件上定義數據引用屬性,用于綁定數據域中的對象數據。
構成電子表單的自定義控件增加了數據引用屬性ref,ref根據對象節點id和屬性id綁定數據域中的對象數據。圖3登陸模塊的數據模型,登陸電子表單與該數據模型的對象數據綁定如圖9所示。

圖8 數據處理機制

圖9 登陸電子表單
2.3.3 數據展現機制
數據展現機制的實現是建立在數據處理機制和數據綁定機制的基礎上,主要包括將數據域中的數據裝載到電子表單,或者將電子表單的數據轉載的數據域中,主要運用了DOM 技術。
電子表單從數據域獲取數據并顯示,可以分為下面3個過程:
(1)通過DOM 技術獲取數據域中的數據對象結構圖;
(2)根據電子表單控件中的ref值和數據對象結構圖獲取對象節點的屬性值;
(3)控件屬性id和屬性ref存在映射關系,根據屬性ref獲取控件id值并將對象節點的屬性值裝載到控件上。
電子表單的數據裝載到數據域中,也可以分為下面3個過程:
(1)根據屬性ref獲取控件id并根據控件id獲取控件裝載的數據;
(2)通過DOM 技術獲取數據域中的數據對象結構圖;
(3)根據電子表單控件中的ref值和數據對象結構圖將控件數據轉載到數據域中的數據對象。
根據上面數據展現機制的實現過程,得到數據展現機制如圖10所示。

圖10 數據展現機制
本文中Android的電子表單構件的研究與實現,遵循了軟件構件的設計原則,定義了電子表單構件模型。構件模型中的數據模型進行了結構化定義,組成控件進行了模塊化處理,電子表單的數據獲取方式進行了通用化處理,數據交互機制進行了整體化和模塊化處理。這樣,做到了電子表單模型和電子表單通用控件的重用,簡化了電子表單的設計,提高和增強電子表單在不同的應用系統中的自適應度及通用性,提高了代碼的復用性。
[1]ZHANG Xiangyu.Analysis and design of next generation eform system [J].Beijing:Beijing University of Posts and Telecommunications,2008:6-8(in Chinese).[張翔宇.新一代電子表單系統的分析與設計[D].北京:北京郵電大學,2008:6-8.]
[2]WU Qing,YIN Yuyu.Model and methodology of adaptive middleware for ubiquitous computing [M].Hangzhou:Zhejiang University Press,2010:10-16 (in Chinese).[吳卿,殷昱煜.面向普適環境的自適應中間件模型與方法 [M].杭州:浙江大學出版社,2010:10-16.]
[3]XIA Yubin,WANG Ling.Ruanjian Goujian Jishu [M].Beijing:Tsinghua University Press,Beijing Jiaotong University Press,2011:5-10 (in Chinese). [夏榆濱,王玲.軟件構件技術 [M].北京:清華大學出版社,北京交通大學出版社,2011:5-10.]
[4]LI Ya.Research on the application of software reuse technology based on components[D].Chongqing:Chongqing University,2007:31-33 (in Chinese).[黎婭.基于構件的軟件復用技術應用研究 [D].重慶:重慶大學,2007:31-33.]
[5]SONG Quanwang.Visual smart form system based on Xforms[D].Beijing:Beijing University of Posts and Telecommunications,2011:7-15 (in Chinese).[宋全旺.基于Xforms標準的可視化智能表單系統原型的研究與設計 [D].北京:北京郵電大學,2011:7-15.]
[6]LUO Lie.Design and implementation of electronic form model[J].Jiangxi Communication Science,2011 (3):2-4 (in Chinese).[羅烈.電子表單模型的設計與實現 [J].江西通信科技,2011 (3):2-4.]
[7]Pardede E,Rahayu JW,Taniar D.XML data update management in XML-enabled database [J].Journal of Computer and System Sciences,2008,74 (2):170-178.
[8]LIN Xudong.Semantic-based research on XML query and normalization [D].Beijing:Beijing Jiaotong University,2010:17-21 (in Chinese).[藺旭東.基于語義的XML 查詢及規范化研究 [D].北京:北京交通大學,2010:17-21.]
[9]WU Xiangxiang.Research and application of software development approaches based on android platform [D].Beijing:Beijing University of Posts and Telecommunications,2011:6-8(in Chinese).[吳想想.基于Android平臺軟件開發方法的研究與應用 [D].北京:北京郵電大學,2011:6-8.]
[10]Walnes J,Schaible J,Talevi M,et al.XStream[DB/OL].http://xstream.codehaus.org,2011.
[11]ZHAI Feng, HAO Kegang,GE Wei.Developing Web services on axis with SOAP [J].Computer Applications and Software,2008,25 (11):157-158 (in Chinese). [翟峰,郝克剛,葛瑋.基于SOAP構建Axis上的WebServices[J].計算機應用與軟件,2008,25 (11):157-158.]
[12]ZHANG Qiyong,WANG Dong.Research on XML &SOAPbased information exchanging platform [J].Computer Applications and Software,2007,24 (10):39-40 (in Chinese).[張奇勇,王東.基于XML 及SOAP 的信息交換平臺研究[J].計算機應用與軟件,2007,24 (10):39-40.]
[13]WEI Xiaojuan,RAN Jing,LI Aihua,et al.XML parse and application based on DOM [J].Computer Technology and Development,2007,17 (4):86-87 (in Chinese).[蔚曉娟,冉靜,李愛華,等.基于DOM 的XML解析與應用 [J].計算機技術與發展,2007,17 (4):86-87.]
[14]LIAN Xiaogang.Design and implementation of Web information extraction based on DOM [D].Wuhan:Huazhong University of Science and Technology,2009:13-16 (in Chinese).[連小剛.基于DOM 的Web信息抽取系統設計與實現 [D].武漢:華中科技大學,2009:13-16.]