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