Xml数据存储系统和方法

文档序号:6610715阅读:161来源:国知局
专利名称:Xml数据存储系统和方法
技术领域
本发明涉及一种XML数据存储系统和方法。
背景技术
通讯设备中一般都会涉及到配置数据存储,目前数据存储在通讯设备领域主要存在以下几个问题由于通讯设备采用的软硬件平台各异,进行数据交互时难免会碰到数据字节序问题;由于通讯领域是一种需求变化非常激烈与频繁的领域,一旦需求改变,很可能就会导致配置数据的改变,这样就存在一个数据兼容性与可扩展性问题;以及可读性问题,数据文件的阅读往往需要额外的解析程序予以解析。
其中最重要的,也是最难解决的问题就是第二个问题,即数据兼容性与可扩展性问题。对此问题的解决,有多种数据存储方式都提出了自己的方案,下面给出两种比较主流的方式。
1)常见的二进制存储方式,通过数据文件版本号字段来区分不同数据版本的数据结构,缺陷是,必须记忆每个数据版本的数据结构,兼容性处理方面十分复杂与冗余,同时二进制存储在跨平台和可读性上是无法和纯文本的XML存储相比的;以及2)XML存储,XML存储是目前比较流行的一种跨平台网络应用程序的数据交流方式。
但是目前还很少见到应用于嵌入式通讯领域,常见的XML解析方法主要分为三大类a.DOM解析,需要将整个XML文件同时加载到内存中,建立一棵完整的解析树,实现对XML文件的动态随机访问,这样的缺点是当XML文件很大时会占用过多的系统内存;b.SAX解析,SAX是一个用于处理XML的事件驱动的“推”模型,其中,SAX解析器不像DOM那样建立一个整个文档的树型表示,而是在读取文档时激活一系列的事件,这些事件被推给事件处理器,而事件处理器则提供对文档内容的访问,SAX的缺点是必须实现处理所有到来事件的事件处理程序;以及c.StAx解析。StAX和SAX一样,使用一种事件驱动的模型。然而,StAX不使用SAX的推模型,而是使用“拉”模型进行事件处理,而且StAX解析器不使用回调机制,而是根据应用程序的要求返回事件。
对通讯设备的嵌入式运行环境而言,内存始终是一种稀缺紧张资源,因此DOM解析显然是不适合的。SAX解析由于是由解析器主动生成事件,推给事件处理器来解决,应用程序无法对事件的过滤进行要求和控制,因此不能很好的满足通讯应用领域需求变化频繁是对数据兼容性与可扩展性的要求。StAX解析中的拉模型,需要应用程序自己进行事件的判断与过滤,没有回调机制,当应用程序所需要的事件非常复杂时就不太适用了,而通讯设备应用领域所需要处理的事件往往是非常复杂多变的。
因而,急需一种很适用于通讯设备嵌入式运行环境的XML数据存储技术,解决通讯设备的数据存储的可兼容性可扩展性,跨平台性,及可读性问题。

发明内容
为了解决上述问题,本发明提供了一种XML数据存储系统和方法,其结合了XML SAX解析和StAX解析各自优点的一种变种,既有SAX“推”模型又有StAX“拉”模型特点,同时又对标准的XML解析作了很多简化,很适用于通讯设备嵌入式运行环境,可以很好的解决数据的跨平台性、可扩展性、兼容性、可读性问题。
本发明的一个方面提供了一种XML数据存储系统,其可以包括XML注册模块,用于由应用程序完成对事件的注册;XML解析模块,与XML注册模块交互,用于从XML数据文件中分辨出事件,解析事件对应的结构名,找到事件对应的读取接口,进行回调;以及XML保存模块,与XML注册模块相连,用于对XML属性进行保存。
其中,XML注册模块通过调用XML解析模块的读取属性接口来读取需要保存的数据结构,以及通过调用XML解析模块的读取属性接口来保存需要保存的数据结构。
另外,XML解析模块提供用于语言原生类型的解析接口,用于根据输入属性名称和记录体字符串,解析出对应的属性值。
XML保存模块提供用于语言原生类型的保存接口。
本发明还提供了一种XML数据存储方法,其可以包括以下步骤步骤202,应用程序使用XML注册模块完成对事件的注册;步骤204,XML解析模块与XML注册模块交互,从XML数据文件中分辨出事件,解析事件对应的结构名,找到事件对应的读取接口,进行回调;以及步骤206,XML保存模块与XML注册模块相连,对XML属性进行保存。
其中,XML注册模块通过调用XML解析模块的读取属性接口来读取需要保存的数据结构,以及通过调用XML解析模块的读取属性接口来保存需要保存的数据结构。
另外,解析模块提供用于语言原生类型的解析接口,用于根据输入属性名称和记录体字符串,解析出对应的属性值。XML保存模块提供用于语言原生类型的保存接口。
因而,采用本发明,很好地解决了嵌入式通讯应用环境对跨平台性,数据兼容性与可扩展性,可读性的问题。因为本存储方法结合了StAX拉模型的优点,事件是由应用程序自己进行选择的,那么当应用需要扩充或者减少事件以实现数据扩展与对老数据的兼容性时就有了充分的灵活性,同时又结合SAX推模型的优点,简化了应用程序对复杂事件的派发与判断,利用SAX模型的回调机制解决了此问题。同时因为SAX与StAX对内存的占用是非常小的,也节省了设备对内存的使用。此外,由于XML是纯文本的,自然也就解决了跨平台与可读性问题。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。


附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中图1是根据本发明的XML数据存储系统的结构框图;以及图2是根据本发明的XML数据存储方法的流程图。
具体实施例方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1是根据本发明的XML数据存储系统的结构框图。如图1所示,该系统包括XML注册模块102,用于由应用程序完成对事件的注册;XML解析模块104,与XML注册模块102交互,用于从XML数据文件中分辨出事件,解析事件对应的结构名,找到事件对应的读取接口,进行回调;以及XML保存模块106,与XML注册模块102相连,用于对XML属性进行保存。
其中,XML注册模块102通过调用XML解析模块104的读取属性接口来读取需要保存的数据结构,以及通过调用XML解析模块104的读取属性接口来保存需要保存的数据结构。
另外,XML解析模块104提供用于语言原生类型的解析接口,用于根据输入属性名称和记录体字符串,解析出对应的属性值。
XML保存模块106提供用于语言原生类型的保存接口。
其中,XML注册模块102用于注册需要保存的数据结构,例如,数据结构A在C语言中的定义如下typedef struct{int a;
char*b;int c;}A;注册方式则如下{″A″, ADataRetrieve, ADataSave },ADataRetrieve、ADataSave为2个由注册者提供的读取与保存接口。ADataRetrieve进行结构A对应属性的读取;ADataSave负责结构A对应属性的保存。读取与保存的具体实现是通过调用XML解析模块与XML保存模块106的接口完成的,后面会具体叙述。可见需要产生什么“事件”(在这里“A”就是一个事件)是由应用程序决定的,这就是StAX“拉”模式的特点。可以基于此实现数据兼容性的目的。
另外,XML解析模块104的大致原理是从XML数据文件中提取出单条XML数据记录,解析其对应的结构名(注册的字符串名称)后,找到其对应的读取接口,回调之,这就是SAX推模式的特点。
单条XML记录字符串按上面的结构可能如下例<A a=″0″b=″abc″c=″1″/>
其中A为结构名,a,b,c为属性名,出现在属性名等号右边的是它们的值,这是一条标准的XML记录。
解析模块提供一系列对语言原生类型(如int,char*,short等)的解析接口,输入是属性名称与记录体字符串,客户代码输入属性名称(a,b,c)与此条记录对应的XML字符串,即可获得其解析出的属性值。
具体名称解析方式可以通过记录名称、属性名称的固定位置予以判定,如记录名是有固定位置的,属性名后必然跟随‘=’,然后运用最长字符串匹配原则即可提取出记录名与属性名,值也可按类似原则提取出来。
可以看到,需要读取什么属性是由客户代码自己决定的,如果某属性后来被去掉了,不去读取之即可,如果增加了某属性,则可以增加读取它的代码,读取不到,说明是一份扩展前的老数据,此时可根据需要采用默认值。而如果此结构整个都去掉了,自然不会注册其读取接口,老数据中有此记录也没关系,不会被调用到任何读取接口。增加了新结构的话,虽然有读取接口,但是老数据中不包含此结构对应的数据,也不会调用到此读取接口。这也是StAX“拉”模式的特点,由应用程序自己去决定它需要处理的子事件(属性)。
综上所述,毫无疑问,本XML解析方式在数据兼容性和扩展性方面要灵活容易的多了。
XML保存模块106提供了一系列针对原生类型(如int,char*,short等)的保存接口,此接口比较简单,将用户输入的数据结构中的属性和值,转换成XML字符串记录即可。
单条XML记录按上面的结构保存下来可能如下例<A a=″0″b=″abc″c=″1″/>
图2是根据本发明的XML数据存储方法的流程图。如图2所示,该方法包括以下步骤
步骤202,应用程序使用XML注册模块完成对事件的注册;步骤204,XML解析模块与XML注册模块交互,从XML数据文件中分辨出事件,解析事件对应的结构名,找到事件对应的读取接口,进行回调;以及步骤206,XML保存模块与XML注册模块相连,对XML属性进行保存。
其中,XML注册模块通过调用XML解析模块的读取属性接口来读取需要保存的数据结构,以及通过调用XML解析模块的读取属性接口来保存需要保存的数据结构。
另外,解析模块提供用于语言原生类型的解析接口,用于根据输入属性名称和记录体字符串,解析出对应的属性值。XML保存模块提供用于语言原生类型的保存接口。
综上所述,通过本发明很好地解决了嵌入式通讯应用环境对跨平台性,数据兼容性与可扩展性,可读性的问题。因为本存储方法结合了StAX拉模型的优点,事件是由应用程序自己进行选择的,那么当应用需要扩充或者减少事件以实现数据扩展与对老数据的兼容性时就有了充分的灵活性,同时又结合SAX推模型的优点,简化了应用程序对复杂事件的派发与判断,利用SAX模型的回调机制解决了此问题。同时因为SAX与StAX对内存的占用是非常小的,也节省了设备对内存的使用。此外,由于XML是纯文本的,自然也就解决了跨平台与可读性问题。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种XML数据存储系统,其特征在于,包括XML注册模块,用于由应用程序完成对事件的注册;XML解析模块,与所述XML注册模块交互,用于从XML数据文件中分辨出事件,解析所述事件对应的结构名,找到所述事件对应的读取接口,进行回调;以及XML保存模块,与所述XML注册模块相连,用于对XML属性进行保存。
2.根据权利要求1所述的XML数据存储系统,其特征在于,所述XML注册模块通过调用所述XML解析模块的读取属性接口来读取需要保存的数据结构,以及通过调用所述XML解析模块的读取属性接口来保存需要保存的数据结构。
3.根据权利要求1或2所述的XML数据存储系统,其特征在于,所述XML解析模块提供用于语言原生类型的解析接口,用于根据输入属性名称和记录体字符串,解析出对应的属性值。
4.根据权利要求1或2所述的XML数据存储系统,其特征在于,所述XML保存模块提供用于语言原生类型的保存接口。
5.一种XML数据存储方法,其特征在于,包括以下步骤步骤202,应用程序使用XML注册模块完成对事件的注册;步骤204,XML解析模块与所述XML注册模块交互,从XML数据文件中分辨出事件,解析所述事件对应的结构名,找到所述事件对应的读取接口,进行回调;以及步骤206,XML保存模块与所述XML注册模块相连,对XML属性进行保存。
6.根据权利要求5所述的XML数据存储方法,其特征在于,所述XML注册模块通过调用所述XML解析模块的读取属性接口来读取需要保存的数据结构,以及通过调用所述XML解析模块的读取属性接口来保存需要保存的数据结构。
7.根据权利要求5或6所述的XML数据存储方法,其特征在于,所述解析模块提供用于语言原生类型的解析接口,用于根据输入属性名称和记录体字符串,解析出对应的属性值。
8.根据权利要求5或6所述的XML数据存储方法,其特征在于,所述XML保存模块提供用于语言原生类型的保存接口。
全文摘要
本发明提供了一种XML数据存储系统和方法,其中,该系统可以包括XML注册模块,用于由应用程序完成对事件的注册;XML解析模块,与XML注册模块交互,用于从XML数据文件中分辨出事件,解析事件对应的结构名,找到事件对应的读取接口,进行回调;以及XML保存模块,与XML注册模块相连,用于对XML属性进行保存。因而,采用本发明,很好地解决了嵌入式通讯应用环境对跨平台性,数据兼容性与可扩展性,可读性的问题。
文档编号G06F17/30GK101082937SQ200710126038
公开日2007年12月5日 申请日期2007年6月29日 优先权日2007年6月29日
发明者何松 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1