專利名稱:Xml數(shù)據(jù)的壓縮與解壓縮的方法及其裝置的制作方法
背景技術(shù):
本發(fā)明涉及一種數(shù)據(jù)壓縮與解壓縮的方法和裝置,尤其涉及一種XML(Extensible Markup Language,可擴(kuò)展的升級(jí)語言)數(shù)據(jù)壓縮與解壓縮的方法和裝置。
XML是一種文本格式,它在數(shù)據(jù)交換中正越來越普遍。越來越多的標(biāo)準(zhǔn),例如多媒體領(lǐng)域、MPEG-7和TV-Anytime,都使用XML文本格式表示數(shù)據(jù)。
XML是一種冗長(zhǎng)的格式,即XML表示數(shù)據(jù)和結(jié)構(gòu)的方式導(dǎo)致一個(gè)相對(duì)較大的文本。因此,為了傳輸或者儲(chǔ)存,需要仔細(xì)考慮數(shù)據(jù)壓縮。最普通的壓縮方法是Zlib,如大家都很熟悉的zip(.zip文件)和gzip(.gz文件),它是基于霍夫曼、LZ77或兩者。
現(xiàn)有技術(shù)中,壓縮裝置對(duì)XML數(shù)據(jù)進(jìn)行壓縮,然后將壓縮的XML數(shù)據(jù)傳送給解壓縮裝置,解壓縮裝置對(duì)壓縮的XML數(shù)據(jù)進(jìn)行解壓并進(jìn)行分析。
圖1是現(xiàn)有技術(shù)的一個(gè)壓縮器的結(jié)構(gòu)示意圖。壓縮器100(compressor)包括LZ77編碼器102、霍夫曼編碼器104和塊打包器106(block wrapping),壓縮器100根據(jù)Zlib格式對(duì)XML數(shù)據(jù)進(jìn)行壓縮。
壓縮器100首先接收XML數(shù)據(jù),LZ77編碼器102根據(jù)LZ77算法對(duì)XML數(shù)據(jù)進(jìn)行編碼,產(chǎn)生一束代碼字(codeword)和字符(literals)。該字符包含來自XML數(shù)據(jù)中不能壓縮的字節(jié),一個(gè)代碼字可以將XML數(shù)據(jù)中以前就已經(jīng)遇到過的,也就是多余的數(shù)據(jù)轉(zhuǎn)換成一序列的字節(jié)。典型的代碼字包含長(zhǎng)度和間距,該長(zhǎng)度是以前遇到過序列的長(zhǎng)度,間距是從字節(jié)中序列的開端到當(dāng)前字節(jié)的間距。
霍夫曼編碼器104對(duì)代碼字和字符進(jìn)行霍夫曼編碼,輸出一序列不同長(zhǎng)度的代碼,并產(chǎn)生一個(gè)霍夫曼列表。
塊打包器106從霍夫曼編碼器104得到霍夫曼列表,將數(shù)據(jù)打包成塊,每個(gè)塊可以使用不同的霍夫曼列表或者甚至完全不用LZ77編碼和霍夫曼編碼。這里打包有3種可能性旁路壓縮、使用默認(rèn)的霍夫曼列表、使用常規(guī)的霍夫更列表,這3種可能性是基于如實(shí)際的壓縮率和平均信息量。每個(gè)塊都以一個(gè)塊首(block header)開始。最后輸出壓縮的XML數(shù)據(jù),并發(fā)送給解壓縮裝置。
圖2是現(xiàn)有技術(shù)的一個(gè)解壓縮裝置中解壓縮器和分析器的結(jié)構(gòu)示意圖。解壓器(decompressor)200對(duì)壓縮的XML數(shù)據(jù)進(jìn)行解壓,獲得XML數(shù)據(jù)。解壓器200包括塊首解碼器(block header decoding)202、霍夫曼解碼器(Huffman decoding)204和LZ77解碼器(LZ77decoding)206。
塊首解碼器202對(duì)壓縮的XML數(shù)據(jù)進(jìn)行解碼,獲得一個(gè)霍夫曼列表及不同長(zhǎng)度的代碼和/或字符,霍夫曼解碼器204再對(duì)壓縮的XML數(shù)據(jù)進(jìn)行解碼,獲得代碼字和字符,最后輸入LZ77解碼器206進(jìn)行解碼,獲得XML數(shù)據(jù)。
分析器210帶有用于XML數(shù)據(jù)的簡(jiǎn)單應(yīng)用程序接口(SAX),用于對(duì)XML數(shù)據(jù)進(jìn)行SAX分析,獲得事件類型(Event_Type)和事件數(shù)據(jù)(Event_Data)。這里的SAX實(shí)際上是對(duì)XML數(shù)據(jù)處理的標(biāo)準(zhǔn),它非常簡(jiǎn)單,所以非???。SAX按序處理XML數(shù)據(jù),所以與基于Zlib的按序解壓器200非常匹配。SAX是基于事件的概念,事件是為在按序處理XML數(shù)據(jù)期間,SAX分析遇到的實(shí)體而產(chǎn)生的。通過出現(xiàn)的事件類型來指示分析器210事件的類型,這樣分析器210可以相應(yīng)地對(duì)事件數(shù)據(jù)進(jìn)行分析處理,得到分析后的XML數(shù)據(jù)。
這里在SAX分析之前,系統(tǒng)只是將XML數(shù)據(jù)作為一序列的字符(即壓縮器不假定數(shù)據(jù)的特性)。而在SAX分析之后,不同的XML實(shí)體例如元素和非元素(字符)就被區(qū)分開來。因此,SAX分析后的輸出并不包含單個(gè)的字符,而是一序列的事件,每個(gè)事件對(duì)應(yīng)一個(gè)實(shí)體,這個(gè)實(shí)體由XML數(shù)據(jù)中許多不同的字符所構(gòu)成。
由于現(xiàn)有技術(shù)中,從一個(gè)大的壓縮文件中重獲特殊的數(shù)據(jù)對(duì)于接收機(jī)來說是一種負(fù)擔(dān),但在大XML數(shù)據(jù)上完成壓縮比在小XML數(shù)據(jù)上壓縮要好,尤其在帶寬昂貴(如廣播)的域中,壓縮效率最佳化是非常重要的。進(jìn)一步,如果目標(biāo)接收機(jī)沒有存儲(chǔ),那么不可能在一個(gè)數(shù)據(jù)庫中以一個(gè)解壓格式保存全部的數(shù)據(jù),它最多將數(shù)據(jù)以壓縮格式保存或者一直等到數(shù)據(jù)再次傳送。所以現(xiàn)有技術(shù)中帶有大量資源,如大存儲(chǔ)能力,的裝置不能直接對(duì)大XML文件進(jìn)行操作。且?guī)в杏邢拶Y源,如小存儲(chǔ)能力,的裝置更不能以解壓格式或者數(shù)據(jù)庫格式儲(chǔ)存數(shù)據(jù),它們只能夠在壓縮文件的基礎(chǔ)上重新獲得數(shù)據(jù)。
發(fā)明內(nèi)容
本發(fā)明針對(duì)現(xiàn)有技術(shù)中存在的問題,提供了一種用于XML數(shù)據(jù)壓縮和解壓縮方法和裝置。
本發(fā)明提供了一種XML數(shù)據(jù)的壓縮的方法,首先,接收XML數(shù)據(jù),對(duì)XML數(shù)據(jù)進(jìn)行編碼;然后,將編碼和的XML數(shù)據(jù)處理打包成數(shù)個(gè)數(shù)據(jù)塊;最后,在所述數(shù)個(gè)數(shù)據(jù)塊之間插入指示數(shù)據(jù),得到壓縮的XML數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù)。
本發(fā)明提供了另一種XML數(shù)據(jù)的壓縮的方法,首先,接收XML數(shù)據(jù);然后,插入指示數(shù)據(jù)到XML數(shù)據(jù)中,該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù);最后,對(duì)含有指示數(shù)據(jù)的XML數(shù)據(jù)進(jìn)行壓縮,以得到壓縮后的XML數(shù)據(jù)。
本發(fā)明提供了一種XML數(shù)據(jù)的解壓縮的方法,首先,接收壓縮后的XML數(shù)據(jù),該壓縮后的XML數(shù)據(jù)含有指示數(shù)據(jù);然后,解壓縮該壓縮后的XML數(shù)據(jù),并在該解壓縮過程中獲得所述的指示數(shù)據(jù);最后,根據(jù)該指示數(shù)據(jù)將解壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)丟棄。
本發(fā)明提供了另一種XML數(shù)據(jù)的解壓縮的方法,首先,解壓縮該壓縮后的XML數(shù)據(jù),以得到解壓縮后的XML數(shù)據(jù);然后,從所述的解壓縮后的XML數(shù)據(jù)獲得一個(gè)指示數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù);最后,根據(jù)該指示數(shù)據(jù)將對(duì)應(yīng)的解壓縮后的XML數(shù)據(jù)丟棄。
本發(fā)明通過避免分析XML數(shù)據(jù)中不相關(guān)的數(shù)據(jù),從而可以加速分析的過程,這樣就使接收器的工作加速;由于只對(duì)XML數(shù)據(jù)中相關(guān)部分進(jìn)行處理,所以就可以處理較大的XML數(shù)據(jù)。而所有要傳輸?shù)腦ML信息就可以被分割成較大XML數(shù)據(jù)中的一小塊數(shù)據(jù),這要遠(yuǎn)比處理小XML數(shù)據(jù)中一大塊的數(shù)據(jù)好的多,因?yàn)榍罢呤褂肸lib進(jìn)行壓縮比后者要好的多,所以可節(jié)約帶寬。
通過參照結(jié)合附圖所進(jìn)行的如下描述和權(quán)力要求,本發(fā)明的其它目的和成就將是顯而易見的,并對(duì)本發(fā)明也會(huì)有更為全面的理解。
本發(fā)明通過實(shí)例的方式,參照附圖進(jìn)行詳盡的解釋,其中圖1是現(xiàn)有技術(shù)的一個(gè)壓縮器的結(jié)構(gòu)示意圖;圖2是現(xiàn)有技術(shù)的一個(gè)解壓縮裝置中解壓縮器和分析器的結(jié)構(gòu)示意圖;圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的壓縮裝置的結(jié)構(gòu)框圖;圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的壓縮方法的流程圖;圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施例的解壓縮裝置的結(jié)構(gòu)示意圖;圖6是根據(jù)本發(fā)明的一個(gè)實(shí)施例的解壓縮方法的流程圖;圖7是根據(jù)本發(fā)明的另一個(gè)實(shí)施例的壓縮裝置的結(jié)構(gòu)框圖;圖8是根據(jù)本發(fā)明的另一個(gè)實(shí)施例的壓縮方法的流程圖;圖9是根據(jù)本發(fā)明的另一個(gè)實(shí)施例的解壓縮裝置的結(jié)構(gòu)框圖;圖10是根據(jù)本發(fā)明的另一個(gè)實(shí)施例的解壓縮方法的流程圖;在所有的附圖中,相同的參照數(shù)字表示相似的或相同的特征和功能。
具體實(shí)施例方式
圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的壓縮器結(jié)構(gòu)框圖,該壓縮器100包括一個(gè)LZ77編碼器102,一個(gè)霍夫曼編碼器104,一個(gè)塊打包器106和一個(gè)插入指示數(shù)據(jù)塊裝置302。
所述LZ77編碼器102,用于對(duì)XML數(shù)據(jù)進(jìn)行LZ77編碼,還可作為接收裝置,用于接收XML數(shù)據(jù)?;舴蚵幋a器104,用于對(duì)經(jīng)過LZ77編碼的XML數(shù)據(jù)進(jìn)行霍夫曼編碼,同時(shí)提供霍夫曼列表。LZ77編碼器102和霍夫曼編碼器104可以一起構(gòu)成編碼裝置,用于對(duì)XML數(shù)據(jù)進(jìn)行編碼。
塊打包器106,用于根據(jù)霍夫曼列表將經(jīng)過霍夫曼編碼后的XML數(shù)據(jù)打包成數(shù)個(gè)數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊的塊首有部分霍夫曼列表。
插入指示數(shù)據(jù)塊裝置302,用于根據(jù)霍夫曼列表將指示數(shù)據(jù)插入所述數(shù)據(jù)塊之間,以得到壓縮后的XML數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù)。所述的指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊中。
圖4是根據(jù)本發(fā)明一個(gè)實(shí)施例的壓縮方法的流程圖,首先接收XML數(shù)據(jù)(步驟S402),例如,接收的XML數(shù)據(jù)為
<Entry><Word>Aback</Word><Definition>saldiufhcnw</Definition></Entry>........
然后對(duì)XML數(shù)據(jù)進(jìn)行編碼,包括進(jìn)行LZ77編碼(步驟S404)和進(jìn)行霍夫曼編碼(步驟S406)。XML數(shù)據(jù)經(jīng)過LZ77編碼(步驟S404)后,得到一束代碼字(codeword)和字符(literals),這里的代碼字就是XML數(shù)據(jù)中重復(fù)的字符“Word>”,它的長(zhǎng)度為5,它的距離即第一個(gè)“Word>”到下一個(gè)“Word>”之間的間隔為12。字符就是其他不能被壓縮的字符,例如“Aback”等等。
對(duì)XML數(shù)據(jù)進(jìn)行霍夫曼編碼(步驟S406),獲得不同長(zhǎng)度的代碼,同時(shí)產(chǎn)生霍夫曼列表。例如20個(gè)字符‘E’‘n’‘t’‘r’‘y’‘>’‘<’‘W’‘o’‘r’‘d’‘>’‘A’‘b’‘a(chǎn)’‘c’‘k’‘<’‘/’,經(jīng)過霍夫曼編碼后得到20個(gè)不同長(zhǎng)度的代碼為十六進(jìn)制的6C 75 9E A4 A2 A9 6E 6C 87 9F A2 94 6E 71 92 91 93 9B 6C 5F。
根據(jù)霍夫曼列表將經(jīng)過霍夫曼編碼的XML數(shù)據(jù)進(jìn)行塊打包,打包成數(shù)個(gè)數(shù)據(jù)塊(步驟S408)。例如將以字母‘A’開頭的單詞打包在一個(gè)數(shù)據(jù)塊,將以字母‘B’開頭的單詞打包在下一個(gè)數(shù)據(jù)塊,依次排序,得到數(shù)個(gè)數(shù)據(jù)塊。
插入指示數(shù)據(jù)到塊打包后的XML數(shù)據(jù)塊之間(步驟S410),以得到壓縮后的XML數(shù)據(jù)(步驟S412),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù),這里特定的數(shù)據(jù)是所需要的數(shù)據(jù),例如單詞‘car’。
所述的指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊中,且指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊的塊首。
壓縮后的XML數(shù)據(jù)如表1所示
表1從表1可以看出,數(shù)據(jù)塊0包含的內(nèi)容與編碼后的XML數(shù)據(jù)“<Entry><Word>”相對(duì)應(yīng),即6C 75 9E A4 A2 A9 6E 6C 87 9F A2 946E;數(shù)據(jù)塊1即指示數(shù)據(jù)塊的塊首插有指示數(shù)據(jù)‘C’,該數(shù)據(jù)塊是空數(shù)據(jù)塊,沒有任何數(shù)據(jù);數(shù)據(jù)塊2和數(shù)據(jù)塊3與數(shù)據(jù)塊0、1相似。數(shù)據(jù)塊4是以字母‘C’開頭的單詞,該數(shù)據(jù)塊的內(nèi)容就是與單詞“Car”相對(duì)應(yīng)的字符,即和前述“6C 75”等等相似的字符。
圖5是根據(jù)本發(fā)明一個(gè)實(shí)施例解壓縮裝置的結(jié)構(gòu)示意圖,該裝置解壓縮裝置包括一個(gè)解壓縮器500,一個(gè)有限狀態(tài)機(jī)(finite statemachine,F(xiàn)SM)510,一個(gè)檢測(cè)指示數(shù)據(jù)塊裝置508和一個(gè)分析器512。
解壓縮器500還包括一個(gè)塊首解碼器502,一個(gè)霍夫曼解碼器204和一個(gè)LZ77解碼器206。
塊首解碼器502用于對(duì)壓縮后的XML數(shù)據(jù)塊進(jìn)行塊首解碼,在進(jìn)行塊首解碼時(shí)每遇到一個(gè)新的數(shù)據(jù)塊,會(huì)產(chǎn)生一個(gè)數(shù)據(jù)塊信號(hào),并將該信號(hào)發(fā)送給有限狀態(tài)機(jī)510。塊首解碼器502還用于找到一個(gè)空數(shù)據(jù)塊,并將該空數(shù)據(jù)塊提供給檢測(cè)指示數(shù)據(jù)塊裝置508。塊首解碼器502還用于產(chǎn)生霍夫曼列表,同時(shí)還可以作為接收裝置,接收壓縮后的XML數(shù)據(jù)。
霍夫曼解碼器204,用于根據(jù)霍夫曼列表對(duì)經(jīng)過塊首解碼后的壓縮后的XML數(shù)據(jù)進(jìn)行解碼。
LZ77解碼器206,用于對(duì)壓縮后的XML數(shù)據(jù)進(jìn)行LZ77解碼,獲得XML數(shù)據(jù)。該壓縮后的XML數(shù)據(jù)含有指示數(shù)據(jù)。
檢測(cè)指示數(shù)據(jù)塊裝置508,用于從塊首解碼器502提供來的空數(shù)據(jù)塊的塊首中獲得指示數(shù)據(jù),并發(fā)送給分析器512。所述解壓縮器500和檢測(cè)指示數(shù)據(jù)塊裝置508一起構(gòu)成一個(gè)數(shù)據(jù)處理裝置,用于解壓縮該壓縮后的XML數(shù)據(jù)。
分析器512根據(jù)一個(gè)特定的條件修正該指示數(shù)據(jù)的內(nèi)容,產(chǎn)生相應(yīng)的跳躍信號(hào),并發(fā)送給有限狀態(tài)機(jī)510,該特定的條件對(duì)應(yīng)于分析器512的一個(gè)特定的應(yīng)用,即分析器512需要的數(shù)據(jù),例如單詞‘car’。該指示數(shù)據(jù)的修正可有兩種結(jié)果,一種為執(zhí)行該指示數(shù)據(jù)的內(nèi)容,即相應(yīng)的跳躍信號(hào)為要求有限狀態(tài)機(jī)510丟棄一些不相關(guān)的數(shù)據(jù);另一種為略過該指示數(shù)據(jù),即相應(yīng)的跳躍信號(hào)內(nèi)容為空。
有限狀態(tài)機(jī)510根據(jù)數(shù)據(jù)塊信號(hào)以及修正后的指示數(shù)據(jù)內(nèi)容,即跳躍信號(hào)來丟棄該壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)。該分析器512和有限狀態(tài)機(jī)510一起構(gòu)成丟棄裝置,用于根據(jù)該指示數(shù)據(jù)將該壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)丟棄。
圖6是根據(jù)本發(fā)明一個(gè)實(shí)施例的解壓縮方法的流程圖,首先接收壓縮的XML數(shù)據(jù)(步驟S602),該壓縮的XML數(shù)據(jù)包含指示數(shù)據(jù)塊。
然后解壓縮該壓縮的XML數(shù)據(jù),包括對(duì)該壓縮的XML數(shù)據(jù)進(jìn)行塊首解碼(步驟S604),從而找到一個(gè)空數(shù)據(jù)塊,并產(chǎn)生數(shù)據(jù)塊信號(hào),例如對(duì)該數(shù)據(jù)塊1進(jìn)行塊首解碼,就產(chǎn)生數(shù)據(jù)塊1的數(shù)據(jù)塊信號(hào)。
對(duì)指示數(shù)據(jù)塊進(jìn)行檢測(cè)(步驟S606),如檢測(cè)到指示數(shù)據(jù)塊,例如對(duì)數(shù)據(jù)塊1的內(nèi)容進(jìn)行塊首解碼,得知該數(shù)據(jù)塊是空數(shù)據(jù)塊,那么說明該數(shù)據(jù)塊是指示數(shù)據(jù)塊,則就從數(shù)據(jù)塊1的塊首獲得指示數(shù)據(jù)的內(nèi)容(步驟S610),例如‘C’。
如在步驟S606中未檢測(cè)到指示數(shù)據(jù)塊,則對(duì)下一個(gè)數(shù)據(jù)塊即數(shù)據(jù)塊2進(jìn)行檢測(cè),得知數(shù)據(jù)塊2不是指示數(shù)據(jù)塊,那么就對(duì)其進(jìn)行霍夫曼解碼(步驟S612),再進(jìn)行LZ77解碼(步驟S614),獲得數(shù)據(jù)塊2的數(shù)據(jù)。
然后,根據(jù)指示數(shù)據(jù)的內(nèi)容和分析器的內(nèi)部狀態(tài),即一個(gè)特定的條件,來判斷是否要產(chǎn)生跳躍信號(hào)(步驟S616),亦即根據(jù)一個(gè)特定的條件修正該指示數(shù)據(jù)的內(nèi)容。該特定的條件是一個(gè)特定的應(yīng)用,即分析器的內(nèi)部狀態(tài)需要的數(shù)據(jù),例如單詞‘car’,然后根據(jù)指示數(shù)據(jù)‘C’,對(duì)指示數(shù)據(jù)的內(nèi)容進(jìn)行修正,即產(chǎn)生一個(gè)跳躍信號(hào),要求直接跳到“C”部分。
接下來,根據(jù)數(shù)據(jù)塊信號(hào)和跳躍信號(hào)丟棄不相關(guān)的數(shù)據(jù)塊(步驟S618),例如正在尋找單詞“Car”,那么就判斷出“Car”是以字母‘C’開頭后的單詞,出現(xiàn)在后面的數(shù)據(jù)塊中,所以產(chǎn)生跳越信號(hào),將不相關(guān)的數(shù)據(jù)塊,即直到數(shù)據(jù)塊3的數(shù)據(jù)塊信號(hào)出現(xiàn)前的所有數(shù)據(jù)塊2的數(shù)據(jù)(“B”部分)丟棄。由于解壓縮后的XML數(shù)據(jù)不是塊結(jié)構(gòu),故需根據(jù)數(shù)據(jù)塊信號(hào)來控制每一個(gè)被丟棄的數(shù)據(jù)塊。
同理,按照前述方法,從數(shù)據(jù)塊3的塊首獲得指示數(shù)據(jù)內(nèi)容‘E’(610),同時(shí)獲得數(shù)據(jù)塊4的數(shù)據(jù)(步驟S614),然后根據(jù)指示數(shù)據(jù)‘E’和正在尋找的單詞“Car”進(jìn)行判斷(步驟S616),由于單詞“Car”是在以字母‘E’開頭的單詞之前,所以,就不產(chǎn)生跳越信號(hào),然后對(duì)相關(guān)的數(shù)據(jù)塊即數(shù)據(jù)塊4進(jìn)行分析(步驟S620),最后獲得分析后的XML數(shù)據(jù),例如單詞“Car”。
這里對(duì)解壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)進(jìn)行丟棄,是根據(jù)修正后的指示數(shù)據(jù)內(nèi)容即跳躍信號(hào)來執(zhí)行的。
如果在步驟S616中的判斷結(jié)果為否定,說明不需要進(jìn)行丟棄,則,直接對(duì)相關(guān)的數(shù)據(jù)塊進(jìn)行分析(步驟S620),并獲得分析后的XML數(shù)據(jù)(步驟S622)。
圖7是根據(jù)本發(fā)明另一個(gè)實(shí)施例的壓縮裝置的結(jié)構(gòu)示意圖,該壓縮裝置包括一個(gè)分析器702,一個(gè)壓縮器100。
分析器702還包括一個(gè)定位裝置704,用于得到一組無用的數(shù)據(jù)作為指示數(shù)據(jù)標(biāo)識(shí),同時(shí)還作為接收裝置,接收XML數(shù)據(jù);一個(gè)數(shù)據(jù)插入裝置,用于在特定數(shù)量的指示數(shù)據(jù)標(biāo)識(shí)后插入相應(yīng)的指示數(shù)據(jù),將剩下的指示數(shù)據(jù)標(biāo)志以另一組無用的數(shù)據(jù)代替。無用的數(shù)據(jù)是下述數(shù)據(jù)之一制表標(biāo)記、空格標(biāo)記、回車標(biāo)記等等。
壓縮器100,用于對(duì)插入指示數(shù)據(jù)的XML數(shù)據(jù)進(jìn)行壓縮,得到壓縮的XML數(shù)據(jù)。
圖8是根據(jù)本發(fā)明另一個(gè)實(shí)施例的壓縮方法的流程圖,首先接收XML數(shù)據(jù)(步驟S802),例如XML數(shù)據(jù)是<Entry><Word>→Aback</Word><Definition>saldiufhcnw</Definition></Entry>...
<Entry><Word>→Car</Word><Definition>lzidnuvgrvgs</Definition></Entry>...
然后對(duì)XML數(shù)據(jù)進(jìn)行SAX分析,找到XML數(shù)據(jù)中一組沒用的字符,例如可以是一組20個(gè)‘→’(制表標(biāo)記),還可以是空格標(biāo)記、回車標(biāo)記等等。將這一組沒用的字符‘→’作為指示數(shù)據(jù)標(biāo)識(shí)(步驟S806)。
將特定數(shù)量的指示數(shù)據(jù)標(biāo)識(shí)‘→’,如14個(gè),后插入指示數(shù)據(jù)(步驟S808),例如‘C’。再將剩下的‘→’用其他沒用的數(shù)據(jù)替代(步驟S809),例如用空格替代。獲得的XML數(shù)據(jù)為<Entry><Word>→<!--C->Aback</Word><Definition>saldiufhcnw</Definition></Entry>...
<Entry><Word>→<!--E-->Car</Word><Definition>lzidnuvgrvgs</Definition></Entry>...
這里,還可以對(duì)XML數(shù)據(jù)進(jìn)行分析,以得到一組無用的數(shù)據(jù),例如‘→’(制表標(biāo)記);再將特定數(shù)量的無用數(shù)據(jù)轉(zhuǎn)換為指示數(shù)據(jù)包;將所述的指示數(shù)據(jù)放入所述的指示數(shù)據(jù)包,獲得的XML數(shù)據(jù)如上所述。
然后再對(duì)包含指示數(shù)據(jù)的XML數(shù)據(jù)進(jìn)行壓縮,也就是對(duì)包含指示數(shù)據(jù)的XML數(shù)據(jù)進(jìn)行LZ77編碼(步驟S810);對(duì)經(jīng)過LZ77編碼的XML數(shù)據(jù)進(jìn)行霍夫曼編碼(步驟S812);將經(jīng)過霍夫曼編碼的XML數(shù)據(jù)打包成數(shù)個(gè)數(shù)據(jù)塊(步驟S814);最后獲得壓縮的XML數(shù)據(jù)(步驟S816)。
這里所述指示數(shù)據(jù)和數(shù)據(jù)塊標(biāo)識(shí)在XML數(shù)據(jù)被壓縮以前插入XML數(shù)據(jù)。這里插入的指示數(shù)據(jù)和數(shù)據(jù)塊標(biāo)識(shí)對(duì)于解壓縮裝置是明顯的,也就是解壓縮裝置將利用它們來忽略一些數(shù)據(jù),這樣就使解壓縮裝置的功能更加強(qiáng)大。
圖9是根據(jù)本發(fā)明另一個(gè)實(shí)施例中解壓縮裝置的示意圖,該解壓縮裝置包括一個(gè)解壓縮器200,一個(gè)檢測(cè)提取裝置904,一個(gè)有限狀態(tài)機(jī)510和一個(gè)分析器512。
解壓縮器200,用于對(duì)壓縮后的XML數(shù)據(jù)進(jìn)行解壓,該壓縮后的XML數(shù)據(jù)含有指示數(shù)據(jù),其中指示數(shù)據(jù)是插入于原始的XML數(shù)據(jù)中,同時(shí)解壓縮器200作為接收裝置,接收壓縮后的XML數(shù)據(jù)。
檢測(cè)提取裝置904,用于在解壓縮后的XML數(shù)據(jù)中找到一組指示數(shù)據(jù)標(biāo)識(shí),根據(jù)該指示數(shù)據(jù)標(biāo)識(shí)獲得該指示數(shù)據(jù),并將該指示數(shù)據(jù)發(fā)送給分析器512,同時(shí)檢測(cè)提取裝置904產(chǎn)生指示數(shù)據(jù)標(biāo)識(shí)信號(hào),并該將指示數(shù)據(jù)標(biāo)識(shí)信號(hào)發(fā)送給有限狀態(tài)機(jī)510。解壓縮器200和檢測(cè)提取裝置904一起可構(gòu)成數(shù)據(jù)處理裝置。
分析器512根據(jù)一個(gè)特定的條件修正該指示數(shù)據(jù)的內(nèi)容,該特定的條件是一個(gè)特定的應(yīng)用,即分析器512所需要的數(shù)據(jù)。然后對(duì)該指示數(shù)據(jù)的內(nèi)容進(jìn)行修正,產(chǎn)生相應(yīng)的跳躍信號(hào),并發(fā)送給有限狀態(tài)機(jī)510。
有限狀態(tài)機(jī)510根據(jù)指示數(shù)據(jù)標(biāo)識(shí)信號(hào)以及修正后的指示數(shù)據(jù)內(nèi)容即跳躍信號(hào),來丟棄該壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)。該分析器512和有限狀態(tài)機(jī)510一起構(gòu)成丟棄裝置,用于根據(jù)該指示數(shù)據(jù)將該壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)丟棄。
圖10是根據(jù)本發(fā)明另一個(gè)實(shí)施例的解壓縮方法的流程圖,首先接收壓縮的XML數(shù)據(jù)(步驟S1002),然后對(duì)壓縮后的XML數(shù)據(jù)進(jìn)行解壓縮(步驟S1004),得到解壓縮后的XML數(shù)據(jù)。
從所述的解壓縮后的XML數(shù)據(jù)獲得一個(gè)指示數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù),具體步驟如下對(duì)XML數(shù)據(jù)中的指示數(shù)據(jù)標(biāo)識(shí),例如“→”,進(jìn)行檢測(cè)(步驟S1006),如果檢測(cè)到,那么就產(chǎn)生指示數(shù)據(jù)標(biāo)識(shí)信號(hào)(步驟S1008)。
提取該數(shù)據(jù)塊標(biāo)識(shí)后的指示數(shù)據(jù)(步驟S1009),例如“C”。
然后,根據(jù)指示數(shù)據(jù)的內(nèi)容和分析器的內(nèi)部狀態(tài),即一個(gè)特定的條件,來判斷是否要產(chǎn)生跳躍信號(hào)(步驟S1010),即為根據(jù)一個(gè)特定的條件修正該指示數(shù)據(jù)的內(nèi)容。也就是根據(jù)所述指示數(shù)據(jù)“C”以及一個(gè)特定應(yīng)用,即分析器的內(nèi)部狀態(tài)所需要的數(shù)據(jù),判斷是否產(chǎn)生一個(gè)跳躍信號(hào)(skip signal)。例如正在尋找單詞‘car’,那么就判斷出“Car”是以字母‘C’開頭后的單詞,出現(xiàn)在后面的數(shù)據(jù)塊中,所以產(chǎn)生跳越信號(hào),要求將不相關(guān)的數(shù)據(jù)丟棄。
接下來,如果在步驟S1010中產(chǎn)生一個(gè)要求丟棄數(shù)據(jù)的跳躍信號(hào),則根據(jù)數(shù)據(jù)塊信號(hào)和跳躍信號(hào)丟棄不相關(guān)的數(shù)據(jù)塊(步驟S1012),即將直到下一個(gè)指示數(shù)據(jù)標(biāo)識(shí)信號(hào)出現(xiàn)前的所有數(shù)據(jù)丟棄,并回到步驟S1006繼續(xù)進(jìn)行檢測(cè)判斷。
同理,按照前述方法在檢測(cè)到下一個(gè)數(shù)據(jù)塊標(biāo)識(shí)時(shí),即下一個(gè)“→”,就獲得其后面的指示數(shù)據(jù)內(nèi)容‘E’(步驟S1009)。然后根據(jù)所述指示數(shù)據(jù)“C”以及一個(gè)特定應(yīng)用,即分析器的內(nèi)部狀態(tài)所需要的數(shù)據(jù),判斷是否產(chǎn)生一個(gè)跳躍信號(hào)(skip signal)(步驟S1010)。例如正在尋找單詞‘car’,那么就判斷出“Car”是以字母‘E’開頭后的單詞之前,所以就不產(chǎn)生跳越信號(hào),然后就對(duì)相關(guān)的XML數(shù)據(jù)塊進(jìn)行分析(步驟S1014),最后獲得分析后的XML數(shù)據(jù)(步驟S1016),例如單詞‘car’。
這里對(duì)應(yīng)的解壓縮后的XML數(shù)據(jù)丟棄,是根據(jù)修正后的指示數(shù)據(jù)內(nèi)容,即跳躍信號(hào)來執(zhí)行丟棄的。
如果在步驟S1006或步驟S1010的判斷結(jié)果是否定的,則直接對(duì)相關(guān)的數(shù)據(jù)塊進(jìn)行分析(步驟S1014),并獲得分析后的XML數(shù)據(jù)(步驟S1016)。
從本發(fā)明實(shí)施例中可以看出,通過避免分析XML輸入數(shù)據(jù)中不相關(guān)的數(shù)據(jù)塊,從而可以加速分析的過程,這樣就使在接收端的工作加速;由于只對(duì)XML數(shù)據(jù)中相關(guān)部分進(jìn)行處理,那么就可以處理較大的XML數(shù)據(jù)輸入;所有要傳輸?shù)腦ML信息就可以被分割成大XML數(shù)據(jù)中的一小塊數(shù)據(jù),這要遠(yuǎn)比處理小XML數(shù)據(jù)中一大塊的數(shù)據(jù)好的多,因?yàn)榍罢呤褂肸lib進(jìn)行壓縮比后者要好的多,所以可節(jié)約帶寬。
本發(fā)明由于對(duì)較大XML輸入數(shù)據(jù)進(jìn)行壓縮,所以可以有更好的壓縮。由于解壓縮裝置不必等待信息的重傳,所以在解壓縮裝置中的存儲(chǔ)器中壓縮的XML數(shù)據(jù)可以提供對(duì)信息較快的訪問。
本發(fā)明插入指示數(shù)據(jù)可與現(xiàn)有的壓縮標(biāo)準(zhǔn)/方案兼容,從而使得壓縮后的XML數(shù)據(jù)與與現(xiàn)有的解壓縮裝置相兼容。
本發(fā)明將指示數(shù)據(jù)和XML數(shù)據(jù)作為一體,所以指示數(shù)據(jù)總是可以與XML數(shù)據(jù)的內(nèi)容相匹配,即使在內(nèi)容更新的情況下也是如此。本發(fā)明也不需要另外單獨(dú)給指示數(shù)據(jù)一個(gè)傳輸信道,這就節(jié)約了在一個(gè)單獨(dú)信道傳輸數(shù)據(jù)帶來的多余開銷,而且插入XML數(shù)據(jù)時(shí),指示數(shù)據(jù)也是被Zlib進(jìn)行壓縮。
雖然經(jīng)過對(duì)本發(fā)明結(jié)合具體實(shí)施例進(jìn)行描述,對(duì)于在本技術(shù)領(lǐng)域熟練的人士,根據(jù)上文的敘述作出的許多替代、修改與變化是顯而易見的。因此,當(dāng)這樣的替代、修改和變化落入附后的權(quán)利要求的精神和范圍之內(nèi)時(shí),應(yīng)該被包括在本發(fā)明中。
權(quán)利要求
1.一種XML數(shù)據(jù)的壓縮方法,包括步驟a.接收XML數(shù)據(jù);b.對(duì)XML數(shù)據(jù)進(jìn)行編碼;c.對(duì)編碼后的XML數(shù)據(jù)進(jìn)行塊打包;d.插入指示數(shù)據(jù)到塊打包后的XML數(shù)據(jù)塊之間,以得到壓縮后的XML數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其中所述的指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊中。
3.如權(quán)利要求2所述的方法,其中所述的指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊的塊首。
4.一種XML數(shù)據(jù)的壓縮方法,包括步驟a.接收XML數(shù)據(jù);b.插入指示數(shù)據(jù)到XML數(shù)據(jù)中,該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù);c.對(duì)含有指示數(shù)據(jù)的XML數(shù)據(jù)進(jìn)行壓縮,以得到壓縮后的XML數(shù)據(jù)。
5.如權(quán)利要求4所述的方法,其中步驟b包括步驟對(duì)所述的XML數(shù)據(jù)進(jìn)行分析,以得到一組無用的數(shù)據(jù)作為指示數(shù)據(jù)標(biāo)志;在特定數(shù)量的指示數(shù)據(jù)標(biāo)志后插入相應(yīng)的指示數(shù)據(jù);將剩下的指示數(shù)據(jù)標(biāo)志以另一組無用的數(shù)據(jù)代替。
6.如權(quán)利要求4所述的方法,其中步驟b包括步驟對(duì)所述的XML數(shù)據(jù)進(jìn)行分析,以得到一組無用的數(shù)據(jù);轉(zhuǎn)換特定數(shù)量的所述無用數(shù)據(jù)為指示數(shù)據(jù)包;將所述的指示數(shù)據(jù)放入所述的指示數(shù)據(jù)包。
7.如權(quán)利要求5或6所述的方法,所述無用的數(shù)據(jù)是下述數(shù)據(jù)之一制表標(biāo)記,空格標(biāo)記和回車標(biāo)記。
8.一種壓縮后的XML數(shù)據(jù)的解壓縮方法,包括步驟a.接收壓縮后的XML數(shù)據(jù),該壓縮后的XML數(shù)據(jù)含有指示數(shù)據(jù);b.解壓縮該壓縮后的XML數(shù)據(jù),其中該步驟包括步驟(i)獲得所述的指示數(shù)據(jù);c.根據(jù)該指示數(shù)據(jù)將解壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)丟棄。
9.如權(quán)利要求8所述的方法,其中所述的指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊中。
10.如權(quán)利要求8所述的解壓縮方法,其中步驟b中的步驟i包括步驟對(duì)所述的壓縮后的XML數(shù)據(jù)進(jìn)行塊首解碼,從而找到一個(gè)空數(shù)據(jù)塊;從該空數(shù)據(jù)塊的塊首中獲得該指示數(shù)據(jù)。
11.如權(quán)利要求8所述的解壓縮方法,還包括步驟根據(jù)一個(gè)特定的條件修正該指示數(shù)據(jù)的內(nèi)容,其中步驟c根據(jù)修正后的指示數(shù)據(jù)內(nèi)容來執(zhí)行。
12.如權(quán)利要求8所述的解壓縮方法,所述丟棄的XML數(shù)據(jù)是對(duì)應(yīng)于所述壓縮后的XML數(shù)據(jù)中特定的數(shù)據(jù)塊。
13.一種壓縮后的XML數(shù)據(jù)的解壓縮方法,包括步驟a.解壓縮該壓縮后的XML數(shù)據(jù),以得到解壓縮后的XML數(shù)據(jù);b.從所述的解壓縮后的XML數(shù)據(jù)獲得一個(gè)指示數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù);c.根據(jù)該指示數(shù)據(jù)將對(duì)應(yīng)的解壓縮后的XML數(shù)據(jù)丟棄。
14.如權(quán)利要求13所述的解壓縮方法,其中所述的指示數(shù)據(jù)是插入于原始的XML數(shù)據(jù)中的。
15.如權(quán)利要求13所述的解壓縮方法,其中步驟b包括步驟在所述的XML數(shù)據(jù)找到一個(gè)指示數(shù)據(jù)標(biāo)志;根據(jù)該指示數(shù)據(jù)標(biāo)志獲得該指示數(shù)據(jù)。
16.如權(quán)利要求13所述的解壓縮方法,還包括步驟根據(jù)一個(gè)特定的條件修正該指示數(shù)據(jù)的內(nèi)容,其中步驟c根據(jù)修正后的指示數(shù)據(jù)內(nèi)容來執(zhí)行。
17.一種XML數(shù)據(jù)的壓縮裝置,包括一個(gè)接收裝置,用于接收XML數(shù)據(jù);一個(gè)編碼裝置,用于對(duì)XML數(shù)據(jù)進(jìn)行編碼;一個(gè)塊打包裝置,用于對(duì)編碼后的XML數(shù)據(jù)進(jìn)行塊打包;一個(gè)插入指示數(shù)據(jù)塊裝置,用于插入指示數(shù)據(jù)到塊打包后的XML數(shù)據(jù)之間,以得到壓縮后的XML數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù)。
18.如權(quán)利要求17所述的裝置,所述的指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊中。
19.一種XML數(shù)據(jù)的壓縮裝置,包括一個(gè)接收裝置,用于接收XML數(shù)據(jù);一個(gè)插入指示數(shù)據(jù)包裝置,用于將指示數(shù)據(jù)插入到XML數(shù)據(jù)中,該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù);一個(gè)壓縮裝置,用于對(duì)插入指示數(shù)據(jù)的XML數(shù)據(jù)進(jìn)行壓縮,以得到壓縮后的XML數(shù)據(jù)。
20.如權(quán)利要求19所述的裝置,其中所述的插入指示數(shù)據(jù)包裝置包括一個(gè)定位裝置,用于對(duì)所述的XML數(shù)據(jù)進(jìn)行分析,以得到一組無用的數(shù)據(jù)作為指示數(shù)據(jù)標(biāo)志;一個(gè)數(shù)據(jù)插入裝置,用于在特定數(shù)量的指示數(shù)據(jù)標(biāo)志后插入相應(yīng)的指示數(shù)據(jù),并將剩下的指示數(shù)據(jù)標(biāo)志以另一組無用的數(shù)據(jù)代替。
21.如權(quán)利要求20所述的裝置,所述無用的數(shù)據(jù)是下述數(shù)據(jù)之一制表標(biāo)記,空格標(biāo)記和回車標(biāo)記。
22.一種壓縮后的XML數(shù)據(jù)的解壓縮裝置,包括一個(gè)接收裝置,用于接收壓縮后的XML數(shù)據(jù),該壓縮后的XML數(shù)據(jù)含有指示數(shù)據(jù);一個(gè)數(shù)據(jù)處理裝置,用于解壓縮該壓縮后的XML數(shù)據(jù),并獲得所述的指示數(shù)據(jù);一個(gè)丟棄裝置,用于根據(jù)該指示數(shù)據(jù)將該壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)丟棄。
23.如權(quán)利要求22所述的裝置,其中所述的指示數(shù)據(jù)是位于一個(gè)空數(shù)據(jù)塊中。
24.如權(quán)利要求22所述的裝置,其中所述的數(shù)據(jù)處理裝置包括一個(gè)空數(shù)據(jù)塊檢測(cè)裝置,用于對(duì)所述的壓縮后的XML數(shù)據(jù)進(jìn)行塊首解碼,從而找到一個(gè)空數(shù)據(jù)塊;一個(gè)指示數(shù)據(jù)獲得裝置,用于從該空數(shù)據(jù)塊的塊首中獲得該指示數(shù)據(jù)。
25.如權(quán)利要求22所述的裝置,還包括一個(gè)分析器,用于根據(jù)一個(gè)特定的條件修正該指示數(shù)據(jù)的內(nèi)容,其中所述的丟棄裝置根據(jù)修正后的指示數(shù)據(jù)內(nèi)容來執(zhí)行。
26.如權(quán)利要求24所述的裝置,其中所述的指示數(shù)據(jù)是插入于原始的XML數(shù)據(jù)中。
27.如權(quán)利要求24所述的裝置,其中所述的指示數(shù)據(jù)是從解壓縮后的XML數(shù)據(jù)中獲得的。
28.如權(quán)利要求24所述的裝置,所述的數(shù)據(jù)處理裝置包括一個(gè)檢測(cè)提取裝置,用于在解壓縮后的XML數(shù)據(jù)中找到一組指示數(shù)據(jù)標(biāo)志,并根據(jù)該指示數(shù)據(jù)標(biāo)志獲得該指示數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種XML數(shù)據(jù)壓縮與解壓縮的方法和裝置,該壓縮方法是將指示數(shù)據(jù)插入XML數(shù)據(jù),該指示數(shù)據(jù)用于識(shí)別特定的數(shù)據(jù),獲得壓縮后的XML數(shù)據(jù)。所述解壓縮方法對(duì)壓縮后的XML數(shù)據(jù)進(jìn)行解壓縮,所述壓縮后的XML數(shù)據(jù)含有指示數(shù)據(jù),并根據(jù)該指示數(shù)據(jù),將該解壓縮后的對(duì)應(yīng)的XML數(shù)據(jù)丟棄。本發(fā)明避免了對(duì)不相關(guān)的部分XML數(shù)據(jù)進(jìn)行分析,從而加速資源受限(如小存儲(chǔ)能力)的解壓縮裝置的處理過程。
文檔編號(hào)G06F17/30GK1902827SQ200480039441
公開日2007年1月24日 申請(qǐng)日期2004年12月17日 優(yōu)先權(quán)日2003年12月30日
發(fā)明者A·莫里爾 申請(qǐng)人:皇家飛利浦電子股份有限公司