聂珊珊,王晓辉,张生贵
(中国飞机强度研究所,陕西 西安 710065)
基于QT的XML数据库的设计与实现
聂珊珊,王晓辉,张生贵
(中国飞机强度研究所,陕西 西安 710065)
针对国产有限元软件HAJIF对大规模存储数据库的迫切需求,结合HAJIF系列软件的整体架构,设计并实现具有高度开放性和扩展性的基础数据库模块——HAJIF模型库。结合HAJIF模型库的底层数据结构设计,引入了XML数据库设计技术。同时,根据HAJIF软件的整体架构,应用了QtXml模块,解决了XML文件在QT开发环境下的读取问题。采用DomTree数据存储技术,进一步提升了访问XML文件时的效率。实际应用表明,HAJIF模型库作为HAJIF系列软件中工程数据库的重要模块,具有很好的实用性、用户体验以及可扩展性。
HAJIF模型库;XML数据库;QtXml模块;Dom树
随着国内航空业的发展,自主研制的飞机将越来越多,自主知识产权的CAE软件需求将越来越旺盛。HAJIF系列软件在功能规模、软件技术与解决问题能力等方面均居于国内领先地位,形成了国内具有自主版权的航空结构分析与优化设计软件系列产品,在航空、航天及民用工程项目中发挥了重要作用。
近些年来,随着HAJIF软件的成熟度越来越高,用户群体对试验数据以及建模经验的需求度越来越高。伴随着HAJIF系列软件的产业化发展,如何将中国飞机强度研究所多年来飞行器地面验证试验中的宝贵模型、试验数据以及丰富的建模经验产品化显得尤为重要。
鉴于此,本文采用面向对象的程序设计思想,从软件开放性和扩展性出发,采用层次化、统一化的软件体系架构,借助于主流的程序设计语言C++,配合QT框架作为混合编程平台,采用QtXml处理模块设计开发了HAJIF模型库,并主要针对XML文件读取及操作中的关键技术进行了探讨。
整个软件用Visual Studio 2010搭建,以数据库为核心,包括数据存储、数据处理和数据显示3部分内容,从而实现各种功能, 完成一个完整的前后处理系统。
2.1 统一的功能性架构
HAJIF模型库在HAJIF系列软件的开发平台上进行研发,以接口形式嵌入HAJIF基础分析平台。
HAJIF模型库包含航空结构中常用的军机、民机、无人机等典型航空结构模型,提供了中国飞机强度研究所多年来飞行器地面验证试验中珍贵的试验数据、丰富的建模经验以及宝贵的模型数据。可以对千万级的模型进行统一化管理和私人化存储,参考性强,很大程度地提高了建模效率。
HAJIF模型库支持用户对模型数据库自定义,实现模型的实时查询、删除、增加、修改、批量导入、批量导出等基本操作,方便用户对模型进行统一管理,大大提高建模和后期维护效率。
HAJIF模型库具有以下功能:
(1)模型的增加、删除、修改和查看。系统自带的模型不支持编辑和删除功能。
(2)目录树中层级目录结点的增加、删除和重命名。
(3)模型的成批导入、导出。成批导入模型:当遇到模型重复时,提供覆盖、忽略两种选择;当模型的层级关系与模型的名称都相同时,认定为模型重复。
2.2 统一的数据结构
HAJIF模型库中的模型具备以下属性:(1)模型文件;(2)模型名称;(3)模型的描述信息;(4)模型的预览图片;(5)模型的密级。
其中,模型的密级为系统自动设置,其余项均为用户自行选择或输入。模型文件经过系统统一命名进行文件夹管理,模型的其余信息均储存在XML文件中。
模型库的重点是如何有效地对模型进行私人化的高效管理,因此,如何对模型分类更加重要。目录树提供了一种为模型进行分类的有效方法,即通过树形的层级关系来反映模型的分类,系统会给定初始的目录树层级结构,用户可以对其进行自定义。目录树的信息存储在XML文件中。
通过HAJIF开发平台的接口进入模型库,调用存储模型库目录树以及模型信息的XML文件,后台程序根据XML文件的结构及内容构造出包含分类层次的模型树(以下简称目录树)[1]。用户可以针对目录树查看、编辑、增加、删除模型,还可以根据个人意愿修改目录树的层级结构。不同的操作对应不同的实现流程,如图1所示。
图1 HAJIF模型库设计逻辑
当用户对目录树进行了相关操作之后,不论是何操作,系统都将对原来的XML文件进行更新及重新写入。
另外,当用户进行添加或者删除模型操作时,系统在更新并重新写入XML文件的同时,还将管理储存在后台的模型文件以及模型描述图片。在用户删除模型时,删除相应模型的模型文件以及模型描述图片。当用户添加模型时,将加密压缩之后的模型文件和模型描述图片拷贝到后台指定文件夹处进行统一管理。
因此,当用户关闭模型库时,不需要再对XML文件进行写入等操作,也不需要对后台存储管理的模型相关文件进行处理。在一定程度上,保证了模型库信息的时效性,能有效防止系统崩溃、停电等意外情况造成的数据丢失等问题。
HAJIF模型库支持不同PC间的相互共享。用户可以批量导出非涉密模型,进而分享给其他人。与此同时,用户也可以直接成批导入从别处获得的模型库导出压缩包,快速实现相互共享。
当用户批量导出模型时,后台将加密压缩之后的模型文件、模型描述图片以及相对应的XML文件,集中进行打包压缩,压缩包存储位置可以由用户自定义,进而用户可以将生成的压缩包分享给其他用户。用户在自己模型库的基础上,可以执行批量导入操作,具体操作流程如图2所示。
图2 HAJIF模型库批量导入导出逻辑图
在执行批量导入操作时,主要有以下两个关键操作:
(1)XML文件的合并[2]:用户选取快速分享的导入压缩包,后台程序将压缩包内的导入XML文件与其现有模型库对应的XML文件进行合并。
(2)模型的重复性判断:当新导入的模型与原有模型所属层级结构、模型名字都相同时,认定为两模型重复,此时提供给用户替换现有模型和忽略导入模型两种选择。成批导入能够快速对现有模型库的目录树进行扩充,并且对新导入的模型执行入库操作,实现了不同PC间模型库共享的功能。
对于一般的XML数据处理,Qt提供了QtXml模块[3]。
4.1 读取XML文件
QtXml模块提供了3种截然不同的应用程序编程接口(API),用来读取XML文档[4]。
(1)QXmlStreamReader
QXmlStreamReader是在Qt中读取XML文档的最快且最简单的方式,属于一次解析器,即只需读取文档一次,然后像一个遍历器从头到尾一次性处理XML文档,期间不会有反复的情况。
(2)DOM(文档对象模型)
DOM将整个XML文档读入内存,把XML文档转换为应用程序可以遍历的树形结构,允许程序在树结构上向前向后移动导航,即实现多次解析器。这种方式带来的问题是需要一次性将整个XML文档读入内存,因此会占用较大内存。
(3)SAX(XML简单应用程序编程接口)
SAX实现方法是按阶段将文档读取到内存中,在碰到标签或者其他阶段的时候,调用开发者预先设计好的回调函数去处理。SAX提供了大量的虚函数,以事件的形式处理XML文档。这种方式的缺点是需要开发者写回调函数去处理不同标签,代码复杂一些,优点是能处理很大的XML文件。
4.2 高效处理XML文档
DOM将文档描述为一棵树(Tree)结构,Tree的每个节点表现为一个XML标记或者XML标记内的文本项。树形结构精确地描述了XML文档中标记间以及文本项间的相互关联性[5]。考虑如下的XML文档:
它对应如图3所示的DOM树。
图3 XML文档对应的Dom树
这个DOM树包含不同类型的节点,如:Element节点对应打开标签以及与它匹配的关闭标签。在这两个标签之内的内容则作为这个Element节点的子节点出现。在QT中,节点类型具有一个QDom前缀。QDomElement就代表一个Element节点,而QDomText就代表一个Text节点。
可以按需要遍历这个DOM树,对任何类型的节点进行处理,最终将修改好的这棵树作为XML文件保存到磁盘中[6]。
4.3 软件实现
HAJIF模型库的界面设计风格与HAJIF系列软件保持一致,首先进入系统界面,左侧是目录树,包含了模型的分类信息,右侧是模型的具体信息(用户可对模型信息进行自定义扩展),默认包含模型的名称、描述信息和预览图片。
用户可以针对左侧目录树的相关目录层级进行个性化操作,如新增、删除、重命名目录、添加、删除、修改指定模型等功能。软件具体运行界面如图4所示。
图4 HAJIF模型库运行界面
在需求分析的基础上,设计试验模型的数据结构,应用XML的数据库技术,建立了可以私人化管理的数据库结构体系。HAJIF模型库可以从HAJIF基础平台通过接口访问,实现了一个具有大数据存储访问功能,开放性、扩展性强的基础数据库模块。
基于QT的开发环境,实现了XML数据库的开发技术,支持不同密级模型的不同管理,可以对千万量级的模型进行统一化管理和私人化存储。应用实践证明,HAJIF模型库有很好的实用性,给用户提供了丰富的建模经验,使用起来十分便利,解决了一定的工程问题,同时也提升了国产CAE软件HAJIF的市场竞争力,具有广阔的应用前景。
[1]马竹娟,汪宏喜.一种XML数据库到关系数据库的映射模型[J].计算机与现代化,2010,(2):180-187.
[2]张艳华.XML文档在关系数据库中存储与查询的实现[J].中国科技信息,2010,(11):90-91.
[3]梁隆恺,韩改宁,王晓妮.嵌入式Qt下的数据库程序设计与开发[J].办公自动化,2014,(21):58-61.
[4]邹茜.基于Qt的GUI应用程序开发[J].计算机与网络,2010,(18):596-597.
[5]何震瀛,李建中,王朝坤.一种XML数据库的数据模型[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-),女,河南商丘人,硕士,助理工程师,主要从事虚拟试验与软件研发工作。
TP311.13
B
10.3969/j.issn.1674-3407.2016.04.020