張 敏,張 寧
(1.中車青島四方機(jī)車車輛股份有限公司,青島 266111;2.北京交通大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院,北京 100044)
動(dòng)車組高效、安全的運(yùn)營(yíng)需要建立一套集動(dòng)車組運(yùn)行管理、實(shí)時(shí)監(jiān)控、故障管理以及應(yīng)急措施為一體的管理體系與運(yùn)營(yíng)機(jī)制。目前,動(dòng)車組故障檢測(cè)與維護(hù)流程仍處于人工階段[1],隨車機(jī)師將動(dòng)車組故障發(fā)生的位置、部件、損壞情況的信息手工記錄在表單中,等運(yùn)營(yíng)結(jié)束后由派工人員收集故障表單,然后處理形成維修工單分派給維修工人進(jìn)行故障維修工作,維護(hù)完成后還要將維修信息進(jìn)行反饋,這些信息都要記錄備案[2]。整個(gè)流程中,大量繁雜的故障記錄信息需要手工操作,使得整個(gè)故障維護(hù)流程效率較低,手工操作在交互過(guò)程中不可避免會(huì)產(chǎn)生差錯(cuò)。為了解決這些問(wèn)題,本文提出了一種基于動(dòng)車組移動(dòng)互聯(lián)網(wǎng)設(shè)備的數(shù)據(jù)處理技術(shù),滿足了動(dòng)車組故障維護(hù)對(duì)信息化處理的要求。
XML(Extensible Markup Language)作為一種可擴(kuò)展標(biāo)記語(yǔ)言,是標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言(SGML,Standard Generalized Markup Language)的一個(gè)簡(jiǎn)化子集,它繼承了SGML的許多優(yōu)秀特性,同時(shí)也有自己的一些特色[1]:可擴(kuò)展性、靈活性、自描述性、開放性、跨平臺(tái)性和簡(jiǎn)明性。關(guān)系數(shù)據(jù)庫(kù)發(fā)展至今天已具有一套完備的理論基礎(chǔ)、簡(jiǎn)明的數(shù)據(jù)模型、方便的操作方法以及透明的查詢語(yǔ)言。在關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)以行和列的形式來(lái)儲(chǔ)存的,相應(yīng)的行與列組成了表,一系列具有特定關(guān)系的表組成了數(shù)據(jù)庫(kù)[3]。
XML數(shù)據(jù)與關(guān)系數(shù)據(jù)庫(kù)之間的數(shù)據(jù)轉(zhuǎn)換的難點(diǎn)主要在于存儲(chǔ)模式的區(qū)別,XML數(shù)據(jù)的存儲(chǔ)對(duì)于模式并沒有強(qiáng)制要求,因?yàn)閄ML文檔本身已經(jīng)包含了模式信息,模式和數(shù)據(jù)是共同存在的。而關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的存儲(chǔ)必須先有關(guān)系模式,模式和數(shù)據(jù)是分開存儲(chǔ)的。根據(jù)存儲(chǔ)時(shí)是否使用XML模式(DTD或XML Schema),基于關(guān)系的XML存儲(chǔ)可以分為以下兩類:結(jié)構(gòu)映射和模型映射[4]。
結(jié)構(gòu)映射方法就是在進(jìn)行關(guān)系數(shù)據(jù)庫(kù)的XML存儲(chǔ)時(shí),需要根據(jù)XML模式(或挖掘出XML文檔中固有的模式信息)生成相應(yīng)的關(guān)系模式,然后再根據(jù)生成的關(guān)系模式對(duì)XML文檔進(jìn)行解析分解并將它存放于相應(yīng)的數(shù)據(jù)表中。模型映射方法的主要 特點(diǎn)是將任何XML數(shù)據(jù)都存放在有固定關(guān)系模式的數(shù)據(jù)庫(kù)中,而不考慮XML文檔的模式,其本質(zhì)就是存儲(chǔ)XML文檔的結(jié)構(gòu)信息。在模型映射方法中,XML文檔被看作為由元素和屬性等節(jié)點(diǎn)組成的有向有序的樹或圖結(jié)構(gòu),本文稱這種樹或圖結(jié)構(gòu)為XML數(shù)據(jù)圖。關(guān)系模式就相當(dāng)于一個(gè)模板,XML在關(guān)系數(shù)據(jù)庫(kù)中的存儲(chǔ)主要按照數(shù)據(jù)庫(kù)提供的模板來(lái)組織數(shù)據(jù)。
XML Schema[5]提供了創(chuàng)建XML文檔的必要的框架,詳細(xì)說(shuō)明了一個(gè)XML文檔的不同元素和屬性的有效構(gòu)建、出現(xiàn)次數(shù)限制和數(shù)據(jù)類型等。目前,主要存在兩種基于XML Schema的映射算法—對(duì)象關(guān)系映射算法和直接映射算法。本文主要研究的是直接映射算法,其主要思想是建立一系列的映射規(guī)則,將Schema中定義的對(duì)象(屬性、元素、嵌套關(guān)系等)映射為關(guān)系模式的相應(yīng)對(duì)象。
基于XML Schema的關(guān)系映射算法主要分為兩個(gè)部分:(1)將XML Schema數(shù)據(jù)文檔進(jìn)行DOM解析生成DOM樹,對(duì)DOM樹進(jìn)行遍歷,對(duì)于每一個(gè)節(jié)點(diǎn)生成其對(duì)應(yīng)的對(duì)象,遍歷完DOM樹后生成一個(gè)對(duì)應(yīng)的節(jié)點(diǎn)對(duì)象樹。(2)對(duì)第一部分生成的對(duì)象節(jié)點(diǎn)樹進(jìn)行遍歷,對(duì)于不同的節(jié)點(diǎn)調(diào)用其不同的節(jié)點(diǎn)映射函數(shù)進(jìn)行處理,生成相應(yīng)的SQL語(yǔ)句,最后完成關(guān)系映射?;赬ML Schema的關(guān)系映射算法流程,如圖1所示。
目前,Oracle XML DB是比較成熟的XML關(guān)系數(shù)據(jù)庫(kù)管理框架,它提供高性能XML存儲(chǔ)和檢索技術(shù),提供存儲(chǔ)獨(dú)立、內(nèi)容獨(dú)立和編程語(yǔ)言獨(dú)立的基礎(chǔ)架構(gòu)來(lái)存儲(chǔ)和管理XML數(shù)據(jù)[6]。該技術(shù)將W3C XML數(shù)據(jù)模型完全集成到Oracle數(shù)據(jù)庫(kù)中,并提供新的定位和查詢數(shù)據(jù)庫(kù)中XML內(nèi)容的方法。XML數(shù)據(jù)庫(kù)并不能僅僅只提供XML文檔的持久存儲(chǔ)能力,它還必須提供標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)功能[7]。同時(shí)它也必須提供以XML為中心的有效索引、查詢、更新和搜索XML內(nèi)容的功能[8]。在Oracle XML DB中,XML數(shù)據(jù)的存儲(chǔ)策略主要有3種:結(jié)構(gòu)化存儲(chǔ)、非結(jié)構(gòu)化存儲(chǔ)及混合存儲(chǔ)。對(duì)于XML數(shù)據(jù)的存儲(chǔ)方式需要根據(jù)具體的數(shù)據(jù)對(duì)象來(lái)進(jìn)行選擇。
圖1 算法流程
動(dòng)車組故障檢修是行車安全的重要保障,但是動(dòng)車組故障檢修專項(xiàng)系統(tǒng)的研究在國(guó)內(nèi)起步較晚[2]。在這樣的大背景下,本文研究和實(shí)現(xiàn)了基于移動(dòng)互聯(lián)網(wǎng)設(shè)備(MID,Mobile Internet Device)的動(dòng)車組故障檢修專用系統(tǒng)。
動(dòng)車組MID專用系統(tǒng)用于動(dòng)車組故障檢修與維護(hù)過(guò)程,能夠?qū)崿F(xiàn)整個(gè)業(yè)務(wù)流程數(shù)據(jù)的信息化處理,滿足隨車機(jī)師、派工人員和機(jī)車維護(hù)人員的使用需求。MID專用系統(tǒng)功能結(jié)構(gòu),如圖2所示。
圖2 MID專用系統(tǒng)功能結(jié)構(gòu)
MID客戶端系統(tǒng)的主要功能是輔助動(dòng)車組隨車機(jī)師完成動(dòng)車組上部件故障的檢測(cè)與記錄,例如:動(dòng)車組座椅故障、吧臺(tái)故障、車門故障等故障信息,然后將這些故障信息發(fā)送到地面系統(tǒng)進(jìn)行進(jìn)一步的處理。客戶端要存儲(chǔ)和處理的數(shù)據(jù)量并不復(fù)雜和龐大,所有的數(shù)據(jù)都是以XML文檔的形式儲(chǔ)存。MID客戶端系統(tǒng)采用圖形界面的方式模擬動(dòng)車組結(jié)構(gòu),系統(tǒng)流程,如圖3所示。其中,未處理故障界面和歷史故障界面主要是對(duì)故障信息的分類查詢,未發(fā)送故障界面是對(duì)當(dāng)前MID專用系統(tǒng)中已經(jīng)形成故障記錄但尚未發(fā)送的記錄的查詢和處理操作。在動(dòng)車組結(jié)構(gòu)界面中,用戶點(diǎn)擊相應(yīng)的車廂會(huì)進(jìn)入相應(yīng)的車廂布局界面,實(shí)現(xiàn)故障定位和故障記錄的生成。
圖3 MID系統(tǒng)流程
2.1.1 故障信息錄入
故障信息錄入是客戶端系統(tǒng)的核心功能,后臺(tái)代碼使用Java語(yǔ)言實(shí)現(xiàn)。用戶只需要通過(guò)點(diǎn)擊界面上相應(yīng)的模型就可以準(zhǔn)確的定位到故障發(fā)生的位置,然后進(jìn)行故障信息的輸入。MID專用系統(tǒng)中的核心數(shù)據(jù)是故障記錄,故障記錄主要分為3部分信息:故障記錄信息(故障發(fā)生的位置、部件、故障備注、發(fā)生時(shí)間等)、動(dòng)車組信息(動(dòng)車組的編號(hào)、型號(hào)等)以及操作人員信息(操作人員的姓名、編號(hào)、記錄時(shí)間等)。
上述是故障記錄數(shù)據(jù)的一個(gè)簡(jiǎn)單示例:trainInfo、failure和operatorInfo 3個(gè)節(jié)點(diǎn)分別表示動(dòng)車組信息、故障記錄信息以及操作員信息。
(1)trainInfo
trainType:動(dòng)車組的類型編號(hào)。
trainNum:動(dòng)車組編號(hào)。
(2)failure
failureCode:故障代碼。
failureContent:故障內(nèi)容。
state:故障狀態(tài)。
time:故障記錄時(shí)間。
failurePosition:故障發(fā)生位置,其中carriageNum表示故障發(fā)生車廂,deviceCode表示故障發(fā)生部件代碼,device表示故障發(fā)生部件。
(3)operatorInfo
name:操作人員姓名。
telephone:操作員聯(lián)系電話。
time:故障記錄時(shí)間。
2.1.2 故障記錄查詢
故障記錄查詢主要有3種:未處理故障查詢、未發(fā)送故障查詢及歷史故障查詢。3種查詢分別對(duì)應(yīng)的未處理故障數(shù)據(jù)、未發(fā)送故障數(shù)據(jù)以及歷史故障記錄數(shù)據(jù),這3種數(shù)據(jù)主要通過(guò)數(shù)據(jù)中的
2.1.3 故障記錄發(fā)送
故障記錄數(shù)據(jù)以XML數(shù)據(jù)格式存儲(chǔ)在MID系統(tǒng)中,而XML數(shù)據(jù)存儲(chǔ)的缺點(diǎn)在于標(biāo)簽信息的冗余,MID系統(tǒng)與地面服務(wù)通信采用的是3G網(wǎng)絡(luò),其網(wǎng)絡(luò)帶寬有限,所以在故障記錄之前需要對(duì)故障記錄數(shù)據(jù)進(jìn)行壓縮,系統(tǒng)采用字典映射替換的思想,結(jié)合故障記錄數(shù)據(jù)的特點(diǎn),對(duì)其標(biāo)簽進(jìn)行替換。這種映射策略使故障記錄數(shù)據(jù)量大大減少,而在地面服務(wù)器中接收到數(shù)據(jù)后通過(guò)同樣的映射表可以還原XML數(shù)據(jù),通過(guò)這種映射方法可以有效地降低故障記錄XML數(shù)據(jù)大小,同時(shí)保持XML數(shù)據(jù)結(jié)構(gòu)信息。由于3G是公用網(wǎng)絡(luò),為了保證數(shù)據(jù)傳輸?shù)陌踩?,在?shù)據(jù)傳輸?shù)臅r(shí)候需要根據(jù)預(yù)先約定好的私有協(xié)議對(duì)數(shù)據(jù)進(jìn)行封包傳輸。
地面數(shù)據(jù)管理系統(tǒng)解決了動(dòng)車組故障檢測(cè)與維護(hù)流程中數(shù)據(jù)管理的問(wèn)題。在故障信息記錄結(jié)束以后,需要將這些信息發(fā)送到地面服務(wù)器的數(shù)據(jù)庫(kù)中以實(shí)現(xiàn)數(shù)據(jù)管理和生成維修工單等功能。
2.2.1 模塊功能設(shè)計(jì)
整個(gè)故障維護(hù)系統(tǒng)每天都會(huì)由MID專用系統(tǒng)產(chǎn)生大量的XML數(shù)據(jù)文檔,為了能夠使這些XML數(shù)據(jù)得到有效的存儲(chǔ)和處理,系統(tǒng)借助成熟的關(guān)系數(shù)據(jù)庫(kù)技術(shù)來(lái)實(shí)現(xiàn)這一功能,因此,MID專用系統(tǒng)中的數(shù)據(jù)通過(guò)XML數(shù)據(jù)管理模塊存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中,用戶則可以通過(guò)模塊提供的界面對(duì)存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的XML數(shù)據(jù)進(jìn)行相應(yīng)的操作。
MID系統(tǒng)數(shù)據(jù)管理模塊功能主要分為3部分:
(1)對(duì)MID專用系統(tǒng)中的XML數(shù)據(jù)進(jìn)行關(guān)系存儲(chǔ),例如:客戶端中產(chǎn)生的故障記錄數(shù)據(jù)和用戶界面(UI,User Interface)信息等。
(2)用戶對(duì)關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)能進(jìn)行維護(hù)操作,例如:修改故障數(shù)據(jù)、查詢故障數(shù)據(jù)等。
(3)根據(jù)用戶從關(guān)系數(shù)據(jù)庫(kù)查詢得到的數(shù)據(jù)能組成有效的XML數(shù)據(jù),例如:產(chǎn)生工單數(shù)據(jù)等。
2.2.2 數(shù)據(jù)存儲(chǔ)方式選擇
在MID專用系統(tǒng)的XML數(shù)據(jù)管理中,數(shù)據(jù)按照用途可以分為兩部分:(1)MID專用系統(tǒng)的配置信息和字典信息,例如:車輛配置信息、人員配置信息、UI布局信息等,這一類信息相對(duì)來(lái)說(shuō)變更的可能性不大,所以對(duì)于這一類信息主要采用非結(jié)構(gòu)化方式存儲(chǔ);(2)故障信息和工單信息,這一類信息是XML管理模塊的主要操作對(duì)象,對(duì)其查詢、修改的操作比較頻繁,所以對(duì)于這一類信息采用半結(jié)構(gòu)化存儲(chǔ)方式。
2.2.2.1 非結(jié)構(gòu)化存儲(chǔ)
在MID專用系統(tǒng)中,字典信息、UI布局信息等都屬于相對(duì)“靜態(tài)”的數(shù)據(jù)。UI信息的一個(gè)片段示例,如圖4所示。
可以看出UI信息主要保存的是車廂中各個(gè)部件對(duì)應(yīng)的UI信息,例如:圖中
圖4 UI信息示例
表1 unstruct_xml表結(jié)構(gòu)
unstruct_xml表用來(lái)存儲(chǔ)MID專用系統(tǒng)中以整體形式存儲(chǔ)的XML數(shù)據(jù)內(nèi)容,表中通過(guò)記錄XML數(shù)據(jù)文檔的名稱、類型等信息為文檔的檢索帶來(lái)便利。此過(guò)程中,以XML數(shù)據(jù)文檔作為輸入,獲取XML文檔的文件名作為xml_value字段的值,并提取XML數(shù)據(jù)文檔的數(shù)據(jù)內(nèi)容,拼接成插入數(shù)據(jù)庫(kù)的SQL/XML語(yǔ)句執(zhí)行插入數(shù)據(jù)庫(kù)。
2.2.2.2 半結(jié)構(gòu)化存儲(chǔ)
在MID專用系統(tǒng)中,故障記錄數(shù)據(jù)和工單記錄數(shù)據(jù)都需要半結(jié)構(gòu)化存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中,而半結(jié)構(gòu)化存儲(chǔ)的基礎(chǔ)是其相對(duì)應(yīng)的XML Schema模式信息,所以首先需要對(duì)XML數(shù)據(jù)進(jìn)行模式設(shè)計(jì)。使用類似于關(guān)系型數(shù)據(jù)模式的開發(fā)方式,創(chuàng)建概念模型,概念建模主要偏重于數(shù)據(jù)結(jié)構(gòu)而不是XML的層次結(jié)構(gòu)。故障記錄數(shù)據(jù)的概念模型,如圖5所示。
在對(duì)概念模型進(jìn)一步轉(zhuǎn)化成XML Schema模式過(guò)程中,可以采用對(duì)象-關(guān)系的建模思想:將每一個(gè)節(jié)點(diǎn)元素轉(zhuǎn)換成一個(gè)同名元素,將每一個(gè)葉子節(jié)點(diǎn)作為一個(gè)子元素或一個(gè)屬性。在設(shè)計(jì)XML Schema時(shí)還涉及到數(shù)據(jù)的約束問(wèn)題,例如:錄入個(gè)人信息中的電話信息并不是必須元素時(shí),可以通過(guò)設(shè)置其minOccurs="0"來(lái)制訂約束信息。XML Schema模式信息建立和注釋后,還在Oracle XML DB中進(jìn)行注冊(cè),在注冊(cè)之前需要?jiǎng)?chuàng)建目錄對(duì)象用來(lái)保存XML模式文檔和實(shí)例文檔。
2.2.3 維修工單數(shù)據(jù)管理
維修工單的生成就是將故障記錄和維修工人配對(duì)的過(guò)程:(1)用戶通過(guò)對(duì)故障記錄表進(jìn)行查詢,得到需要進(jìn)行維修的故障列表;(2)再?gòu)木S修工人信息表中獲取指定的維修工人的信息;(3)將兩部分信息組合生成維修工單數(shù)據(jù)。生成的工單數(shù)據(jù)以XML格式存儲(chǔ),可以通過(guò)XSL樣式將XML數(shù)據(jù)轉(zhuǎn)換成HTML在Web頁(yè)面中展示,同時(shí)在數(shù)據(jù)庫(kù)中通過(guò)一個(gè)故障工單表來(lái)保存故障記錄與維護(hù)工人的配對(duì)信息,當(dāng)維修工人反饋故障維修的結(jié)果時(shí),在故障工單表中找到對(duì)應(yīng)的記錄,從而找到對(duì)應(yīng)的故障記錄數(shù)據(jù),將故障維修的結(jié)果更新到故障記錄表中。
圖5 故障記錄概念模型
本文將XML技術(shù)應(yīng)用到動(dòng)車組故障檢測(cè)與維護(hù)中,作為業(yè)務(wù)數(shù)據(jù)存儲(chǔ)與處理的基礎(chǔ),設(shè)計(jì)和實(shí)現(xiàn)了基于MID的動(dòng)車組故障檢修專用系統(tǒng),該系統(tǒng)可以完成動(dòng)車組故障信息的錄入,并將故障記錄打包,通過(guò)無(wú)線網(wǎng)絡(luò)發(fā)送到地面維修所,使得維修人員能及時(shí)根據(jù)故障信息制定維修計(jì)劃;同時(shí),系統(tǒng)還能及時(shí)將故障維修結(jié)果反饋給隨車技師,從而將動(dòng)車組故障檢修優(yōu)化成為閉環(huán)流程,有效地解決了動(dòng)車組故障數(shù)據(jù)手工錄入、保存和管理問(wèn)題,實(shí)現(xiàn)了動(dòng)車組故障檢修過(guò)程的信息化,提高了檢修效率。
[1] 姜飛鵬. 動(dòng)車組檢修設(shè)備管理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 鐵路計(jì)算機(jī)應(yīng)用 ,2011, 20 (2):22-24.
[2] 張惟皎,賈志凱. 動(dòng)車組運(yùn)用檢修信息化管理探討[J].鐵路計(jì)算機(jī)應(yīng)用,2013,22(1):5-9.
[3] 徐曉梅,龔志祥,王曉云. XML技術(shù)內(nèi)幕[M]. 北京:機(jī)械工業(yè)出版社,2002:12-20.
[4] 胡錫偉,陳仲委. Oracle數(shù)據(jù)庫(kù)的XML存儲(chǔ)技術(shù)研究[J].計(jì)算機(jī)工程與設(shè)計(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語(yǔ)言與XML處理教程[M]. 北京:電子工業(yè)出版社, 2003:500-545.
[7] 鄧華梅,李肖鋒,劉新軍.關(guān)于Oracle XML DB技術(shù)的探討[J]. 信息技術(shù),2006,35(3):16-17.
[8] 皮 濤, 羅春風(fēng). 基于Oracle XML DB技術(shù)的XML數(shù)據(jù)存儲(chǔ)研究[J]. 軟件導(dǎo)刊,2010,19(6):174-176.