專利名稱:Xml數(shù)據(jù)存儲系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種XML數(shù)據(jù)存儲系統(tǒng)和方法。
背景技術(shù):
通訊設(shè)備中一般都會涉及到配置數(shù)據(jù)存儲,目前數(shù)據(jù)存儲在通訊設(shè)備領(lǐng)域主要存在以下幾個問題由于通訊設(shè)備采用的軟硬件平臺各異,進行數(shù)據(jù)交互時難免會碰到數(shù)據(jù)字節(jié)序問題;由于通訊領(lǐng)域是一種需求變化非常激烈與頻繁的領(lǐng)域,一旦需求改變,很可能就會導(dǎo)致配置數(shù)據(jù)的改變,這樣就存在一個數(shù)據(jù)兼容性與可擴展性問題;以及可讀性問題,數(shù)據(jù)文件的閱讀往往需要額外的解析程序予以解析。
其中最重要的,也是最難解決的問題就是第二個問題,即數(shù)據(jù)兼容性與可擴展性問題。對此問題的解決,有多種數(shù)據(jù)存儲方式都提出了自己的方案,下面給出兩種比較主流的方式。
1)常見的二進制存儲方式,通過數(shù)據(jù)文件版本號字段來區(qū)分不同數(shù)據(jù)版本的數(shù)據(jù)結(jié)構(gòu),缺陷是,必須記憶每個數(shù)據(jù)版本的數(shù)據(jù)結(jié)構(gòu),兼容性處理方面十分復(fù)雜與冗余,同時二進制存儲在跨平臺和可讀性上是無法和純文本的XML存儲相比的;以及2)XML存儲,XML存儲是目前比較流行的一種跨平臺網(wǎng)絡(luò)應(yīng)用程序的數(shù)據(jù)交流方式。
但是目前還很少見到應(yīng)用于嵌入式通訊領(lǐng)域,常見的XML解析方法主要分為三大類a.DOM解析,需要將整個XML文件同時加載到內(nèi)存中,建立一棵完整的解析樹,實現(xiàn)對XML文件的動態(tài)隨機訪問,這樣的缺點是當XML文件很大時會占用過多的系統(tǒng)內(nèi)存;b.SAX解析,SAX是一個用于處理XML的事件驅(qū)動的“推”模型,其中,SAX解析器不像DOM那樣建立一個整個文檔的樹型表示,而是在讀取文檔時激活一系列的事件,這些事件被推給事件處理器,而事件處理器則提供對文檔內(nèi)容的訪問,SAX的缺點是必須實現(xiàn)處理所有到來事件的事件處理程序;以及c.StAx解析。StAX和SAX一樣,使用一種事件驅(qū)動的模型。然而,StAX不使用SAX的推模型,而是使用“拉”模型進行事件處理,而且StAX解析器不使用回調(diào)機制,而是根據(jù)應(yīng)用程序的要求返回事件。
對通訊設(shè)備的嵌入式運行環(huán)境而言,內(nèi)存始終是一種稀缺緊張資源,因此DOM解析顯然是不適合的。SAX解析由于是由解析器主動生成事件,推給事件處理器來解決,應(yīng)用程序無法對事件的過濾進行要求和控制,因此不能很好的滿足通訊應(yīng)用領(lǐng)域需求變化頻繁是對數(shù)據(jù)兼容性與可擴展性的要求。StAX解析中的拉模型,需要應(yīng)用程序自己進行事件的判斷與過濾,沒有回調(diào)機制,當應(yīng)用程序所需要的事件非常復(fù)雜時就不太適用了,而通訊設(shè)備應(yīng)用領(lǐng)域所需要處理的事件往往是非常復(fù)雜多變的。
因而,急需一種很適用于通訊設(shè)備嵌入式運行環(huán)境的XML數(shù)據(jù)存儲技術(shù),解決通訊設(shè)備的數(shù)據(jù)存儲的可兼容性可擴展性,跨平臺性,及可讀性問題。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明提供了一種XML數(shù)據(jù)存儲系統(tǒng)和方法,其結(jié)合了XML SAX解析和StAX解析各自優(yōu)點的一種變種,既有SAX“推”模型又有StAX“拉”模型特點,同時又對標準的XML解析作了很多簡化,很適用于通訊設(shè)備嵌入式運行環(huán)境,可以很好的解決數(shù)據(jù)的跨平臺性、可擴展性、兼容性、可讀性問題。
本發(fā)明的一個方面提供了一種XML數(shù)據(jù)存儲系統(tǒng),其可以包括XML注冊模塊,用于由應(yīng)用程序完成對事件的注冊;XML解析模塊,與XML注冊模塊交互,用于從XML數(shù)據(jù)文件中分辨出事件,解析事件對應(yīng)的結(jié)構(gòu)名,找到事件對應(yīng)的讀取接口,進行回調(diào);以及XML保存模塊,與XML注冊模塊相連,用于對XML屬性進行保存。
其中,XML注冊模塊通過調(diào)用XML解析模塊的讀取屬性接口來讀取需要保存的數(shù)據(jù)結(jié)構(gòu),以及通過調(diào)用XML解析模塊的讀取屬性接口來保存需要保存的數(shù)據(jù)結(jié)構(gòu)。
另外,XML解析模塊提供用于語言原生類型的解析接口,用于根據(jù)輸入屬性名稱和記錄體字符串,解析出對應(yīng)的屬性值。
XML保存模塊提供用于語言原生類型的保存接口。
本發(fā)明還提供了一種XML數(shù)據(jù)存儲方法,其可以包括以下步驟步驟202,應(yīng)用程序使用XML注冊模塊完成對事件的注冊;步驟204,XML解析模塊與XML注冊模塊交互,從XML數(shù)據(jù)文件中分辨出事件,解析事件對應(yīng)的結(jié)構(gòu)名,找到事件對應(yīng)的讀取接口,進行回調(diào);以及步驟206,XML保存模塊與XML注冊模塊相連,對XML屬性進行保存。
其中,XML注冊模塊通過調(diào)用XML解析模塊的讀取屬性接口來讀取需要保存的數(shù)據(jù)結(jié)構(gòu),以及通過調(diào)用XML解析模塊的讀取屬性接口來保存需要保存的數(shù)據(jù)結(jié)構(gòu)。
另外,解析模塊提供用于語言原生類型的解析接口,用于根據(jù)輸入屬性名稱和記錄體字符串,解析出對應(yīng)的屬性值。XML保存模塊提供用于語言原生類型的保存接口。
因而,采用本發(fā)明,很好地解決了嵌入式通訊應(yīng)用環(huán)境對跨平臺性,數(shù)據(jù)兼容性與可擴展性,可讀性的問題。因為本存儲方法結(jié)合了StAX拉模型的優(yōu)點,事件是由應(yīng)用程序自己進行選擇的,那么當應(yīng)用需要擴充或者減少事件以實現(xiàn)數(shù)據(jù)擴展與對老數(shù)據(jù)的兼容性時就有了充分的靈活性,同時又結(jié)合SAX推模型的優(yōu)點,簡化了應(yīng)用程序?qū)?fù)雜事件的派發(fā)與判斷,利用SAX模型的回調(diào)機制解決了此問題。同時因為SAX與StAX對內(nèi)存的占用是非常小的,也節(jié)省了設(shè)備對內(nèi)存的使用。此外,由于XML是純文本的,自然也就解決了跨平臺與可讀性問題。
本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
附圖用來提供對本發(fā)明的進一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實施例一起用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的限制。在附圖中圖1是根據(jù)本發(fā)明的XML數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)框圖;以及圖2是根據(jù)本發(fā)明的XML數(shù)據(jù)存儲方法的流程圖。
具體實施例方式
以下結(jié)合附圖對本發(fā)明的優(yōu)選實施例進行說明,應(yīng)當理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
圖1是根據(jù)本發(fā)明的XML數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)框圖。如圖1所示,該系統(tǒng)包括XML注冊模塊102,用于由應(yīng)用程序完成對事件的注冊;XML解析模塊104,與XML注冊模塊102交互,用于從XML數(shù)據(jù)文件中分辨出事件,解析事件對應(yīng)的結(jié)構(gòu)名,找到事件對應(yīng)的讀取接口,進行回調(diào);以及XML保存模塊106,與XML注冊模塊102相連,用于對XML屬性進行保存。
其中,XML注冊模塊102通過調(diào)用XML解析模塊104的讀取屬性接口來讀取需要保存的數(shù)據(jù)結(jié)構(gòu),以及通過調(diào)用XML解析模塊104的讀取屬性接口來保存需要保存的數(shù)據(jù)結(jié)構(gòu)。
另外,XML解析模塊104提供用于語言原生類型的解析接口,用于根據(jù)輸入屬性名稱和記錄體字符串,解析出對應(yīng)的屬性值。
XML保存模塊106提供用于語言原生類型的保存接口。
其中,XML注冊模塊102用于注冊需要保存的數(shù)據(jù)結(jié)構(gòu),例如,數(shù)據(jù)結(jié)構(gòu)A在C語言中的定義如下typedef struct{int a;
char*b;int c;}A;注冊方式則如下{″A″, ADataRetrieve, ADataSave },ADataRetrieve、ADataSave為2個由注冊者提供的讀取與保存接口。ADataRetrieve進行結(jié)構(gòu)A對應(yīng)屬性的讀??;ADataSave負責結(jié)構(gòu)A對應(yīng)屬性的保存。讀取與保存的具體實現(xiàn)是通過調(diào)用XML解析模塊與XML保存模塊106的接口完成的,后面會具體敘述??梢娦枰a(chǎn)生什么“事件”(在這里“A”就是一個事件)是由應(yīng)用程序決定的,這就是StAX“拉”模式的特點??梢曰诖藢崿F(xiàn)數(shù)據(jù)兼容性的目的。
另外,XML解析模塊104的大致原理是從XML數(shù)據(jù)文件中提取出單條XML數(shù)據(jù)記錄,解析其對應(yīng)的結(jié)構(gòu)名(注冊的字符串名稱)后,找到其對應(yīng)的讀取接口,回調(diào)之,這就是SAX推模式的特點。
單條XML記錄字符串按上面的結(jié)構(gòu)可能如下例<A a=″0″b=″abc″c=″1″/>
其中A為結(jié)構(gòu)名,a,b,c為屬性名,出現(xiàn)在屬性名等號右邊的是它們的值,這是一條標準的XML記錄。
解析模塊提供一系列對語言原生類型(如int,char*,short等)的解析接口,輸入是屬性名稱與記錄體字符串,客戶代碼輸入屬性名稱(a,b,c)與此條記錄對應(yīng)的XML字符串,即可獲得其解析出的屬性值。
具體名稱解析方式可以通過記錄名稱、屬性名稱的固定位置予以判定,如記錄名是有固定位置的,屬性名后必然跟隨‘=’,然后運用最長字符串匹配原則即可提取出記錄名與屬性名,值也可按類似原則提取出來。
可以看到,需要讀取什么屬性是由客戶代碼自己決定的,如果某屬性后來被去掉了,不去讀取之即可,如果增加了某屬性,則可以增加讀取它的代碼,讀取不到,說明是一份擴展前的老數(shù)據(jù),此時可根據(jù)需要采用默認值。而如果此結(jié)構(gòu)整個都去掉了,自然不會注冊其讀取接口,老數(shù)據(jù)中有此記錄也沒關(guān)系,不會被調(diào)用到任何讀取接口。增加了新結(jié)構(gòu)的話,雖然有讀取接口,但是老數(shù)據(jù)中不包含此結(jié)構(gòu)對應(yīng)的數(shù)據(jù),也不會調(diào)用到此讀取接口。這也是StAX“拉”模式的特點,由應(yīng)用程序自己去決定它需要處理的子事件(屬性)。
綜上所述,毫無疑問,本XML解析方式在數(shù)據(jù)兼容性和擴展性方面要靈活容易的多了。
XML保存模塊106提供了一系列針對原生類型(如int,char*,short等)的保存接口,此接口比較簡單,將用戶輸入的數(shù)據(jù)結(jié)構(gòu)中的屬性和值,轉(zhuǎn)換成XML字符串記錄即可。
單條XML記錄按上面的結(jié)構(gòu)保存下來可能如下例<A a=″0″b=″abc″c=″1″/>
圖2是根據(jù)本發(fā)明的XML數(shù)據(jù)存儲方法的流程圖。如圖2所示,該方法包括以下步驟
步驟202,應(yīng)用程序使用XML注冊模塊完成對事件的注冊;步驟204,XML解析模塊與XML注冊模塊交互,從XML數(shù)據(jù)文件中分辨出事件,解析事件對應(yīng)的結(jié)構(gòu)名,找到事件對應(yīng)的讀取接口,進行回調(diào);以及步驟206,XML保存模塊與XML注冊模塊相連,對XML屬性進行保存。
其中,XML注冊模塊通過調(diào)用XML解析模塊的讀取屬性接口來讀取需要保存的數(shù)據(jù)結(jié)構(gòu),以及通過調(diào)用XML解析模塊的讀取屬性接口來保存需要保存的數(shù)據(jù)結(jié)構(gòu)。
另外,解析模塊提供用于語言原生類型的解析接口,用于根據(jù)輸入屬性名稱和記錄體字符串,解析出對應(yīng)的屬性值。XML保存模塊提供用于語言原生類型的保存接口。
綜上所述,通過本發(fā)明很好地解決了嵌入式通訊應(yīng)用環(huán)境對跨平臺性,數(shù)據(jù)兼容性與可擴展性,可讀性的問題。因為本存儲方法結(jié)合了StAX拉模型的優(yōu)點,事件是由應(yīng)用程序自己進行選擇的,那么當應(yīng)用需要擴充或者減少事件以實現(xiàn)數(shù)據(jù)擴展與對老數(shù)據(jù)的兼容性時就有了充分的靈活性,同時又結(jié)合SAX推模型的優(yōu)點,簡化了應(yīng)用程序?qū)?fù)雜事件的派發(fā)與判斷,利用SAX模型的回調(diào)機制解決了此問題。同時因為SAX與StAX對內(nèi)存的占用是非常小的,也節(jié)省了設(shè)備對內(nèi)存的使用。此外,由于XML是純文本的,自然也就解決了跨平臺與可讀性問題。
以上僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種XML數(shù)據(jù)存儲系統(tǒng),其特征在于,包括XML注冊模塊,用于由應(yīng)用程序完成對事件的注冊;XML解析模塊,與所述XML注冊模塊交互,用于從XML數(shù)據(jù)文件中分辨出事件,解析所述事件對應(yīng)的結(jié)構(gòu)名,找到所述事件對應(yīng)的讀取接口,進行回調(diào);以及XML保存模塊,與所述XML注冊模塊相連,用于對XML屬性進行保存。
2.根據(jù)權(quán)利要求1所述的XML數(shù)據(jù)存儲系統(tǒng),其特征在于,所述XML注冊模塊通過調(diào)用所述XML解析模塊的讀取屬性接口來讀取需要保存的數(shù)據(jù)結(jié)構(gòu),以及通過調(diào)用所述XML解析模塊的讀取屬性接口來保存需要保存的數(shù)據(jù)結(jié)構(gòu)。
3.根據(jù)權(quán)利要求1或2所述的XML數(shù)據(jù)存儲系統(tǒng),其特征在于,所述XML解析模塊提供用于語言原生類型的解析接口,用于根據(jù)輸入屬性名稱和記錄體字符串,解析出對應(yīng)的屬性值。
4.根據(jù)權(quán)利要求1或2所述的XML數(shù)據(jù)存儲系統(tǒng),其特征在于,所述XML保存模塊提供用于語言原生類型的保存接口。
5.一種XML數(shù)據(jù)存儲方法,其特征在于,包括以下步驟步驟202,應(yīng)用程序使用XML注冊模塊完成對事件的注冊;步驟204,XML解析模塊與所述XML注冊模塊交互,從XML數(shù)據(jù)文件中分辨出事件,解析所述事件對應(yīng)的結(jié)構(gòu)名,找到所述事件對應(yīng)的讀取接口,進行回調(diào);以及步驟206,XML保存模塊與所述XML注冊模塊相連,對XML屬性進行保存。
6.根據(jù)權(quán)利要求5所述的XML數(shù)據(jù)存儲方法,其特征在于,所述XML注冊模塊通過調(diào)用所述XML解析模塊的讀取屬性接口來讀取需要保存的數(shù)據(jù)結(jié)構(gòu),以及通過調(diào)用所述XML解析模塊的讀取屬性接口來保存需要保存的數(shù)據(jù)結(jié)構(gòu)。
7.根據(jù)權(quán)利要求5或6所述的XML數(shù)據(jù)存儲方法,其特征在于,所述解析模塊提供用于語言原生類型的解析接口,用于根據(jù)輸入屬性名稱和記錄體字符串,解析出對應(yīng)的屬性值。
8.根據(jù)權(quán)利要求5或6所述的XML數(shù)據(jù)存儲方法,其特征在于,所述XML保存模塊提供用于語言原生類型的保存接口。
全文摘要
本發(fā)明提供了一種XML數(shù)據(jù)存儲系統(tǒng)和方法,其中,該系統(tǒng)可以包括XML注冊模塊,用于由應(yīng)用程序完成對事件的注冊;XML解析模塊,與XML注冊模塊交互,用于從XML數(shù)據(jù)文件中分辨出事件,解析事件對應(yīng)的結(jié)構(gòu)名,找到事件對應(yīng)的讀取接口,進行回調(diào);以及XML保存模塊,與XML注冊模塊相連,用于對XML屬性進行保存。因而,采用本發(fā)明,很好地解決了嵌入式通訊應(yīng)用環(huán)境對跨平臺性,數(shù)據(jù)兼容性與可擴展性,可讀性的問題。
文檔編號G06F17/30GK101082937SQ200710126038
公開日2007年12月5日 申請日期2007年6月29日 優(yōu)先權(quán)日2007年6月29日
發(fā)明者何松 申請人:中興通訊股份有限公司