闞勁軍,余 揚(yáng),王 欣,王曉東
(1.中國民航信息網(wǎng)絡(luò)股份有限公司,北京 101318;2.中航信民航旅客服務(wù)智能化應(yīng)用技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京 101318)
國內(nèi)的民航業(yè)正處在迅速發(fā)展之中,客運(yùn)業(yè)務(wù)是民航業(yè)務(wù)的重要組成部分,每天全國的機(jī)場(chǎng)都會(huì)處理大批量的旅客出行。目前,機(jī)場(chǎng)使用的辦理旅客登機(jī)的信息系統(tǒng),即離港系統(tǒng)(departure control system,DCS)[1-2],處理流程包括旅客值機(jī)和登機(jī)兩部分。在旅客值機(jī)時(shí),打印該名旅客登機(jī)牌,如果有行李,還需要打印行李牌。這些紙牌都是旅客乘機(jī)的重要憑證。因此,打印工作在離港系統(tǒng)中尤為重要。
由于機(jī)場(chǎng)所采購的登機(jī)牌和行李牌打印機(jī)各不相同,而且不同機(jī)場(chǎng)對(duì)提取的旅客打印信息也要求各異,民航信息服務(wù)提供部門的離港主機(jī)數(shù)據(jù)流格式目前也有0號(hào)、1號(hào)、2號(hào)等數(shù)據(jù)流之分。為了適應(yīng)各地機(jī)場(chǎng)的具體要求,在離港系統(tǒng)投產(chǎn)中往往需要修改應(yīng)用程序以適應(yīng)當(dāng)?shù)靥囟ǖ拇蛴∫?,造成?yīng)用程序的版本不一致,不便于日常維護(hù),也給系統(tǒng)投產(chǎn)造成很大被動(dòng)。
目前各地機(jī)場(chǎng)打印問題都比較突出。由于市場(chǎng)上打印機(jī)型號(hào)眾多,打印機(jī)軟件版本不一致,各種打印機(jī)的反饋信息也不一致,離港系統(tǒng)在各地機(jī)場(chǎng)都是被動(dòng)地適應(yīng)當(dāng)?shù)卮蛴C(jī)。由于數(shù)據(jù)流多種多樣,打印機(jī)情況千差萬別,沒有一個(gè)統(tǒng)一標(biāo)準(zhǔn),因此系統(tǒng)的投產(chǎn)實(shí)施在打印機(jī)測(cè)試上耗費(fèi)精力過多。
為了徹底解決離港系統(tǒng)中打印登機(jī)牌和行李牌時(shí)受制于當(dāng)?shù)貦C(jī)場(chǎng)環(huán)境的被動(dòng)局面,作者在離港系統(tǒng)開發(fā)和維護(hù)過程中,創(chuàng)造性提出了基于DTD數(shù)據(jù)類型定義[3]以及XML格式[3]描述,通過以XML標(biāo)簽格式配置登機(jī)牌數(shù)據(jù)流和行李牌數(shù)據(jù)流各子項(xiàng)的具體轉(zhuǎn)換規(guī)則,使得離港前端應(yīng)用程序可以靈活處理各地機(jī)場(chǎng)打印的不同情況,扭轉(zhuǎn)了離港系統(tǒng)在投產(chǎn)中的被動(dòng)局面。
XML(可擴(kuò)展標(biāo)記語言)是目前業(yè)界流行的數(shù)據(jù)表示形式,脫離于任何具體編程語言。正規(guī)格式的XML文檔通常由三部分組成[3-4]:一個(gè)可選的序言(prolog);文檔的主體(body)是XML文檔的關(guān)鍵部分,由一至多個(gè)元素組成的層次樹形式;可選的結(jié)尾(epilog)包括注釋、處理指令等。元素是XML標(biāo)記的基本組成部分,所有XML數(shù)據(jù)都要包容在元素之中。DTD規(guī)定了XML文檔的文法結(jié)構(gòu),使XML解析器能夠理解和解釋該文檔的內(nèi)容,在DTD中包含可以在XML文檔中出現(xiàn)的標(biāo)簽列表,規(guī)定標(biāo)簽的類型、屬性。
XML主要的優(yōu)點(diǎn)是易于建立和易于分析,既是平臺(tái)無關(guān)的、又是廠商無關(guān)的,獨(dú)立于編程語言,良好的可擴(kuò)展性以及強(qiáng)大的工業(yè)支持。DTD[3]實(shí)際上可以看作一個(gè)或多個(gè)XML文件的模板,這些XML文件中的元素、元素的屬性、元素的排列方式、順序、元素能夠包含的內(nèi)容等,都必須符合DTD[5-6]中的定義。XML文件中的元素,即創(chuàng)建的標(biāo)記,是根據(jù)應(yīng)用的實(shí)際情況來創(chuàng)建的。
離港主機(jī)中的旅客登機(jī)牌數(shù)據(jù)流是在值機(jī)接收旅客成功后,由DCS系統(tǒng)發(fā)給離港前端應(yīng)用程序的、包含該旅客有關(guān)值機(jī)、登機(jī)信息的字符串,通常包括三部分:數(shù)據(jù)流頭部、數(shù)據(jù)項(xiàng)、結(jié)尾標(biāo)識(shí)。
數(shù)據(jù)流轉(zhuǎn)換提供一個(gè)具有極強(qiáng)兼容性的通道,它能夠接受任何形式的原始數(shù)據(jù)流,并將其轉(zhuǎn)換為當(dāng)?shù)卮蛴C(jī)所能接受的輸出形式。通過這個(gè)通道,將離港系統(tǒng)打印功能處理的數(shù)據(jù)流和打印機(jī)隔離開,真正送往打印的是轉(zhuǎn)換后的定制數(shù)據(jù)流。這種設(shè)計(jì),改變了以前數(shù)據(jù)流和打印機(jī)的網(wǎng)狀關(guān)系,簡(jiǎn)化為圖1所示的對(duì)應(yīng)關(guān)系。
圖1 數(shù)據(jù)流和打印機(jī)的對(duì)應(yīng)關(guān)系
打印模塊在各地機(jī)場(chǎng)投產(chǎn)實(shí)施過程中,提供方便靈活的配置管理方法,并可以支持不同的打印機(jī)、不同的打印格式。圖1中可以支持的打印機(jī)設(shè)備廠商舉例有IER,HDL,SATO,BOCA,F(xiàn)utitec等。
(1)數(shù)據(jù)來源可以有多個(gè),但是在某個(gè)機(jī)場(chǎng)針對(duì)某一種打印機(jī)只能有一種數(shù)據(jù)流發(fā)出。
(2)數(shù)據(jù)流轉(zhuǎn)換規(guī)則可定義,根據(jù)不同的規(guī)則進(jìn)行數(shù)據(jù)流轉(zhuǎn)化,轉(zhuǎn)化后的數(shù)據(jù)流發(fā)送給打印機(jī)。
數(shù)據(jù)流轉(zhuǎn)換規(guī)則包含數(shù)據(jù)流頭部定義、尾部定義、每個(gè)數(shù)據(jù)項(xiàng)的定義。
轉(zhuǎn)換規(guī)則定義:
·數(shù)據(jù)流頭部,字符串格式,例如:BTP0101 行李牌 BTP010102,02代表件數(shù)。
·數(shù)據(jù)流尾部,字符串格式,例如:$。
·數(shù)據(jù)流內(nèi)容定義:每項(xiàng)以#開頭;項(xiàng)目編號(hào)為固定的兩位數(shù)字;順序從小到大;各項(xiàng)目的長(zhǎng)度需要限制;各項(xiàng)目中是否有空格,以及空格的具體位置;各項(xiàng)目中是否有特殊字符,如: ;日期項(xiàng)目的具體格式,如:年份以四位還是后兩位來標(biāo)示,月日的表現(xiàn)形式:如05Feb;條形碼的定義格式;有無LOGO標(biāo)示;中文項(xiàng)目是否支持。
(3)根據(jù)不同的打印機(jī)交互模式進(jìn)行打印。支持延時(shí)、PROK打印模式,支持ETX STX打印,支持CUTE平臺(tái)打印、支持多PEC打印。
(4)打印模塊要可靠,模塊的獨(dú)立性要強(qiáng),要高內(nèi)聚、低耦合。
(1)數(shù)據(jù)流配置的XML定義格式設(shè)計(jì)。
數(shù)據(jù)流文件樣式(以登機(jī)牌數(shù)據(jù)流為例)(見圖2)[7-8]:
圖2 登機(jī)牌數(shù)據(jù)流轉(zhuǎn)換XML配置文件示例
相應(yīng)DTD文件(以登機(jī)牌數(shù)據(jù)流為例)如圖3所示:
圖3 數(shù)據(jù)流轉(zhuǎn)換DTD數(shù)據(jù)類型定義文件示例
(2)能夠達(dá)到的數(shù)據(jù)流轉(zhuǎn)換規(guī)則。
基于上述設(shè)計(jì)的數(shù)據(jù)流格式,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)流做如下轉(zhuǎn)換:
·變換數(shù)據(jù)流頭部,實(shí)現(xiàn)登機(jī)牌數(shù)據(jù)流(CP格式)轉(zhuǎn)換成行李牌打印要求的格式(BTP格式)。
·對(duì)登機(jī)牌數(shù)據(jù)流可以實(shí)現(xiàn)由不同進(jìn)紙口打印輸出。
·對(duì)行李牌數(shù)據(jù)流可以實(shí)現(xiàn)多PEC打印支持。
·根據(jù)機(jī)場(chǎng)打印機(jī)對(duì)數(shù)據(jù)流尾部的具體要求,決定是否保留$符號(hào)。
·實(shí)現(xiàn)選擇性刪除主機(jī)發(fā)來的數(shù)據(jù)流項(xiàng)。即:凡是不在XML配置文件中的數(shù)據(jù)流項(xiàng),都不做保留。
·實(shí)現(xiàn)對(duì)數(shù)據(jù)流項(xiàng)的轉(zhuǎn)換要求。
·增加不在原始數(shù)據(jù)流中的數(shù)據(jù)流項(xiàng)目。
·無限制增加XML配置文件的處理策略,具有強(qiáng)大的擴(kuò)展能力,從而更好地進(jìn)行系統(tǒng)維護(hù)和擴(kuò)展。
總體框架中,展示了數(shù)據(jù)流轉(zhuǎn)換的整個(gè)流程。離港前端程序通過讀取BPP和BTP的XML配置文件,獲取當(dāng)前的轉(zhuǎn)換設(shè)置規(guī)則,然后根據(jù)離港系統(tǒng)下發(fā)的旅客登機(jī)牌數(shù)據(jù)流和行李牌數(shù)據(jù)流的具體內(nèi)容,按照規(guī)則要求轉(zhuǎn)換成目標(biāo)數(shù)據(jù)流內(nèi)容,并發(fā)送給BPP和BTP打印機(jī)進(jìn)行打印輸出。
總體框架見圖4。
圖4 總體框架
框架剖面圖從另一個(gè)角度闡釋了離港系統(tǒng)中旅客登機(jī)牌數(shù)據(jù)流和行李牌數(shù)據(jù)流轉(zhuǎn)換的處理流程,通過XML解析控件[9]獲取XML格式的數(shù)據(jù)流轉(zhuǎn)換規(guī)則標(biāo)簽內(nèi)容,并將離港主機(jī)或者備份系統(tǒng)產(chǎn)生的旅客登機(jī)牌數(shù)據(jù)流或者行李牌數(shù)據(jù)流作為輸入項(xiàng),按照獲取的轉(zhuǎn)換規(guī)則進(jìn)行轉(zhuǎn)換輸出并最終打印成需要的數(shù)據(jù)流內(nèi)容。
框架剖面圖見圖5。
圖5 框架剖面圖
圖6展示了數(shù)據(jù)流轉(zhuǎn)換模塊的部分類結(jié)構(gòu)設(shè)計(jì),其中IElement是接口類,Citem是接口的實(shí)現(xiàn)類,并調(diào)用數(shù)據(jù)流子項(xiàng)處理類Citemcont來實(shí)現(xiàn)具體的數(shù)據(jù)流項(xiàng)內(nèi)容轉(zhuǎn)換、截取等特定處理。
XML的元素節(jié)點(diǎn)映射成類結(jié)構(gòu)圖如圖6所示[10-11]。
圖6 XML元素節(jié)點(diǎn)映射成類結(jié)構(gòu)圖
圖7展示了數(shù)據(jù)流轉(zhuǎn)換類與數(shù)據(jù)流規(guī)則解析類之間的調(diào)用關(guān)聯(lián)關(guān)系。
數(shù)據(jù)流轉(zhuǎn)換的流程映射到類結(jié)構(gòu)圖如圖7所示[12]。
圖7 數(shù)據(jù)流轉(zhuǎn)換的流程映射到類結(jié)構(gòu)圖
基于XML設(shè)計(jì)的數(shù)據(jù)流配置文件,使離港系統(tǒng)在不修改程序代碼的前提下適應(yīng)各地不同類型的打印機(jī),定制生成需要格式的數(shù)據(jù)流[13-16],成功打印出登機(jī)牌和行李牌。
目前,基于XML設(shè)計(jì)的數(shù)據(jù)流轉(zhuǎn)換功能已經(jīng)實(shí)現(xiàn),并在全國若干機(jī)場(chǎng)投產(chǎn)使用。根據(jù)現(xiàn)場(chǎng)反饋的信息,該功能模塊極大地滿足了當(dāng)?shù)貦C(jī)場(chǎng)的打印需求。