国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      Xml數(shù)據(jù)的壓縮的制作方法

      文檔序號:6596554閱讀:404來源:國知局
      專利名稱:Xml數(shù)據(jù)的壓縮的制作方法
      XML數(shù)據(jù)的壓縮
      背景技術(shù)
      數(shù)據(jù)壓縮涉及將原始數(shù)據(jù)編碼成使用比原來的原始數(shù)據(jù)更少比特的表示。這種壓縮是有用的,因為需要較少的資源來存儲和/或傳輸壓縮的數(shù)據(jù)。然而,只有壓縮數(shù)據(jù)的創(chuàng)作者和壓縮數(shù)據(jù)的用戶二者都能夠取得編碼方案,壓縮才是有用的。XML (可擴(kuò)展標(biāo)記語言)是用于結(jié)構(gòu)化數(shù)據(jù)的開放標(biāo)準(zhǔn)。XML將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)內(nèi)容分離,以及從而提供用于數(shù)據(jù)歸檔的基于標(biāo)準(zhǔn)的良好平臺。然而,XML通常將原來的結(jié)構(gòu)化數(shù)據(jù)的大小擴(kuò)大10-20倍,除非XML數(shù)據(jù)被壓縮。此外,標(biāo)準(zhǔn)的數(shù)據(jù)壓縮技術(shù)傾向于將 XML數(shù)據(jù)縮減到僅大約非壓縮數(shù)據(jù)內(nèi)容的原來大小。Lempel-Ziv (LZ)壓縮是數(shù)據(jù)壓縮技術(shù)的一個示例。操縱、訪問或以其他方式解析壓縮XML文件一般要求該文件首先被解壓縮。這通常導(dǎo)致需要將整個XML文件讀入到存儲器中,或者從該文件順序地讀取數(shù)據(jù)。示例解析技術(shù)包括DOM XML解析、SAX XML解析和VTD XML解析。由于上述原因以及由于在閱讀并理解本說明書后對本領(lǐng)域的技術(shù)人員將變得顯而易見的其他原因,在本領(lǐng)域中存在對用于壓縮XML數(shù)據(jù)的可選方法和裝置的需求。


      圖1示出了根據(jù)本公開實(shí)施例的適合于壓縮XML源數(shù)據(jù)的示例性計算機(jī)系統(tǒng)100。圖2A-2C共同表示待用于描述本公開實(shí)施例的各個特征的XML源數(shù)據(jù)的示例。圖3A-3C共同表示根據(jù)本公開實(shí)施例的響應(yīng)于圖2A-2C的XML源數(shù)據(jù)而生成的壓縮數(shù)據(jù)結(jié)構(gòu)的示例。圖4是根據(jù)本公開實(shí)施例的用于生成圖3C的壓縮數(shù)據(jù)結(jié)構(gòu)的樣本壓縮字典的表
      7J\ ο圖5描繪了根據(jù)本公開實(shí)施例的將圖2A-2C的XML源數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的層級表示為樹索引。圖6A-6B表示根據(jù)本公開實(shí)施例的壓縮文件結(jié)構(gòu)。
      具體實(shí)施例方式在下文對本實(shí)施例的詳細(xì)描述中,參考形成其一部分的附圖,并且在附圖中通過圖示方式示出了可以實(shí)踐的本公開的特定實(shí)施例。對這些實(shí)施例進(jìn)行了充分詳細(xì)的描述, 以使得本領(lǐng)域的技術(shù)人員能夠?qū)嵺`本公開的主題,并且要理解的是,可以利用其他實(shí)施例并且可以做出過程、電或機(jī)械的改變而不脫離本公開的范圍。因此,下文詳細(xì)描述不要被理解為限制性含義,并且本公開的范圍僅由隨附的權(quán)利要求及其等效物限定。XML (可擴(kuò)展標(biāo)記語言)是存儲并傳送數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。XML包括根元素,所有其他元素依賴于該根元素。每個元素包括開始標(biāo)簽(例如,<Root_Element>)以及結(jié)束標(biāo)簽(例如,</R00t_Element>)。每個元素在其開始和結(jié)束標(biāo)簽之間可以包括其他元素(即,子元素) 或文本內(nèi)容(即,數(shù)據(jù)內(nèi)容)。包含子元素的任何元素將被視為該子元素的父元素。子元素將分成兩類,即包含其他元素的那些元素以及僅包含數(shù)據(jù)內(nèi)容的那些元素。各種實(shí)施例提供了一種方法,該方法用于以高壓縮比將XML數(shù)據(jù)歸檔并且同時實(shí)現(xiàn)對壓縮XML數(shù)據(jù)的高速、隨機(jī)訪問而不需要讀取或解壓縮整個文件。各種實(shí)施例通過重組數(shù)據(jù)結(jié)構(gòu)以將元素名稱和數(shù)據(jù)內(nèi)容分離來促進(jìn)壓縮和訪問。首先識別XML數(shù)據(jù)的層級。 將共享相同結(jié)構(gòu)的數(shù)據(jù)層級的組物理地歸集到一起作為父元素和僅包含數(shù)據(jù)內(nèi)容的任何其子元素。為與表示父元素的元素名稱相關(guān)的每個元素類型定義層級組。也就是說,作為一個或多個子元素的父元素的每個元素將表示元素類型,并且將與相同層級分組在一起。注意的是,特定層級組的元素類型可能進(jìn)一步包含一個或多個包含其他元素的子元素,這對于進(jìn)一步作為其他元素的父元素的每個這種子元素而言將導(dǎo)致不同元素類型的另一層級組。通過將數(shù)據(jù)層級分組,可以將通常冗長的元素名稱與數(shù)據(jù)內(nèi)容分離,并且對該層級僅存儲一次而非被重復(fù),從而轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)。為層級內(nèi)的每個實(shí)例創(chuàng)建計數(shù)器,因為其被邏輯地移到相同層級的塊。這允許解壓縮復(fù)制層級之間的相對順序。這一過程生成表示 XML源數(shù)據(jù)文件的壓縮版本的文件,例如純文本文件。對于某些實(shí)施例,創(chuàng)建跳轉(zhuǎn)列表以促進(jìn)壓縮文件的隨機(jī)訪問。跳轉(zhuǎn)列表可以包含指示與特定元素類型相關(guān)的元素名稱的列表的位置和元素名稱的長度,以及用于該元素類型的一個或多個實(shí)例的與跟該特定元素類型相關(guān)的元素名稱對應(yīng)的數(shù)據(jù)內(nèi)容的位置的值。 例如,跳轉(zhuǎn)列表可以包含指示與特定元素類型相關(guān)的元素名稱的列表在壓縮文件中的位置的值以及指示該元素名稱的列表的長度的值;指示表示該特定元素類型的第一實(shí)例的數(shù)據(jù)內(nèi)容的數(shù)據(jù)值的列表在壓縮文件中的位置和其長度的值;指示表示該特定元素類型的第二實(shí)例的數(shù)據(jù)內(nèi)容的數(shù)據(jù)值的列表在壓縮文件中的位置和其長度的值等。跳轉(zhuǎn)列表可以與壓縮文件分離,或者其可以被添加到壓縮文件。對于進(jìn)一步的實(shí)施例,可以應(yīng)用另外的壓縮算法,以促進(jìn)進(jìn)一步縮減轉(zhuǎn)換的數(shù)據(jù)結(jié)構(gòu)的大小。例如,隨著XML重組作為第一層壓縮而被執(zhí)行,可以應(yīng)用第二層壓縮技術(shù),例如L-Z (Lempel-Ziv)壓縮。為了促進(jìn)隨機(jī)訪問而不解壓縮這個雙重壓縮文件,采用離散字典的壓縮技術(shù)可以被使用。通過存儲與雙重壓縮文件分離的字典,或者通過將字典附加在雙重壓縮文件內(nèi)的指定位置中,僅雙重壓縮文件的相關(guān)部分需要被解壓縮,以訪問特定數(shù)據(jù)值或數(shù)據(jù)值集合。注意的是,如果采用跳轉(zhuǎn)列表,其應(yīng)被創(chuàng)建為指示在壓縮文件內(nèi)的相關(guān)位置和長度,無論是僅被重組還是被重組并且壓縮?,F(xiàn)在將參考特定示例描述各個實(shí)施例。圖1示出了根據(jù)本公開實(shí)施例的適合于壓縮XML源數(shù)據(jù)的示例性計算機(jī)系統(tǒng)100。該計算機(jī)系統(tǒng)100包括計算設(shè)備102、一個或多個輸出設(shè)備104以及一個或多個用戶輸入設(shè)備106。計算設(shè)備102可以表示多種計算設(shè)備,諸如網(wǎng)絡(luò)服務(wù)器、個人計算機(jī)等。計算設(shè)備 102進(jìn)一步可以具有多種形式,諸如桌上型設(shè)備、刀片設(shè)備、便攜設(shè)備等。雖然被描繪為顯示器,但輸出設(shè)備104可以表示用于向用戶提供音頻和/或視覺反饋的多種設(shè)備,諸如圖形顯示器、文本顯示器、觸摸屏、揚(yáng)聲器或頭戴式耳機(jī)、打印機(jī)等。雖然被描繪為鍵盤和鼠標(biāo),但用戶輸入設(shè)備106可以表示用于從用戶向計算設(shè)備102提供輸入的多種設(shè)備,諸如鍵盤、指示設(shè)備、在用戶控制面板上的可選擇控件等。計算設(shè)備102通常包括一個或多個處理器108,其處理各種指令以控制計算設(shè)備102的操作并且與其他電子和計算設(shè)備通信。計算設(shè)備102可以被實(shí)現(xiàn)為具有一個或多個存儲器構(gòu)件,其示例包括易失性存儲器110,諸如隨機(jī)存取存儲器(RAM);非易失性存儲器 112,諸如只讀存儲器(ROM)、閃存等;和/或大容量存儲設(shè)備114。大容量存儲設(shè)備的常見示例包括任何類型的磁、光學(xué)或固態(tài)存儲設(shè)備,諸如硬盤驅(qū)動器、固態(tài)驅(qū)動器、磁帶、可記錄 /可重寫光盤等。該一個或多個存儲器構(gòu)件可以被固定到計算設(shè)備102或者是可移除的。該一個或多個存儲器構(gòu)件是計算機(jī)可用存儲介質(zhì),以提供數(shù)據(jù)存儲機(jī)制來存儲用于計算設(shè)備102的操作和在該操作期間的各種信息和/或數(shù)據(jù)并且來存儲被適配為導(dǎo)致處理器108執(zhí)行某些功能的機(jī)器可讀指令??梢詫⒉僮飨到y(tǒng)和一個或多個應(yīng)用程序存儲在該一個或多個存儲器構(gòu)件中,以由處理器108執(zhí)行。操作系統(tǒng)和大多數(shù)的應(yīng)用程序的存儲通常是在大容量存儲設(shè)備114上,不過為了更快速地訪問,在計算設(shè)備102的操作期間,可以將操作系統(tǒng)和/或應(yīng)用的部分從大容量存儲設(shè)備114復(fù)制到其他存儲器構(gòu)件。存儲器構(gòu)件的一個或多個包含被適配為導(dǎo)致處理器108執(zhí)行根據(jù)本公開實(shí)施例的方法的機(jī)器可讀指令。對于某些實(shí)施例,存儲器構(gòu)件的一個或多個包含待被壓縮的XML數(shù)據(jù)文件和/或壓縮的XML數(shù)據(jù)文件。圖2A-2C共同表示待用于描述本公開實(shí)施例的各個特征的XML源數(shù)據(jù)的示例。 XML源數(shù)據(jù)文件包括根元素0RDER_HEADER,其具有開始標(biāo)簽200a和結(jié)束標(biāo)簽200b。根元素 200a-200b表示第一元素類型。在這個示例中,存在第一元素類型的僅一個實(shí)例。對于標(biāo)準(zhǔn) XML數(shù)據(jù)結(jié)構(gòu),將僅有一個根元素。元素210是僅有數(shù)據(jù)內(nèi)容的根元素200a-200b的那些子元素,包括元素名稱 ORDERID、CUSTOMERID、ORDERDATE、SHIPDATE、COMMPLANID、SALESREPID、 TOTAL和STATUSID。這些子元素被包括在第一元素類型的分組層級內(nèi)。注意的是,如果任何父元素的每個子元素包含元素內(nèi)容,該父元素將仍然表示不同的元素類型,即使其沒有僅包含數(shù)據(jù)內(nèi)容的子元素。這促進(jìn)在解壓縮時復(fù)制XML源數(shù)據(jù)文件的原來的數(shù)據(jù)結(jié)構(gòu)。在這種情形中,用于該元素類型的壓縮文件的數(shù)據(jù)內(nèi)容將是空集合,并且下文描述的元素名稱的列表將僅僅包含父元素名稱。元素220表示第二元素類型,在這個情形中為ORDER_ATTACHMENT。在這個示例中, 存在第二元素類型的六個實(shí)例,即元素220「2206。第二元素類型的每個實(shí)例包括僅具有數(shù)據(jù)內(nèi)容的子元素221,包括元素名稱ATTID、ATTTYPE、0RDERID和ATTACHMENT。元素230表示第三元素類型,在這個情形中為0RDER_TAX。在這個示例中,僅有第三元素類型的一個實(shí)例。這個元素類型包括僅具有數(shù)據(jù)內(nèi)容的子元素231,包括元素名稱 ORDERTAXID、ORDERID、TAXTYPE、COUNTRY 和 AMOUNT。元素240表示第四元素類型,在這個情形中為0RDER_LINE。在這個示例中,存在第四元素類型的三個實(shí)例,即元素MO1-MOy第四元素類型的每個實(shí)例包括僅具有數(shù)據(jù)內(nèi)容的子元素 241,包括元素名稱 ORDERLINEID、ORDERID、PR0DUCTID、QUANTITY、PRICE、 DISCOUNT和NOTE。第四元素類型的每個實(shí)例進(jìn)一步包括子元素250。元素250表示第五元素類型,在這個情形中為0RDER_LINE_DIST。在這個示例中,存在第四元素類型的第一實(shí)例中包括的第五元素類型的兩個實(shí)例、以及第四元素類型的第二和第三實(shí)例的每個中包括的第五元素類型的三個實(shí)例。第五元素類型250的每個實(shí)例包括僅具有數(shù)據(jù)內(nèi)容的子元素 251,包括元素名稱 ORDERLINEDISTID、ORDERLINEID、QUANTITY、ST0REID 和 NOTE。圖3A-3C共同表示根據(jù)本公開實(shí)施例的響應(yīng)于圖2A-2C的XML源數(shù)據(jù)而生成的壓縮數(shù)據(jù)結(jié)構(gòu)的示例,描繪了在這個示例中的源數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換。第一層壓縮是基于其識別的層級而重組XML源數(shù)據(jù)。在這個示例中,共享相同結(jié)構(gòu)的數(shù)據(jù)層級的五個組被識別,即對應(yīng)于元素200、220、230、240和250的那些元素類型。每個元素類型包括父元素和僅包含數(shù)據(jù)內(nèi)容的該父元素的任何子元素。如果該父元素的任何子元素包含元素內(nèi)容,則該子元素變成了另外元素類型的父元素。這個過程被重復(fù),直到?jīng)]有另外的父元素被識別。元素類型的每個實(shí)例包含相同子元素,即它們共享相同結(jié)構(gòu)。如果元素名稱待與在相同源數(shù)據(jù)內(nèi)的子元素的不同集合相關(guān),則每個不同集合將由不同元素類型表示。圖3A描繪針對與特定元素類型相關(guān)并且僅包含數(shù)據(jù)內(nèi)容的每個子元素的元素名稱(包括開始和結(jié)束標(biāo)簽)的分離。符號[A]、[C]、[E]、[G]和[I]表示指向元素名稱的相應(yīng)列表以及然后每個元素類型的相應(yīng)數(shù)據(jù)內(nèi)容實(shí)例的位置的存儲器指針。這些表示(例如, [A])是任意的,并且出于方便目的而用于表示指向如在實(shí)際數(shù)據(jù)文件中將包含的特定位置的實(shí)際指針。圖;3B描繪與每個元素類型相關(guān)的數(shù)據(jù)內(nèi)容的分離。符號[B]、[D]、[F]、[H]和[J] 表示在這個示例中的用于每個元素類型[A]、[C]、[E]、[G]和[I]的數(shù)據(jù)內(nèi)容的相應(yīng)分組的開頭。再次,這些表示是任意的,并且出于方便目的而使用。在括號內(nèi)的整數(shù)值(即,[1]、 [2]、[3]等)指表示在源數(shù)據(jù)結(jié)構(gòu)內(nèi)的元素類型的實(shí)例的相對位置的計數(shù)器。例如,第五數(shù)據(jù)類型的第一和第二實(shí)例(即JlO和Jll)出現(xiàn)在第四數(shù)據(jù)類型的第一和第二實(shí)例(即H9和 H12)之間。因此,在當(dāng)順序讀取源數(shù)據(jù)時遇到任何元素類型的新實(shí)例時,計數(shù)器遞增,直到遇到文件的結(jié)尾。這個計數(shù)器作為元素類型的各個實(shí)例的相對順序的指示符。以這種方式, 壓縮的XML數(shù)據(jù)能夠被解壓縮,以復(fù)制在原來的XML源數(shù)據(jù)中包含的層級之間的相對順序。用于特定元素類型的每個實(shí)例的數(shù)據(jù)內(nèi)容包括與該元素類型的每個子元素對應(yīng)的數(shù)據(jù)值(如果有的話),其順序與用于該元素類型的子元素名稱的順序?qū)?yīng)。如在圖3B中所示的,通過被表示為圖3B中的“ Λ ”字符的某種分隔符,將每個數(shù)據(jù)值與元素類型的該實(shí)例的其他數(shù)據(jù)值分離。因此,第一層壓縮包括與每個元素類型相關(guān)的元素名稱的表示,那些元素名稱包括父元素和僅包含數(shù)據(jù)內(nèi)容的任何子元素。用于特定元素類型的子元素的元素名稱可以按其在源數(shù)據(jù)中被遇到的順序而被列出,以促進(jìn)在解壓縮時復(fù)制原來的數(shù)據(jù)結(jié)構(gòu)。與元素類型相關(guān)的元素名稱的表示進(jìn)一步包括與該元素類型相關(guān)的數(shù)據(jù)內(nèi)容在壓縮數(shù)據(jù)文件內(nèi)的位置的指示符。第一層壓縮進(jìn)一步包括與每個元素類型的每個實(shí)例相關(guān)的數(shù)據(jù)內(nèi)容的表示。用于元素類型的實(shí)例的數(shù)據(jù)內(nèi)容的順序表示僅包括數(shù)據(jù)內(nèi)容的該元素類型的子元素的元素名稱的順序。與元素類型的實(shí)例相關(guān)的數(shù)據(jù)內(nèi)容的表示包括針對源數(shù)據(jù)所識別的所有元素類型的實(shí)例中的相對順序的指示符。正是每個元素類型的元素名稱的表示與每個元素類型的每個實(shí)例的數(shù)據(jù)內(nèi)容的表示的這一分離構(gòu)成了第一層壓縮的重組。注意的是,雖然圖3Α-3Β的示例是純文本形式的,但其他的表示也是允許的,諸如二進(jìn)制的、十六進(jìn)制的寸。對于圖2A-2C的樣本XML源數(shù)據(jù),由圖3Α-;3Β表示的第一層壓縮示出了源數(shù)據(jù)的大約四分之一大小的壓縮數(shù)據(jù)。注意的是,因為第一層壓縮在重組期間保留了源數(shù)據(jù)的純文本,所以通過將某種其他壓縮技術(shù)應(yīng)用于重組的數(shù)據(jù),能夠?qū)崿F(xiàn)進(jìn)一步的空間節(jié)省。例如,能夠?qū)-Z壓縮應(yīng)用于重組的數(shù)據(jù)。L-Z壓縮建立了復(fù)現(xiàn)字符串的字典。字典的每個復(fù)現(xiàn)字符串由某個字典元素表示。然后,壓縮技術(shù)將在數(shù)據(jù)文件中識別的復(fù)現(xiàn)字符串替換為字典元素。當(dāng)文件被解壓縮時,則使用相同字典來把在壓縮的數(shù)據(jù)文件中的字典元素替換為與該字典元素相對應(yīng)的字符串。繼續(xù)如圖3A-;3B所示而重組的示例,壓縮技術(shù)(例如,L-Z 壓縮)可能建立包含圖4所描繪的字典元素和字符串的字典。注意的是,為了方便起見,將字典元素表示為簡單的字符。然而,字典元素將采用選擇的任意壓縮技術(shù)的慣例。各個實(shí)施例不受應(yīng)用于前述實(shí)施例的重組數(shù)據(jù)的任何特定壓縮技術(shù)的限制。然而,不是如在L-Z型數(shù)據(jù)壓縮中通常所做的那樣內(nèi)聯(lián)地(in line)建立字典,與本公開實(shí)施例一起使用的壓縮字典或者被保存在壓縮數(shù)據(jù)文件外部或者被鄰接地包含在壓縮數(shù)據(jù)文件內(nèi)部的專用塊中。使用圖4的樣本字典,通過將字典的字符串替換為它們對應(yīng)的字典元素,圖:3B的重組數(shù)據(jù)可以被表示為圖3C中所描繪的,進(jìn)一步縮小了壓縮數(shù)據(jù)的大小。注意的是,雖然前述示例僅將這個第二層壓縮應(yīng)用于重組數(shù)據(jù)的數(shù)據(jù)內(nèi)容部分,但這種技術(shù)能夠被應(yīng)用于重組數(shù)據(jù)整體,即包括元素名稱列表的第二層壓縮。也注意的是,這些動作在示例中被描繪為分離步驟,以更清晰地描述該壓縮的不同方面,但它們也能夠在單趟(single pass)中被應(yīng)用。因此,第二層壓縮或者可以在生成第一層壓縮的數(shù)據(jù)內(nèi)容的表示之后執(zhí)行或者與生成第一層壓縮的數(shù)據(jù)內(nèi)容的表示并發(fā)地執(zhí)行。如果將用于第二層壓縮技術(shù)的字典保存在外部,能夠?qū)⒆值溆糜谌舾蓧嚎s文件, 從而減少開銷。這也允許外部字典更大,并且從而提供更好的壓縮比。而且,由于字典不是與壓縮數(shù)據(jù)內(nèi)聯(lián),數(shù)據(jù)能夠在文件中的任意點(diǎn)被解壓縮,而不要求順序訪問。然而,如果將字典與壓縮數(shù)據(jù)文件分離,則若沒有另一個,二者都不完整。如果壓縮字典丟失,那么使用其的壓縮文件不能被解壓縮。通過將字典放置在壓縮數(shù)據(jù)文件內(nèi)的專用塊中(諸如在壓縮數(shù)據(jù)文件的結(jié)尾或其他指定位置處)并且利用在壓縮數(shù)據(jù)文件開頭的保留位置指向其位置,可以減輕這種風(fēng)險。這種方法保持每個壓縮XML文件的自身完整性,同時仍然維持對于壓縮數(shù)據(jù)塊的隨機(jī)訪問的能力。使用此處所描述的符號,能夠?qū)D2A-2C的XML源數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的層級表示為 [A[B] [C[D]E[F]G[H[I[J]]]]]??蛇x地,圖5描繪了根據(jù)本公開實(shí)施例的將圖2A-2C的XML源數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的層級表示為樹索引。在先前段落中呈現(xiàn)的層級的嵌套表示以及在圖5中呈現(xiàn)的層級的圖形表示均表示共享相同結(jié)構(gòu)的數(shù)據(jù)層級的各個分組之間的關(guān)系。數(shù)據(jù)文件的完全解壓縮將相反地發(fā)生。簡單但較慢的方法將是在兩趟中解壓縮文件,即首先根據(jù)第二層壓縮技術(shù)(如果使用了)將壓縮數(shù)據(jù)文件解壓縮以恢復(fù)第一層壓縮的重組數(shù)據(jù)結(jié)構(gòu),然后將根據(jù)第一層壓縮技術(shù)將這個重組數(shù)據(jù)解壓縮以恢復(fù)源數(shù)據(jù)結(jié)構(gòu)。更快速的方法將涉及使用層級指針來隨機(jī)訪問壓縮文件,以便在單趟中應(yīng)用解壓縮。注意的是,無論是執(zhí)行單層壓縮還是雙層壓縮,各個實(shí)施例都允許隨機(jī)訪問特定數(shù)據(jù),因為解析器能夠?qū)ふ业轿募械娜我恻c(diǎn),并且開始解壓縮和解析而不必將整個文件解壓縮直到至少包含目標(biāo)數(shù)據(jù)的點(diǎn)。換言之,因為重組數(shù)據(jù)結(jié)構(gòu)包括指向用于每個元素類型的特定實(shí)例的數(shù)據(jù)的位置的指示符,并且因為壓縮字典未與壓縮數(shù)據(jù)內(nèi)聯(lián)地存儲,解析器能夠解壓縮文件的開頭,直到期望的元素類型被定位,并且然后跳轉(zhuǎn)到用于該元素類型的數(shù)據(jù)的位置,而無需解壓縮所有介于其間的文件內(nèi)容。可選地,可以創(chuàng)建跳轉(zhuǎn)列表,以避免解壓縮數(shù)據(jù)文件直到用于目標(biāo)數(shù)據(jù)的位置指示符被識別為止。跳轉(zhuǎn)列表可以包含指示用于至少一個元素類型的元素名稱的表示的位置以及用于該至少一個元素類型的元素名稱的表示的長度的值。跳轉(zhuǎn)列表可以進(jìn)一步包含指示與該至少一個元素類型的至少一個實(shí)例對應(yīng)的數(shù)據(jù)內(nèi)容的表示的位置以及用于該至少一個元素類型的該至少一個實(shí)例的數(shù)據(jù)內(nèi)容的表示的長度的值。跳轉(zhuǎn)列表能夠在創(chuàng)建XML 源數(shù)據(jù)的同時或者當(dāng)XML源數(shù)據(jù)被壓縮時或者在XML源數(shù)據(jù)被壓縮之后而被創(chuàng)建。注意的是,如果在壓縮完成前創(chuàng)建跳轉(zhuǎn)列表,壓縮數(shù)據(jù)文件的解壓縮將是必要的。例如,如果在第一層壓縮之前創(chuàng)建跳轉(zhuǎn)列表,那么壓縮數(shù)據(jù)文件將需要被完全解壓縮,以便跳轉(zhuǎn)列表的位置對應(yīng)于數(shù)據(jù)文件。如果在第一層壓縮之后但在第二層壓縮之前創(chuàng)建跳轉(zhuǎn)列表,壓縮數(shù)據(jù)文件將需要被解壓縮回到第一層壓縮級別。然而,如果在壓縮(單層壓縮或雙層壓縮)完成之后創(chuàng)建跳轉(zhuǎn)列表,僅壓縮數(shù)據(jù)文件的相關(guān)部分需要被解壓縮以便訪問通過跳轉(zhuǎn)列表識別的數(shù)據(jù)內(nèi)容。跳轉(zhuǎn)列表可以被實(shí)現(xiàn)為外部文件,或者可以被包含在壓縮數(shù)據(jù)文件中。跳轉(zhuǎn)列表可以被創(chuàng)建,以滿足特定訪問要求。例如,如果有人期望能夠順序訪問壓縮數(shù)據(jù)中的下級結(jié)構(gòu),能夠為該結(jié)構(gòu)的每個起始點(diǎn)創(chuàng)建跳轉(zhuǎn)列表。然后,程序能夠快速尋找到每個期望位置, 并且僅解壓縮滿足查詢所期望的數(shù)據(jù)。B-樹風(fēng)格索引化也可以使用跳轉(zhuǎn)列表以在壓縮XML 數(shù)據(jù)的分量上有效地創(chuàng)建詳細(xì)的索引。例如,使用圖3A-3B的樣本壓縮XML源數(shù)據(jù),可以創(chuàng)建跳轉(zhuǎn)列表,以快速訪問< 0RDER_LINE >元素類型的所有記錄,其可以被表示如下,[元素名稱的長度]
      ,[行H9的長度]
      ,[行H12的長度]
      ,[行H16的長度]。索引跳轉(zhuǎn)列表將是類似的,但將把跳轉(zhuǎn)位置與索引值相關(guān),而不是順序列表。能夠針對特定的訪問方法定制跳轉(zhuǎn)列表。例如,如果有人希望順序讀取所有<0RDER_LINE>數(shù)據(jù),跳轉(zhuǎn)列表可僅包含整個塊而不是僅一行的初始字節(jié)位置和長度。圖6A-6B表示根據(jù)本公開實(shí)施例的壓縮文件結(jié)構(gòu)。圖6A表示根據(jù)本公開實(shí)施例的壓縮數(shù)據(jù)文件600A,其中壓縮數(shù)據(jù)602A與可選壓縮字典604A和可選跳轉(zhuǎn)列表606A分離。例如,壓縮數(shù)據(jù)602A可以表示根據(jù)本公開實(shí)施例的單層壓縮或雙層壓縮。如果解壓縮協(xié)議不控制什么壓縮字典被用于解壓縮該壓縮數(shù)據(jù)文件600A,則壓縮數(shù)據(jù)文件600A可以包括部分608A,以指定特定壓縮字典604A用于解壓縮第二層壓縮(如果必要的話)。壓縮數(shù)據(jù)文件600A通常被存儲在計算機(jī)可用存儲介質(zhì)上,以允許由計算設(shè)備創(chuàng)建、訪問和/或操縱壓縮數(shù)據(jù)文件600A。圖6B表示根據(jù)本公開實(shí)施例的壓縮數(shù)據(jù)文件600B,其中將可選壓縮字典604B和可選跳轉(zhuǎn)列表606B存儲在與壓縮數(shù)據(jù)602B相同的數(shù)據(jù)文件中。例如,壓縮數(shù)據(jù)602B可以表示根據(jù)本公開實(shí)施例的單層壓縮或雙層壓縮。壓縮數(shù)據(jù)文件600B包括部分608B,以識別整體壓縮字典604B的位置從而用于解壓縮第二層壓縮(如果必要的話)并且如果整體跳轉(zhuǎn)列表606B被包含在壓縮數(shù)據(jù)文件600B中則識別整體跳轉(zhuǎn)列表606B的位置。壓縮數(shù)據(jù)文件600B通常被存儲在計算機(jī)可用存儲介質(zhì)上,以允許由計算設(shè)備創(chuàng)建、訪問和/操縱壓縮數(shù)據(jù)文件600B。注意的是,根據(jù)本公開的實(shí)施例,可以生成壓縮文件結(jié)構(gòu)的另外示例。例如,壓縮文件結(jié)構(gòu)可以包括諸如圖6B所示的與壓縮數(shù)據(jù)成整體的壓縮字典以及諸如圖6A 所示的與壓縮數(shù)據(jù)分離的跳轉(zhuǎn)列表??蛇x地,壓縮數(shù)據(jù)結(jié)構(gòu)可以包括諸如圖6B所示的與壓縮數(shù)據(jù)成整體的跳轉(zhuǎn)列表以及諸如圖6A所示的與壓縮數(shù)據(jù)分離的壓縮字典。此外,跳轉(zhuǎn)列表可以從各個實(shí)施例消除,并且當(dāng)未執(zhí)行第二層壓縮或者使用不依賴于壓縮字典的壓縮技術(shù)執(zhí)行第二層壓縮時,壓縮字典可以被消除。 雖然此處已圖示并描述了特定實(shí)施例,但其意圖顯然是,要求保護(hù)的主題的范圍僅由隨附的權(quán)利要求及其等效物限定。
      權(quán)利要求
      1.一種壓縮XML源數(shù)據(jù)的方法,包括識別所述XML源數(shù)據(jù)的每個元素類型,每個元素類型包括一個父元素,并且每個元素類型在所述XML源數(shù)據(jù)中具有一個或多個實(shí)例;生成用于每個識別的元素類型的元素名稱的表示,其中元素名稱的每個表示包括該元素類型的所述父元素的元素名稱以及僅包含數(shù)據(jù)內(nèi)容的該父元素的任何子元素的元素名稱;對于每個元素類型的每個實(shí)例,生成與所述元素類型的元素名稱的表示分離的數(shù)據(jù)內(nèi)容的表示;以及將元素名稱的表示和數(shù)據(jù)內(nèi)容的表示存儲在計算機(jī)可用存儲介質(zhì)上。
      2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括生成跳轉(zhuǎn)列表,所述跳轉(zhuǎn)列表包含指示用于至少一個元素類型的元素名稱的表示的位置以及元素名稱的所述表示的長度的值,所述跳轉(zhuǎn)列表進(jìn)一步包含指示與該至少一個元素類型的至少一個實(shí)例對應(yīng)的數(shù)據(jù)內(nèi)容的表示的位置以及用于所述至少一個元素類型的所述至少一個實(shí)例的數(shù)據(jù)內(nèi)容的表示的長度的值。
      3.根據(jù)權(quán)利要求2所述的方法,進(jìn)一步包括將所述跳轉(zhuǎn)列表在與元素名稱的表示以及數(shù)據(jù)內(nèi)容的表示相同的數(shù)據(jù)文件中存儲在所述計算機(jī)可用存儲介質(zhì)上,并且將所述跳轉(zhuǎn)列表在所述相同的數(shù)據(jù)文件內(nèi)的位置的指示符存儲在所述相同的數(shù)據(jù)文件中。
      4.根據(jù)權(quán)利要求2所述的方法,進(jìn)一步包括將所述跳轉(zhuǎn)列表在與元素名稱的表示以及數(shù)據(jù)內(nèi)容的表示不同的數(shù)據(jù)文件中存儲在計算機(jī)可用存儲介質(zhì)上。
      5.根據(jù)權(quán)利要求4所述的方法,進(jìn)一步包括在包含元素名稱的表示和數(shù)據(jù)內(nèi)容的表示的數(shù)據(jù)文件中存儲所述跳轉(zhuǎn)列表的位置的指示符。
      6.根據(jù)權(quán)利要求2所述的方法,其中生成跳轉(zhuǎn)列表包括在由以下項所組成的組中選擇的時間生成所述跳轉(zhuǎn)列表在生成元素名稱的表示和數(shù)據(jù)內(nèi)容的表示之前;在生成元素名稱的表示和數(shù)據(jù)內(nèi)容的表示之后且在執(zhí)行第二層壓縮之前;以及在XML源數(shù)據(jù)的壓縮完成之后。
      7.根據(jù)權(quán)利要求1-6的任何一個所述的方法,其中如果特定元素名稱的父元素與僅包含用于一個或多個實(shí)例的數(shù)據(jù)內(nèi)容的子元素的第一集合相關(guān),并且所述特定元素名稱的父元素與僅包含用于一個或多個其他實(shí)例的數(shù)據(jù)內(nèi)容的子元素的第二集合相關(guān),則識別所述 XML源數(shù)據(jù)的每個元素類型包括識別對應(yīng)于與所述第一集合的子元素相關(guān)的所述特定元素名稱的每個父元素的第一元素類型以及識別對應(yīng)于與所述第二集合的子元素相關(guān)的所述特定元素名稱的每個父元素的第二元素類型。
      8.根據(jù)權(quán)利要求1-7的任何一個所述的方法,進(jìn)一步包括將數(shù)據(jù)內(nèi)容的所述表示與相同元素類型的數(shù)據(jù)內(nèi)容的其他表示一起分組,使得數(shù)據(jù)內(nèi)容的表示的分組表示用于相同集合的子元素的數(shù)據(jù)內(nèi)容。
      9.根據(jù)權(quán)利要求1-8的任何一個所述的方法,其中生成用于每個元素類型的每個實(shí)例的數(shù)據(jù)內(nèi)容的表示進(jìn)一步包括將計數(shù)器與每個元素類型的每個實(shí)例的數(shù)據(jù)內(nèi)容的所述表示相關(guān),所述計數(shù)器指示在所述XML源數(shù)據(jù)內(nèi)每個元素類型的每個實(shí)例的出現(xiàn)順序。
      10.根據(jù)權(quán)利要求1-9的任何一個所述的方法,進(jìn)一步包括將第二層壓縮應(yīng)用于元素名稱的表示和數(shù)據(jù)內(nèi)容的表示中的至少一個,其中在由以下項所組成的組中選擇的時間執(zhí)行所述第二層壓縮在生成數(shù)據(jù)內(nèi)容的表示之后以及與生成數(shù)據(jù)內(nèi)容的表示并發(fā)地。
      11.根據(jù)權(quán)利要求10所述的方法,進(jìn)一步包括生成用于所述第二層壓縮的壓縮字典。
      12.根據(jù)權(quán)利要求11所述的方法,進(jìn)一步包括將所述壓縮字典在與元素名稱的表示和數(shù)據(jù)內(nèi)容的表示相同的數(shù)據(jù)文件中存儲在所述計算機(jī)可用存儲介質(zhì)上,并且將所述壓縮字典在所述相同的數(shù)據(jù)文件內(nèi)的位置的指示符存儲在所述相同的數(shù)據(jù)文件中。
      13.根據(jù)權(quán)利要求11所述的方法,進(jìn)一步包括將所述壓縮字典在與元素名稱的表示以及數(shù)據(jù)內(nèi)容的表示不同的數(shù)據(jù)文件中存儲在計算機(jī)可用存儲介質(zhì)上。
      14.根據(jù)權(quán)利要求1-13的任何一個所述的方法,其中生成用于每個識別的元素類型的元素名稱的表示進(jìn)一步包括將指針與元素名稱的每個表示相關(guān),所述指針指示用于其相應(yīng)元素類型的數(shù)據(jù)內(nèi)容的表示的位置。
      15.一種計算機(jī)可用存儲介質(zhì),包含被適配為導(dǎo)致計算設(shè)備的處理器執(zhí)行權(quán)利要求 1-14的任何一個所述的方法的機(jī)器可讀指令。
      全文摘要
      壓縮XML源數(shù)據(jù)的方法包括識別XML源數(shù)據(jù)的每個元素類型,生成用于每個識別的元素類型的元素名稱的表示,并且生成與元素類型的元素名稱的表示分離的每個元素類型的每個實(shí)例的數(shù)據(jù)內(nèi)容的表示。
      文檔編號G06F17/21GK102473175SQ200980160715
      公開日2012年5月23日 申請日期2009年7月31日 優(yōu)先權(quán)日2009年7月31日
      發(fā)明者B. 埃爾津加 D., 克里什納穆爾蒂 S. 申請人:惠普開發(fā)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1