聶珊珊,王曉輝,張生貴
(中國(guó)飛機(jī)強(qiáng)度研究所,陜西 西安 710065)
基于QT的XML數(shù)據(jù)庫(kù)的設(shè)計(jì)與實(shí)現(xiàn)
聶珊珊,王曉輝,張生貴
(中國(guó)飛機(jī)強(qiáng)度研究所,陜西 西安 710065)
針對(duì)國(guó)產(chǎn)有限元軟件HAJIF對(duì)大規(guī)模存儲(chǔ)數(shù)據(jù)庫(kù)的迫切需求,結(jié)合HAJIF系列軟件的整體架構(gòu),設(shè)計(jì)并實(shí)現(xiàn)具有高度開(kāi)放性和擴(kuò)展性的基礎(chǔ)數(shù)據(jù)庫(kù)模塊——HAJIF模型庫(kù)。結(jié)合HAJIF模型庫(kù)的底層數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),引入了XML數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù)。同時(shí),根據(jù)HAJIF軟件的整體架構(gòu),應(yīng)用了QtXml模塊,解決了XML文件在QT開(kāi)發(fā)環(huán)境下的讀取問(wèn)題。采用DomTree數(shù)據(jù)存儲(chǔ)技術(shù),進(jìn)一步提升了訪問(wèn)XML文件時(shí)的效率。實(shí)際應(yīng)用表明,HAJIF模型庫(kù)作為HAJIF系列軟件中工程數(shù)據(jù)庫(kù)的重要模塊,具有很好的實(shí)用性、用戶體驗(yàn)以及可擴(kuò)展性。
HAJIF模型庫(kù);XML數(shù)據(jù)庫(kù);QtXml模塊;Dom樹(shù)
隨著國(guó)內(nèi)航空業(yè)的發(fā)展,自主研制的飛機(jī)將越來(lái)越多,自主知識(shí)產(chǎn)權(quán)的CAE軟件需求將越來(lái)越旺盛。HAJIF系列軟件在功能規(guī)模、軟件技術(shù)與解決問(wèn)題能力等方面均居于國(guó)內(nèi)領(lǐng)先地位,形成了國(guó)內(nèi)具有自主版權(quán)的航空結(jié)構(gòu)分析與優(yōu)化設(shè)計(jì)軟件系列產(chǎn)品,在航空、航天及民用工程項(xiàng)目中發(fā)揮了重要作用。
近些年來(lái),隨著HAJIF軟件的成熟度越來(lái)越高,用戶群體對(duì)試驗(yàn)數(shù)據(jù)以及建模經(jīng)驗(yàn)的需求度越來(lái)越高。伴隨著HAJIF系列軟件的產(chǎn)業(yè)化發(fā)展,如何將中國(guó)飛機(jī)強(qiáng)度研究所多年來(lái)飛行器地面驗(yàn)證試驗(yàn)中的寶貴模型、試驗(yàn)數(shù)據(jù)以及豐富的建模經(jīng)驗(yàn)產(chǎn)品化顯得尤為重要。
鑒于此,本文采用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,從軟件開(kāi)放性和擴(kuò)展性出發(fā),采用層次化、統(tǒng)一化的軟件體系架構(gòu),借助于主流的程序設(shè)計(jì)語(yǔ)言C++,配合QT框架作為混合編程平臺(tái),采用QtXml處理模塊設(shè)計(jì)開(kāi)發(fā)了HAJIF模型庫(kù),并主要針對(duì)XML文件讀取及操作中的關(guān)鍵技術(shù)進(jìn)行了探討。
整個(gè)軟件用Visual Studio 2010搭建,以數(shù)據(jù)庫(kù)為核心,包括數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理和數(shù)據(jù)顯示3部分內(nèi)容,從而實(shí)現(xiàn)各種功能, 完成一個(gè)完整的前后處理系統(tǒng)。
2.1 統(tǒng)一的功能性架構(gòu)
HAJIF模型庫(kù)在HAJIF系列軟件的開(kāi)發(fā)平臺(tái)上進(jìn)行研發(fā),以接口形式嵌入HAJIF基礎(chǔ)分析平臺(tái)。
HAJIF模型庫(kù)包含航空結(jié)構(gòu)中常用的軍機(jī)、民機(jī)、無(wú)人機(jī)等典型航空結(jié)構(gòu)模型,提供了中國(guó)飛機(jī)強(qiáng)度研究所多年來(lái)飛行器地面驗(yàn)證試驗(yàn)中珍貴的試驗(yàn)數(shù)據(jù)、豐富的建模經(jīng)驗(yàn)以及寶貴的模型數(shù)據(jù)??梢詫?duì)千萬(wàn)級(jí)的模型進(jìn)行統(tǒng)一化管理和私人化存儲(chǔ),參考性強(qiáng),很大程度地提高了建模效率。
HAJIF模型庫(kù)支持用戶對(duì)模型數(shù)據(jù)庫(kù)自定義,實(shí)現(xiàn)模型的實(shí)時(shí)查詢(xún)、刪除、增加、修改、批量導(dǎo)入、批量導(dǎo)出等基本操作,方便用戶對(duì)模型進(jìn)行統(tǒng)一管理,大大提高建模和后期維護(hù)效率。
HAJIF模型庫(kù)具有以下功能:
(1)模型的增加、刪除、修改和查看。系統(tǒng)自帶的模型不支持編輯和刪除功能。
(2)目錄樹(shù)中層級(jí)目錄結(jié)點(diǎn)的增加、刪除和重命名。
(3)模型的成批導(dǎo)入、導(dǎo)出。成批導(dǎo)入模型:當(dāng)遇到模型重復(fù)時(shí),提供覆蓋、忽略?xún)煞N選擇;當(dāng)模型的層級(jí)關(guān)系與模型的名稱(chēng)都相同時(shí),認(rèn)定為模型重復(fù)。
2.2 統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)
HAJIF模型庫(kù)中的模型具備以下屬性:(1)模型文件;(2)模型名稱(chēng);(3)模型的描述信息;(4)模型的預(yù)覽圖片;(5)模型的密級(jí)。
其中,模型的密級(jí)為系統(tǒng)自動(dòng)設(shè)置,其余項(xiàng)均為用戶自行選擇或輸入。模型文件經(jīng)過(guò)系統(tǒng)統(tǒng)一命名進(jìn)行文件夾管理,模型的其余信息均儲(chǔ)存在XML文件中。
模型庫(kù)的重點(diǎn)是如何有效地對(duì)模型進(jìn)行私人化的高效管理,因此,如何對(duì)模型分類(lèi)更加重要。目錄樹(shù)提供了一種為模型進(jìn)行分類(lèi)的有效方法,即通過(guò)樹(shù)形的層級(jí)關(guān)系來(lái)反映模型的分類(lèi),系統(tǒng)會(huì)給定初始的目錄樹(shù)層級(jí)結(jié)構(gòu),用戶可以對(duì)其進(jìn)行自定義。目錄樹(shù)的信息存儲(chǔ)在XML文件中。
通過(guò)HAJIF開(kāi)發(fā)平臺(tái)的接口進(jìn)入模型庫(kù),調(diào)用存儲(chǔ)模型庫(kù)目錄樹(shù)以及模型信息的XML文件,后臺(tái)程序根據(jù)XML文件的結(jié)構(gòu)及內(nèi)容構(gòu)造出包含分類(lèi)層次的模型樹(shù)(以下簡(jiǎn)稱(chēng)目錄樹(shù))[1]。用戶可以針對(duì)目錄樹(shù)查看、編輯、增加、刪除模型,還可以根據(jù)個(gè)人意愿修改目錄樹(shù)的層級(jí)結(jié)構(gòu)。不同的操作對(duì)應(yīng)不同的實(shí)現(xiàn)流程,如圖1所示。
圖1 HAJIF模型庫(kù)設(shè)計(jì)邏輯
當(dāng)用戶對(duì)目錄樹(shù)進(jìn)行了相關(guān)操作之后,不論是何操作,系統(tǒng)都將對(duì)原來(lái)的XML文件進(jìn)行更新及重新寫(xiě)入。
另外,當(dāng)用戶進(jìn)行添加或者刪除模型操作時(shí),系統(tǒng)在更新并重新寫(xiě)入XML文件的同時(shí),還將管理儲(chǔ)存在后臺(tái)的模型文件以及模型描述圖片。在用戶刪除模型時(shí),刪除相應(yīng)模型的模型文件以及模型描述圖片。當(dāng)用戶添加模型時(shí),將加密壓縮之后的模型文件和模型描述圖片拷貝到后臺(tái)指定文件夾處進(jìn)行統(tǒng)一管理。
因此,當(dāng)用戶關(guān)閉模型庫(kù)時(shí),不需要再對(duì)XML文件進(jìn)行寫(xiě)入等操作,也不需要對(duì)后臺(tái)存儲(chǔ)管理的模型相關(guān)文件進(jìn)行處理。在一定程度上,保證了模型庫(kù)信息的時(shí)效性,能有效防止系統(tǒng)崩潰、停電等意外情況造成的數(shù)據(jù)丟失等問(wèn)題。
HAJIF模型庫(kù)支持不同PC間的相互共享。用戶可以批量導(dǎo)出非涉密模型,進(jìn)而分享給其他人。與此同時(shí),用戶也可以直接成批導(dǎo)入從別處獲得的模型庫(kù)導(dǎo)出壓縮包,快速實(shí)現(xiàn)相互共享。
當(dāng)用戶批量導(dǎo)出模型時(shí),后臺(tái)將加密壓縮之后的模型文件、模型描述圖片以及相對(duì)應(yīng)的XML文件,集中進(jìn)行打包壓縮,壓縮包存儲(chǔ)位置可以由用戶自定義,進(jìn)而用戶可以將生成的壓縮包分享給其他用戶。用戶在自己模型庫(kù)的基礎(chǔ)上,可以執(zhí)行批量導(dǎo)入操作,具體操作流程如圖2所示。
圖2 HAJIF模型庫(kù)批量導(dǎo)入導(dǎo)出邏輯圖
在執(zhí)行批量導(dǎo)入操作時(shí),主要有以下兩個(gè)關(guān)鍵操作:
(1)XML文件的合并[2]:用戶選取快速分享的導(dǎo)入壓縮包,后臺(tái)程序?qū)嚎s包內(nèi)的導(dǎo)入XML文件與其現(xiàn)有模型庫(kù)對(duì)應(yīng)的XML文件進(jìn)行合并。
(2)模型的重復(fù)性判斷:當(dāng)新導(dǎo)入的模型與原有模型所屬層級(jí)結(jié)構(gòu)、模型名字都相同時(shí),認(rèn)定為兩模型重復(fù),此時(shí)提供給用戶替換現(xiàn)有模型和忽略導(dǎo)入模型兩種選擇。成批導(dǎo)入能夠快速對(duì)現(xiàn)有模型庫(kù)的目錄樹(shù)進(jìn)行擴(kuò)充,并且對(duì)新導(dǎo)入的模型執(zhí)行入庫(kù)操作,實(shí)現(xiàn)了不同PC間模型庫(kù)共享的功能。
對(duì)于一般的XML數(shù)據(jù)處理,Qt提供了QtXml模塊[3]。
4.1 讀取XML文件
QtXml模塊提供了3種截然不同的應(yīng)用程序編程接口(API),用來(lái)讀取XML文檔[4]。
(1)QXmlStreamReader
QXmlStreamReader是在Qt中讀取XML文檔的最快且最簡(jiǎn)單的方式,屬于一次解析器,即只需讀取文檔一次,然后像一個(gè)遍歷器從頭到尾一次性處理XML文檔,期間不會(huì)有反復(fù)的情況。
(2)DOM(文檔對(duì)象模型)
DOM將整個(gè)XML文檔讀入內(nèi)存,把XML文檔轉(zhuǎn)換為應(yīng)用程序可以遍歷的樹(shù)形結(jié)構(gòu),允許程序在樹(shù)結(jié)構(gòu)上向前向后移動(dòng)導(dǎo)航,即實(shí)現(xiàn)多次解析器。這種方式帶來(lái)的問(wèn)題是需要一次性將整個(gè)XML文檔讀入內(nèi)存,因此會(huì)占用較大內(nèi)存。
(3)SAX(XML簡(jiǎn)單應(yīng)用程序編程接口)
SAX實(shí)現(xiàn)方法是按階段將文檔讀取到內(nèi)存中,在碰到標(biāo)簽或者其他階段的時(shí)候,調(diào)用開(kāi)發(fā)者預(yù)先設(shè)計(jì)好的回調(diào)函數(shù)去處理。SAX提供了大量的虛函數(shù),以事件的形式處理XML文檔。這種方式的缺點(diǎn)是需要開(kāi)發(fā)者寫(xiě)回調(diào)函數(shù)去處理不同標(biāo)簽,代碼復(fù)雜一些,優(yōu)點(diǎn)是能處理很大的XML文件。
4.2 高效處理XML文檔
DOM將文檔描述為一棵樹(shù)(Tree)結(jié)構(gòu),Tree的每個(gè)節(jié)點(diǎn)表現(xiàn)為一個(gè)XML標(biāo)記或者XML標(biāo)記內(nèi)的文本項(xiàng)。樹(shù)形結(jié)構(gòu)精確地描述了XML文檔中標(biāo)記間以及文本項(xiàng)間的相互關(guān)聯(lián)性[5]。考慮如下的XML文檔:
它對(duì)應(yīng)如圖3所示的DOM樹(shù)。
圖3 XML文檔對(duì)應(yīng)的Dom樹(shù)
這個(gè)DOM樹(shù)包含不同類(lèi)型的節(jié)點(diǎn),如:Element節(jié)點(diǎn)對(duì)應(yīng)打開(kāi)標(biāo)簽以及與它匹配的關(guān)閉標(biāo)簽。在這兩個(gè)標(biāo)簽之內(nèi)的內(nèi)容則作為這個(gè)Element節(jié)點(diǎn)的子節(jié)點(diǎn)出現(xiàn)。在QT中,節(jié)點(diǎn)類(lèi)型具有一個(gè)QDom前綴。QDomElement就代表一個(gè)Element節(jié)點(diǎn),而QDomText就代表一個(gè)Text節(jié)點(diǎn)。
可以按需要遍歷這個(gè)DOM樹(shù),對(duì)任何類(lèi)型的節(jié)點(diǎn)進(jìn)行處理,最終將修改好的這棵樹(shù)作為XML文件保存到磁盤(pán)中[6]。
4.3 軟件實(shí)現(xiàn)
HAJIF模型庫(kù)的界面設(shè)計(jì)風(fēng)格與HAJIF系列軟件保持一致,首先進(jìn)入系統(tǒng)界面,左側(cè)是目錄樹(shù),包含了模型的分類(lèi)信息,右側(cè)是模型的具體信息(用戶可對(duì)模型信息進(jìn)行自定義擴(kuò)展),默認(rèn)包含模型的名稱(chēng)、描述信息和預(yù)覽圖片。
用戶可以針對(duì)左側(cè)目錄樹(shù)的相關(guān)目錄層級(jí)進(jìn)行個(gè)性化操作,如新增、刪除、重命名目錄、添加、刪除、修改指定模型等功能。軟件具體運(yùn)行界面如圖4所示。
圖4 HAJIF模型庫(kù)運(yùn)行界面
在需求分析的基礎(chǔ)上,設(shè)計(jì)試驗(yàn)?zāi)P偷臄?shù)據(jù)結(jié)構(gòu),應(yīng)用XML的數(shù)據(jù)庫(kù)技術(shù),建立了可以私人化管理的數(shù)據(jù)庫(kù)結(jié)構(gòu)體系。HAJIF模型庫(kù)可以從HAJIF基礎(chǔ)平臺(tái)通過(guò)接口訪問(wèn),實(shí)現(xiàn)了一個(gè)具有大數(shù)據(jù)存儲(chǔ)訪問(wèn)功能,開(kāi)放性、擴(kuò)展性強(qiáng)的基礎(chǔ)數(shù)據(jù)庫(kù)模塊。
基于QT的開(kāi)發(fā)環(huán)境,實(shí)現(xiàn)了XML數(shù)據(jù)庫(kù)的開(kāi)發(fā)技術(shù),支持不同密級(jí)模型的不同管理,可以對(duì)千萬(wàn)量級(jí)的模型進(jìn)行統(tǒng)一化管理和私人化存儲(chǔ)。應(yīng)用實(shí)踐證明,HAJIF模型庫(kù)有很好的實(shí)用性,給用戶提供了豐富的建模經(jīng)驗(yàn),使用起來(lái)十分便利,解決了一定的工程問(wèn)題,同時(shí)也提升了國(guó)產(chǎn)CAE軟件HAJIF的市場(chǎng)競(jìng)爭(zhēng)力,具有廣闊的應(yīng)用前景。
[1]馬竹娟,汪宏喜.一種XML數(shù)據(jù)庫(kù)到關(guān)系數(shù)據(jù)庫(kù)的映射模型[J].計(jì)算機(jī)與現(xiàn)代化,2010,(2):180-187.
[2]張艷華.XML文檔在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)與查詢(xún)的實(shí)現(xiàn)[J].中國(guó)科技信息,2010,(11):90-91.
[3]梁隆愷,韓改寧,王曉妮.嵌入式Qt下的數(shù)據(jù)庫(kù)程序設(shè)計(jì)與開(kāi)發(fā)[J].辦公自動(dòng)化,2014,(21):58-61.
[4]鄒茜.基于Qt的GUI應(yīng)用程序開(kāi)發(fā)[J].計(jì)算機(jī)與網(wǎng)絡(luò),2010,(18):596-597.
[5]何震瀛,李建中,王朝坤.一種XML數(shù)據(jù)庫(kù)的數(shù)據(jù)模型[J].Journal of Software,2006,17(4):759-769.
[6]Jasmin Blanchette, Mark Summerfield. C++ GUI Qt 4編程[M].第二版.2013:292-300.
Design and Implementation of XML Database based on QT
Nie Shanshan, Wang Xiaohui, Zhang Shenggui
(Aircraft Strength Research Institute of China, Xi′an 710065, Shaanxi, China)
As to the urgent demand of large scale storage database needed by HAJIF system, combined the infrastructure of HAJIF series software, HAJIF model-base, the basic database module which is of open and good extensibility, is designed and implemented. Combined the design of infrastructure data structure of HAJIF model-base, XML database technology is introduced. On the basis of the infrastructure of HAJIF, QtXml module is used to solve read-write XML file problem in QT developing environment, and Dom Tree data storage technology is used to improve the efficiency of XML file access. The practical application shows that as the important software of HAJIF series software in engineering database, HAJIF model-base has good practicality, good extensibility and friendly user experience.
HAJIF model-base; XML database; QtXml module; Dom Tree
2016-10-13
聶珊珊(1989-),女,河南商丘人,碩士,助理工程師,主要從事虛擬試驗(yàn)與軟件研發(fā)工作。
TP311.13
B
10.3969/j.issn.1674-3407.2016.04.020