根据asn.1信息动态创建数据模型的方法

文档序号:6464980阅读:247来源:国知局
专利名称:根据asn.1信息动态创建数据模型的方法
技术领域
本发明属计算机软件开发,更准确地说本发明涉及一种根据ASN. 1信息动 态建立数据模型的方法。
技术背景抽象语法标记(Abstract Syntax Notation One)是描述抽象类型和值的标 记,縮写为ASN. 1,是描述在网络上传输信息格式的标准方法。它有两部分一 部分是数据类型及序列格式;另一部分描述如何将各部分组成消息。在应用时, 通常使用ASN. 1编译器将ASN. 1规范翻译成C、 〔++或Java的源代码,开发人员 使用此代码将结构或对象编译成ASN. 1信息或将ASN. 1信息翻译成结构或对象。文献一 《将抽象句法表示法1数据模型化成对象模型的方法及系统》(中国 发明专利ZL01143625. 5,
公开日2002年7月17日)披露了一种将ASN. 1数据映射到对象模型的方法、程序和系统。该方法识别数据流的开始,并接着产生 该数据的新对象名;然后分析数据以获得识别符和数据长度;接着分析数据的 标签类型,如果标签类型是简单型,则为该数据产生一类图,并产生该数据的 源代码,如果标签类型不是简单型,则在产生类图和源代码之前,调用子例程 进一步分析该数据。图1是现有技术中处理ASN. 1信息的流程框图。该方法存 在的问题是使用时需要先将模型转化为程序代码,每一次修改模型后,都必须 重新生成源代码,无法做到动态创建模型。 发明内容为解决现有技术的不足,本发明的目的在于提供一种能够不通过编译,直 接将数据模型转化为ASN. 1信息或将ASN. 1信息转化为数据模型的根据ASN. 1 信息动态创建数据模型的方法。本发明的又一目的在于提供一种减少模型占用的内存,使之能够应用于嵌 入式系统,并提供方便、高效的检索方法的根据ASN. 1信息动态创建数据模型 的方法。本发明的动态创建方法包括(1) 直接读取ASN. l数据流,将ASN. l信息转换为数据模型,或将数据模 型转换为ASN. l信息;(2) 采用多叉树表示数据模型,包括数据的名称、类型和数值,保持数据 的层次关系和先后次序,提供目录检索和数据属性检索两种检索方法;(3) 数据采用池式存储方法,保存在一块线性内存区域中,根据数据的实际长度动态分配空间。为了实现上述目的,本发明是采取以下的技术方案来实现的一种根据ASN. 1信息动态创建数据模型的方法,包括(1) 、建立内存池,在内存池的头部放置模型树,并初始化模型树;(2) 、读取信息流,获得标签类型和数据长度;(3) 、根据标签类型调用不同的处理函数 "a) 如果是SEQUENCE或ARRAY类型,表示后续的数据是一个序列或一个数 组,跳过去继续分析后面的信息;b) 如果是STRUCT类型,表示紧接着的数据是一个结构体,每一个元素 是结构体的一个成员,此时就在模型树中插入一个子节点,表示它是一 个数据结构的根;c) 如果是简单类型,包括B00L、 INT、 UINT、 BITSTRING、 FL0AT、 VSTR、 0CTSTR、 BTIME、 UTF8STR或UTCTIME,就在模型树中创建一个叶节点;(4) 、继续读取、处理后面的ASN. 1信息,直至信息流结束,得到一个完 整的多叉树数据模型。前述的根据ASN. 1信息动态创建数据模型的方法,其特征在于还包括步骤 (5):按顺序连接所有的叶节点,生成单向链表。前述的根据ASN. 1信息动态创建数据模型的方法,其特征在于所述的叶节 点包括数据属性的名称、类型、长度和值。 ,前述的根据ASN. 1信息动态创建数据模型的方法,其特征在于所述的多叉 树,其根表示主结构,每一个子节点表示一个子结构,叶节点表示数据属性; 每一个子节点包括4个内容,分别是节点名称、父节点指针、兄弟节点指针和子节点指针;从根结点开始,采用先根遍历的方式检索得到的数据是整个数据 模型的目录,同时,所有数据属性之间以链表相连,采用遍历叶节点链表的方 式检索得到的数据是所有的数据属性。前述的根据ASN. 1信息动态创建数据模型的方法,其特征在于所有节点都 保存在事先分配好的一块线性内存中,每一个节点都是在使用时才根据实际需 要的内存大小动态在线性内存中分配。本发明的有益效果是在本发明中,披露了将顺序的ASN.l信息流转换为 使用多叉树表示的数据模型的方法。这种转换方法,不需要事先定义ASN. 1源 规范,也不需要编译ASN. 1描述文件的过程,而是直接解析ASN. 1信息流,根 据获得的标签类型和数据长度,选择在模型树中,入一个子节点或一个叶节点。 采用这种方式表示的数据模型可以很方便的体现出数据之间的层次结构,尤其 适用于表示结构化的数据。同时,本发明披露了在多叉树数据模型的基础上,增加一个叶节点链表的 方法。通过这种方法可以提供目录检索和属性检索两种检索方式。采用先根遍 历的方式进行目录检索,采用遍历叶节点链表的方式进行属性检索,可以快速 得到所需数据。另外,在本发明中还披露了使用内存池保存多叉树数据模型的方法。由于 在建立多叉树数据模型的过程中,需要频繁申请内存,导致效率下降和内存浪 费,如果用于嵌入式装置,这是一个很大的缺点。本方法中使用了一个简单的 内存池来管理内存,由于建立多叉树数据模型的过程中,只有申请而不需要释 放内存,所以采用了一种线性的内存池,对于每一个申请内存的请求,内存池 在可用内存的头部划出一块区域返回给请求的函数,这块区域的大小是8的倍 数,同时从可用内存中减去这一块区域。因为不需要考虑内存释放的问题,所 以内存的申请只需要常数时间;同时,除了考虑到内存对齐浪费的几个字节外, 内存的利用率己是最大。


图1是现有技术中处理ASN. 1信息的流程框图;图2是本发明根据ASN. 1信息动态创建数据模型的流程框图。
具体实施方式
.图2是本发明根据ASN. 1信息动态创建数据模型的流程框图。下面是一个 根据ASN. 1信息动态创建数据模型的实施例。对于如下所示的一段ASN. 1信息, (A2 54 Al 52 30 0C 80 06 73 75 62 45 6E 61 Al 02 83 00 30 27 80 06 73 75 62 4D 61 67 Al ID A2 IB Al 19 30 08 80 01 69 Al 03 85 01 20 30 0D 80 01 66 Al 08 A7 06 02 01 20 02 01 08 30 0B 80 04 73 75 62 51 Al 03 84 01 F3 30 0C 80 05 73 75 62 49 44 Al 03 8A 01 0C)首先建立一个内存池mbuf,图中步骤②,在mbuf的头部放置模型树mtree, 调用mtree—init初始化模型树,图中步骤②。然后开始读取ASN. 1信息流,图中步骤③,调用decode—head获得标签类 型tag—type和数据长度data—len,图中步骤逸。如果tag—type等于SEQUENCE 或ARRAY类型,则跳过datajen长度的信息继续分析后面的数据;如果tag—type 等于STRUCT类型,则调用mtree—insert—child在模型树中插入一个子节点, 图中步骤(g);如果tag—type等于B00L、 INT、 UINT、 BITSTRING、 FLOAT、 VSTR、 0CTSTR、 BTIME、 UTF8STR和UTCTIME类型,则调用decode_data得到具体的数 值,同时调用mtree—insert—child在模型树中创建一个叶节点,图中步骤憑。 此叶节点就是一个AcsiVar数据结构,其中包含了数据属性的名称、类型、长 度和值。接着继续读取后面的ASN. 1信息,直到信息流结束,就可以得到一个完整 的多叉树。最后按顺序连接所有的叶节点,生成一个单向链表,图中步骤⑦。 模型树mtree的所有节点都是根据所需大小调用mbuf—alloc动态分配的。对于最后生成的模型树,如果采用先根遍历的方式,就可以按照根一子节点一数据属性的顺序列出所有数据的目录。此外,通过遍历叶节点链表,可以快速得到所有的数据属性。上述实施例不以任何形式限制本发明,凡采取等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。
权利要求
1、根据ASN.1信息动态创建数据模型的方法,包括(1)、建立内存池,在内存池的头部放置模型树,并初始化模型树;(2)、读取信息流,获得标签类型和数据长度;(3)、根据标签类型调用不同的处理函数a)如果是SEQUENCE或ARRAY类型,表示后续的数据是一个序列或一个数组,跳过去继续分析后面的信息;b)如果是STRUCT类型,表示紧接着的数据是一个结构体,每一个元素是结构体的一个成员,此时就在模型树中插入一个子节点,表示它是一个数据结构的根;c)如果是简单类型,包括BOOL、INT、UINT、BITSTRING、FLOAT、VSTR、OCTSTR、BTIME、UTF8STR或UTCTIME,就在模型树中创建一个叶节点;(4)、继续读取、处理后面的ASN.1信息,直至信息流结束,得到一个完整的多叉树数据模型。
2、 根据权利要求1所述的根据ASN. 1信息动态创建数据模型的方法,其特 征在于还包括步骤(5):按顺序连接所有的叶节点,生成单向链表。
3、 根据权利要求1或2所述的根据ASN. 1信息动态创建数据模型的方法, 其特征在于所述的叶节点包括数据属性的名称、类型、长度和值。
4、 根据权利要求3所述的根据ASN. l信息动态创建数据模型的方法,其特征在于所述的多叉树,其根表示主结构,每一个子节点表示一个子结构,叶节 点表示数据属性;每一个子节点包括4个内容,分别是节点名称、父节点指针、 兄弟节点指针和子节点指针;从根结点开始,采用先根遍历的方式检索得到的 数据是整个数据模型的目录,同时,所有数据属性之间以链表相连,采用遍历 叶节点链表的方式检索得到的数据是所有的数据属性。
5、 根据权利要求1所述的根据ASN. 1信息动态创建数据模型的方法,其特 征在于所有节点都保存在事先分配好的一块线性内存中,每一个节点都是在使 用时才根据实际需要的内存大小动态在线性内存中分配。
全文摘要
本发明涉及一种根据ASN.1信息动态创建数据模型的方法,包括建立内存池,并初始化模型树;读取信息流,获得标签类型和数据长度;根据标签类型调用不同的处理函数1)是STRUCT类型,在模型树中插入一个子节点,表示它是一个数据结构的根,2)是简单类型,在模型树中创建一个叶节点;继续读取、处理后面的信息,直至信息流结束,得到完整的多叉树数据模型。本发明能够直接读取ASN.1数据流,将其转换为数据模型,或将数据模型转换为ASN.1信息,生成的数据模型以多叉树表示,节点的内存分配使用池式管理,保证了最后生成的多叉树最大限度利用了内存资源,并增加了一个数据属性链表,能够高效地实现目录检索和数据属性检索。
文档编号G06F17/30GK101324846SQ20081012356
公开日2008年12月17日 申请日期2008年7月8日 优先权日2008年7月8日
发明者倪益民, 夏士兵, 张春晓, 张海滨, 徐石明, 窦仁晖 申请人:国电南瑞科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1