聶珊珊,王曉輝,張生貴
(中國飛機強度研究所,陜西 西安 710065)
基于QT的XML數(shù)據庫的設計與實現(xiàn)
聶珊珊,王曉輝,張生貴
(中國飛機強度研究所,陜西 西安 710065)
針對國產有限元軟件HAJIF對大規(guī)模存儲數(shù)據庫的迫切需求,結合HAJIF系列軟件的整體架構,設計并實現(xiàn)具有高度開放性和擴展性的基礎數(shù)據庫模塊——HAJIF模型庫。結合HAJIF模型庫的底層數(shù)據結構設計,引入了XML數(shù)據庫設計技術。同時,根據HAJIF軟件的整體架構,應用了QtXml模塊,解決了XML文件在QT開發(fā)環(huán)境下的讀取問題。采用DomTree數(shù)據存儲技術,進一步提升了訪問XML文件時的效率。實際應用表明,HAJIF模型庫作為HAJIF系列軟件中工程數(shù)據庫的重要模塊,具有很好的實用性、用戶體驗以及可擴展性。
HAJIF模型庫;XML數(shù)據庫;QtXml模塊;Dom樹
隨著國內航空業(yè)的發(fā)展,自主研制的飛機將越來越多,自主知識產權的CAE軟件需求將越來越旺盛。HAJIF系列軟件在功能規(guī)模、軟件技術與解決問題能力等方面均居于國內領先地位,形成了國內具有自主版權的航空結構分析與優(yōu)化設計軟件系列產品,在航空、航天及民用工程項目中發(fā)揮了重要作用。
近些年來,隨著HAJIF軟件的成熟度越來越高,用戶群體對試驗數(shù)據以及建模經驗的需求度越來越高。伴隨著HAJIF系列軟件的產業(yè)化發(fā)展,如何將中國飛機強度研究所多年來飛行器地面驗證試驗中的寶貴模型、試驗數(shù)據以及豐富的建模經驗產品化顯得尤為重要。
鑒于此,本文采用面向對象的程序設計思想,從軟件開放性和擴展性出發(fā),采用層次化、統(tǒng)一化的軟件體系架構,借助于主流的程序設計語言C++,配合QT框架作為混合編程平臺,采用QtXml處理模塊設計開發(fā)了HAJIF模型庫,并主要針對XML文件讀取及操作中的關鍵技術進行了探討。
整個軟件用Visual Studio 2010搭建,以數(shù)據庫為核心,包括數(shù)據存儲、數(shù)據處理和數(shù)據顯示3部分內容,從而實現(xiàn)各種功能, 完成一個完整的前后處理系統(tǒng)。
2.1 統(tǒng)一的功能性架構
HAJIF模型庫在HAJIF系列軟件的開發(fā)平臺上進行研發(fā),以接口形式嵌入HAJIF基礎分析平臺。
HAJIF模型庫包含航空結構中常用的軍機、民機、無人機等典型航空結構模型,提供了中國飛機強度研究所多年來飛行器地面驗證試驗中珍貴的試驗數(shù)據、豐富的建模經驗以及寶貴的模型數(shù)據??梢詫ηf級的模型進行統(tǒng)一化管理和私人化存儲,參考性強,很大程度地提高了建模效率。
HAJIF模型庫支持用戶對模型數(shù)據庫自定義,實現(xiàn)模型的實時查詢、刪除、增加、修改、批量導入、批量導出等基本操作,方便用戶對模型進行統(tǒng)一管理,大大提高建模和后期維護效率。
HAJIF模型庫具有以下功能:
(1)模型的增加、刪除、修改和查看。系統(tǒng)自帶的模型不支持編輯和刪除功能。
(2)目錄樹中層級目錄結點的增加、刪除和重命名。
(3)模型的成批導入、導出。成批導入模型:當遇到模型重復時,提供覆蓋、忽略兩種選擇;當模型的層級關系與模型的名稱都相同時,認定為模型重復。
2.2 統(tǒng)一的數(shù)據結構
HAJIF模型庫中的模型具備以下屬性:(1)模型文件;(2)模型名稱;(3)模型的描述信息;(4)模型的預覽圖片;(5)模型的密級。
其中,模型的密級為系統(tǒng)自動設置,其余項均為用戶自行選擇或輸入。模型文件經過系統(tǒng)統(tǒng)一命名進行文件夾管理,模型的其余信息均儲存在XML文件中。
模型庫的重點是如何有效地對模型進行私人化的高效管理,因此,如何對模型分類更加重要。目錄樹提供了一種為模型進行分類的有效方法,即通過樹形的層級關系來反映模型的分類,系統(tǒng)會給定初始的目錄樹層級結構,用戶可以對其進行自定義。目錄樹的信息存儲在XML文件中。
通過HAJIF開發(fā)平臺的接口進入模型庫,調用存儲模型庫目錄樹以及模型信息的XML文件,后臺程序根據XML文件的結構及內容構造出包含分類層次的模型樹(以下簡稱目錄樹)[1]。用戶可以針對目錄樹查看、編輯、增加、刪除模型,還可以根據個人意愿修改目錄樹的層級結構。不同的操作對應不同的實現(xiàn)流程,如圖1所示。
圖1 HAJIF模型庫設計邏輯
當用戶對目錄樹進行了相關操作之后,不論是何操作,系統(tǒng)都將對原來的XML文件進行更新及重新寫入。
另外,當用戶進行添加或者刪除模型操作時,系統(tǒng)在更新并重新寫入XML文件的同時,還將管理儲存在后臺的模型文件以及模型描述圖片。在用戶刪除模型時,刪除相應模型的模型文件以及模型描述圖片。當用戶添加模型時,將加密壓縮之后的模型文件和模型描述圖片拷貝到后臺指定文件夾處進行統(tǒng)一管理。
因此,當用戶關閉模型庫時,不需要再對XML文件進行寫入等操作,也不需要對后臺存儲管理的模型相關文件進行處理。在一定程度上,保證了模型庫信息的時效性,能有效防止系統(tǒng)崩潰、停電等意外情況造成的數(shù)據丟失等問題。
HAJIF模型庫支持不同PC間的相互共享。用戶可以批量導出非涉密模型,進而分享給其他人。與此同時,用戶也可以直接成批導入從別處獲得的模型庫導出壓縮包,快速實現(xiàn)相互共享。
當用戶批量導出模型時,后臺將加密壓縮之后的模型文件、模型描述圖片以及相對應的XML文件,集中進行打包壓縮,壓縮包存儲位置可以由用戶自定義,進而用戶可以將生成的壓縮包分享給其他用戶。用戶在自己模型庫的基礎上,可以執(zhí)行批量導入操作,具體操作流程如圖2所示。
圖2 HAJIF模型庫批量導入導出邏輯圖
在執(zhí)行批量導入操作時,主要有以下兩個關鍵操作:
(1)XML文件的合并[2]:用戶選取快速分享的導入壓縮包,后臺程序將壓縮包內的導入XML文件與其現(xiàn)有模型庫對應的XML文件進行合并。
(2)模型的重復性判斷:當新導入的模型與原有模型所屬層級結構、模型名字都相同時,認定為兩模型重復,此時提供給用戶替換現(xiàn)有模型和忽略導入模型兩種選擇。成批導入能夠快速對現(xiàn)有模型庫的目錄樹進行擴充,并且對新導入的模型執(zhí)行入庫操作,實現(xiàn)了不同PC間模型庫共享的功能。
對于一般的XML數(shù)據處理,Qt提供了QtXml模塊[3]。
4.1 讀取XML文件
QtXml模塊提供了3種截然不同的應用程序編程接口(API),用來讀取XML文檔[4]。
(1)QXmlStreamReader
QXmlStreamReader是在Qt中讀取XML文檔的最快且最簡單的方式,屬于一次解析器,即只需讀取文檔一次,然后像一個遍歷器從頭到尾一次性處理XML文檔,期間不會有反復的情況。
(2)DOM(文檔對象模型)
DOM將整個XML文檔讀入內存,把XML文檔轉換為應用程序可以遍歷的樹形結構,允許程序在樹結構上向前向后移動導航,即實現(xiàn)多次解析器。這種方式帶來的問題是需要一次性將整個XML文檔讀入內存,因此會占用較大內存。
(3)SAX(XML簡單應用程序編程接口)
SAX實現(xiàn)方法是按階段將文檔讀取到內存中,在碰到標簽或者其他階段的時候,調用開發(fā)者預先設計好的回調函數(shù)去處理。SAX提供了大量的虛函數(shù),以事件的形式處理XML文檔。這種方式的缺點是需要開發(fā)者寫回調函數(shù)去處理不同標簽,代碼復雜一些,優(yōu)點是能處理很大的XML文件。
4.2 高效處理XML文檔
DOM將文檔描述為一棵樹(Tree)結構,Tree的每個節(jié)點表現(xiàn)為一個XML標記或者XML標記內的文本項。樹形結構精確地描述了XML文檔中標記間以及文本項間的相互關聯(lián)性[5]。考慮如下的XML文檔:
它對應如圖3所示的DOM樹。
圖3 XML文檔對應的Dom樹
這個DOM樹包含不同類型的節(jié)點,如:Element節(jié)點對應打開標簽以及與它匹配的關閉標簽。在這兩個標簽之內的內容則作為這個Element節(jié)點的子節(jié)點出現(xiàn)。在QT中,節(jié)點類型具有一個QDom前綴。QDomElement就代表一個Element節(jié)點,而QDomText就代表一個Text節(jié)點。
可以按需要遍歷這個DOM樹,對任何類型的節(jié)點進行處理,最終將修改好的這棵樹作為XML文件保存到磁盤中[6]。
4.3 軟件實現(xiàn)
HAJIF模型庫的界面設計風格與HAJIF系列軟件保持一致,首先進入系統(tǒng)界面,左側是目錄樹,包含了模型的分類信息,右側是模型的具體信息(用戶可對模型信息進行自定義擴展),默認包含模型的名稱、描述信息和預覽圖片。
用戶可以針對左側目錄樹的相關目錄層級進行個性化操作,如新增、刪除、重命名目錄、添加、刪除、修改指定模型等功能。軟件具體運行界面如圖4所示。
圖4 HAJIF模型庫運行界面
在需求分析的基礎上,設計試驗模型的數(shù)據結構,應用XML的數(shù)據庫技術,建立了可以私人化管理的數(shù)據庫結構體系。HAJIF模型庫可以從HAJIF基礎平臺通過接口訪問,實現(xiàn)了一個具有大數(shù)據存儲訪問功能,開放性、擴展性強的基礎數(shù)據庫模塊。
基于QT的開發(fā)環(huán)境,實現(xiàn)了XML數(shù)據庫的開發(fā)技術,支持不同密級模型的不同管理,可以對千萬量級的模型進行統(tǒng)一化管理和私人化存儲。應用實踐證明,HAJIF模型庫有很好的實用性,給用戶提供了豐富的建模經驗,使用起來十分便利,解決了一定的工程問題,同時也提升了國產CAE軟件HAJIF的市場競爭力,具有廣闊的應用前景。
[1]馬竹娟,汪宏喜.一種XML數(shù)據庫到關系數(shù)據庫的映射模型[J].計算機與現(xiàn)代化,2010,(2):180-187.
[2]張艷華.XML文檔在關系數(shù)據庫中存儲與查詢的實現(xiàn)[J].中國科技信息,2010,(11):90-91.
[3]梁隆愷,韓改寧,王曉妮.嵌入式Qt下的數(shù)據庫程序設計與開發(fā)[J].辦公自動化,2014,(21):58-61.
[4]鄒茜.基于Qt的GUI應用程序開發(fā)[J].計算機與網絡,2010,(18):596-597.
[5]何震瀛,李建中,王朝坤.一種XML數(shù)據庫的數(shù)據模型[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-),女,河南商丘人,碩士,助理工程師,主要從事虛擬試驗與軟件研發(fā)工作。
TP311.13
B
10.3969/j.issn.1674-3407.2016.04.020