楊 婕
(山西中醫學院醫藥管理學院 山西 030024)
在實際應用中,用戶需要設計出基于后臺數據庫的表單。開發人員將表單按照用戶的需求設計在固有的系統中,可以在短時間內滿足特定用戶的需求。但是隨著用戶需求的改變,固定在系統中的表單可以導致可重用性差,可擴展性低,維護成本高等問題。
為了滿足用戶的不斷變化的業務需求,設計一種表單設計器成為一種需求。XML(eXtensible Markup Language)作為一種可擴展標記語言,具備良好的自描述性和擴展性,以及對多語言的支持等特點。設計開發基于XML的表單設計器構件,以XML作為表單存儲形式,由用戶根據自身需求設計和管理基于后臺數據庫的表單,能很好的滿足用戶的需求,增強系統的可重用性,減少維護成本。
本系統所提供的表單設計器功能有:用戶可以在表單設計界面設計票據,將設計的票據以XML文件的形式存儲,生成與票據對應的后臺數據庫;可以解析識別生成的XML文檔。本系統主要有兩個大模塊:表單設計和解析XML文檔,其中表單設計模塊包含表單設計界面,轉化生成XML文檔和生成數據庫表3個模塊。
(1)靈活的界面設計。初始化界面時可由用戶確定表單和票據的大小,并根據用戶設定形成一個設計界面的網格背景。用戶在設計表單的過程中可以根據需要靈活的調節網格大小。
(2)表單設計的過程中給表項指定屬性,用以確定票據表項在后臺數據庫中對應的字段類型。
(3)用戶可添加任意個數的表項和與之對應的表項內容。
用戶設計表單時,需為設計的表項確定數據類型,以確定后臺數據庫中的字段類型。該表單設計器為用戶提供了五種數據類型,分別是:默認性、數字型、日期型、固定型和自增型。
若用戶不指定數據類型或指定為默認類型,在創建表時默認其為字符型,用戶可以給其設置綁定默認值。用戶指定這些類型,記錄在動態的屬性數組里,在創建數據庫表的時候將其對應到數據庫的表字段類型并在XML文檔中記錄這些信息。用戶還可以將設計的表項內容綁定到相應的表項,在用戶使用該表單時,表項內容中添加的數據必須是表項屬性中設定的數據類型,否則,有在數據庫中出現不合規定數據的可能。
XML本身僅僅是一種存儲表單形式,并不能與應用程序進行交互。要實現與應用程序的交互,存儲數據時就需要用XML解析器來解析XML文檔。解析器分析XML文檔的組成結構大致采用兩種模型:線性模型和樹模型。構造過程自頂向下。本系統采用DOM(Document Object Model,文檔對象模型)模型來解析和生成XML文檔。
DTD文檔可看作一個或多個XML文件的模板。XML文件中的元素,即我們所創建的標記,是根據實際情況來創建的。本系統所生成的XML文檔也是遵從給定的DTD文檔的。
按照給定的DTD文檔,用獲取的動態數組與頁面信息創建存儲表單的XML文件。流程圖如圖1所示。

圖1 創建xml文檔的流程圖
創建XML后將在指定的路徑下生成一個XML文件,文件名由用戶輸入。如圖2所示(生成一個user.xml文件,文件名user由用戶輸入)。
用戶設計好頁面之后,不僅要有創建存儲表單信息的XML文檔,還要創建出與表單上的表項對應的后臺數據庫表。因此必須在本系統中動態生成數據庫表,且生成的數據庫表必須與設計好的界面綁定。使用ADOX技術可以在數據庫中動態的創建數據庫表。
根據獲取的頁面信息,來創建后臺數據庫表,創建的過程大致如下:
(1)創建ADOX的Catalog對象,(Dim tabl As New ADOX.Catalog)。連接數據庫的搜索引擎,創建數據庫連接,連接到指定數據庫。

圖2 系統生成的XML文件示例
(2)創建ADOX的Table對象,獲取Table的表名,用于在指定數據庫中創建一個表。
(3)重新聲明全局的存放表項屬性信息的動態屬性數組。
(4)用ADOX的Append(Columns)方法,將新的 字段Column 對象添加到 Columns 集合中。
(5)創建新的表。將創建的新table對象添加到Catalog集合中。
數據庫表創建成功之后,會在access指定的數據庫中生成一個數據庫表。
本系統XML文檔的解析,是按照給定DTD文檔解析的。若要使用本系統所設計的表單,只需根據本系統所提供的DTD文檔寫出相應的解析程序即可。解析過程大致如下:
(1)加載要解析的XML文檔。
(2)若table節點不為空,獲取其lnum與tnum這兩個屬性的信息。否則結束。
(3)重新聲明用于存放屬性的動態類型數組。用以存放解析的信息。
(4)遍歷所有的row節點,將節點信息存放在row類型的數組里。
(5)遍歷所有的text節點,將節點信息存放在text類型的數組里。
(6)根據解析的信息在不同的系統中生成相應的表單。
目前系統已經可以識別用戶創建的表單,并將其解析成XML文檔和在后臺創建與之對應數據庫表,很好的解決了固定在系統中的表單導致的可重用性差,可擴展性低,維護成本高等問題。
[1]王瑞霞 .基于XML的表單設計器構件的設計與實現[J].計算機應用研究.2007,27(7)
[2]Jake Strurm .開發XML解決方案[M].北京大學出版社
[3]Brett McLaugblim .Java 與 XML 數據綁定[M].中國電力出版社
[4]史勝利.VB中數據庫編程時使用ADOX創建對象[J].陰山學刊.2007.03