楊 婕
(山西中醫(yī)學(xué)院醫(yī)藥管理學(xué)院 山西 030024)
在實(shí)際應(yīng)用中,用戶需要設(shè)計(jì)出基于后臺(tái)數(shù)據(jù)庫(kù)的表單。開發(fā)人員將表單按照用戶的需求設(shè)計(jì)在固有的系統(tǒng)中,可以在短時(shí)間內(nèi)滿足特定用戶的需求。但是隨著用戶需求的改變,固定在系統(tǒng)中的表單可以導(dǎo)致可重用性差,可擴(kuò)展性低,維護(hù)成本高等問題。
為了滿足用戶的不斷變化的業(yè)務(wù)需求,設(shè)計(jì)一種表單設(shè)計(jì)器成為一種需求。XML(eXtensible Markup Language)作為一種可擴(kuò)展標(biāo)記語(yǔ)言,具備良好的自描述性和擴(kuò)展性,以及對(duì)多語(yǔ)言的支持等特點(diǎn)。設(shè)計(jì)開發(fā)基于XML的表單設(shè)計(jì)器構(gòu)件,以XML作為表單存儲(chǔ)形式,由用戶根據(jù)自身需求設(shè)計(jì)和管理基于后臺(tái)數(shù)據(jù)庫(kù)的表單,能很好的滿足用戶的需求,增強(qiáng)系統(tǒng)的可重用性,減少維護(hù)成本。
本系統(tǒng)所提供的表單設(shè)計(jì)器功能有:用戶可以在表單設(shè)計(jì)界面設(shè)計(jì)票據(jù),將設(shè)計(jì)的票據(jù)以XML文件的形式存儲(chǔ),生成與票據(jù)對(duì)應(yīng)的后臺(tái)數(shù)據(jù)庫(kù);可以解析識(shí)別生成的XML文檔。本系統(tǒng)主要有兩個(gè)大模塊:表單設(shè)計(jì)和解析XML文檔,其中表單設(shè)計(jì)模塊包含表單設(shè)計(jì)界面,轉(zhuǎn)化生成XML文檔和生成數(shù)據(jù)庫(kù)表3個(gè)模塊。
(1)靈活的界面設(shè)計(jì)。初始化界面時(shí)可由用戶確定表單和票據(jù)的大小,并根據(jù)用戶設(shè)定形成一個(gè)設(shè)計(jì)界面的網(wǎng)格背景。用戶在設(shè)計(jì)表單的過程中可以根據(jù)需要靈活的調(diào)節(jié)網(wǎng)格大小。
(2)表單設(shè)計(jì)的過程中給表項(xiàng)指定屬性,用以確定票據(jù)表項(xiàng)在后臺(tái)數(shù)據(jù)庫(kù)中對(duì)應(yīng)的字段類型。
(3)用戶可添加任意個(gè)數(shù)的表項(xiàng)和與之對(duì)應(yīng)的表項(xiàng)內(nèi)容。
用戶設(shè)計(jì)表單時(shí),需為設(shè)計(jì)的表項(xiàng)確定數(shù)據(jù)類型,以確定后臺(tái)數(shù)據(jù)庫(kù)中的字段類型。該表單設(shè)計(jì)器為用戶提供了五種數(shù)據(jù)類型,分別是:默認(rèn)性、數(shù)字型、日期型、固定型和自增型。
若用戶不指定數(shù)據(jù)類型或指定為默認(rèn)類型,在創(chuàng)建表時(shí)默認(rèn)其為字符型,用戶可以給其設(shè)置綁定默認(rèn)值。用戶指定這些類型,記錄在動(dòng)態(tài)的屬性數(shù)組里,在創(chuàng)建數(shù)據(jù)庫(kù)表的時(shí)候?qū)⑵鋵?duì)應(yīng)到數(shù)據(jù)庫(kù)的表字段類型并在XML文檔中記錄這些信息。用戶還可以將設(shè)計(jì)的表項(xiàng)內(nèi)容綁定到相應(yīng)的表項(xiàng),在用戶使用該表單時(shí),表項(xiàng)內(nèi)容中添加的數(shù)據(jù)必須是表項(xiàng)屬性中設(shè)定的數(shù)據(jù)類型,否則,有在數(shù)據(jù)庫(kù)中出現(xiàn)不合規(guī)定數(shù)據(jù)的可能。
XML本身僅僅是一種存儲(chǔ)表單形式,并不能與應(yīng)用程序進(jìn)行交互。要實(shí)現(xiàn)與應(yīng)用程序的交互,存儲(chǔ)數(shù)據(jù)時(shí)就需要用XML解析器來解析XML文檔。解析器分析XML文檔的組成結(jié)構(gòu)大致采用兩種模型:線性模型和樹模型。構(gòu)造過程自頂向下。本系統(tǒng)采用DOM(Document Object Model,文檔對(duì)象模型)模型來解析和生成XML文檔。
DTD文檔可看作一個(gè)或多個(gè)XML文件的模板。XML文件中的元素,即我們所創(chuàng)建的標(biāo)記,是根據(jù)實(shí)際情況來創(chuàng)建的。本系統(tǒng)所生成的XML文檔也是遵從給定的DTD文檔的。
按照給定的DTD文檔,用獲取的動(dòng)態(tài)數(shù)組與頁(yè)面信息創(chuàng)建存儲(chǔ)表單的XML文件。流程圖如圖1所示。
圖1 創(chuàng)建xml文檔的流程圖
創(chuàng)建XML后將在指定的路徑下生成一個(gè)XML文件,文件名由用戶輸入。如圖2所示(生成一個(gè)user.xml文件,文件名user由用戶輸入)。
用戶設(shè)計(jì)好頁(yè)面之后,不僅要有創(chuàng)建存儲(chǔ)表單信息的XML文檔,還要?jiǎng)?chuàng)建出與表單上的表項(xiàng)對(duì)應(yīng)的后臺(tái)數(shù)據(jù)庫(kù)表。因此必須在本系統(tǒng)中動(dòng)態(tài)生成數(shù)據(jù)庫(kù)表,且生成的數(shù)據(jù)庫(kù)表必須與設(shè)計(jì)好的界面綁定。使用ADOX技術(shù)可以在數(shù)據(jù)庫(kù)中動(dòng)態(tài)的創(chuàng)建數(shù)據(jù)庫(kù)表。
根據(jù)獲取的頁(yè)面信息,來創(chuàng)建后臺(tái)數(shù)據(jù)庫(kù)表,創(chuàng)建的過程大致如下:
(1)創(chuàng)建ADOX的Catalog對(duì)象,(Dim tabl As New ADOX.Catalog)。連接數(shù)據(jù)庫(kù)的搜索引擎,創(chuàng)建數(shù)據(jù)庫(kù)連接,連接到指定數(shù)據(jù)庫(kù)。
圖2 系統(tǒng)生成的XML文件示例
(2)創(chuàng)建ADOX的Table對(duì)象,獲取Table的表名,用于在指定數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表。
(3)重新聲明全局的存放表項(xiàng)屬性信息的動(dòng)態(tài)屬性數(shù)組。
(4)用ADOX的Append(Columns)方法,將新的 字段Column 對(duì)象添加到 Columns 集合中。
(5)創(chuàng)建新的表。將創(chuàng)建的新table對(duì)象添加到Catalog集合中。
數(shù)據(jù)庫(kù)表創(chuàng)建成功之后,會(huì)在access指定的數(shù)據(jù)庫(kù)中生成一個(gè)數(shù)據(jù)庫(kù)表。
本系統(tǒng)XML文檔的解析,是按照給定DTD文檔解析的。若要使用本系統(tǒng)所設(shè)計(jì)的表單,只需根據(jù)本系統(tǒng)所提供的DTD文檔寫出相應(yīng)的解析程序即可。解析過程大致如下:
(1)加載要解析的XML文檔。
(2)若table節(jié)點(diǎn)不為空,獲取其lnum與tnum這兩個(gè)屬性的信息。否則結(jié)束。
(3)重新聲明用于存放屬性的動(dòng)態(tài)類型數(shù)組。用以存放解析的信息。
(4)遍歷所有的row節(jié)點(diǎn),將節(jié)點(diǎn)信息存放在row類型的數(shù)組里。
(5)遍歷所有的text節(jié)點(diǎn),將節(jié)點(diǎn)信息存放在text類型的數(shù)組里。
(6)根據(jù)解析的信息在不同的系統(tǒng)中生成相應(yīng)的表單。
目前系統(tǒng)已經(jīng)可以識(shí)別用戶創(chuàng)建的表單,并將其解析成XML文檔和在后臺(tái)創(chuàng)建與之對(duì)應(yīng)數(shù)據(jù)庫(kù)表,很好的解決了固定在系統(tǒng)中的表單導(dǎo)致的可重用性差,可擴(kuò)展性低,維護(hù)成本高等問題。
[1]王瑞霞 .基于XML的表單設(shè)計(jì)器構(gòu)件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究.2007,27(7)
[2]Jake Strurm .開發(fā)XML解決方案[M].北京大學(xué)出版社
[3]Brett McLaugblim .Java 與 XML 數(shù)據(jù)綁定[M].中國(guó)電力出版社
[4]史勝利.VB中數(shù)據(jù)庫(kù)編程時(shí)使用ADOX創(chuàng)建對(duì)象[J].陰山學(xué)刊.2007.03