專利名稱:一種電信管理網(wǎng)上下層網(wǎng)管數(shù)據(jù)比較方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種針對(duì)電信管理網(wǎng)(TMN)中的分層網(wǎng)管系統(tǒng)之間數(shù)據(jù)一致性處理中的數(shù)據(jù)比較方法。
背景技術(shù):
國(guó)際電信同盟ITU-T M.3010將電信管理層模型劃分為網(wǎng)元層(NEL)、網(wǎng)元管理層(EML)、網(wǎng)絡(luò)管理層(NML)、業(yè)務(wù)管理層(SML)、事務(wù)管理層(BML)。針對(duì)不同層次存在不同的網(wǎng)絡(luò)管理系統(tǒng),比如網(wǎng)元層網(wǎng)管系統(tǒng)(EMS)、網(wǎng)絡(luò)層網(wǎng)管系統(tǒng)(NMS)、業(yè)務(wù)層網(wǎng)管系統(tǒng)(SMS)等等。它們各有側(cè)重,互相協(xié)調(diào)共同構(gòu)成整個(gè)電信管理網(wǎng)絡(luò)。因?yàn)椴捎梅謱庸芾恚躁P(guān)于某個(gè)實(shí)體的信息常常同時(shí)在多個(gè)層次系統(tǒng)存在。保持這些信息之間緊密的一致性是一項(xiàng)重要任務(wù)。要判斷某個(gè)信息在不同層次網(wǎng)管系統(tǒng)中的狀態(tài)是否一致性,必須先通過(guò)某種數(shù)據(jù)格式從各層提取信息,對(duì)其進(jìn)行比較得出一致性狀態(tài)報(bào)告。
目前在電信管理網(wǎng)分層管理模型中,各層次之間數(shù)據(jù)通訊的格式主要是Abstract Syntax Notation One(ASN.1),它是一種描述結(jié)構(gòu)化對(duì)象的語(yǔ)法標(biāo)準(zhǔn)。ASN.1具有很好的延伸性和自定義能力,其類似于樹的結(jié)構(gòu)層次清晰、表達(dá)能力強(qiáng),特別適合表示現(xiàn)代通信應(yīng)用中那些復(fù)雜的、變化的及可擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)。所以它在電信領(lǐng)域獲得了廣泛應(yīng)用,以ASN.1報(bào)文格式提取信息進(jìn)行比較也就成為電信網(wǎng)管系統(tǒng)最常見的一致性比較方式。在此特別說(shuō)明的是ASN.1報(bào)文呈樹狀結(jié)構(gòu),因此本說(shuō)明書全文較多地方采用了數(shù)據(jù)結(jié)構(gòu)中“樹”的觀點(diǎn)和名詞,如遍歷、節(jié)點(diǎn)、葉子節(jié)點(diǎn)等等。
ASN.1報(bào)文具有如下特殊性質(zhì)1.報(bào)文呈樹狀結(jié)構(gòu),可以根據(jù)需要定義較多層次的報(bào)文嵌套2.報(bào)文中某個(gè)節(jié)點(diǎn)的類型多種多樣,可能為一個(gè)簡(jiǎn)單數(shù)據(jù)類型,比如整型、字符串等等;也有可能為包含再下級(jí)節(jié)點(diǎn)的復(fù)合數(shù)據(jù)類型;3.某個(gè)位置上的節(jié)點(diǎn)有可能不存在,因?yàn)閷?duì)應(yīng)報(bào)文節(jié)點(diǎn)允許設(shè)置為OPTIONAL,表示可有可無(wú)。
因此,一致性比較過(guò)程必須對(duì)報(bào)文體進(jìn)行詳細(xì)的解析,獲取每個(gè)細(xì)節(jié)的屬性。常用的解析報(bào)文途徑是將ASN.1報(bào)文字節(jié)流轉(zhuǎn)換成為內(nèi)存中的對(duì)等類對(duì)象(簡(jiǎn)稱ASN.1內(nèi)存對(duì)象),然后對(duì)報(bào)文內(nèi)存對(duì)象進(jìn)行比較。比較方式主要有兩種1.直接對(duì)ASN.1內(nèi)存對(duì)象整體進(jìn)行“等、不等”運(yùn)算,這種方式簡(jiǎn)單快速,避開了復(fù)雜的報(bào)文層次分析。但是產(chǎn)生的結(jié)果不能反映每個(gè)節(jié)點(diǎn)的具體比較細(xì)節(jié);2.對(duì)照?qǐng)?bào)文的定義得知報(bào)文樹中每個(gè)節(jié)點(diǎn)的數(shù)據(jù)類型、名稱,代碼中的每步操作都明確指定所針對(duì)的節(jié)點(diǎn)的名稱。
對(duì)于第一種比較方法,缺點(diǎn)非常明顯比較的結(jié)果只能反映兩個(gè)報(bào)文整體等或不等,信息粒度太粗,展示在界面上后需要用戶自己去尋找到底哪些位置的信息不相等,因此基本上沒有實(shí)際使用意義。而對(duì)于第二種方法,由于代碼和報(bào)文結(jié)構(gòu)捆綁得過(guò)于緊密,一旦報(bào)文發(fā)生任何細(xì)微的改動(dòng),比如節(jié)點(diǎn)名稱、類型變化,都會(huì)引起代碼的修改,極大地增加了開發(fā)和維護(hù)的工作量。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種電信管理網(wǎng)(TMN)上下層網(wǎng)管數(shù)據(jù)比較方法,該方法將代碼與報(bào)文之間的耦合性減至最小,并可以得到清晰的比較結(jié)果。
本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案為一種電信管理網(wǎng)上下層網(wǎng)管數(shù)據(jù)比較方法,包括以下步驟A、創(chuàng)建結(jié)果報(bào)文及容器對(duì)象;所述結(jié)果報(bào)文至少包含被比較報(bào)文節(jié)點(diǎn)值的對(duì)比情況,以及每個(gè)節(jié)點(diǎn)在報(bào)文中的位置信息;所述容器用來(lái)緩存所述被比較報(bào)文節(jié)點(diǎn)的信息;B、將兩個(gè)被比較報(bào)文中根節(jié)點(diǎn)信息添入所述容器內(nèi)的元素中;C、循環(huán)取出所述容器中的元素進(jìn)行分析處理,將處理結(jié)果返回所述結(jié)果報(bào)文,直到所述容器中不存在任何元素時(shí)為止。
所述的比較方法,其中所述的步驟C包括如下步驟C1、從所述容器內(nèi)取出一個(gè)元素,得到其記錄的兩個(gè)被比較報(bào)文節(jié)點(diǎn);C2、對(duì)所述兩個(gè)被比較報(bào)文節(jié)點(diǎn)進(jìn)行對(duì)比,將對(duì)比情況保存到所述結(jié)果報(bào)文中;C3、如果當(dāng)前被比較節(jié)點(diǎn)有子節(jié)點(diǎn),則解析所述子節(jié)點(diǎn)序列,將子節(jié)點(diǎn)序列中代表同一信息的的成員結(jié)為待比較子節(jié)點(diǎn)對(duì),并將所有待比較子節(jié)點(diǎn)對(duì)的信息順序存入所述容器內(nèi)的元素中;C4、循環(huán)步驟C1至C3,直到所述容器中不存在任何元素時(shí)為止。
所述的比較方法,其中步驟C3所述子節(jié)點(diǎn)配對(duì)方法為搜索兩個(gè)子節(jié)點(diǎn)序列,將關(guān)鍵字相等的子節(jié)點(diǎn)結(jié)為一個(gè)待比較子節(jié)點(diǎn)對(duì);而序列中剩下的各子節(jié)點(diǎn)與一個(gè)空節(jié)點(diǎn)結(jié)為待比較子節(jié)點(diǎn)對(duì)。
所述的比較方法,其中所述結(jié)果報(bào)文為ASN.1報(bào)文;所述容器為隊(duì)列、?;蜴湵?。
所述的比較方法,其中當(dāng)所述容器為隊(duì)列時(shí),隊(duì)列元素中保存的被比較報(bào)文節(jié)點(diǎn)信息為報(bào)文節(jié)點(diǎn)地址。
所述的比較方法,其中當(dāng)所述容器為隊(duì)列時(shí),如果采用按深度遍歷策略,子節(jié)點(diǎn)對(duì)的信息插入到所述隊(duì)列的當(dāng)前元素之后;如果采用按寬度遍歷策略,子節(jié)點(diǎn)對(duì)的信息依次插入到整個(gè)所述隊(duì)列的最后。
所述的比較方法,其中所述步驟C1包括如下處理當(dāng)發(fā)現(xiàn)從所述容器取出的元素其中有一個(gè)為空節(jié)點(diǎn)時(shí),比較過(guò)程仍繼續(xù),并在后繼比較過(guò)程中,該節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)均以空節(jié)點(diǎn)代替。
本發(fā)明的有益效果為本發(fā)明技術(shù)方案有以下優(yōu)點(diǎn)1)采用常見的ASN.1報(bào)文作為電信管理網(wǎng)不同層次間信息傳遞的協(xié)議,針對(duì)分別從上下層網(wǎng)管提取的ASN.1報(bào)文進(jìn)行比較,得到的結(jié)果數(shù)據(jù)也為ASN.1報(bào)文,因此具有良好的通用性;2)由于比較結(jié)果為ASN.1報(bào)文,結(jié)果報(bào)文反映了報(bào)文中每個(gè)節(jié)點(diǎn)的對(duì)比情況和詳細(xì)的位置信息,界面可以根據(jù)它輕松地組織顯示,直接表現(xiàn)出所有節(jié)點(diǎn)的差異情況而不需要用戶去仔細(xì)對(duì)比尋找哪些節(jié)點(diǎn)不同。
3)對(duì)ASN.1報(bào)文進(jìn)行解析,根據(jù)解析出的節(jié)點(diǎn)類型決定下一步如何處理,整個(gè)過(guò)程不包含報(bào)文名稱,因而適應(yīng)于任意的兩個(gè)類型相同ASN.1報(bào)文之間的比較。
4)本發(fā)明所述比較過(guò)程和傳統(tǒng)的報(bào)文比較方式——報(bào)文整體“等、不等”運(yùn)算或針對(duì)報(bào)文具體定義進(jìn)行處理相比,具有明顯的優(yōu)勢(shì)本發(fā)明將代碼和報(bào)文結(jié)構(gòu)之間的耦合性減少到最小,代碼維護(hù)簡(jiǎn)單。程序適應(yīng)于任何類型報(bào)文,輸入端可以處理任意報(bào)文而不需要針對(duì)不同報(bào)文做大量修改。
圖1為本發(fā)明方法的流程圖;圖2為光傳輸網(wǎng)管系統(tǒng)NMS和EMS典型體系圖;圖3為DSET所定義的ASN.1報(bào)文類框架圖;圖4為報(bào)文的比較過(guò)程流程圖;圖5為以隊(duì)列為容器時(shí)的比較流程圖;由于圖3為C++類的繼承關(guān)系圖,類名本身就是英文字符串,是標(biāo)準(zhǔn)中規(guī)定好的名字,因此無(wú)法用中文標(biāo)注。
具體實(shí)施例方式
下面根據(jù)附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明本發(fā)明比較的數(shù)據(jù)來(lái)源,分別是從上下層網(wǎng)管提取的兩個(gè)ASN.1報(bào)文,它們分別代表同一信息在上下層網(wǎng)管中的狀態(tài),其定義相同但是具體的值可能存在不一致。而得到的比較結(jié)果也為ASN.1報(bào)文,比較結(jié)果首先應(yīng)該包含被比較報(bào)文中每個(gè)節(jié)點(diǎn)的對(duì)比結(jié)果,其次因?yàn)锳SN.1報(bào)文具有樹狀層次結(jié)構(gòu),結(jié)果報(bào)文還必須反映這種結(jié)構(gòu)特點(diǎn),以便通過(guò)它可以方便地恢復(fù)出整個(gè)報(bào)文樹;所以結(jié)果報(bào)文至少應(yīng)該包含兩個(gè)方面的內(nèi)容被比較報(bào)文每個(gè)節(jié)點(diǎn)值的對(duì)比情況,以及每個(gè)節(jié)點(diǎn)在報(bào)文中的位置信息。本發(fā)明所陳述的比較方法利用容器(如隊(duì)列、棧、鏈表等等)緩存需要進(jìn)行比較的報(bào)文節(jié)點(diǎn)來(lái)完成比較過(guò)程。每個(gè)容器元素對(duì)應(yīng)比較報(bào)文中的一個(gè)位置,記錄參與比較的兩個(gè)報(bào)文在該位置上的節(jié)點(diǎn)信息,需要進(jìn)行比較的每對(duì)節(jié)點(diǎn)都經(jīng)歷一次入容器和出容器,利用容器可以靈活地實(shí)現(xiàn)“按深度遍歷”和“按寬度遍歷”等多種策略。
本發(fā)明所述數(shù)據(jù)比較方法的步驟如圖1所示a)創(chuàng)建結(jié)果報(bào)文以及容器對(duì)象;b)將兩個(gè)源報(bào)文中位于比較過(guò)程開始位置的節(jié)點(diǎn)的信息(根節(jié)點(diǎn)信息)填入容器內(nèi)的元素中;
c)循環(huán)取容器中的元素進(jìn)行一系列分析處理,直到容器中不再存在任何元素時(shí)停止;d)返回結(jié)果報(bào)文。
所述方法,其中所述步驟c)取容器元素所進(jìn)行的一系列分析處理包括以下步驟c1)從容器里取出一個(gè)元素,得到它記錄的兩個(gè)待比較報(bào)文節(jié)點(diǎn);c2)對(duì)報(bào)文節(jié)點(diǎn)值進(jìn)行對(duì)比,將對(duì)比情況保存到結(jié)果報(bào)文中;c3)如果節(jié)點(diǎn)包含下級(jí)子節(jié)點(diǎn),則解析兩個(gè)當(dāng)前對(duì)比節(jié)點(diǎn)的子節(jié)點(diǎn)序列,將雙方對(duì)應(yīng)的子節(jié)點(diǎn)信息順序保存進(jìn)容器的元素,留待后繼步驟取出進(jìn)行比較。
其中所述步驟c3)解析子節(jié)點(diǎn)序列過(guò)程可能涉及到子節(jié)點(diǎn)配對(duì)問題。它的含義是將本發(fā)明比較方法步驟c3所得到的兩個(gè)子節(jié)點(diǎn)序列中代表同一信息的那些成員結(jié)為待比較節(jié)點(diǎn)對(duì),該處理只針對(duì)所包含子節(jié)點(diǎn)的位置不固定的ASN.1數(shù)據(jù)類型,比如SEQUENCE OF、SET OF。在這些類型的數(shù)據(jù)中,因?yàn)閮?nèi)部是類似數(shù)組的平級(jí)結(jié)構(gòu),子節(jié)點(diǎn)的位置完全由生成報(bào)文時(shí)的填寫順序決定,所以不能直接將兩個(gè)序列中位置對(duì)應(yīng)的子節(jié)點(diǎn)結(jié)為待比較節(jié)點(diǎn)對(duì),而需要有一個(gè)尋找、匹配的過(guò)程。子節(jié)點(diǎn)配對(duì)的具體方法如下1)搜索兩個(gè)子節(jié)點(diǎn)序列,將表示同一對(duì)象的子節(jié)點(diǎn)結(jié)為一個(gè)待比較節(jié)點(diǎn)對(duì),而對(duì)于序列中剩下的子節(jié)點(diǎn),各自和一個(gè)空節(jié)點(diǎn)結(jié)為待比較節(jié)點(diǎn)對(duì);2)將所有待比較節(jié)點(diǎn)對(duì)的信息保存進(jìn)容器的元素。
上述配對(duì)方法中“表示同一對(duì)象”的判據(jù)是子節(jié)點(diǎn)的關(guān)鍵字相等。可以通過(guò)提供預(yù)備的關(guān)鍵字注冊(cè)表來(lái)指定整個(gè)比較過(guò)程中需要進(jìn)行配對(duì)處理的節(jié)點(diǎn)和各自的關(guān)鍵字。而需要進(jìn)行聲明的是1)報(bào)文中有定義但實(shí)際上在比較報(bào)文雙方均沒有出現(xiàn)的節(jié)點(diǎn),可根據(jù)需要靈活處理。比如選擇忽略它們而不進(jìn)行任何處理;2)如果在本發(fā)明所述步驟c1),當(dāng)取出容器元素發(fā)現(xiàn)其中有一個(gè)為空節(jié)點(diǎn)時(shí),比較過(guò)程將照常進(jìn)行。在后繼比較過(guò)程中,該節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)均以空節(jié)點(diǎn)代替。
下面結(jié)合一個(gè)光傳輸網(wǎng)管系統(tǒng)的實(shí)例,詳細(xì)說(shuō)明上下層網(wǎng)管數(shù)據(jù)的比較過(guò)程。
典型的C/S結(jié)構(gòu)光傳輸網(wǎng)絡(luò)層管理系統(tǒng)(NMS)和網(wǎng)元層管理系統(tǒng)(EMS)邏輯組成如附圖2所示。類似這種結(jié)構(gòu)的網(wǎng)管體系中,NMS和EMS二者使用各自的數(shù)據(jù)庫(kù)獨(dú)立運(yùn)行但NMS的初始數(shù)據(jù)來(lái)源于EMS。NMSServer通過(guò)適配器向EMS發(fā)送消息請(qǐng)求服務(wù);EMS Server響應(yīng)來(lái)自適配器的消息并向適配器回發(fā)NMS所需要的數(shù)據(jù)。因?yàn)镹MS中的基礎(chǔ)數(shù)據(jù)都來(lái)源于EMS,所以兩個(gè)系統(tǒng)并存了大量的對(duì)等信息,在光傳輸網(wǎng)管系統(tǒng)中包括網(wǎng)元屬性、網(wǎng)元單板、拓?fù)溥B接等等。運(yùn)行中要求它們?cè)贓MS和NMS間保持嚴(yán)格的一致。所以對(duì)兩個(gè)層次的同一信息進(jìn)行比較并在界面上展示差異性,成為NMS的一個(gè)重要功能。
利用本發(fā)明所述的比較方案,可以很好地滿足這個(gè)需求。以下分成數(shù)據(jù)比較方案、結(jié)果報(bào)文定義、編譯平臺(tái)、容器的定義、比較過(guò)程、特別說(shuō)明幾部分對(duì)該實(shí)例進(jìn)行詳細(xì)說(shuō)明。
(一)數(shù)據(jù)比較方案根據(jù)電信網(wǎng)管的功能分層定義,EMS接受NMS的管理。NMS的數(shù)據(jù)直接來(lái)源是受其管理的EMS。所以對(duì)如圖2所示的電信管理網(wǎng)分層網(wǎng)管體系,信息的比較應(yīng)該放在NMS進(jìn)行。整個(gè)過(guò)程步驟如下1)NMS界面發(fā)起信息比較命令;2)NMS Server向本層網(wǎng)管數(shù)據(jù)庫(kù)要求提取信息;3)NMS Server收到本層網(wǎng)管數(shù)據(jù)庫(kù)返回的信息;4)NMS Server通過(guò)適配器向EMS Server要求提取信息;
5)NMS Server收到適配器上報(bào)的來(lái)自EMS Server的返回信息;6)NMS Server將兩個(gè)信息進(jìn)行比較,獲得結(jié)果給發(fā)送到NMS界面;7)NMS界面以圖形方式展示比較結(jié)果。
整個(gè)過(guò)程中,圖示各個(gè)模塊之間的通訊全都采用ASN.1報(bào)文作為協(xié)議。關(guān)鍵性的比較活動(dòng)發(fā)生在上述步驟6)中兩個(gè)ASN.1報(bào)文被對(duì)比,產(chǎn)生結(jié)果ASN.1報(bào)文發(fā)送給NMS界面。
(二)結(jié)果報(bào)文定義按照“發(fā)明內(nèi)容”部分所述結(jié)果報(bào)文應(yīng)該包含的信息,對(duì)結(jié)果報(bào)文作如下定義CompareResultList-T∷=SEQUENCE OF CompareResult-TCompareResult-T∷=SEQUENCE{numberINTEGER,parentNumber INTEGER,depth INTEGER,itemName GraphicString(32),valueOne
GraphicString OPTIONAL,valueTwo [1]GraphicString OPTIONAL,ifSameBOOLEAN}各個(gè)字段的含義解釋如下number當(dāng)前節(jié)點(diǎn)的編號(hào)(也就是節(jié)點(diǎn)為父節(jié)點(diǎn)的第幾個(gè)子節(jié)點(diǎn))parentNumber父節(jié)點(diǎn)編號(hào)depth節(jié)點(diǎn)在整個(gè)節(jié)點(diǎn)樹中的層次itemName節(jié)點(diǎn)名稱valueOne節(jié)點(diǎn)在報(bào)文一中的值valueTwo節(jié)點(diǎn)在報(bào)文二中的值
ifSame節(jié)點(diǎn)在兩個(gè)報(bào)文中的值是否相等比較完成后的結(jié)果報(bào)文類型為CompareResultList-T,它由一系列CompareResult-T類型的數(shù)據(jù)組成。在排列順序上提供“按深度優(yōu)先遍歷”和“按寬度優(yōu)先遍歷”兩種方式。該定義很清楚地體現(xiàn)出一個(gè)節(jié)點(diǎn)在整個(gè)報(bào)文樹中的位置和數(shù)值的比較情況。網(wǎng)管界面能夠非常方便地將這樣的結(jié)果報(bào)文恢復(fù)成樹狀進(jìn)行顯示。
(三)編譯平臺(tái)ASN.1報(bào)文在網(wǎng)絡(luò)中以編碼字節(jié)流方式傳送。程序代碼中要對(duì)其進(jìn)行解析,必須先將它轉(zhuǎn)換成內(nèi)存中的數(shù)據(jù)格式,這一工作依靠ASN.1編譯平臺(tái)的支持來(lái)進(jìn)行。可供選用的編譯平臺(tái)有很多,這里采用DSET。它提供從ASN.1報(bào)文編碼字節(jié)流到C++內(nèi)存類對(duì)象之間的映射,可以將ASN.1報(bào)文的定義編譯生成一系列C++類。而且它還內(nèi)含了一個(gè)完整的ASN.1報(bào)文類繼承體系如圖3所示,這個(gè)體系為每種ASN.1報(bào)文數(shù)據(jù)類型處理都提供了豐富的接口函數(shù)。圖3包含了大多數(shù)常用ASN.1報(bào)文類型所對(duì)應(yīng)的C++類。從圖3中可以看到,所有類型都發(fā)源于AbstractData,該類為內(nèi)存中的報(bào)文對(duì)象處理定義了基本行為集合。這種繼承框架為代碼的泛型處理提供了天然的支撐。
在DSET編譯平臺(tái)上進(jìn)行ASN.1報(bào)文比較,實(shí)際上是先將兩個(gè)報(bào)文解碼成對(duì)應(yīng)的內(nèi)存報(bào)文類對(duì)象,再調(diào)用DSET的各種接口函數(shù)解析它們進(jìn)行比較,獲得結(jié)果報(bào)文類對(duì)象,然后再編碼為ASN.1結(jié)果報(bào)文發(fā)送給界面。
(四)容器的定義本發(fā)明利用容器來(lái)緩存需要進(jìn)行比較的報(bào)文節(jié)點(diǎn)信息,容器可以是隊(duì)列(deque),也可以是鏈表(list)或棧(stack)。下文以隊(duì)列為例來(lái)說(shuō)明本發(fā)明所述比較方法。隊(duì)列泛指一種處理思想,可以自定義實(shí)現(xiàn),也可以利用STL(標(biāo)準(zhǔn)模板庫(kù))中提供的隊(duì)列類型STD∷deque。隊(duì)列的元素需要保存待比較的報(bào)文節(jié)點(diǎn)信息,這里的實(shí)現(xiàn)方式是記錄節(jié)點(diǎn)地址。為此定義如下結(jié)構(gòu)作為隊(duì)列的元素struct T_BRANCH{int iDepth;int iParentNumber;int iSelfNumber;string strNodeName;constASN1∷AbstractData*pValueOne;constASN1∷AbstractData*pValueTwo;}各個(gè)成員的含義解釋如下iDepth父節(jié)點(diǎn)的深度iParentNumber父節(jié)點(diǎn)的編號(hào)iSelfNumber節(jié)點(diǎn)的編號(hào)(為父節(jié)點(diǎn)的第幾個(gè)子節(jié)點(diǎn))strNodeName節(jié)點(diǎn)的名稱pValueOne報(bào)文一中的節(jié)點(diǎn)指針pValueTwo報(bào)文二中的節(jié)點(diǎn)指針本實(shí)施所使用的隊(duì)列定義為STD∷deque<T_BRANCH*>。該隊(duì)列的作用是在比較當(dāng)前報(bào)文節(jié)點(diǎn)的時(shí)候一旦發(fā)現(xiàn)其存在下級(jí)子節(jié)點(diǎn),則將需要比較的子節(jié)點(diǎn)地址緩存在隊(duì)列中待后繼過(guò)程處理。在其基礎(chǔ)上可以實(shí)現(xiàn)“按深度遍歷”和“按寬度遍歷”兩種策略。策略的區(qū)別在于隊(duì)列的“插入點(diǎn)”,插入點(diǎn)指新元素加入到隊(duì)列中所在的位置。如圖4所示,如果是“按深度遍歷”,新元素插入到隊(duì)列當(dāng)前元素之后(圖4中的位置1);如果是“按寬度遍歷”,新元素將依次追加到整個(gè)隊(duì)列的后面(圖4中的位置2)。
(五)比較過(guò)程說(shuō)明采用隊(duì)列作為容器時(shí),比較過(guò)程的流程如圖5所示。下面以光傳輸網(wǎng)管系統(tǒng)中常見的數(shù)據(jù)——單板信息為例,詳細(xì)說(shuō)明本發(fā)明所述比較方法的具體過(guò)程和注意事項(xiàng)。
單板對(duì)應(yīng)的ASN.1報(bào)文及其含義如下MEBoard-T∷=SEQUENCE{meName GraphicString(60),//光傳輸網(wǎng)絡(luò)網(wǎng)元名稱meBoardList BoardList-T//網(wǎng)元包含單板集合}BoardList-T∷=SEQUENCE OF BoardInfo-TBoardInfo-T∷=SEQUENCE{name GraphicString(60), //單板名稱serviceState INTEGER,//服務(wù)狀態(tài)expectedType
INTEGER OPTIONAL,//設(shè)計(jì)單板類型installedType [1]INTEGER OPTIONAL,//實(shí)際安裝單板類型addtionalInfo [2]GraphicString(60)OPTIONAL//單板備注信息}對(duì)應(yīng)這樣的兩個(gè)ASN.1報(bào)文A和B,按照本發(fā)明所述比較方法,處理步驟為1)創(chuàng)建一個(gè)CompareResultList-T結(jié)果報(bào)文對(duì)象pResult;2)創(chuàng)建一個(gè)STD∷deque<T_BRANCH*>類型的隊(duì)列pDeque;3)創(chuàng)建一個(gè)T_BRANCH類型的結(jié)構(gòu)實(shí)例,將A、B的地址分別填寫到pValueOne、pValueTwo,設(shè)置層次深度值iDepth為0,加入隊(duì)列pDeque;4)取隊(duì)列頭元素,由pValueOne、pValueTwo得到當(dāng)前比較報(bào)文節(jié)點(diǎn)(即A和B)的地址。對(duì)pValueOne調(diào)用方法ASN1∷AbstractData∷get_adTypeId(),得到代表類型StructuredData的一個(gè)整數(shù)值。注StructuredData是ASN.1報(bào)文的SEQUENCE類型在DSET中的實(shí)現(xiàn);5)由步驟4)得到的整數(shù)值判定當(dāng)前節(jié)點(diǎn)是一個(gè)復(fù)合類型,自身并不具備值。為其創(chuàng)建一個(gè)CompareResult-T報(bào)文對(duì)象,其中depth賦為隊(duì)列當(dāng)前頭元素的iDepth值,number賦為1,valueOne、valueTwo賦為空字符串,IfSame設(shè)置為True,然后將該報(bào)文對(duì)象添加到pResult中;6)由步驟4)得到的整數(shù)值判定當(dāng)前節(jié)點(diǎn)是一個(gè)復(fù)合類型,可能含有下級(jí)子節(jié)點(diǎn)。所以分別對(duì)pValueOne、pValueTwo調(diào)用方法ASN1∷AbstractData∷size(),得到它們所包含的下級(jí)子節(jié)點(diǎn)序列長(zhǎng)度,這里為2。然后再根據(jù)長(zhǎng)度對(duì)pValueOne、pValueTwo調(diào)用方法ASN1∷StructuredData∷get(unsigned int)得到它們的子節(jié)點(diǎn)meName、meBoardList;7)創(chuàng)建一個(gè)T_BRANCH類型的結(jié)構(gòu)實(shí)例,將雙方的meName子節(jié)點(diǎn)對(duì)象地址填寫到其中,設(shè)置層次深度值iDepth為1,iSelfNumber為0,然后加入隊(duì)列pDeque;同樣的處理針對(duì)meBoardList,只是iSelfNumber應(yīng)該按次序設(shè)置為1;8)第一個(gè)節(jié)點(diǎn)的比較過(guò)程到這里已經(jīng)結(jié)束,彈出隊(duì)列頭元素。
9)因?yàn)殛?duì)列不為空,所以繼續(xù)取隊(duì)列頭元素,此時(shí)得到的元素對(duì)應(yīng)的報(bào)文節(jié)點(diǎn)是meName。同樣先獲取數(shù)據(jù)類型,然后為其創(chuàng)建一個(gè)CompareResult-T報(bào)文對(duì)象,它的depth、number賦為隊(duì)列當(dāng)前頭元素的iDepth、iSelfNumber值。再對(duì)pValueOne、pValueTwo調(diào)用ASN1∷AbstractData∷asValueNotation(),解析返回的字符串得到當(dāng)前比較節(jié)點(diǎn)的名稱和雙方的值,名稱填寫到itemName分量中,值填寫到valueOne、valueTwo中。將填寫完成的CompareResult-T報(bào)文對(duì)象添加到pResult中;10)當(dāng)前節(jié)點(diǎn)的比較過(guò)程到這里已經(jīng)結(jié)束,彈出隊(duì)列頭元素。
11)再次重復(fù)取隊(duì)列頭元素進(jìn)行分析的過(guò)程。此時(shí)隊(duì)列頭元素代表的報(bào)文節(jié)點(diǎn)是meBoardList。需要注意的是因?yàn)樗鼘?duì)應(yīng)的ASN.1類型是SEQUENCE OF,在DSET中為D_SeqOfObj。于是應(yīng)該對(duì)pValueOne、pValueTwo調(diào)用ASN1∷D_SeqOfObj∷size(unsigned int)和ASN1∷D_SeqOfObj∷get(unsigned int)來(lái)判斷子節(jié)點(diǎn)序列長(zhǎng)度以及獲取每個(gè)子節(jié)點(diǎn),同樣,將每一對(duì)待比較的子節(jié)點(diǎn)地址信息緩存到一個(gè)T_BRANCH結(jié)構(gòu)實(shí)例并加入隊(duì)列,留待處理;12)后繼比較步驟與前述一樣,不再累述。整個(gè)比較過(guò)程到隊(duì)列中不存在任何元素時(shí)結(jié)束。
(六)特別說(shuō)明對(duì)以單板信息為例的比較過(guò)程需要進(jìn)行特別說(shuō)明的是1.比較步驟11),因?yàn)閙eBoardList的ASN.1類型定義是SEQUENCEOF,內(nèi)部子節(jié)點(diǎn)呈類似數(shù)組的平級(jí)結(jié)構(gòu)。由pValueOne獲得的單板序列1,其中第i個(gè)單板信息可能位于由pValueTwo獲得的單板序列2中第j個(gè)位置(i不等于j)。因此不能直接將序列1和序列2相同位置的單板進(jìn)行比較。必須遍歷兩個(gè)序列,逐個(gè)進(jìn)行對(duì)比判斷才能得知到底哪些數(shù)據(jù)表示同一單板。
判斷兩個(gè)報(bào)文節(jié)點(diǎn)是否表征同一信息的方法是對(duì)報(bào)文節(jié)點(diǎn)的關(guān)鍵字進(jìn)行對(duì)比,該處理需要給程序提供關(guān)鍵字名稱參照表。對(duì)于單板報(bào)文BoardInfo-T,關(guān)鍵字是“name”。于是定義一個(gè)參照表,表中包含這樣一對(duì)值{“meBoardList”,“name”}。這個(gè)參照表是預(yù)定義的,由程序員編寫程序的時(shí)候根據(jù)待比較報(bào)文結(jié)構(gòu)而制定。需要聲明的是這是本發(fā)明唯一需要和報(bào)文結(jié)構(gòu)捆綁的地方,但它只是整個(gè)比較模塊與外界的一個(gè)接口,并不影響模塊內(nèi)部過(guò)程良好的封裝性和獨(dú)立性。整個(gè)比較過(guò)程中,每當(dāng)程序根據(jù)ASN1∷AbstractData∷get_adTypeId()返回的類型值得知當(dāng)前比較節(jié)點(diǎn)是平行結(jié)構(gòu)類型(如SEQUENCE OF),就去關(guān)鍵字名稱對(duì)照表中尋找相應(yīng)關(guān)鍵字信息。對(duì)于例中的meBoardList,將查到名稱字符串“name”。接下來(lái)的配對(duì)步驟是1)交叉對(duì)比序列1、2中每個(gè)單板信息的name節(jié)點(diǎn),這個(gè)對(duì)比直接采用節(jié)點(diǎn)“等、不等”運(yùn)算。值相同的那些節(jié)點(diǎn)對(duì)代表了同一單板分別在上下層網(wǎng)管的狀態(tài)。為每對(duì)節(jié)點(diǎn)創(chuàng)建T_BRANCH結(jié)構(gòu)實(shí)例并將節(jié)點(diǎn)地址分別賦給pValueOne、pValueTwo,加入隊(duì)列pDeque;2)剩下沒有配對(duì)成功的單板,意味著只在某一層網(wǎng)管中存在。它們的處理方法是對(duì)于只在序列1中存在的節(jié)點(diǎn),同樣生成T_BRANCH結(jié)構(gòu)實(shí)例,將pValueOne設(shè)定為節(jié)點(diǎn)地址,而將pValueTwo賦為空地址,再加入隊(duì)列pDeque;只在序列2中存在的節(jié)點(diǎn)處理方式相同,只是賦為空地址的相應(yīng)變?yōu)閜ValueOne。
2.當(dāng)對(duì)兩個(gè)BoardInfo-T類型報(bào)文節(jié)點(diǎn)的子節(jié)點(diǎn)序列進(jìn)行配對(duì)的時(shí)候,因?yàn)閑xpectedType成員的性質(zhì)是OPTIONAL的,所以可能只在其中一方出現(xiàn)。處理策略是創(chuàng)建T_BRANCH結(jié)構(gòu)實(shí)例時(shí),將對(duì)應(yīng)不存在一方的節(jié)點(diǎn)地址賦為空地址值。而如果節(jié)點(diǎn)在兩個(gè)報(bào)文中都沒有出現(xiàn),可以根據(jù)需要確定是否為其創(chuàng)建T_BRANCH結(jié)構(gòu)實(shí)例并插入隊(duì)列。本發(fā)明采用的方式是忽略這種報(bào)文節(jié)點(diǎn)。
3.因?yàn)榍笆鰞煞N處理方式導(dǎo)致取出隊(duì)列頭元素時(shí),可能會(huì)發(fā)現(xiàn)pValueOne與pValueTwo其中之一為空地址,此時(shí)循環(huán)比較過(guò)程并不會(huì)停頓。處理策略是(假設(shè)pValueTwo為空地址)生成一個(gè)CompareResult-T類型報(bào)文對(duì)象,根據(jù)pValueOne獲取報(bào)文節(jié)點(diǎn)值填賦給valueOne,而置valueTwo為空字符串;如果該節(jié)點(diǎn)同時(shí)還包含下級(jí)子節(jié)點(diǎn),那么照樣需要為子節(jié)點(diǎn)創(chuàng)建T_BRANCH結(jié)構(gòu)實(shí)例。所創(chuàng)建的結(jié)構(gòu)對(duì)象中pValueTwo均賦為空地址值,pVavlueOne處理方式正常。也就是說(shuō)空地址將在整個(gè)過(guò)程中被傳遞。
可以理解的是,對(duì)本領(lǐng)域普通技術(shù)人員來(lái)說(shuō),可以根據(jù)本發(fā)明的技術(shù)方案及其發(fā)明構(gòu)思加以等同替換或改變,而所有這些改變或替換都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種電信管理網(wǎng)上下層網(wǎng)管數(shù)據(jù)比較方法,包括以下步驟A、創(chuàng)建結(jié)果報(bào)文及容器對(duì)象;所述結(jié)果報(bào)文至少包含被比較報(bào)文節(jié)點(diǎn)值的對(duì)比情況,以及每個(gè)節(jié)點(diǎn)在報(bào)文中的位置信息;所述容器用來(lái)緩存所述被比較報(bào)文節(jié)點(diǎn)的信息;B、將兩個(gè)被比較報(bào)文中根節(jié)點(diǎn)信息添入所述容器內(nèi)的元素中;C、循環(huán)取出所述容器中的元素進(jìn)行分析處理,將處理結(jié)果返回所述結(jié)果報(bào)文,直到所述容器中不存在任何元素時(shí)為止。
2.根據(jù)權(quán)利要求1所述的比較方法,其特征在于所述的步驟C包括如下步驟C1、從所述容器內(nèi)取出一個(gè)元素,得到其記錄的兩個(gè)被比較報(bào)文節(jié)點(diǎn);C2、對(duì)所述兩個(gè)被比較報(bào)文節(jié)點(diǎn)進(jìn)行對(duì)比,將對(duì)比情況保存到所述結(jié)果報(bào)文中;C3、如果當(dāng)前被比較節(jié)點(diǎn)有子節(jié)點(diǎn),則解析所述子節(jié)點(diǎn)序列,將子節(jié)點(diǎn)序列中代表同一信息的的成員結(jié)為待比較子節(jié)點(diǎn)對(duì),并將所有待比較子節(jié)點(diǎn)對(duì)的信息順序存入所述容器內(nèi)的元素中;C4、循環(huán)步驟C1至C3,直到所述容器中不存在任何元素時(shí)為止。
3.根據(jù)權(quán)利要求2所述的比較方法,其特征在于步驟C3所述子節(jié)點(diǎn)配對(duì)方法為搜索兩個(gè)子節(jié)點(diǎn)序列,將關(guān)鍵字相等的子節(jié)點(diǎn)結(jié)為一個(gè)待比較子節(jié)點(diǎn)對(duì);而序列中剩下的各子節(jié)點(diǎn)與一個(gè)空節(jié)點(diǎn)結(jié)為待比較子節(jié)點(diǎn)對(duì)。
4.根據(jù)權(quán)利要求3所述的比較方法,其特征在于所述結(jié)果報(bào)文為ASN.1報(bào)文;所述容器為隊(duì)列、棧或鏈表。
5.根據(jù)權(quán)利要求4所述的比較方法,其特征在于當(dāng)所述容器為隊(duì)列時(shí),隊(duì)列元素中保存的被比較報(bào)文節(jié)點(diǎn)信息為報(bào)文節(jié)點(diǎn)地址。
6.根據(jù)權(quán)利要求5所述的比較方法,其特征在于當(dāng)所述容器為隊(duì)列時(shí),如果采用按深度遍歷策略,子節(jié)點(diǎn)對(duì)的信息插入到所述隊(duì)列的當(dāng)前元素之后;如果采用按寬度遍歷策略,子節(jié)點(diǎn)對(duì)的信息依次插入到整個(gè)所述隊(duì)列的最后。
7.根據(jù)權(quán)利要求6所述的比較方法,其特征在于所述步驟C1包括如下處理當(dāng)發(fā)現(xiàn)從所述容器取出的元素其中有一個(gè)為空節(jié)點(diǎn)時(shí),比較過(guò)程仍繼續(xù),并在后繼比較過(guò)程中,該節(jié)點(diǎn)的所有子孫節(jié)點(diǎn)均以空節(jié)點(diǎn)代替。
全文摘要
本發(fā)明公開了一種電信管理網(wǎng)上下層網(wǎng)管數(shù)據(jù)比較方法,包括以下步驟A.創(chuàng)建結(jié)果報(bào)文及容器對(duì)象;結(jié)果報(bào)文至少包含被比較報(bào)文節(jié)點(diǎn)值的對(duì)比情況,以及每個(gè)節(jié)點(diǎn)在報(bào)文中的位置信息;容器用來(lái)緩存所述被比較報(bào)文節(jié)點(diǎn)的信息;B.將兩個(gè)被比較報(bào)文中根節(jié)點(diǎn)信息添入所述容器內(nèi)的元素中;C.循環(huán)取出容器中的元素進(jìn)行分析處理,將處理結(jié)果返回所述結(jié)果報(bào)文,直到所述容器中不存在任何元素時(shí)為止。該方法能夠?qū)⒋a與報(bào)文之間的耦合性減至最小,并可以得到清晰的比較結(jié)果,維護(hù)簡(jiǎn)單并具有良好的通用性。
文檔編號(hào)H04L12/24GK1929388SQ20051003708
公開日2007年3月14日 申請(qǐng)日期2005年9月9日 優(yōu)先權(quán)日2005年9月9日
發(fā)明者陳明, 馬潤(rùn)宏 申請(qǐng)人:中興通訊股份有限公司