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

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

Info

Publication number
CN101324846B
CN101324846B CN2008101235634A CN200810123563A CN101324846B CN 101324846 B CN101324846 B CN 101324846B CN 2008101235634 A CN2008101235634 A CN 2008101235634A CN 200810123563 A CN200810123563 A CN 200810123563A CN 101324846 B CN101324846 B CN 101324846B
Authority
CN
China
Prior art keywords
data
asn
model
information
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2008101235634A
Other languages
English (en)
Other versions
CN101324846A (zh
Inventor
窦仁晖
徐石明
张海滨
倪益民
夏士兵
张春晓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nari Technology Co Ltd
NARI Nanjing Control System Co Ltd
Original Assignee
Nari Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nari Technology Co Ltd filed Critical Nari Technology Co Ltd
Priority to CN2008101235634A priority Critical patent/CN101324846B/zh
Publication of CN101324846A publication Critical patent/CN101324846A/zh
Application granted granted Critical
Publication of CN101324846B publication Critical patent/CN101324846B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及一种根据ASN.1信息动态创建数据模型的方法,包括:建立内存池,并初始化模型树;读取信息流,获得标签类型和数据长度;根据标签类型调用不同的处理函数:1)是STRUCT类型,在模型树中插入一个子节点,表示它是一个数据结构的根,2)是简单类型,在模型树中创建一个叶节点;继续读取、处理后面的信息,直至信息流结束,得到完整的多叉树数据模型。本发明能够直接读取ASN.1数据流,将其转换为数据模型,或将数据模型转换为ASN.1信息,生成的数据模型以多叉树表示,节点的内存分配使用池式管理,保证了最后生成的多叉树最大限度利用了内存资源,并增加了一个数据属性链表,能够高效地实现目录检索和数据属性检索。

Description

根据ASN.1信息动态创建数据模型的方法
技术领域
本发明属计算机软件开发,更准确地说本发明涉及一种根据ASN.1信息动态建立数据模型的方法。
背景技术
抽象语法标记(Abstract Syntax Notation One)是描述抽象类型和值的标记,缩写为ASN.1,是描述在网络上传输信息格式的标准方法。它有两部分:一部分是数据类型及序列格式;另一部分描述如何将各部分组成消息。在应用时,通常使用ASN.1编译器将ASN.1规范翻译成C、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.1数据流,将ASN.1信息转换为数据模型,或将数据模型转换为ASN.1信息;
(2)采用多叉树表示数据模型,包括数据的名称、类型和数值,保持数据的层次关系和先后次序,提供目录检索和数据属性检索两种检索方法;
(3)数据采用池式存储方法,保存在一块线性内存区域中,根据数据的实际长度动态分配空间。
为了实现上述目的,本发明是采取以下的技术方案来实现的:
一种根据ASN.1信息动态创建数据模型的方法,包括:
(1)、建立内存池,在内存池的头部放置模型树,并初始化模型树;
(2)、读取ASN.1信息流,获得标签类型和数据长度;
(3)、根据标签类型调用不同的处理函数:
a)如果是SEQUENCE或ARRAY类型,表示后续的数据是一个序列或一个数组,跳过去继续分析后面的信息;
b)如果是STRUCT类型,表示紧接着的数据是一个结构体,每一个元素是结构体的一个成员,此时就在模型树中插入一个子节点,表示它是一个数据结构的根;
c)如果是简单类型,包括BOOL、INT、UINT、BITSTRING、FLOAT、VSTR、OCTSTR、BTIME、UTF8STR或UTCTIME,就在模型树中创建一个叶节点,所述的叶节点包括数据属性的名称、类型、长度和值;
(4)、继续读取、处理后面的ASN.1信息,直至信息流结束,得到一个完整的多叉树数据模型。
前述的根据ASN.1信息动态创建数据模型的方法,其特征在于还包括步骤(5):按顺序连接所有的叶节点,生成单向链表。
前述的根据ASN.1信息动态创建数据模型的方法,其特征在于所述的多叉树,其根表示主结构,每一个子节点表示一个子结构,叶节点表示数据属性;每一个子节点包括4个内容,分别是节点名称、父节点指针、兄弟节点指针和
子节点指针;从根结点开始,采用先根遍历的方式检索得到的数据是整个数据模型的目录,同时,所有数据属性之间以链表相连,采用遍历叶节点链表的方式检索得到的数据是所有的数据属性。
前述的根据ASN.1信息动态创建数据模型的方法,其特征在于所有节点都保存在事先分配好的一块线性内存中,每一个节点都是在使用时才根据实际需要的内存大小动态在线性内存中分配。
本发明的有益效果是:在本发明中,披露了将顺序的ASN.1信息流转换为使用多叉树表示的数据模型的方法。这种转换方法,不需要事先定义ASN.1源规范,也不需要编译ASN.1描述文件的过程,而是直接解析ASN.1信息流,根据获得的标签类型和数据长度,选择在模型树中插入一个子节点或一个叶节点。采用这种方式表示的数据模型可以很方便的体现出数据之间的层次结构,尤其适用于表示结构化的数据。
同时,本发明披露了在多叉树数据模型的基础上,增加一个叶节点链表的方法。通过这种方法可以提供目录检索和属性检索两种检索方式。采用先根遍历的方式进行目录检索,采用遍历叶节点链表的方式进行属性检索,可以快速得到所需数据。
另外,在本发明中还披露了使用内存池保存多叉树数据模型的方法。由于在建立多叉树数据模型的过程中,需要频繁申请内存,导致效率下降和内存浪费,如果用于嵌入式装置,这是一个很大的缺点。本方法中使用了一个简单的内存池来管理内存,由于建立多叉树数据模型的过程中,只有申请而不需要释放内存,所以采用了一种线性的内存池,对于每一个申请内存的请求,内存池在可用内存的头部划出一块区域返回给请求的函数,这块区域的大小是8的倍数,同时从可用内存中减去这一块区域。因为不需要考虑内存释放的问题,所以内存的申请只需要常数时间;同时,除了考虑到内存对齐浪费的几个字节外,内存的利用率已是最大。
附图说明
图1是现有技术中处理ASN.1信息的流程框图;
图2是本发明根据ASN.1信息动态创建数据模型的流程框图。
具体实施方式
图2是本发明根据ASN.1信息动态创建数据模型的流程框图。下面是一个根据ASN.1信息动态创建数据模型的实施例。对于如下所示的一段ASN.1信息,(A2 54 A1 52 30 0C 80 06 73 75 62 45 6E 61 A1 02 83 00 30 27 80 06 7375 62 4D 61 67 A1 1D A2 1B A1 19 30 08 80 01 69 A1 03 85 01 20 30 0D 8001 66 A1 08 A7 06 02 01 20 02 01 08 30 0B 80 04 73 75 62 51 A1 03 84 01F3 30 0C 80 05 73 75 62 49 44 A1 03 8A 01 0C)
首先建立一个内存池mbuf,图中步骤①,在mbuf的头部放置模型树mtree,调用mtree_init初始化模型树,图中步骤②。
然后开始读取ASN.1信息流,图中步骤③,调用decode_head获得标签类型tag_type和数据长度data_len,图中步骤④。如果tag_type等于SEQUENCE或ARRAY类型,则跳过data_len长度的信息继续分析后面的数据;如果tag_type等于STRUCT类型,则调用mtree_insert_child在模型树中插入一个子节点,图中步骤⑤;如果tag_type等于BOOL、INT、UINT、BITSTRING、FLOAT、VSTR、OCTSTR、BTIME、UTF8STR和UTCTIME类型,则调用decode_data得到具体的数值,同时调用mtree_insert_child在模型树中创建一个叶节点,图中步骤⑥。此叶节点就是一个AcsiVar数据结构,其中包含了数据属性的名称、类型、长度和值。
接着继续读取后面的ASN.1信息,直到信息流结束,就可以得到一个完整的多叉树。
最后按顺序连接所有的叶节点,生成一个单向链表,图中步骤⑦。
模型树mtree的所有节点都是根据所需大小调用mbuf_alloc动态分配的。对于最后生成的模型树,如果采用先根遍历的方式,就可以按照根-子节点-数据属性的顺序列出所有数据的目录。此外,通过遍历叶节点链表,可以快速得到所有的数据属性。
上述实施例不以任何形式限制本发明,凡采取等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。

Claims (4)

1.根据ASN.1信息动态创建数据模型的方法,包括:
(1)、建立内存池,在内存池的头部放置模型树,并初始化模型树;
(2)、读取ASN.1信息流,获得标签类型和数据长度;
(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所述的根据ASN.1信息动态创建数据模型的方法,其特征在于所述的多叉树,其根表示主结构,每一个子节点表示一个子结构,叶节点表示数据属性;每一个子节点包括4个内容,分别是节点名称、父节点指针、兄弟节点指针和子节点指针;从根结点开始,采用先根遍历的方式检索得到的数据是整个数据模型的目录,同时,所有数据属性之间以链表相连,采用遍历叶节点链表的方式检索得到的数据是所有的数据属性。
4.根据权利要求1所述的根据ASN.1信息动态创建数据模型的方法,其特征在于所有节点都保存在事先分配好的一块线性内存中,每一个节点都是在使用时才根据实际需要的内存大小动态在线性内存中分配。
CN2008101235634A 2008-07-08 2008-07-08 根据asn.1信息动态创建数据模型的方法 Active CN101324846B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101235634A CN101324846B (zh) 2008-07-08 2008-07-08 根据asn.1信息动态创建数据模型的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101235634A CN101324846B (zh) 2008-07-08 2008-07-08 根据asn.1信息动态创建数据模型的方法

Publications (2)

Publication Number Publication Date
CN101324846A CN101324846A (zh) 2008-12-17
CN101324846B true CN101324846B (zh) 2010-09-08

Family

ID=40188393

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101235634A Active CN101324846B (zh) 2008-07-08 2008-07-08 根据asn.1信息动态创建数据模型的方法

Country Status (1)

Country Link
CN (1) CN101324846B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103036877A (zh) * 2012-12-10 2013-04-10 北京中创信测科技股份有限公司 一种基于tlv格式协议的编解码代码生成装置及方法
CN103561019B (zh) * 2013-10-30 2018-02-06 上海斐讯数据通信技术有限公司 一种针对tr069数据访问方法
CN105630475B (zh) * 2014-11-06 2018-12-21 阿里巴巴集团控股有限公司 一种数据标签组织系统及组织方法
CN105653609B (zh) * 2015-12-24 2019-08-09 中国建设银行股份有限公司 基于内存的数据处理方法及装置

Also Published As

Publication number Publication date
CN101324846A (zh) 2008-12-17

Similar Documents

Publication Publication Date Title
Agrawal et al. Graph transformations on domain-specific models
CN102609255B (zh) 一种Spring IOC配置文件的生成方法
CN104035754A (zh) 一种基于xml的自定义代码生成方法及生成器
CN105630500A (zh) 一种用于数据处理的cim对象模型及其编程框架
CN101604241A (zh) 一种嵌入式系统的代码生成方法
US7499931B2 (en) Method and apparatus for approximate projection of XML documents
Trojer et al. Living modeling of IT architectures: challenges and solutions
CN105468793B (zh) 一种仿真模型数据的自动化管理方法
CN100397397C (zh) 基于关系数据库的xml数据存储与访问方法
CN101324846B (zh) 根据asn.1信息动态创建数据模型的方法
CN107622055A (zh) 一种快速实现数据服务发布的方法
CN101202736B (zh) 一种基于抽象语法标记实现编解码的方法
CN109116828A (zh) 一种控制器中模型代码配置方法和装置
Karagiannis et al. Next generation of modelling platforms
CN103164476A (zh) 一种bi应用元数据描述文件的执行方法和装置
Demey et al. A markup language for ORM business rules
WO2012051844A1 (zh) 智能网平台、业务执行方法和分析业务异常的方法
Demey et al. A Conceptual Markup Language that supports interoperability between Business Rule modeling systems
CN113704575A (zh) 解析XML与Java文件的SQL方法、装置、设备及存储介质
CN105550176A (zh) 一种关系数据库与xml的基本映射方法
Fritzsche et al. Applying megamodelling to model driven performance engineering
Riedel et al. A model driven internet of things
Karsai et al. Component generation technology for semantic tool integration
Bouras et al. ENIO: An enterprise application integration ontology
CN102968443A (zh) 优化列车自动监控系统ats界面资源管理系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: NARI NANJING CONTROL SYSTEM LTD.

Effective date: 20141128

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20141128

Address after: High road high tech Development Zone Nanjing city Jiangsu province 210061 No. 20

Patentee after: NARI Technology Development Co., Ltd.

Patentee after: SGCC NARI Nanjing Control System Co., Ltd.

Address before: High road Nanjing high tech Development Zone in Nanjing city of Jiangsu Province, No. 20 210061

Patentee before: NARI Technology Development Co., Ltd.