IETM中XML技术数据的处理方法
交互式电子技术手册IETM(Interactive Electronic Technical Manual)是用于复杂武器系统或军用及商用设备诊断和维修的信息数据包,它最适用于装备维修,它将与武器系统的故障查找及维修有关的技术信息集合到一个或数个数据库里,根据用户的需要提供故障诊断和查找程序。IETM最基础的工作是对技术数据进行处理,在这方面,美军和欧盟已发布了相关标准,建议用XML来描述这些技术数据。但是,这些标准对XML描述的技术数据如何存储没有进行规范。笔者以故障信息模块为例,在分析故障信息模块的基础上,建立了概念模型,并将概念模型转换为XML文档,按照一定的算法,将其映射成关系数据,从而实现了IETM技术数据的数据库存储。
1技术数据的分析与描述
1.1技术数据的分析
欧洲航空工业协会(ASD)与美国航空工业协会(AIA)发布的SPEC1000D要求技术信息以数据模块的方式进行描述。采用数据模块描述技术数据可以实现自我包含,也就是说一个数据模块可以独立地表达一条完整的信息。数据模块可以根据一种特定的逻辑编码系统来进行区分。这样,数据模块可以保证数据在存储时不出现冗余,也较容易实现数据的访问和维护,而且适合电子信息的交换。因为IETM技术数据的内容主要涉及装备使用、维修等活动,所以各个数据模块的内部以及各个数据模块之间都有相互的逻辑关联。根据SPEC1000D标准描述的数据模块和每个数据模块要表达的含意,可建立模块的概念模型。以故障信息为例,根据实际工作中的操作,建立其概念模型,如图1所示。
1.2 选用XML描述技术数据
XML可扩展标记语言是SGML语言的子集,是一种文献定义和描述的元语言。它保留了SGML可扩展性、结构化等特点,对SGML的某些内部数值和参数进行了重新定义,省略了SGML中许多复杂而少用的部分。XML具有可扩展性、交互性好、高结构化、内容与显示分开的优点。所以,SPEC1000D推荐使用XML来描述IETM中的技术数据。
使用XML描述技术信息的关键是进行技术信息的文档类型定义(DTD)。DTD是XML从SGML继承而来的。通常情况下,DTD列出了可用在文档中的元素、属性、实体和符号表示法,以及这些内容之间可能的相互关系,指定了文档结构的一系列规则。因此,可以将IETM技术数据的概念模型映射为DTD文档。
图1故障信息概念模型映射为DTD文档的
举例如下:
<? xml version="1.0"? encoding="gb2312">
<! ELEMENT faultinf( precond3,link3,test+,fault3)>
<! ATTLIST faultinf id ID#REQUIRED>
<! ATTLIST faultinf name CDATA#IMPLIED>
<! ATTLIST faultinf cdm(node|alt-node) "node">
<! ATTLIST faultinf ref IDREF# IMPLIED>
<! ENTITY%precond SYSTEM "precond_dtd.txt">
%precond;
<! ENTITY%link SYSTEM"link_dtd.txt">
%link;
<! ENTITY%test SYSTEM"test_dtd.txt">
%test;
<! ENTITY%fault SYSTEM"fault_dtd.txt">
%fault;
2基于XML的技术数据存储
2.1几种XML文档存储方法
目前,XML数据的存储和查询有3种不同的选择:一是利用文件系统,即建立平面文件数据库。在这种方案中,文档大小受内存容量的限制,且这种方法不能进行集中查询。二是利用现有的数据库系统技术建库,将XML文档按标记分解成不同的字段,并存储到多个关系表中,表与表之间以外键约束。该方案同时支持面向XML文档的检索,检索输出时,再将表中信息拼接成XML文档形式。在这种方案中,数据库内部不是以XML文档原始格式存储数据,通常叫做XML2enabled数据库或XMLready数据库。三是建立一个专门的数据库系统,如Tamino、Text2ML等商业化产品。在这种方案中,数据库内部是以XML文档原始格式存储数据,通常叫做N2ative–XML数据库,即XML原生数据库。
IETM是用于储存武器装备的技术数据,所以要具备可靠、安全等性能特点。关系数据库系统已经非常成熟,并且有数据存取效率高、数据完整性约束、并发访问控制机制、强大的安全机制等优点。同时,由于IETM数据的来源(如后勤保障分析记录)都是以关系数据进行的存储。当转换数以万计的技术数据条目时,相同类型数据的转换速度和准确率比不同类型数据要大得多。因此,对于XML标记的IETM技术数据的应当转换为关系数据进行存储。
2.2 XML技术数据向关系数据的映射
技术数据的XML文档分解后转换为关系数据的一般思路是:根据XML文档数据的逻辑结构设计关系模式,即按照XML的结构定义(DTD或XML Schema)来设计关系表,其算法理论主要是图状逻辑模型到E-R逻辑模型的转换。具体步骤如下:
(1)从上到下扫描DTD,对于DTD中的每个复杂元素类型,生成一个带有主键的类表。
(2)对于DTD中每个简单元素,在它对应的类表中生成一个单一的属性列,如果在引用中是可选的(?操作符),则这个列是允许有空值的。
(3)对于简单元素类型的重复引用生成带有外键的属性表。
(4)对于复杂元素类型的引用生成指向双亲的外键。
(5)在混合内容中的PCDATA生成带有一个外键的属性表。
(6)对于所有被引用的属性按下列步骤进行:
对于单值属性生成一列,如果属性是可选的,这个列是允许为空值的。
对于多值属性生成带有外键的属性表。
如果一个属性有缺省值,则把它用作列缺省值。
举例,将故障信息的DTD文档Faultinf.dtd映射为关系表。
第1步,为复杂元素类型生成类表和这些表的主键,为简单元素类型的重复引用生成带有外键的属性表。
DTD 表
<! ELEMENT faultinf(precond3, Tablefault inf
Link*,test+,fault*)>
<! ATTLIST faultinf id ID column faultinf_pk
#REQUIRED>
<! ATTLIST faultinf name
CDATA#IMPLIED>
<! ATTLIST faultinf cdm
IDREF#IMPLIED>
<! ATTLIST faultinf ref IDREF
#IMPLIED>
<! ENTITY%precond SYSTEM Table precond
"precond_dtd.txt">
%precond;
<! ENTITY%link SYSTEM Table link
"link_dtd.txt">
%link;
<! ENTITY%test SYSTEM Table test
"test_dtd.txt">
%test;
<! ENTITY%fault SYSTEM Tablefault
"fault_dtd.txt">
%fault;
column faultinf_fk
第2步,为简单元素类型的引用和属性的引用生成列,添加到对应的类表中。
DTD 表
<! ELEMENT faultinf(precond*, Table faultinf
Link*,test+,fault*)>
<! ATTLIST faultinf id ID column
#REQUIRED> faultinf_id_pk
<! ATTLIST faultinf name CDATA column
#IMPLIED> faultinf_name
<! ATTLIST faultinf cdm IDREF Column
#IMPLIED> faultinf_cdm
<! ATTLIST faultinf ref IDREF Column
#IMPLIED> faultinf_ref
<! ENTITY%precond SYSTEM Table precond
"precond_dtd.txt">
%precond;
<! ENTITY%link SYSTEM Table link
"link_dtd.txt">
%link;
<! ENTITY%test SYSTEM Table test
"test_dtd.txt">
%test;
<! ENTITY%fault SYSTEM Table fault
"fault_dtd.txt">
%fault;
column faultinf_id_fk
第3步,为复杂元素类型的引用生成指向双亲的外键。
DTD 表
<! ELEMENT faultinf(precond*, Table faultinf
link*,test+,fault*)>
<! ATTLIST faultinf id ID column
#REQUIRED> faultinf_id_pk
<! ATTLIST faultinf name CDATA column
#IMPLIED> faultinf_name
<! ATTLIST faultinf cdm IDREF Column
#IMPLIED> faultinf_cdm
<! ATTLIST faultinf ref IDREF Column
#IMPLIED> faultinf_ref
<! ENTITY%precond SYSTEM Table precond
"precond_dtd.txt">
%precond; column faultinf_id_fk
<! ENTITY%link SYSTEM Table link
"link_dtd.txt">
%link; column faultinf_id_fk
<! ENTITY%test SYSTEM Table test
"test_dtd.txt">
%test; column faultinf_id_fk
<! ENTITY%fault SYSTEM Table fault
"fault_dtd.txt">
%fault; column faultinf_id_fk
Column faultinf_id_fk
2.3考虑LSAR内容的IETM数据库设置
LSAR后勤保障分析记录是记录执行规定的保障性分析工作项目所需的和所产生的各种信息与数据的集成。它包含了与技术资料有关的技术信息,它与IETM数据有对接或共享的关系。因此,必须考虑LSAR关系表的情况。
在LSAR后勤保障分析记录中与技术资料有关的关系表有19个,具体内容见表1。
为了防止技术数据从后勤保障分析记录中转换到IETM数据库时的丢失,在设计IETM数据库时,应当考虑与后勤保障分析记录相对应的关系并建立相关链接。以故障信息为例,应在故障信息的表中添加后勤保障分析记录中与技术资料有关的各表的外键,建立链接,保证IETM技术数据在宽度上不丢失数据。同时,在技术数据的深度上要防止过于繁琐,如故障信息中前提条件表与LSAR建立链接时,就要对记录中的19个表进行剪裁。