專利名稱::復雜抽象語法標識對象的存儲方法
技術領域:
:本發(fā)明涉及數字通信領域,并且特別地,涉及一種復雜抽象語法才示i口、(AbstractSyntaxNotationdotone,ASN.l)只于象的存卡者方'法。技術背景目前,ASN.l和關系數據庫在通訊領域中的應用非常廣泛。在實際應用中,需要解決一個問題就是ASN.l對象信息在數據庫中的存儲,其中,ASN.l對象與數據庫表對象之間的映射最為關鍵。目前,這兩者之間的關系主要按照類型匹配,依據層次關系逐層對結構來進行映射,例如,ASN.l中的INTEGER類型映射為SQL語言中的INTEGER類型。但是,ASN.l中的不確定任意類型(即,標準中所定義的ANY類型)在結構化查詢語言(SQL語言)中并沒有與之匹配的類型;此外,對于復雜的ASN.l對象(例如,含有三層及三層以上結構的對象),如果仍舊4安照上述方式進行映射,則對應的^:據庫表對象的結構將非常復雜,從而導致出入數據庫才喿作復雜。除此之外,大報文的數據庫存儲一直是比較難以解決的問題,如果按常規(guī)處理,必然會牽涉很多子從表,無論是寫庫還是提取都異常煩瑣。例如,ASN.l結構A-TA-T::=SEQUENCE{bB-T,valueANY,B-T::=SEQUENCE{cC-T,valueINTEGERSEQUENCE{IdINTEGER,valueGraphicString可以看出,A-T是一個三層結構類型,其中包含有結構類型B-T,B-T內進一步包含有C-T。根據相關技術的常規(guī)方法,在才巴A-T映射為數據庫表結構(TableA)的過程中,同時也要把B-T,C-T映射成數據庫表(即,TableB和TableC)。這三張表通過外鍵進行聯系,TableB和TableC是TableA的子從表,這樣A-T就對應了三張表。C-T::=此時,復雜的表結構會導致A-T對象出入庫操作煩瑣,代碼量比較大,而且代碼對ASN結構依賴性較高,耦合性較大;并且,如果之后A-T結構有改變,則必須對這段代碼進行相應修改,從而加大了維護工作量。另夕卜,在A-T結構下的value是ANY類型的情況下,才艮據常規(guī)方法是無法處理的。目前,對于那些類似ASN.l、XML的有結構的對象的常見數據存儲方法是將這些有結構的信息體按其信息層次轉化為關系模型進行存儲,例如,如專利號為CN200510116858、名稱為"基于關系數據庫的XML數據存儲與訪問方法"的已公開的專利中所描述的。其主要缺點在于如果按照上述方法來進行復雜結構的信息體的數據存儲和讀取,必然會帶來復雜的轉化計算,從而引起存儲空間膨脹、導致數據訪問效率降低。然而,至今尚未4是出能夠有效、簡使J也解決復雜ASN.l對象的存儲和讀取問題的技術方案。
發(fā)明內容考慮到上述問題而做出本發(fā)明,為此,本發(fā)明的主要目的在于,提供一種復雜抽象語法標識對象的存儲方案,以解決現有4支術中存儲復雜的ASN.l對象時處理過程復雜的問題根據本發(fā)明的實施例,提供了一種復雜抽象語法標識對象的存儲方法。該方法包括映射關系建立才莫塊4艮據4由象語法標識的具有特定形式的對象的結構建立抽象語法標識與數據庫的映射關系;第一編碼才莫塊對抽象語法標識的對象的結構進行第一編碼,轉換為字符流報文;第二編碼模塊對字符流報文進行第二編碼,將字符流報文中無法被語言解析器識別的符號轉換為語言解析器能夠識別的符號;以及存儲模塊根據抽象語法標識與數據庫的對應關系,將經過第二編碼的字符流才艮文寫入相應的數據庫。其中,特定形式的對象是指對象的結構中元素為不確定的任意類型、以及對象的結構是多重嵌套結構。此時,將結構中元素為不確定的任意類型、或者結構是多重嵌套結構并且不需要對多重結構中包含的數據進行單獨操作的對象作為整體進行處理。另外,映射關系建立模塊將結構為需要對內部數據進行單獨操作的多重嵌套結構的對象的映射為數據庫中的子表。另外,第二編碼模塊對字符流報文中的字符逐個執(zhí)行第二編碼。并且,在/人相應凄史據庫中讀取寫入相應lt據庫的字符流才艮文的情況下,進一步包括第一解碼模塊對字符流報文進行第一解碼,其中,第一解碼是由第二編碼模塊執(zhí)行的第二編碼的逆處理;以及第二解碼模塊對經過第一解碼的字符流報文進行第二解碼,其中,第二解碼是由第一編碼模塊執(zhí)行的第一編碼的逆處理。除此之外,該方法中的語言解析器是結構化查詢語言語言解析器。通過本發(fā)明的上述技術方案,能夠對ANY類型數據進行存儲和讀取;并且,盡可能地避免子從表的建立,筒化了表結構;此外,還具有實現簡單、高效率的優(yōu)點。此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其i兌明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中圖1是根據本發(fā)明實施例的復雜抽象語法標識對象的存儲方法的流程圖;圖2是根據本發(fā)明實施例的復雜抽象語法標識對象的存儲方法的入庫處理的簡化流程圖;圖3是根據本發(fā)明實施例的復雜抽象語法標識對象的存儲方法中出庫處理的簡4匕流禾呈圖;以及圖4是可實現根據本發(fā)明實施例的的存儲方法的裝置的框圖。具體實施方式在本實施例中,提供了一種復雜抽象語法標識對象的存儲方法。如圖1所示,才艮據本發(fā)明實施例復雜抽象語法標識(ASN.l)對象的存l諸方法包括步驟S102,映射關系建立才莫塊才艮據ASN.l的具有特定形式的對象的結構建立ASN.l與^t據庫的映射關系;步驟S104,第一編碼才莫塊對ASN.l的對象的結構進行第一編碼,轉換為字符流報文;步驟S106,第二編碼模塊對字符流報文進行第二編碼,將字符流報文中無法被語言解析器識別的符號轉換為語言解析器能夠識別的符號;以及步驟S108,存儲模塊根據ASN.l與數據庫的對應關系,將經過第二編碼的字符流報文寫入相應的數據庫。其中,特定形式的對象是指復雜結構的ASN.l對象對象的結構中元素為不確定的任意類型(即,ANY類型)、以及對象的結構是多重嵌套結構。此時,沖艮據數據庫的差異性,例如,對于sybase和mssql(微軟sqlServer數據庫)可以映射為TEXT類型,對于oracle則映射為CLOB(字符型大型對象)類型。此時,將結構中元素為ANY類型、或者結構是多重嵌套結構并且不需要對多重結構中包含的數據進行單獨操作的對象作為整體考慮,并進行處理。另外,映射關系建立模塊將結構為需要對內部數據進行單獨操作的多重嵌套結構的對象的映射為數據庫中的子表。除此之外,在該方法中,第二編碼才莫塊對字符流才艮文中的字符逐個"^M亍第二編碼,在經過第二編碼后,字符流中原本存在的無法被語言解析器解析的字符將被轉換為語言解析器可以識別的字符。另夕卜,基于上述存儲時進行的處理,在從相應數據庫中讀取寫入相應數據庫的字符流報文的情況下,進一步包括第一解碼;溪塊對字符流報文進行第一解碼,其中,第一解碼是由第二編碼模塊執(zhí)行的第二編碼的逆處理;以及第二解碼模塊對經過第一解碼的字符流報文進行第二解碼,其中,第二解碼是由第一編碼才莫塊執(zhí)行的第一編碼的逆處理。另外,在該方法中,上述語言解析器是結構化查詢語言語言解析器。在實際處理時,可以將上述處理分為三部分,一是對給定的ASN.l結構建立映射關系,形成對應的數據庫表結構;二是進行ASN.l復雜對象的入庫(即,存儲)操作;三是進行能夠ASN.l復雜對象的出庫(即,讀耳又)#:作。下面就對這三部分分別進4于4又述。(1)對給定的ASN.l結構建立映射關系,形成對應的數據庫表結構。才艮據給定的ASN.l結構定義數據庫表,在ASN.l結構類型與數據庫表字段建立映射關系的處理上采用以下方式對于基本類型,按照類型進行映射;對于復雜結構類型,如果結構中的組成元素是ANY類型、或者是具有復雜嵌套結構而又不需要對結構里面包含的數據進行單獨操作(主要是查詢操作)的結構類型,就將其當作一個整體來考慮。在建立映射關系時,由于凄丈據庫的差異性,例如,對于sybase,mssql可以映射為TEXT類型,對于oracle則映射為CLOB類型;如果結構中的組成元素是需要對內部lt據進4亍才喿作的復雜結構類型,就把此子結構單獨考慮,映射成一個子表,具體的映射關系如表1所示。ASN.l類型Sybase,MSSQLOracleINTEGERIntNumberREALRealNumberBOOLEANIntNumberENUMERATEDIntNumberOBJECTIDENTIFIERInt或varcharNumber或varchar2PRINTABLESTRINGVarclwVarchar2GENERALIZEDTIMEInt或varcharNumber或varchar2GRAPHICSTRINGVarcharVarchar2SET,SEQUENCE,SETOF,SEQUENCEOF,CHOICE(有多重復雜結構,并需要作單獨操作)創(chuàng)建一個子A人表創(chuàng)建一個子,人表SET,SEQUENCE,SETOF,SEQUENCEOF,CHOICE(—層簡單結構,并需要作單獨操作)把結構中的屬性上移,成為上一層結構對應的表的字段把結構中的屬性上移,成為上一層結構對應的表的字,殳SET,SEQUENCE,SETOF,SEQUENCEOF,CHOICE(—層簡單結構,并需要作單獨操作)TextCLOBANYTextGLOB表1(2)ASN.l復雜對象的入庫"^喿作步驟如下(2a)對ASN.l結構中含有的ANY類型凄t據和復雜子結構數據進行編碼,使其序列化,轉換成字符流報文;(2b)對生成的字符流報文進行編碼,即,對數據進行第二次編碼;(2c)將編碼后的才艮文存入凄t據庫中。在步驟(2b)中,由于第一次編碼只是^fc數據序列化,產生字符流報文,因此,在這個報文中可能出現任何字符,包括那些不能讓SQL語言解析器正常解析的特殊字符。如果SQL語句直接包含這些字符,數據庫語法解析器會將其理解為對應特殊含義,使其脫離原本的含義,產生混亂。因此,為了不讓這個字符流才艮文直接存入數據庫中,就需要對這個報文進行第二次編碼,消除特殊字符。(3)ASN.l復雜對象的出庫才喿作步^^如下(3a)按照查詢條件,把數據從數據庫中取出。(3b)對讀取的數據進行第一次解碼;(3c)才艮據相應的ASN.l類型對凄t據進4亍第二次解碼。其中,步驟(3b)是ASN.l復雜對象的入庫操作步驟(2b)的逆處理過程,此時的要解碼的數據存在一個字符串中,可以把它當作字符流來看^f寺。另外,步驟(3c)是ASN.l復雜對象的入庫操作步驟2(a)的逆處理過程,這里的解碼方法就是入庫操作步驟(la)中所用編碼方法所3十應的解;馬方法。下面,以ASN.l結構A-T為例進行描述。首先,為了方使j兌明進4于如下定義在本實例中,假設A-T的結構如下A-T::=SEQUENCE{bB-T,valueANY,ifStartBOOLEAN,receiverGraphicString(20)B-T::=SEQUENCE{cC-T,titleGraphicString(20),maxCountINTEGER,valueINTEGERC-T::=SEQUENCE{(80),并且定義對于A-T中的子結構B-T需要進行查詢操作;對于B-T中的子結構C-T不需要進行單獨操作;根據如上定義以及表l,對ASN.l結構A-T進行映射操作,在Sybase數據庫下,生成的數據庫表結構如下所示CreatetableTableAIdintnotnull,ValueTextnull,IfStartintnull,Receivervarchar(20)null,constraintPK—TableAPRIMARYKEY(Id)CreatetableTableBIdintnotnull,Fidintnotnull,CTextnull,Titlevarchar(20)null,maxCoimtintnull,valueintnull,constraintPK—TableBPRIMARYKEY(Id)AltertableTableBaddconstraintFK—TableBFOREIGNKEY(Fid)referenceTableA(Id)并且,在表結構還增加了一些額外信息,即,表Table中的Id字^殳i己錄是TableAi己錄的流水號,用于唯一才示i口、TableA的i己錄。表TableB中的Fid字段記錄的是表TableA的Id,表明TableA與TableB之間的主從表關系,Id字段記錄是TableB記錄的流7Jc號,用于唯一標識TableB的記錄。另夕卜,表中還增加了主鍵或者外鍵約束,不過這些可以根據實際情況選擇是否增加。結合附圖2,A-T結構對象入庫具體的步驟如下21,數據庫處理模塊獲取外部模塊傳來的報文信息;22,對該報文進行解析,獲取對數據庫模塊有用的信息(此時為A-T結構對象);23,根據報文解析結果(此時為A-T結構對象)按照映射關系構造入庫sqli吾句;24,將構造好的sql語句發(fā)送到數據庫執(zhí)行并返回執(zhí)行結果。其中,對于這里的第二次編碼可參考如下的編碼方法進4亍從字符流報文中取出一個字符;將這個字符當作一個十進制整數看待,取其低字節(jié)內容;對這個低字節(jié)內容進行進制轉換,變成兩位數的16進制數,對不足位數的用零補上(這樣做主要是為了以后解碼的方便,有規(guī)律可循),然后再將這個16進制數以字符串的形式存入目標內存中;按照以上三個步驟循環(huán)進行,直到對整個字符流報文編碼結束。在圖2所示的入庫方法中,a尋第二次編碼后的才艮文4安照;葉應的凄t據庫中的翁:據類型(sybase和mssql下為TEXT類型,oracle下為CLOB類型)存入數據庫中。結合附圖3,A-T結構對象出庫具體的步驟如下31,數據庫處理才莫塊根據查詢條件構造sql語句;32,才丸4亍sql語句,并獲取凄史才居庫表記錄;33,4艮據映射關系構造ASN.l對象;34,構造報文,并發(fā)送到外部模塊。另外,對于這里的第一次解碼可參考如下的解碼方法進行從字符串中按順序依次取出兩個字符;將這兩個字符當作一個16進制整數看待,轉換成一個十進制數;把這個十進制數當作一個字符看待,存入目標內存;按照以上三個步驟循環(huán)進行,直到對整個字符串解碼結束。并且,可以如圖4所示來構造實現根據本發(fā)明實施例的方法的處理裝置。在映射才莫塊建立才莫塊401建立映射關系,之后由第一編碼模塊402來執(zhí)行第一編碼,再由第二編碼模塊403對執(zhí)行了第一編碼的字符流執(zhí)行第二然編碼,最后由存儲模塊404將執(zhí)行了第二編碼的字符流存儲到數據庫中。并且,映射模塊建立模塊401、第一編碼才莫塊402、第二編碼才莫塊403、和存4諸;模塊404均可以位于凄t據庫中。將才艮據本發(fā)明的ASN.l復雜對象存4諸方法應用于電信網管系統(tǒng)的數據庫應用程序設計中,能夠解決以往應用程序中那些含有ANY類型數據不能入庫以及具有復雜多層結構而又不需要對結構里面包含的子結構數據進行單獨操作(主要是查詢操作)的ASN.l對象的入庫操作煩瑣的問題,從而能夠在電信網管系統(tǒng)中取得良好效果。綜上所述,本發(fā)明克服了現有應用程序處理ASN.l復雜對象出入庫操作的缺點,提供了簡單、高效率的解決方案,該方案有以下優(yōu)點對ASN.l中的ANY類型與數據庫表結構的映射關系的建立提供了解決方法;對ASN.l中的具有復雜嵌套結構而又不需要對結構里面包含的子結構數據進行單獨操作(主要是查詢操作)的結構類型與數據庫表結構的映射關系的建立提供了解決方法;對ASN.l中的ANY類型數據的存儲提供了解決方法;并且,對ASN.l復雜對象不再分割看待,而是當作一個整體,避免了子從表的建立,簡化了表結構。以上所述〗又為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的4呆護范圍之內。權利要求1.一種復雜抽象語法標識對象的存儲方法,其特征在于,包括映射關系建立模塊根據抽象語法標識的具有特定形式的對象的結構建立所述抽象語法標識與數據庫的映射關系;第一編碼模塊對所述抽象語法標識的對象的結構進行第一編碼,轉換為字符流報文;第二編碼模塊對所述字符流報文進行第二編碼,將所述字符流報文中無法被語言解析器識別的符號轉換為所述語言解析器能夠識別的符號;以及存儲模塊根據所述抽象語法標識與數據庫的對應關系,將經過所述第二編碼的字符流報文寫入相應的數據庫。2.根據權利要求1所述的存儲方法,其特征在于,所述特定形式的對象是指對象的結構中元素為不確定的任意類型、以及所述對象的結構是多重嵌套結構。3.根據權利要求2所述的存儲方法,其特征在于,將結構中元素為不確定的任意類型、或者結構是所述多重嵌套結構并且不需要對所述多重結構中包含的數據進行單獨操作的對象作為整體進4于處理。4.根據權利要求2所述的存儲方法,其特征在于,所述映射關系建立模塊將結構為需要對內部數據進行單獨操作的多重嵌套結構的對象的映射為^:據庫中的子表。5.根據權利要求1所述的存儲方法,其特征在于,所述第二編碼模塊對所述字符流報文中的字符逐個執(zhí)行所述第二編碼。6.根據權利要求1所述的存儲方法,其特征在于,在從所述相應數據庫中讀取寫入所述相應數據庫的所述字符流報文的情況下,進一步包括第一解碼模塊對所述字符流報文進行第一解碼,其中,所述第一解碼是由所述第二編碼;漠塊4丸;f于的所述第二編碼的逆處理;以及第二解碼模塊對經過所述第一解碼的所述字符流報文進行第二解碼,其中,所述第二解碼是由所述第一編碼模塊執(zhí)行的所述第一編石馬的逆處理。7.根據權利要求1至6中任一項所述的存儲方法,其特征在于,所述語言解析器是結構化查詢語言語言解析器。全文摘要本發(fā)明公開了一種復雜ASN.1對象的存儲方法,包括映射關系建立模塊根據ASN.1的具有特定形式的對象的結構建立ASN.1與數據庫的映射關系;第一編碼模塊對ASN.1的對象的結構進行第一編碼,轉換為字符流報文;第二編碼模塊對字符流報文進行第二編碼,消除字符流報文中語言解析器無法識別的符號;以及存儲模塊根據ASN.1與數據庫的對應關系,將經過第二編碼的字符流報文寫入相應的數據庫。文檔編號G06F17/30GK101149753SQ20071016541公開日2008年3月26日申請日期2007年10月25日優(yōu)先權日2007年10月25日發(fā)明者星伍,郭文君申請人:中興通訊股份有限公司