一種數(shù)據(jù)轉(zhuǎn)換方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)轉(zhuǎn)換方法及系統(tǒng)。
【背景技術(shù)】
[0002]可擴(kuò)展標(biāo)記語言(Extensible Markup Language,XML)具有簡單性、結(jié)構(gòu)化、可擴(kuò)展性、互操作性、開放性、通用性、靈活性等特點(diǎn),因而在數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)集成、數(shù)據(jù)發(fā)布、數(shù)據(jù)存儲、數(shù)據(jù)管理、知識管理、信息檢索等諸多領(lǐng)域獲得廣泛應(yīng)用。
[0003]在數(shù)據(jù)轉(zhuǎn)換應(yīng)用中,通常采用XML定義的數(shù)據(jù)集通過一系列的過程進(jìn)行數(shù)據(jù)集中實(shí)例數(shù)據(jù)的轉(zhuǎn)換。在一個信息系統(tǒng)中,通常會根據(jù)工作的需要將一個數(shù)據(jù)集的實(shí)例數(shù)據(jù)轉(zhuǎn)換為另一個數(shù)據(jù)集的實(shí)例數(shù)據(jù),為了支持?jǐn)?shù)據(jù)集的個數(shù)變化或是數(shù)據(jù)集的定義變化,通常的做法是在應(yīng)用程序中手工修改相應(yīng)的轉(zhuǎn)換代碼,重新編譯整個應(yīng)用程序,這種方法非常繁瑣并且容易出錯,當(dāng)數(shù)據(jù)集發(fā)生變化時就需要編譯整個應(yīng)用程序。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明實(shí)施例提供一種數(shù)據(jù)轉(zhuǎn)換方法及系統(tǒng),能夠自動高效地適應(yīng)數(shù)據(jù)集的變化,不需要改變應(yīng)用程序的代碼,實(shí)現(xiàn)數(shù)據(jù)集之間的數(shù)據(jù)轉(zhuǎn)換。
[0005]第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)轉(zhuǎn)換方法,包括:
[0006]通過可擴(kuò)展標(biāo)記語言對各個數(shù)據(jù)集進(jìn)行定義;
[0007]對各個數(shù)據(jù)集的定義進(jìn)行處理,生成與各個數(shù)據(jù)集相對應(yīng)的各種中間數(shù)據(jù);
[0008]基于所述各種中間數(shù)據(jù)及預(yù)寫的動態(tài)鏈接庫框架代碼文件,生成動態(tài)鏈接庫;
[0009]調(diào)用動態(tài)鏈接庫的應(yīng)用程序編程接口創(chuàng)建協(xié)議緩沖區(qū)對象,并通過相應(yīng)的應(yīng)用程序編程接口對協(xié)議緩沖區(qū)對象進(jìn)行操作。
[0010]第二方面,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)轉(zhuǎn)換系統(tǒng),包括:
[0011]數(shù)據(jù)集定義模塊,用于通過可擴(kuò)展標(biāo)記語言對各個數(shù)據(jù)集進(jìn)行定義;
[0012]中間數(shù)據(jù)生成模塊,用于對各個數(shù)據(jù)集的定義進(jìn)行處理,生成與各個數(shù)據(jù)集相對應(yīng)的各種中間數(shù)據(jù);
[0013]動態(tài)鏈接庫生成模塊,用于基于所述各種中間數(shù)據(jù)及預(yù)寫的動態(tài)鏈接庫框架代碼文件,生成動態(tài)鏈接庫;
[0014]協(xié)議緩沖區(qū)對象操作模塊,用于調(diào)用動態(tài)鏈接庫的應(yīng)用程序編程接口創(chuàng)建協(xié)議緩沖區(qū)對象,并通過相應(yīng)的應(yīng)用程序編程接口對協(xié)議緩沖區(qū)對象進(jìn)行操作。
[0015]本發(fā)明實(shí)施例提供的一種數(shù)據(jù)轉(zhuǎn)換方法及系統(tǒng),通過將與數(shù)據(jù)集對應(yīng)的中間數(shù)據(jù)生成動態(tài)鏈接庫,當(dāng)數(shù)據(jù)集變化時,僅需更新動態(tài)鏈接庫,通過調(diào)用更新的動態(tài)鏈接庫的接口就可以實(shí)現(xiàn)數(shù)據(jù)集實(shí)例數(shù)據(jù)的轉(zhuǎn)換,不需要改變應(yīng)用程序的代碼。
【附圖說明】
[0016]通過閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會變得更明顯:
[0017]圖1本實(shí)施例一提供的一種數(shù)據(jù)轉(zhuǎn)換方法的流程圖;
[0018]圖2是本實(shí)施例一提供的應(yīng)用程序的目錄結(jié)構(gòu)圖;
[0019]圖3是本實(shí)施例一提供的數(shù)據(jù)A中的實(shí)例向數(shù)據(jù)集B中的實(shí)例轉(zhuǎn)換的流程圖;
[0020]圖4是本發(fā)明實(shí)施例二提供的一種數(shù)據(jù)轉(zhuǎn)換系統(tǒng)的流程框圖。
【具體實(shí)施方式】
[0021]下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部內(nèi)容。
[0022]實(shí)施例一
[0023]圖1為本發(fā)明實(shí)施例一提供的一種數(shù)據(jù)轉(zhuǎn)換方法的流程圖;該方法可以通過數(shù)據(jù)轉(zhuǎn)換系統(tǒng)來執(zhí)行,基于該系統(tǒng)可以由軟件和/或硬件的方式來實(shí)現(xiàn),如圖1所示,所述的方法包括:
[0024]SllO:通過可擴(kuò)展標(biāo)記語言對各個數(shù)據(jù)集進(jìn)行定義。
[0025]在本實(shí)施例中,通過可擴(kuò)展標(biāo)記語言對數(shù)據(jù)集中的數(shù)據(jù)類型、數(shù)據(jù)的順序、數(shù)據(jù)大小和數(shù)據(jù)長度進(jìn)行定義等。例如,通過XML定義其中數(shù)據(jù)集的數(shù)據(jù)類型可以是整型值、定義數(shù)據(jù)的大小為8字節(jié)等。
[0026]S120:對各個數(shù)據(jù)集的定義進(jìn)行處理,生成與各個數(shù)據(jù)集相對應(yīng)的各種中間數(shù)據(jù)。
[0027]在本實(shí)施例中,對各個數(shù)據(jù)集定義的處理通過數(shù)據(jù)集預(yù)處理程序來執(zhí)行。中間數(shù)據(jù)包括各個數(shù)據(jù)集對應(yīng)的協(xié)議緩沖區(qū)Protocol Buffer的定義文件、各個數(shù)據(jù)集之間的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系,以及與Protocol Buffer的定義文件相對應(yīng)的h類型文件和與Protocol Buffer的定義文件相對應(yīng)的cc類型文件。
[0028]具體的,在本實(shí)施例中,生成中間數(shù)據(jù)的過程為:對各個數(shù)據(jù)集的定義進(jìn)行處理,生成各個數(shù)據(jù)集對應(yīng)的Protocol Buffer的定義文件以及各個數(shù)據(jù)集之間的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系。其中,各個數(shù)據(jù)集之間的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系以C++源程序的形式表達(dá),文件名為data, frag。
[0029]對Protocol Buffer的定義文件進(jìn)行處理,生成與Protocol Buffer的定義文件相對應(yīng)的h類型文件和與協(xié)議緩沖區(qū)的定義文件相對應(yīng)的cc類型文件。其中,與ProtocolBuffer的定義文件相對應(yīng)的h類型文件和與Protocol Buffer的定義文件相對應(yīng)的cc類型文件為.cc/.h文件對。
[0030]對生成中間數(shù)據(jù)過程進(jìn)行舉例說明,如果在一個信息系統(tǒng),存在兩個數(shù)據(jù)集為A和B,則將數(shù)據(jù)集A和數(shù)據(jù)B通過XML進(jìn)行定義后,分別為a.xml和b.xml文件,將a.xml和b.xml文件進(jìn)行處理后,分別生成與a.xml和b.xml文件相對應(yīng)的Protocol Buffer的定義文件,即為a.proto文件和b.proto文件,同時還生成數(shù)據(jù)集A與數(shù)據(jù)集B之間的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系,其中包括數(shù)據(jù)集A到數(shù)據(jù)集B的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系,以及數(shù)據(jù)集B到數(shù)據(jù)集A的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系。
[0031]生成a.proto文件和b.proto文件以后,對a.proto文件和b.proto文件進(jìn)行處理,生成與a.proto文件對應(yīng)的h類型文件和cc類型文件,即a.h文件和a.cc文件,以及與b.proto文件對應(yīng)的h類型文件和cc類型文件,即b.h文件和b.cc文件。
[0032]S130:基于所述各種中間數(shù)據(jù)及預(yù)寫的動態(tài)鏈接庫框架代碼文件,生成動態(tài)鏈接庫。
[0033]具體的,在本實(shí)施例中,生成動態(tài)鏈接庫的過程為:將預(yù)寫的動態(tài)鏈接庫框架代碼的h類型文件、Protocol Buffer的定義文件相對應(yīng)的h類型文件以及各個數(shù)據(jù)集之間的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系文件嵌入到預(yù)寫的動態(tài)鏈接庫框架代碼的cc類型文件中;將包含預(yù)寫的動態(tài)鏈接庫框架代碼的h類型文件、與Protocol Buffer的定義文件相對應(yīng)的h類型文件以及各個數(shù)據(jù)集之間的實(shí)例轉(zhuǎn)換的字段對應(yīng)關(guān)系文件的動態(tài)鏈接庫框架代碼的CC類型文件編譯成動態(tài)鏈接庫框架代碼的ο類型文件;將與Protocol Buffer的定義文件相對應(yīng)的cc類型文件編譯成與Protocol Buffer的定義文件相對應(yīng)的ο類型文件;將動態(tài)鏈接庫框架代碼的ο類型文件以及與Protocol Buffer的定義文件相對應(yīng)的ο類型文件進(jìn)行鏈接,生成動態(tài)鏈接庫。
[0034]其中,Protocol Buffer的定義文件為.proto文件,預(yù)寫的動態(tài)鏈接庫框架代碼的h類型文件為pb_intf.h文件,動態(tài)鏈接庫框架代碼的cc類型文件為pb_intf.cc文件。動態(tài)鏈接庫框架代碼的ο類型文件為pb_intf.ο文件;動態(tài)鏈接庫框架代碼的h類型文件為說明動態(tài)鏈接庫接口功能的文件;動態(tài)鏈接庫框架代碼的cc類型文件為實(shí)現(xiàn)動態(tài)鏈接庫功能的代碼文件。
[0035]具體的,將pb_intf.h文件、與Protocol Buffer的定義文件相對應(yīng)的h類型文件以及data, frag文件嵌入到pb_intf.cc文件時,需要創(chuàng)建文件名為all_pb.h文件的C++的頭文件,將與Protocol Buffer的定義文件相對應(yīng)的h類型文件嵌入到all_pb.h文件中,再將all_pb.h文件嵌入到pb_intf.cc文件文件中。其中,all_pb.h文件是make過程自動生成的。
[0036]S140:調(diào)用動態(tài)鏈接庫的應(yīng)用程序編程接口創(chuàng)建Protocol Buffer對象,并通過相應(yīng)的應(yīng)用程序編程接口對Protocol Buffer對象進(jìn)行操作。
[0037]在本實(shí)施例中,通過應(yīng)用程序來執(zhí)行調(diào)用動態(tài)鏈接庫的應(yīng)用程序編程接口的操作。圖2為應(yīng)用程序的目錄結(jié)構(gòu)圖,其中,包括動態(tài)鏈接庫框架代碼文件。如圖2所示,應(yīng)用程序目錄結(jié)構(gòu)具體如下:project目錄為整個項目的根目錄;xml目錄存放所有數(shù)據(jù)集定義文件(.xml文件);tool目錄為數(shù)據(jù)集預(yù)處理程序所在的目錄。在so目錄下,proto目錄,用于存放數(shù)據(jù)預(yù)處理程序處理各數(shù)據(jù)集定義文件后得到的各個.proto文件;data.frag文件為C++源程序文件,包含了各個數(shù)據(jù)之間的實(shí)例轉(zhuǎn)換字段對應(yīng)關(guān)系,并且data, frag文件被包含在pb_intf.cc文件中;pb_cc_h目錄用于存放處理proto目錄下的各個.proto文件得到的.c