张 敏,张 宁
(1.中车青岛四方机车车辆股份有限公司,青岛 266111;2.北京交通大学 计算机与信息技术学院,北京 100044)
动车组高效、安全的运营需要建立一套集动车组运行管理、实时监控、故障管理以及应急措施为一体的管理体系与运营机制。目前,动车组故障检测与维护流程仍处于人工阶段[1],随车机师将动车组故障发生的位置、部件、损坏情况的信息手工记录在表单中,等运营结束后由派工人员收集故障表单,然后处理形成维修工单分派给维修工人进行故障维修工作,维护完成后还要将维修信息进行反馈,这些信息都要记录备案[2]。整个流程中,大量繁杂的故障记录信息需要手工操作,使得整个故障维护流程效率较低,手工操作在交互过程中不可避免会产生差错。为了解决这些问题,本文提出了一种基于动车组移动互联网设备的数据处理技术,满足了动车组故障维护对信息化处理的要求。
XML(Extensible Markup Language)作为一种可扩展标记语言,是标准通用标记语言(SGML,Standard Generalized Markup Language)的一个简化子集,它继承了SGML的许多优秀特性,同时也有自己的一些特色[1]:可扩展性、灵活性、自描述性、开放性、跨平台性和简明性。关系数据库发展至今天已具有一套完备的理论基础、简明的数据模型、方便的操作方法以及透明的查询语言。在关系数据库中,数据以行和列的形式来储存的,相应的行与列组成了表,一系列具有特定关系的表组成了数据库[3]。
XML数据与关系数据库之间的数据转换的难点主要在于存储模式的区别,XML数据的存储对于模式并没有强制要求,因为XML文档本身已经包含了模式信息,模式和数据是共同存在的。而关系数据库中数据的存储必须先有关系模式,模式和数据是分开存储的。根据存储时是否使用XML模式(DTD或XML Schema),基于关系的XML存储可以分为以下两类:结构映射和模型映射[4]。
结构映射方法就是在进行关系数据库的XML存储时,需要根据XML模式(或挖掘出XML文档中固有的模式信息)生成相应的关系模式,然后再根据生成的关系模式对XML文档进行解析分解并将它存放于相应的数据表中。模型映射方法的主要 特点是将任何XML数据都存放在有固定关系模式的数据库中,而不考虑XML文档的模式,其本质就是存储XML文档的结构信息。在模型映射方法中,XML文档被看作为由元素和属性等节点组成的有向有序的树或图结构,本文称这种树或图结构为XML数据图。关系模式就相当于一个模板,XML在关系数据库中的存储主要按照数据库提供的模板来组织数据。
XML Schema[5]提供了创建XML文档的必要的框架,详细说明了一个XML文档的不同元素和属性的有效构建、出现次数限制和数据类型等。目前,主要存在两种基于XML Schema的映射算法—对象关系映射算法和直接映射算法。本文主要研究的是直接映射算法,其主要思想是建立一系列的映射规则,将Schema中定义的对象(属性、元素、嵌套关系等)映射为关系模式的相应对象。
基于XML Schema的关系映射算法主要分为两个部分:(1)将XML Schema数据文档进行DOM解析生成DOM树,对DOM树进行遍历,对于每一个节点生成其对应的对象,遍历完DOM树后生成一个对应的节点对象树。(2)对第一部分生成的对象节点树进行遍历,对于不同的节点调用其不同的节点映射函数进行处理,生成相应的SQL语句,最后完成关系映射。基于XML Schema的关系映射算法流程,如图1所示。
目前,Oracle XML DB是比较成熟的XML关系数据库管理框架,它提供高性能XML存储和检索技术,提供存储独立、内容独立和编程语言独立的基础架构来存储和管理XML数据[6]。该技术将W3C XML数据模型完全集成到Oracle数据库中,并提供新的定位和查询数据库中XML内容的方法。XML数据库并不能仅仅只提供XML文档的持久存储能力,它还必须提供标准的数据库功能[7]。同时它也必须提供以XML为中心的有效索引、查询、更新和搜索XML内容的功能[8]。在Oracle XML DB中,XML数据的存储策略主要有3种:结构化存储、非结构化存储及混合存储。对于XML数据的存储方式需要根据具体的数据对象来进行选择。
图1 算法流程
动车组故障检修是行车安全的重要保障,但是动车组故障检修专项系统的研究在国内起步较晚[2]。在这样的大背景下,本文研究和实现了基于移动互联网设备(MID,Mobile Internet Device)的动车组故障检修专用系统。
动车组MID专用系统用于动车组故障检修与维护过程,能够实现整个业务流程数据的信息化处理,满足随车机师、派工人员和机车维护人员的使用需求。MID专用系统功能结构,如图2所示。
图2 MID专用系统功能结构
MID客户端系统的主要功能是辅助动车组随车机师完成动车组上部件故障的检测与记录,例如:动车组座椅故障、吧台故障、车门故障等故障信息,然后将这些故障信息发送到地面系统进行进一步的处理。客户端要存储和处理的数据量并不复杂和庞大,所有的数据都是以XML文档的形式储存。MID客户端系统采用图形界面的方式模拟动车组结构,系统流程,如图3所示。其中,未处理故障界面和历史故障界面主要是对故障信息的分类查询,未发送故障界面是对当前MID专用系统中已经形成故障记录但尚未发送的记录的查询和处理操作。在动车组结构界面中,用户点击相应的车厢会进入相应的车厢布局界面,实现故障定位和故障记录的生成。
图3 MID系统流程
2.1.1 故障信息录入
故障信息录入是客户端系统的核心功能,后台代码使用Java语言实现。用户只需要通过点击界面上相应的模型就可以准确的定位到故障发生的位置,然后进行故障信息的输入。MID专用系统中的核心数据是故障记录,故障记录主要分为3部分信息:故障记录信息(故障发生的位置、部件、故障备注、发生时间等)、动车组信息(动车组的编号、型号等)以及操作人员信息(操作人员的姓名、编号、记录时间等)。
上述是故障记录数据的一个简单示例:trainInfo、failure和operatorInfo 3个节点分别表示动车组信息、故障记录信息以及操作员信息。
(1)trainInfo
trainType:动车组的类型编号。
trainNum:动车组编号。
(2)failure
failureCode:故障代码。
failureContent:故障内容。
state:故障状态。
time:故障记录时间。
failurePosition:故障发生位置,其中carriageNum表示故障发生车厢,deviceCode表示故障发生部件代码,device表示故障发生部件。
(3)operatorInfo
name:操作人员姓名。
telephone:操作员联系电话。
time:故障记录时间。
2.1.2 故障记录查询
故障记录查询主要有3种:未处理故障查询、未发送故障查询及历史故障查询。3种查询分别对应的未处理故障数据、未发送故障数据以及历史故障记录数据,这3种数据主要通过数据中的
2.1.3 故障记录发送
故障记录数据以XML数据格式存储在MID系统中,而XML数据存储的缺点在于标签信息的冗余,MID系统与地面服务通信采用的是3G网络,其网络带宽有限,所以在故障记录之前需要对故障记录数据进行压缩,系统采用字典映射替换的思想,结合故障记录数据的特点,对其标签进行替换。这种映射策略使故障记录数据量大大减少,而在地面服务器中接收到数据后通过同样的映射表可以还原XML数据,通过这种映射方法可以有效地降低故障记录XML数据大小,同时保持XML数据结构信息。由于3G是公用网络,为了保证数据传输的安全性,在数据传输的时候需要根据预先约定好的私有协议对数据进行封包传输。
地面数据管理系统解决了动车组故障检测与维护流程中数据管理的问题。在故障信息记录结束以后,需要将这些信息发送到地面服务器的数据库中以实现数据管理和生成维修工单等功能。
2.2.1 模块功能设计
整个故障维护系统每天都会由MID专用系统产生大量的XML数据文档,为了能够使这些XML数据得到有效的存储和处理,系统借助成熟的关系数据库技术来实现这一功能,因此,MID专用系统中的数据通过XML数据管理模块存储在关系数据库中,用户则可以通过模块提供的界面对存储在关系数据库中的XML数据进行相应的操作。
MID系统数据管理模块功能主要分为3部分:
(1)对MID专用系统中的XML数据进行关系存储,例如:客户端中产生的故障记录数据和用户界面(UI,User Interface)信息等。
(2)用户对关系数据库中存储的数据能进行维护操作,例如:修改故障数据、查询故障数据等。
(3)根据用户从关系数据库查询得到的数据能组成有效的XML数据,例如:产生工单数据等。
2.2.2 数据存储方式选择
在MID专用系统的XML数据管理中,数据按照用途可以分为两部分:(1)MID专用系统的配置信息和字典信息,例如:车辆配置信息、人员配置信息、UI布局信息等,这一类信息相对来说变更的可能性不大,所以对于这一类信息主要采用非结构化方式存储;(2)故障信息和工单信息,这一类信息是XML管理模块的主要操作对象,对其查询、修改的操作比较频繁,所以对于这一类信息采用半结构化存储方式。
2.2.2.1 非结构化存储
在MID专用系统中,字典信息、UI布局信息等都属于相对“静态”的数据。UI信息的一个片段示例,如图4所示。
可以看出UI信息主要保存的是车厢中各个部件对应的UI信息,例如:图中
图4 UI信息示例
表1 unstruct_xml表结构
unstruct_xml表用来存储MID专用系统中以整体形式存储的XML数据内容,表中通过记录XML数据文档的名称、类型等信息为文档的检索带来便利。此过程中,以XML数据文档作为输入,获取XML文档的文件名作为xml_value字段的值,并提取XML数据文档的数据内容,拼接成插入数据库的SQL/XML语句执行插入数据库。
2.2.2.2 半结构化存储
在MID专用系统中,故障记录数据和工单记录数据都需要半结构化存储到关系数据库中,而半结构化存储的基础是其相对应的XML Schema模式信息,所以首先需要对XML数据进行模式设计。使用类似于关系型数据模式的开发方式,创建概念模型,概念建模主要偏重于数据结构而不是XML的层次结构。故障记录数据的概念模型,如图5所示。
在对概念模型进一步转化成XML Schema模式过程中,可以采用对象-关系的建模思想:将每一个节点元素转换成一个同名元素,将每一个叶子节点作为一个子元素或一个属性。在设计XML Schema时还涉及到数据的约束问题,例如:录入个人信息中的电话信息并不是必须元素时,可以通过设置其minOccurs="0"来制订约束信息。XML Schema模式信息建立和注释后,还在Oracle XML DB中进行注册,在注册之前需要创建目录对象用来保存XML模式文档和实例文档。
2.2.3 维修工单数据管理
维修工单的生成就是将故障记录和维修工人配对的过程:(1)用户通过对故障记录表进行查询,得到需要进行维修的故障列表;(2)再从维修工人信息表中获取指定的维修工人的信息;(3)将两部分信息组合生成维修工单数据。生成的工单数据以XML格式存储,可以通过XSL样式将XML数据转换成HTML在Web页面中展示,同时在数据库中通过一个故障工单表来保存故障记录与维护工人的配对信息,当维修工人反馈故障维修的结果时,在故障工单表中找到对应的记录,从而找到对应的故障记录数据,将故障维修的结果更新到故障记录表中。
图5 故障记录概念模型
本文将XML技术应用到动车组故障检测与维护中,作为业务数据存储与处理的基础,设计和实现了基于MID的动车组故障检修专用系统,该系统可以完成动车组故障信息的录入,并将故障记录打包,通过无线网络发送到地面维修所,使得维修人员能及时根据故障信息制定维修计划;同时,系统还能及时将故障维修结果反馈给随车技师,从而将动车组故障检修优化成为闭环流程,有效地解决了动车组故障数据手工录入、保存和管理问题,实现了动车组故障检修过程的信息化,提高了检修效率。
[1] 姜飞鹏. 动车组检修设备管理信息系统的设计与实现[J]. 铁路计算机应用 ,2011, 20 (2):22-24.
[2] 张惟皎,贾志凯. 动车组运用检修信息化管理探讨[J].铁路计算机应用,2013,22(1):5-9.
[3] 徐晓梅,龚志祥,王晓云. XML技术内幕[M]. 北京:机械工业出版社,2002:12-20.
[4] 胡锡伟,陈仲委. Oracle数据库的XML存储技术研究[J].计算机工程与设计,2005,26(5):1179-1181.
[5] Yoshikawa M, Amagasa T, Shimura T, etal. A path-based approach to storage and retrieval of xml documents using relational database[J]. Acm Transactions on Internet Technology,2001 , 1 (1) :110-141.
[6] 刘文红,赵伟明. Java语言与XML处理教程[M]. 北京:电子工业出版社, 2003:500-545.
[7] 邓华梅,李肖锋,刘新军.关于Oracle XML DB技术的探讨[J]. 信息技术,2006,35(3):16-17.
[8] 皮 涛, 罗春风. 基于Oracle XML DB技术的XML数据存储研究[J]. 软件导刊,2010,19(6):174-176.