本申請涉及計算機處理的技術(shù)領(lǐng)域,特別是涉及一種可擴展標(biāo)記語言XML文檔的壓縮方法、一種可擴展標(biāo)記語言XML文檔的解壓方法、一種可擴展標(biāo)記語言XML文檔的壓縮裝置和一種可擴展標(biāo)記語言XML文檔的解壓裝置。
背景技術(shù):
XML(Extensible Markup Language,可擴展標(biāo)記語言)文檔可以對數(shù)據(jù)進行結(jié)構(gòu)化處理,從而能夠在部門、客戶和供應(yīng)商之間進行交換,實現(xiàn)動態(tài)內(nèi)容生成,企業(yè)集成和應(yīng)用開發(fā)。
XML文檔可以使用戶能夠更準確的搜索,更方便的傳送應(yīng)用組件,更好的描述一些事物,如電子商務(wù)交易等。
為方便傳輸或存儲,通常對XML文檔進行壓縮。
由于XML文檔是一個文本文檔,通常壓縮文本文檔的方法主要是GZIP壓縮,GZIP對于需要壓縮的文檔,首先使用LZ77算法的一個變種進行壓縮,對得到的結(jié)果再使用Huffman編碼的方法進行壓縮。
可見,GZIP壓縮是一個通用的文本壓縮方法,因此普遍性高,也就是任意一個文本文檔都可以使用GZIP壓縮,但是,這種壓縮方法壓縮操作復(fù)雜,耗時較高,應(yīng)用在XML文檔壓縮時,壓縮后的XML文檔的體積依然較大,壓縮效率較低。
由于XML文檔的體積較大,因此,在傳輸或存儲壓縮后的XML文檔時,會消耗較大的帶寬或占用較多的存儲空間。
在解壓縮時,需要對Huffman編碼和LZ77算法進行反向解壓縮,解壓操作復(fù)雜,耗時也較高。
技術(shù)實現(xiàn)要素:
鑒于上述問題,提出了本申請實施例以便提供一種克服上述問題或者至 少部分地解決上述問題的一種針對可擴展標(biāo)記語言XML文檔的壓縮方法、一種針對可擴展標(biāo)記語言XML文檔的解壓方法和相應(yīng)的一種針對可擴展標(biāo)記語言XML文檔的壓縮裝置、一種針對可擴展標(biāo)記語言XML文檔的解壓裝置。
為了解決上述問題,本申請實施例公開了一種可擴展標(biāo)記語言XML文檔的壓縮方法,包括:
從原始的可擴展標(biāo)記語言XML文檔中讀取文檔參數(shù);
將所述文檔參數(shù)映射為映射碼;
將所述映射碼替換所述文檔參數(shù),獲得壓縮的可擴展標(biāo)記語言XML文檔。
可選地,還包括:
將所述文檔參數(shù)與所述映射碼之間的映射關(guān)系嵌入所述可擴展標(biāo)記語言XML文檔中。
可選地,還包括:
傳輸和/或存儲壓縮的可擴展標(biāo)記語言XML文檔。
可選地,所述文檔參數(shù)包括元素和/或?qū)傩浴?/p>
可選地,所述將所述文檔參數(shù)映射為映射碼的步驟包括:
對所述文檔參數(shù)進行去重處理;
將去重處理之后的文檔參數(shù)映射為唯一的映射碼,所述映射碼的字符串長度小于或等于所述文檔參數(shù)的字符串長度。
可選地,所述將去重處理之后的文檔參數(shù)映射為唯一的映射碼的步驟包括:
從去重處理之后的文檔參數(shù)提取候選字符串;
判斷所述候選字符串是否與已映射的映射碼相同;
當(dāng)不相同時,確認所述候選字符串為所述文檔參數(shù)的映射碼;
當(dāng)相同時,從所述文檔參數(shù)中提取包含所述候選字符串的目標(biāo)字符串,作為新的候選字符串,返回執(zhí)行所述判斷所述候選字符串是否與已映射的映 射碼相同的步驟。
可選地,所述將去重處理之后的文檔參數(shù)映射為唯一的映射碼的步驟還包括:
按照字符串長度和/或字符順序?qū)θブ靥幚碇蟮奈臋n參數(shù)進行排序。
本申請實施例還公開了一種可擴展標(biāo)記語言XML文檔的解壓方法,包括:
獲取壓縮的可擴展標(biāo)記語言XML文檔,壓縮的可擴展標(biāo)記語言XML文檔中包括映射碼;
查找壓縮的可擴展標(biāo)記語言XML文檔的、映射碼與文檔參數(shù)之間的映射關(guān)系;
按照所述映射關(guān)系將所述文檔參數(shù)替換所述映射碼,獲得原始的可擴展標(biāo)記語言XML文檔。
可選地,還包括:
當(dāng)所述映射關(guān)系嵌在壓縮的可擴展標(biāo)記語言XML文檔中時,刪除所述映射關(guān)系。
可選地,所述獲取壓縮的可擴展標(biāo)記語言XML文檔的步驟包括:
讀取在先存儲的壓縮的可擴展標(biāo)記語言XML文檔;
或者,
接收傳輸?shù)絹淼膲嚎s的可擴展標(biāo)記語言XML文檔。
本申請實施例還公開了一種可擴展標(biāo)記語言XML文檔的壓縮裝置,包括:
文檔參數(shù)讀取模塊,用于從原始的可擴展標(biāo)記語言XML文檔中讀取文檔參數(shù);
映射模塊,用于將所述文檔參數(shù)映射為映射碼;
文檔參數(shù)替換模塊,用于將所述映射碼替換所述文檔參數(shù),獲得壓縮的可擴展標(biāo)記語言XML文檔。
可選地,還包括:
映射關(guān)系嵌入模塊,用于將所述文檔參數(shù)與所述映射碼之間的映射關(guān)系嵌入所述可擴展標(biāo)記語言XML文檔中。
可選地,還包括:
傳輸模塊,用于傳輸壓縮的可擴展標(biāo)記語言XML文檔;
和/或,
存儲模塊,用于存儲壓縮的可擴展標(biāo)記語言XML文檔。
可選地,所述文檔參數(shù)包括元素和/或?qū)傩浴?/p>
可選地,所述映射模塊包括:
去重子模塊,用于對所述文檔參數(shù)進行去重處理;
去重映射子模塊,用于將去重處理之后的文檔參數(shù)映射為唯一的映射碼,所述映射碼的字符串長度小于或等于所述文檔參數(shù)的字符串長度。
可選地,所述去重映射子模塊包括:
候選字符串提取單元,用于從去重處理之后的文檔參數(shù)提取候選字符串;
映射碼判斷單元,用于判斷所述候選字符串是否與已映射的映射碼相同;當(dāng)不相同時,調(diào)用映射碼確認單元,當(dāng)相同時,調(diào)用目標(biāo)字符串提取單元,返回調(diào)用映射碼判斷單元;
映射碼確認單元,用于確認所述候選字符串為所述文檔參數(shù)的映射碼;
目標(biāo)字符串提取單元,用于從所述文檔參數(shù)中提取包含所述候選字符串的目標(biāo)字符串,作為新的候選字符串。
可選地,所述去重映射子模塊還包括:
排序單元,用于按照字符串長度和/或字符順序?qū)θブ靥幚碇蟮奈臋n參數(shù)進行排序。
本申請實施例還公開了一種可擴展標(biāo)記語言XML文檔的解壓裝置,包括:
XML文檔獲取模塊,用于獲取壓縮的可擴展標(biāo)記語言XML文檔,壓縮 的可擴展標(biāo)記語言XML文檔中包括映射碼;
映射關(guān)系查找模塊,用于查找壓縮的可擴展標(biāo)記語言XML文檔的、映射碼與文檔參數(shù)之間的映射關(guān)系;
映射碼替換模塊,用于按照所述映射關(guān)系將所述文檔參數(shù)替換所述映射碼,獲得原始的可擴展標(biāo)記語言XML文檔。
可選地,還包括:
映射關(guān)系刪除模塊,用于在所述映射關(guān)系嵌在壓縮的可擴展標(biāo)記語言XML文檔中時,刪除所述映射關(guān)系。
可選地,所述XML文檔獲取模塊包括:
XML文檔讀取子模塊,用于讀取在先存儲的壓縮的可擴展標(biāo)記語言XML文檔;
或者,
XML文檔接收子模塊,用于接收傳輸?shù)絹淼膲嚎s的可擴展標(biāo)記語言XML文檔。
本申請實施例包括以下優(yōu)點:
本申請實施例通過對原始的XML文檔的文檔參數(shù)進行映射,將映射碼替換文檔參數(shù),實現(xiàn)壓縮,由于文檔參數(shù)很多情況下存在重復(fù),因此,替換之后可以大大減少XML文檔存儲的數(shù)據(jù)量,提高了壓縮效率,并且,映射操作簡單,減少了壓縮的耗時。
進而,在傳輸、存儲壓縮的XML文檔時,可以減少帶寬的消耗,或者,較少存儲空間的占用。
本申請實施例對文檔參數(shù)進行去重處理之后映射為唯一的映射碼,文檔參數(shù)的唯一性保證了映射碼的唯一性,從而保證兩者可以相互轉(zhuǎn)換,保證了壓縮之后恢復(fù)操作的準確性。
本申請實施例依次增大候選字符串的長度進行映射檢測,在保證映射碼的唯一性的同時,減少了映射碼的長度。
本申請實施例通過映射關(guān)系,將原始的文檔參數(shù)替換映射碼,映射操作 簡單,減少了解壓的耗時。
附圖說明
圖1是本申請的一種可擴展標(biāo)記語言XML文檔的壓縮方法實施例的步驟流程圖;
圖2是本申請實施例的一種XML文檔的結(jié)構(gòu)示例圖;
圖3是本申請的一種可擴展標(biāo)記語言XML文檔的解壓方法實施例的步驟流程圖;
圖4是本申請的一種可擴展標(biāo)記語言XML文檔的壓縮裝置實施例的結(jié)構(gòu)框圖;
圖5是本申請的一種可擴展標(biāo)記語言XML文檔的解壓裝置實施例的結(jié)構(gòu)框圖。
具體實施方式
為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式對本申請作進一步詳細的說明。
參照圖1,示出了本申請的一種可擴展標(biāo)記語言XML文檔的壓縮方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟101,從原始的可擴展標(biāo)記語言XML文檔中讀取文檔參數(shù);
在本申請實施例中,針對XML文檔的特性,設(shè)計了一套XML文檔通用的壓縮方法,可以較大幅度的壓縮XML文檔。
需要說明的是,XML文檔是一個文本文檔。
以下是一本書的XML文檔的示例:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T.Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
如圖2所示,XML文檔的文檔參數(shù)包括元素,其可以形成了一棵文檔樹,這棵樹從根部開始,并擴展到樹的最底端。
其中,父、子以及同胞等術(shù)語用于描述元素之間的關(guān)系。
具體而言,該元素包括根元素(如book store)是所有其他元素(如book、title、author、year、price)的父元素,相對而言,其他元素為該根元素的子元素。
相同層級上的子元素成為同胞(兄弟或姐妹,如title、author、year、price),所有元素均可擁有文本(如Harry Potter、J K.Rowling、2005、29.99)和屬性(如lang、category)。
在實際應(yīng)用中,若應(yīng)用在java語言編程的計算機中,則可以使用自帶的DOM和SAX技術(shù)可以解析XML文檔,讀取元素、屬性等文檔參數(shù)。
步驟102,將所述文檔參數(shù)映射為映射碼;
在XML文檔里,元素、屬性等文檔參數(shù)用于描述數(shù)據(jù),而它們是可以 自定義的,通常為了便于理解,都是使用相應(yīng)的英文。
例如,用book元素代表書,用title元素代表標(biāo)題等等,一般無特別的限制,這也是XML文檔的特點之一。
但對于計算機來說,計算機不關(guān)心元素、屬性等文檔參數(shù)的具體意義,在傳輸、存儲等過程中可以將元素、屬性等文檔參數(shù)用其他更簡單的映射碼來表示,縮小元素、屬性等文檔參數(shù)的字符串?dāng)?shù)量,減小傳輸量、存儲量等等,而在使用的時候,再恢復(fù)回來供計算機使用即可。
需要說明的是,XML文檔的文本是用戶具體表達的數(shù)據(jù),一般不能進行篡改,本申請實施例可以不對其進行壓縮。
元素、屬性等文檔參數(shù)的壓縮,即單詞的壓縮,是用盡可能少的字符代表原始的元素、屬性等文檔參數(shù),即映射碼的字符串長度小于或等于文檔參數(shù)的字符串長度。
并且,可以恢復(fù)原始的元素、屬性等文檔參數(shù),通常滿足以下幾個要求:
1、代表元素、屬性等文檔參數(shù)的單詞(后文稱為映射碼)盡可能的短,占用的字符數(shù)量少,以降低壓縮率;
2、映射碼互相唯一,不重復(fù),避免混亂;
3、可以雙向選擇,即可以通過映射碼找到原始的元素、屬性等文檔參數(shù),也可以通過原始的元素、屬性等文檔參數(shù)找到映射碼。
因此,本申請實施例可以對文檔參數(shù)進行去重處理,將去重處理之后的文檔參數(shù)映射為唯一的映射碼。
在具體實現(xiàn)中,可以設(shè)置一個集合,判斷提取的元素、屬性等文檔參數(shù)是否在該集合中,若是,則忽略,若否,則放入該集合中,使得該集合中的元素、屬性等文檔參數(shù)具有唯一性,這樣就可以去除重復(fù)的元素、屬性等文檔參數(shù)。
例如,屬性是title,元素也是title,那么就會只有一個title在集合中。
本申請實施例對文檔參數(shù)進行去重處理之后映射為唯一的映射碼,文檔參數(shù)的唯一性保證了映射碼的唯一性,從而保證兩者可以相互轉(zhuǎn)換,保證了壓縮之后恢復(fù)操作的準確性。
進一步而言,可以按照字符串長度和/或字符順序?qū)θブ靥幚碇蟮奈臋n參數(shù)進行排序,字符串長度越短,排序越前,而排序越前,越優(yōu)先進行映射。
例如,book和year的字符串長度為4,title的字符串長度為5,因此,book和year可以排在title之前。
對同字符串長度的文檔參數(shù),可以按字符的順序進行排序,
例如,book和year的字符串長度相同,而book的第一個字符b比year的第一個字符y的順序要前,因此,book可以排在year之前。
對于排序好的的元素、屬性等文檔參數(shù),則可以逐個進行映射,獲得映射碼。
在一種映射方式中,從去重處理之后的文檔參數(shù)提取候選字符串;
判斷候選字符串是否與已映射的映射碼相同;
當(dāng)不相同時,確認候選字符串為文檔參數(shù)的映射碼;
當(dāng)相同時,從文檔參數(shù)中提取包含候選字符串的目標(biāo)字符串,作為新的候選字符串,返回判斷候選字符串是否與已映射的映射碼相同。
此種映射方式,在每次取文檔參數(shù)的子串(候選字符串)時,都會與之前生成的映射碼進行比較,相同時會繼續(xù)取子串(目標(biāo)字符串),直到取得唯一的子串為止,獲得唯一的映射碼。
并且,由于去重處理之后的文檔參數(shù)是唯一的,映射碼也是唯一的,就可以互相轉(zhuǎn)換了,是一個雙向的引用集合。
為了盡可能減少映射碼的字符的數(shù)量,通常,候選字符串初始為第一個字符,目標(biāo)字符串為由候選字符串與相鄰的一個字符組成的字符串。
假設(shè)已經(jīng)生成的映射碼集合為M,文檔參數(shù)為A,那么A的映射碼F為:
F(A)=Min(A.substr(0,[1-A.length])not in M)
即A的映射碼為,由第一個字符開始的所有子串中,在已經(jīng)生成的映射碼中不存在的最短子串。
例如,對于屬性book,從第一個字符b(即初始的候選字符串)開始,檢查是否已經(jīng)有這個映射碼,如果不存在映射碼b,就將b與book進行映射, 即b作為book的映射碼。
如果存在映射碼b,就取下一個子串bo(即目標(biāo)字符串),作為新的候選字符串,同樣檢查是否已經(jīng)有這個映射碼,直至生成映射碼為止。
理想情況下,第一個字符即可作為映射碼,最差的情況,是使用整個字符串作為映射碼。
由于去重處理已經(jīng)使得文檔參數(shù)本身具有唯一性,因此,其映射碼也具有唯一性。
應(yīng)用上述方式進行映射,按照字符串長度和/或字符順序?qū)θブ靥幚碇蟮奈臋n參數(shù)進行排序,可以在保證映射碼的唯一性的情況下,使得映射碼的字符盡量少。
例如,若同時對b與book進行映射,若先映射book,則會獲得映射碼b,再對b進行映射時,無法映射出唯一的映射碼;反之,若先映射b,則會獲得映射碼b,再對book進行映射時,獲得映射碼bo,保證兩者的唯一性。
對于上述書的XML文檔的示例,提取的元素、屬性如下:
bookstore
book
category
title
lang
author
year
price
排序之后的元素、屬性如下:
book
lang
year
price
title
author
category
bookstore
按照取最短子串的規(guī)則取映射碼如下:
book<->b
lang<->l
year<->y
price<->p
title<->t
author<->a
category<->c
bookstore<->bo
本申請實施例依次增大候選字符串的長度進行映射檢測,在保證映射碼的唯一性的同時,減少了映射碼的長度。
當(dāng)然,上述映射方法只是作為示例,在實施本申請實施例時,可以根據(jù)實際情況設(shè)置其他映射方法,可以保證映射關(guān)系的唯一性,以及映射碼的合法性即可,本發(fā)明實施例對此不加以限制。
例如,預(yù)先設(shè)定映射碼,如a-z、A-Z、0-9及其組合等等,對去重處理之后的文檔參數(shù)直接配置映射碼,為保證唯一性,映射碼僅配置一次,為保證映射碼的字符串長度盡可能少,優(yōu)先配置字符串長度為1的映射碼,如對排序第一的文檔參數(shù)配置映射碼a,對排序第二的文檔參數(shù)配置映射碼b,等等,配置完字符串長度為1映射碼的之后,配置字符串長度為2的映射碼,如此類推,如對排序第N的文檔參數(shù)配置映射碼a0、對排序第N+1的文檔參數(shù)配置映射碼a1等等。
另外,除了上述判斷處理方法外,本領(lǐng)域技術(shù)人員還可以根據(jù)實際需要采用其它判斷處理方法,本發(fā)明實施例對此也不加以限制。
步驟103,將所述映射碼替換所述文檔參數(shù),獲得壓縮的可擴展標(biāo)記語言XML文檔。
在本申請實施例中,將映射碼逐個進行替換,實現(xiàn)XML文檔的壓縮。
對于上述書的XML文檔的示例,將映射碼替換原始的文檔參數(shù),獲得的壓縮的XML文檔如下:
<bo>
<b c="COOKING">
<t l="en">Everyday Italian</t>
<a>Giada De Laurentiis</a>
<y>2005</y>
<p>30.00</p>
</b>
<b c="CHILDREN">
<t l="en">Harry Potter</t>
<a>J K.Rowling</a>
<y>2005</u>
<p>29.99</p>
</b>
<b c="WEB">
<t lang="en">Learning XML</t>
<a>Erik T.Ray</a>
<y>2003</y>
<p>39.95</p>
</b>
</bo>
可以看到,XML文檔有大幅的壓縮,尤其當(dāng)XML很大時,壓縮效果就更為明顯了,并且,XML結(jié)構(gòu)本身沒有被破壞,且元素、屬性等文檔參數(shù)與映射碼都具有唯一性,在應(yīng)用時可以進行恢復(fù)。
在實際應(yīng)用中,很多情況下需要重復(fù)對相同的對象進行定義,XML文檔會有大量重復(fù)的元素、屬性等文檔參數(shù)。
例如,云盤的接口基于XML文檔進行傳輸,該XML文檔通常需要定義存儲的文件,會存在大量的field(表征文件)、name(表征名稱)等元素、屬性等文檔參數(shù)。
又例如,在圖書館的數(shù)據(jù)庫中,該XML文檔通常需要定義存儲的書本,會存在大量的book(表征書本)、title(表征標(biāo)題)、author(表征作者)等元素、屬性等文檔參數(shù)。
此外,應(yīng)用XML文檔也會有大量重復(fù)的元素。
例如,基于XML的一些規(guī)范,如BPEL,BPMN,都有大量重復(fù)的元素。
基于XML的定義的通常都是元素的規(guī)范,而實際使用中,符合規(guī)范的元素都是很多的。
例如,電子商務(wù)的某個接口用于獲取商品列表,每個商品的描述是一樣的,如item(表征項目),有時候多達數(shù)百個。
應(yīng)用本申請實施例進行壓縮,假設(shè)原始的文檔參數(shù)的字符串長度為X,數(shù)量為Y,其映射碼的字符串長度為Z,則減少的數(shù)據(jù)量為(X-Z)*Y,XML文檔存儲的數(shù)據(jù)量就大大減少了,在XML文檔較大、文檔參數(shù)的重復(fù)數(shù)量較多時尤為明顯。
在某項實驗數(shù)據(jù)表明,平均20M的XML文檔,只經(jīng)過GZIP壓縮,可以壓縮到5M,但經(jīng)過本申請實施例的壓縮方法進行壓縮,可以壓縮到1M左右,文檔的體積有較大幅度的降低。
除此之外,文檔參數(shù)與映射碼之間的映射關(guān)系需要作為元信息,用于恢復(fù)。
在一種情況中,可以將文檔參數(shù)與映射碼之間的映射關(guān)系嵌入可擴展標(biāo)記語言XML文檔中。
對于上述書的XML文檔的示例,映射關(guān)系嵌入XML文檔如下:
<!—
book<->b
lang<->l
year<->y
price<->p
title<->t
author<->a
category<->c
bookstore<->bo
-->
<bo>
<b c="COOKING">
<t l="en">Everyday Italian</t>
<a>Giada De Laurentiis</a>
<y>2005</y>
<p>30.00</p>
</b>
<b c="CHILDREN">
<t l="en">Harry Potter</t>
<a>J K.Rowling</a>
<y>2005</u>
<p>29.99</p>
</b>
<b c="WEB">
<t lang="en">Learning XML</t>
<a>Erik T.Ray</a>
<y>2003</y>
<p>39.95</p>
</b>
</bo>
在此示例中,映射關(guān)系以“key<->value”(key為文檔參數(shù),value為映射碼)的形式進行記錄,以注解的形式嵌入XML文檔的頭部。
當(dāng)然,映射關(guān)系也可以以其他形式進行記錄,嵌入XML文檔的其他位置,甚至,可以以獨立的文件記錄,本申請實施例對此不加以限制。
在實際應(yīng)用中,很多開源的數(shù)據(jù)庫都是用XML文檔進行存儲的,某些電子商務(wù)平臺上接口的返回請求參數(shù)也是基于XML文檔的,等等。
在壓縮XML文檔之后,為保證壓縮有效,則可以對比原始的可擴展標(biāo)記語言XML文檔與壓縮的可擴展標(biāo)記語言XML文檔的體積大小。
若原始的可擴展標(biāo)記語言XML文檔比壓縮的可擴展標(biāo)記語言XML文檔的體積小,則可以認為壓縮有效,可以傳輸和/或存儲壓縮的可擴展標(biāo)記語言XML文檔。
若原始的可擴展標(biāo)記語言XML文檔比壓縮的可擴展標(biāo)記語言XML文檔的體積大,則可以認為壓縮無效,針對此可擴展標(biāo)記語言XML文檔,可以不應(yīng)用本申請實施例的壓縮方法進行壓縮。
需要說明的是,在傳輸和/或存儲之前,還可以采用預(yù)設(shè)的文本壓縮方式(如GZIP)對壓縮的可擴展標(biāo)記語言XML文檔進一步進行壓縮,進一步提高壓縮率。
本申請實施例通過對原始的XML文檔的文檔參數(shù)進行映射,將映射碼替換文檔參數(shù),實現(xiàn)壓縮,由于文檔參數(shù)很多情況下存在重復(fù),因此,替換之后可以大大減少XML文檔存儲的數(shù)據(jù)量,提高了壓縮效率,并且,映射操作簡單,減少了壓縮的耗時。
進而,在傳輸、存儲壓縮的XML文檔時,可以減少帶寬的消耗,或者,較少存儲空間的占用。
參照圖3,示出了本申請的一種可擴展標(biāo)記語言XML文檔的解壓方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟301,獲取壓縮的可擴展標(biāo)記語言XML文檔;
在具體實現(xiàn)中,若壓縮的XML文檔在先存儲在數(shù)據(jù)庫,則可以從數(shù)據(jù)庫讀取在先存儲的壓縮的可擴展標(biāo)記語言XML文檔;
若壓縮的XML文檔在先進行傳輸,則可以接收傳輸?shù)絹淼膲嚎s的可擴 展標(biāo)記語言XML文檔,等等。
在本申請實施例中,壓縮的可擴展標(biāo)記語言XML文檔中包括映射碼,該映射碼為由原始的文檔參數(shù)映射獲得。
例如,某本書的壓縮的XML文檔的示例如下:
<bo>
<b c="COOKING">
<t l="en">Everyday Italian</t>
<a>Giada De Laurentiis</a>
<y>2005</y>
<p>30.00</p>
</b>
<b c="CHILDREN">
<t l="en">Harry Potter</t>
<a>J K.Rowling</a>
<y>2005</u>
<p>29.99</p>
</b>
<b c="WEB">
<t lang="en">Learning XML</t>
<a>Erik T.Ray</a>
<y>2003</y>
<p>39.95</p>
</b>
</bo>
其中,b、l、y、p、t、a、c、bo均為映射碼。
需要說明的是,在傳輸和/或存儲之前,采用了預(yù)設(shè)的文本壓縮方式(如GZIP)對壓縮的可擴展標(biāo)記語言XML文檔進一步進行壓縮,則在獲取壓縮的可擴展標(biāo)記語言XML文檔之后,可以按照該文本壓縮方式(如GZIP)對 壓縮的可擴展標(biāo)記語言XML文檔進進行解壓。
步驟302,查找壓縮的可擴展標(biāo)記語言XML文檔的、映射碼與文檔參數(shù)之間的映射關(guān)系;
若該映射關(guān)系可以嵌入XML文檔中(如頭部),則可以從XML文檔中(如頭部)讀取該映射關(guān)系。
例如,對于上述書的壓縮的XML文檔,映射關(guān)系嵌入XML文檔的示例如下:
<!—
book<->b
lang<->l
year<->y
price<->p
title<->t
author<->a
category<->c
bookstore<->bo
-->
<bo>
<b c="COOKING">
<t l="en">Everyday Italian</t>
<a>Giada De Laurentiis</a>
<y>2005</y>
<p>30.00</p>
</b>
<b c="CHILDREN">
<t l="en">Harry Potter</t>
<a>J K.Rowling</a>
<y>2005</u>
<p>29.99</p>
</b>
<b c="WEB">
<t lang="en">Learning XML</t>
<a>Erik T.Ray</a>
<y>2003</y>
<p>39.95</p>
</b>
</bo>
其中,映射關(guān)系以注解的形式嵌入XML文檔的頭部,包括:
book<->b
lang<->l
year<->y
price<->p
title<->t
author<->a
category<->c
bookstore<->bo
當(dāng)然,若該映射關(guān)系采用其他方式存儲,如應(yīng)用獨立的文件記錄,則可以采用相應(yīng)的方式進行讀取,如查找該獨立的文件,本申請實施例對此不加以限制。
步驟303,按照所述映射關(guān)系將所述文檔參數(shù)替換所述映射碼,獲得原始的可擴展標(biāo)記語言XML文檔。
在具體實現(xiàn)中,可以按照映射關(guān)系的記錄形式,查找壓縮XML文檔中映射碼的文檔參數(shù),將該文檔參數(shù)替換該映射碼,進行恢復(fù)。
例如,對于上述書的壓縮的XML文檔的示例,映射關(guān)系以“key<->value”的形式進行記錄,其中,key為文檔參數(shù),value為映射碼。
若需要對映射碼b恢復(fù),則可以查找到value為b的映射關(guān)系,即book <->b,將key,即book替換映射碼b。
則恢復(fù)后的書的XML的示例如下:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T.Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
需要說明的是,當(dāng)映射關(guān)系嵌在壓縮的可擴展標(biāo)記語言XML文檔中時,刪除映射關(guān)系,最終獲得原始的XML文檔,進行正常使用。
本申請實施例通過映射關(guān)系,將原始的文檔參數(shù)替換映射碼,映射操作簡單,減少了解壓的耗時。
需要說明的是,對于方法實施例,為了簡單描述,故將其都表述為一系 列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請實施例并不受所描述的動作順序的限制,因為依據(jù)本申請實施例,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本申請實施例所必須的。
參照圖4,示出了本申請的一種可擴展標(biāo)記語言XML文檔的壓縮裝置實施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
文檔參數(shù)讀取模塊401,用于從原始的可擴展標(biāo)記語言XML文檔中讀取文檔參數(shù);
映射模塊402,用于將所述文檔參數(shù)映射為映射碼;
文檔參數(shù)替換模塊403,用于將所述映射碼替換所述文檔參數(shù),獲得壓縮的可擴展標(biāo)記語言XML文檔。
在本申請的一個實施例中,該裝置還可以包括如下模塊:
映射關(guān)系嵌入模塊,用于將所述文檔參數(shù)與所述映射碼之間的映射關(guān)系嵌入所述可擴展標(biāo)記語言XML文檔中。
在本申請的一個實施例中,該裝置還可以包括如下模塊:
傳輸模塊,用于傳輸壓縮的可擴展標(biāo)記語言XML文檔;
和/或,
存儲模塊,用于存儲壓縮的可擴展標(biāo)記語言XML文檔。
在具體實現(xiàn)中,所述文檔參數(shù)可以包括元素和/或?qū)傩浴?/p>
在本申請的一個實施例中,所述映射模塊402可以包括如下子模塊:
去重子模塊,用于對所述文檔參數(shù)進行去重處理;
去重映射子模塊,用于將去重處理之后的文檔參數(shù)映射為唯一的映射碼,所述映射碼的字符串長度小于或等于所述文檔參數(shù)的字符串長度。
在本申請的一個示例中,所述去重映射子模塊可以包括如下單元:
候選字符串提取單元,用于從去重處理之后的文檔參數(shù)提取候選字符串;
映射碼判斷單元,用于判斷所述候選字符串是否與已映射的映射碼相 同;當(dāng)不相同時,調(diào)用映射碼確認單元,當(dāng)相同時,調(diào)用目標(biāo)字符串提取單元,返回調(diào)用映射碼判斷單元;
映射碼確認單元,用于確認所述候選字符串為所述文檔參數(shù)的映射碼;
目標(biāo)字符串提取單元,用于從所述文檔參數(shù)中提取包含所述候選字符串的目標(biāo)字符串,作為新的候選字符串。
在本申請的另一個示例中,所述去重映射子模塊還可以包括如下單元:
排序單元,用于按照字符串長度和/或字符順序?qū)θブ靥幚碇蟮奈臋n參數(shù)進行排序。
參照圖5,示出了本申請的一種可擴展標(biāo)記語言XML文檔的解壓裝置實施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
XML文檔獲取模塊501,用于獲取壓縮的可擴展標(biāo)記語言XML文檔,壓縮的可擴展標(biāo)記語言XML文檔中包括映射碼;
映射關(guān)系查找模塊502,用于查找壓縮的可擴展標(biāo)記語言XML文檔的、映射碼與文檔參數(shù)之間的映射關(guān)系;
映射碼替換模塊503,用于按照所述映射關(guān)系將所述文檔參數(shù)替換所述映射碼,獲得原始的可擴展標(biāo)記語言XML文檔。
在本申請的一個實施例中,該裝置還可以包括如下模塊:
映射關(guān)系刪除模塊,用于在所述映射關(guān)系嵌在壓縮的可擴展標(biāo)記語言XML文檔中時,刪除所述映射關(guān)系。
在本申請的一個實施例中,所述XML文檔獲取模塊501可以包括如下子模塊:
XML文檔讀取子模塊,用于讀取在先存儲的壓縮的可擴展標(biāo)記語言XML文檔;
或者,
XML文檔接收子模塊,用于接收傳輸?shù)絹淼膲嚎s的可擴展標(biāo)記語言XML文檔。
對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請實施例的實施例可提供為方法、裝置、或計算機程序產(chǎn)品。因此,本申請實施例可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請實施例可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
在一個典型的配置中,所述計算機設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括非持續(xù)性的電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
本申請實施例是參照根據(jù)本申請實施例的方法、終端設(shè)備(系統(tǒng))、和計 算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理終端設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理終端設(shè)備上,使得在計算機或其他可編程終端設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程終端設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本申請實施例的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本申請實施例范圍的所有變更和修改。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者終 端設(shè)備中還存在另外的相同要素。
以上對本申請所提供的一種可擴展標(biāo)記語言XML文檔的壓縮方法、一種可擴展標(biāo)記語言XML文檔的解壓方法、一種可擴展標(biāo)記語言XML文檔的壓縮裝置和一種可擴展標(biāo)記語言XML文檔的解壓裝置,進行了詳細介紹,本文中應(yīng)用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。