复杂抽象语法标识对象的存储方法

文档序号:6613004阅读:123来源:国知局

专利名称::复杂抽象语法标识对象的存储方法
技术领域
:本发明涉及数字通信领域,并且特别地,涉及一种复杂抽象语法才示i口、(AbstractSyntaxNotationdotone,ASN.l)只于象的存卡者方'法。技术背景目前,ASN.l和关系数据库在通讯领域中的应用非常广泛。在实际应用中,需要解决一个问题就是ASN.l对象信息在数据库中的存储,其中,ASN.l对象与数据库表对象之间的映射最为关键。目前,这两者之间的关系主要按照类型匹配,依据层次关系逐层对结构来进行映射,例如,ASN.l中的INTEGER类型映射为SQL语言中的INTEGER类型。但是,ASN.l中的不确定任意类型(即,标准中所定义的ANY类型)在结构化查询语言(SQL语言)中并没有与之匹配的类型;此外,对于复杂的ASN.l对象(例如,含有三层及三层以上结构的对象),如果仍旧4安照上述方式进行映射,则对应的^:据库表对象的结构将非常复杂,从而导致出入数据库才喿作复杂。除此之外,大报文的数据库存储一直是比较难以解决的问题,如果按常规处理,必然会牵涉很多子从表,无论是写库还是提取都异常烦瑣。例如,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。根据相关技术的常规方法,在才巴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类型的情况下,才艮据常规方法是无法处理的。目前,对于那些类似ASN.l、XML的有结构的对象的常见数据存储方法是将这些有结构的信息体按其信息层次转化为关系模型进行存储,例如,如专利号为CN200510116858、名称为"基于关系数据库的XML数据存储与访问方法"的已公开的专利中所描述的。其主要缺点在于如果按照上述方法来进行复杂结构的信息体的数据存储和读取,必然会带来复杂的转化计算,从而引起存储空间膨胀、导致数据访问效率降低。然而,至今尚未4是出能够有效、简使J也解决复杂ASN.l对象的存储和读取问题的技术方案。
发明内容考虑到上述问题而做出本发明,为此,本发明的主要目的在于,提供一种复杂抽象语法标识对象的存储方案,以解决现有4支术中存储复杂的ASN.l对象时处理过程复杂的问题根据本发明的实施例,提供了一种复杂抽象语法标识对象的存储方法。该方法包括映射关系建立才莫块4艮据4由象语法标识的具有特定形式的对象的结构建立抽象语法标识与数据库的映射关系;第一编码才莫块对抽象语法标识的对象的结构进行第一编码,转换为字符流报文;第二编码模块对字符流报文进行第二编码,将字符流报文中无法被语言解析器识别的符号转换为语言解析器能够识别的符号;以及存储模块根据抽象语法标识与数据库的对应关系,将经过第二编码的字符流才艮文写入相应的数据库。其中,特定形式的对象是指对象的结构中元素为不确定的任意类型、以及对象的结构是多重嵌套结构。此时,将结构中元素为不确定的任意类型、或者结构是多重嵌套结构并且不需要对多重结构中包含的数据进行单独操作的对象作为整体进行处理。另外,映射关系建立模块将结构为需要对内部数据进行单独操作的多重嵌套结构的对象的映射为数据库中的子表。另外,第二编码模块对字符流报文中的字符逐个执行第二编码。并且,在/人相应凄史据库中读取写入相应lt据库的字符流才艮文的情况下,进一步包括第一解码模块对字符流报文进行第一解码,其中,第一解码是由第二编码模块执行的第二编码的逆处理;以及第二解码模块对经过第一解码的字符流报文进行第二解码,其中,第二解码是由第一编码模块执行的第一编码的逆处理。除此之外,该方法中的语言解析器是结构化查询语言语言解析器。通过本发明的上述技术方案,能够对ANY类型数据进行存储和读取;并且,尽可能地避免子从表的建立,筒化了表结构;此外,还具有实现简单、高效率的优点。此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其i兌明用于解释本发明,并不构成对本发明的不当限定。在附图中图1是根据本发明实施例的复杂抽象语法标识对象的存储方法的流程图;图2是根据本发明实施例的复杂抽象语法标识对象的存储方法的入库处理的简化流程图;图3是根据本发明实施例的复杂抽象语法标识对象的存储方法中出库处理的简4匕流禾呈图;以及图4是可实现根据本发明实施例的的存储方法的装置的框图。具体实施方式在本实施例中,提供了一种复杂抽象语法标识对象的存储方法。如图1所示,才艮据本发明实施例复杂抽象语法标识(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亍第二编码,在经过第二编码后,字符流中原本存在的无法被语言解析器解析的字符将被转换为语言解析器可以识别的字符。另夕卜,基于上述存储时进行的处理,在从相应数据库中读取写入相应数据库的字符流报文的情况下,进一步包括第一解码;溪块对字符流报文进行第一解码,其中,第一解码是由第二编码模块执行的第二编码的逆处理;以及第二解码模块对经过第一解码的字符流报文进行第二解码,其中,第二解码是由第一编码才莫块执行的第一编码的逆处理。另外,在该方法中,上述语言解析器是结构化查询语言语言解析器。在实际处理时,可以将上述处理分为三部分,一是对给定的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(有多重复杂结构,并需要作单独操作)创建一个子A人表创建一个子,人表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语句发送到数据库执行并返回执行结果。其中,对于这里的第二次编码可参考如下的编码方法进4亍从字符流报文中取出一个字符;将这个字符当作一个十进制整数看待,取其低字节内容;对这个低字节内容进行进制转换,变成两位数的16进制数,对不足位数的用零补上(这样做主要是为了以后解码的方便,有规律可循),然后再将这个16进制数以字符串的形式存入目标内存中;按照以上三个步骤循环进行,直到对整个字符流报文编码结束。在图2所示的入库方法中,a寻第二次编码后的才艮文4安照;叶应的凄t据库中的翁:据类型(sybase和mssql下为TEXT类型,oracle下为CLOB类型)存入数据库中。结合附图3,A-T结构对象出库具体的步骤如下31,数据库处理才莫块根据查询条件构造sql语句;32,才丸4亍sql语句,并获取凄史才居库表记录;33,4艮据映射关系构造ASN.l对象;34,构造报文,并发送到外部模块。另外,对于这里的第一次解码可参考如下的解码方法进行从字符串中按顺序依次取出两个字符;将这两个字符当作一个16进制整数看待,转换成一个十进制数;把这个十进制数当作一个字符看待,存入目标内存;按照以上三个步骤循环进行,直到对整个字符串解码结束。并且,可以如图4所示来构造实现根据本发明实施例的方法的处理装置。在映射才莫块建立才莫块401建立映射关系,之后由第一编码模块402来执行第一编码,再由第二编码模块403对执行了第一编码的字符流执行第二然编码,最后由存储模块404将执行了第二编码的字符流存储到数据库中。并且,映射模块建立模块401、第一编码才莫块402、第二编码才莫块403、和存4诸;模块404均可以位于凄t据库中。将才艮据本发明的ASN.l复杂对象存4诸方法应用于电信网管系统的数据库应用程序设计中,能够解决以往应用程序中那些含有ANY类型数据不能入库以及具有复杂多层结构而又不需要对结构里面包含的子结构数据进行单独操作(主要是查询操作)的ASN.l对象的入库操作烦瑣的问题,从而能够在电信网管系统中取得良好效果。综上所述,本发明克服了现有应用程序处理ASN.l复杂对象出入库操作的缺点,提供了简单、高效率的解决方案,该方案有以下优点对ASN.l中的ANY类型与数据库表结构的映射关系的建立提供了解决方法;对ASN.l中的具有复杂嵌套结构而又不需要对结构里面包含的子结构数据进行单独操作(主要是查询操作)的结构类型与数据库表结构的映射关系的建立提供了解决方法;对ASN.l中的ANY类型数据的存储提供了解决方法;并且,对ASN.l复杂对象不再分割看待,而是当作一个整体,避免了子从表的建立,简化了表结构。以上所述〗又为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的4呆护范围之内。权利要求1.一种复杂抽象语法标识对象的存储方法,其特征在于,包括映射关系建立模块根据抽象语法标识的具有特定形式的对象的结构建立所述抽象语法标识与数据库的映射关系;第一编码模块对所述抽象语法标识的对象的结构进行第一编码,转换为字符流报文;第二编码模块对所述字符流报文进行第二编码,将所述字符流报文中无法被语言解析器识别的符号转换为所述语言解析器能够识别的符号;以及存储模块根据所述抽象语法标识与数据库的对应关系,将经过所述第二编码的字符流报文写入相应的数据库。2.根据权利要求1所述的存储方法,其特征在于,所述特定形式的对象是指对象的结构中元素为不确定的任意类型、以及所述对象的结构是多重嵌套结构。3.根据权利要求2所述的存储方法,其特征在于,将结构中元素为不确定的任意类型、或者结构是所述多重嵌套结构并且不需要对所述多重结构中包含的数据进行单独操作的对象作为整体进4于处理。4.根据权利要求2所述的存储方法,其特征在于,所述映射关系建立模块将结构为需要对内部数据进行单独操作的多重嵌套结构的对象的映射为^:据库中的子表。5.根据权利要求1所述的存储方法,其特征在于,所述第二编码模块对所述字符流报文中的字符逐个执行所述第二编码。6.根据权利要求1所述的存储方法,其特征在于,在从所述相应数据库中读取写入所述相应数据库的所述字符流报文的情况下,进一步包括第一解码模块对所述字符流报文进行第一解码,其中,所述第一解码是由所述第二编码;漠块4丸;f于的所述第二编码的逆处理;以及第二解码模块对经过所述第一解码的所述字符流报文进行第二解码,其中,所述第二解码是由所述第一编码模块执行的所述第一编石马的逆处理。7.根据权利要求1至6中任一项所述的存储方法,其特征在于,所述语言解析器是结构化查询语言语言解析器。全文摘要本发明公开了一种复杂ASN.1对象的存储方法,包括映射关系建立模块根据ASN.1的具有特定形式的对象的结构建立ASN.1与数据库的映射关系;第一编码模块对ASN.1的对象的结构进行第一编码,转换为字符流报文;第二编码模块对字符流报文进行第二编码,消除字符流报文中语言解析器无法识别的符号;以及存储模块根据ASN.1与数据库的对应关系,将经过第二编码的字符流报文写入相应的数据库。文档编号G06F17/30GK101149753SQ20071016541公开日2008年3月26日申请日期2007年10月25日优先权日2007年10月25日发明者星伍,郭文君申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1