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