一種文檔的存儲方法
【專利摘要】本發(fā)明公開了一種文檔的存儲方法,預(yù)先配置由至少一種結(jié)點類型定義的且具有樹型結(jié)構(gòu)文檔類型,設(shè)置包括結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的文檔存儲格式,該方法包括:確定文檔的文檔類型,根據(jù)該文檔類型,將文檔的內(nèi)容映射為對應(yīng)樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù);根據(jù)對應(yīng)的樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù),為文檔分配存儲空間,在分配的存儲空間中為結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分配各自的存儲區(qū)域;在分配的結(jié)點數(shù)據(jù)區(qū)中存儲結(jié)點的數(shù)據(jù),并在分配的結(jié)點索引表中記錄每個結(jié)點與該結(jié)點數(shù)據(jù)存儲位置的對應(yīng)關(guān)系。應(yīng)用本發(fā)明的存儲方法,能夠提高文檔的訪問性能。
【專利說明】一種文檔的存儲方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機存儲技術(shù),具體涉及一種文檔的存儲方法。
【背景技術(shù)】
[0002] 可擴展標(biāo)記語言(XML)是一種文檔描述語言,利用該語言描述的文檔稱為XML文 檔。
[0003] XML文檔有很多優(yōu)勢。XML是一種元標(biāo)記語言,開發(fā)者可以根據(jù)自己的需要定義自 己的標(biāo)記,XML的文檔是有明確語義并且是結(jié)構(gòu)化的,抗破壞能力很強,XML表示的信息獨 立于平臺的,這里的平臺即可以理解為不同的應(yīng)用程序也可以理解為不同的操作系統(tǒng),對 于大型復(fù)雜的文檔,XML不僅允許指定文檔中的詞匯,還允許指定元素之間的關(guān)系。XML文 檔由文檔類型定義(DTD) /模式(Schema)和XML文本組成,DTD/Schema就是一組標(biāo)記符的 語法規(guī)則,表明XML文本是怎么樣組織的,這樣的組成方式使XML文檔實現(xiàn)了內(nèi)容與形式的 分離,成就了上述眾多優(yōu)點。
[0004] 但是,XML文檔的缺點在于,在將文檔存儲為XML文檔后,如果要訪問某個對象,需 要首先對整個文檔進行解析,將其轉(zhuǎn)換為樹型結(jié)構(gòu)的組織方式,再搜索要訪問的對象,進行 訪問??梢钥闯?,應(yīng)用上述存儲方式存儲某文檔后,當(dāng)用戶對文檔的部分內(nèi)容進行訪問時, 系統(tǒng)需要首先耗費資源對整個文檔進行解析,然后才能選擇用戶感興趣的內(nèi)容進行顯示, 延長了處理時間,進而降低了訪問性能,浪費了系統(tǒng)資源。
【發(fā)明內(nèi)容】
[0005] 有鑒于此,本發(fā)明提供一種文檔的存儲方法,能夠提高訪問性能。
[0006] 為實現(xiàn)上述目的,本發(fā)明采用如下的方案:
[0007] -種文檔的存儲方法,其特征在于,預(yù)先配置由至少一種結(jié)點類型定義的且具有 樹型結(jié)構(gòu)文檔類型,設(shè)置包括結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的文檔存儲格式,該方法包括:
[0008] 確定文檔的文檔類型,,根據(jù)該文檔類型,將文檔的內(nèi)容映射為對應(yīng)樹型結(jié)構(gòu)中的 各個結(jié)點及其數(shù)據(jù);
[0009] 根據(jù)對應(yīng)的樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù),為文檔分配存儲空間,在分配的存 儲空間中為結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分配各自的存儲區(qū)域;
[0010] 在分配的結(jié)點數(shù)據(jù)區(qū)中存儲結(jié)點的數(shù)據(jù),并在分配的結(jié)點索引表中記錄每個結(jié)點 與該結(jié)點數(shù)據(jù)存儲位置的對應(yīng)關(guān)系。
[0011] 較佳地,所述為文檔分配的存儲空間可以包括超級塊、i結(jié)點inode表和數(shù)據(jù)塊; 所述超級塊包括空閑塊表和空閑inode表,用于所述存儲空間中空閑空間的管理。
[0012] 較佳地,所述為結(jié)點索引表分配存儲區(qū)域可以為:為結(jié)點索引表設(shè)置一個inode, 利用inode/空閑表freelist機制在所述數(shù)據(jù)塊部分為所述結(jié)點索引表分配存儲區(qū)域;
[0013] 所述為結(jié)點數(shù)據(jù)區(qū)分配存儲區(qū)域可以為:為結(jié)點數(shù)據(jù)區(qū)設(shè)置一個inode,利用 inode/freelist機制在所述數(shù)據(jù)塊部分為所述結(jié)點數(shù)據(jù)區(qū)分配存儲區(qū)域。
[0014] 較佳地,在所述超級塊中可以進一步包括inodeO,用于記錄inode表所占用的數(shù) 據(jù)塊號。
[0015] 較佳地,所述在結(jié)點數(shù)據(jù)區(qū)中存儲結(jié)點的數(shù)據(jù)可以為:為結(jié)點設(shè)置一個inode,利 用inode/freelist機制在所述數(shù)據(jù)塊部分為所述結(jié)點分配存儲區(qū)域,將該結(jié)點數(shù)據(jù)存儲 到分配的存儲區(qū)域內(nèi),并將結(jié)點對應(yīng)的inode標(biāo)識存儲到所述結(jié)點數(shù)據(jù)區(qū)中;
[0016] 所述結(jié)點數(shù)據(jù)存儲位置可以為:該結(jié)點對應(yīng)的inode標(biāo)識在結(jié)點數(shù)據(jù)區(qū)中的存儲 位置。
[0017] 較佳地,所述將各個結(jié)點的數(shù)據(jù)存儲到所述結(jié)點數(shù)據(jù)區(qū)可以為:在結(jié)點數(shù)據(jù)區(qū)中 順序存儲每個結(jié)點的結(jié)點類型標(biāo)記、結(jié)點長度、結(jié)點的屬性的名稱/標(biāo)記和值;
[0018] 所述結(jié)點數(shù)據(jù)存儲位置可以為:結(jié)點數(shù)據(jù)在結(jié)點數(shù)據(jù)區(qū)中的起始偏移量。
[0019] 較佳地,可以在所述結(jié)點數(shù)據(jù)區(qū)末尾處記錄結(jié)點數(shù)據(jù)區(qū)中空閑區(qū)域在所述結(jié)點數(shù) 據(jù)區(qū)中的起始偏移量。
[0020] 較佳地,所述將各個結(jié)點的數(shù)據(jù)存儲到所述結(jié)點數(shù)據(jù)區(qū)可以為:將結(jié)點數(shù)據(jù)區(qū)分 成若干頁面,將每個結(jié)點的數(shù)據(jù)存儲到特定的頁面上,并在頁內(nèi)存儲偏移量數(shù)組,用于表示 該頁內(nèi)各個結(jié)點在頁內(nèi)的起始偏移量;
[0021] 所述結(jié)點數(shù)據(jù)存儲位置可以為:結(jié)點數(shù)據(jù)所在的頁面地址和在所述偏移量數(shù)組中 與該結(jié)點數(shù)據(jù)對應(yīng)的元素索引。
[0022] 較佳地,該方法可以進一步包括:在所述存儲空間中為結(jié)點數(shù)據(jù)區(qū)的空閑頁索引 分配存儲區(qū)域,在所述空閑頁索引中記錄結(jié)點數(shù)據(jù)區(qū)的各個頁面與該頁面中空閑空間大小 的對應(yīng)關(guān)系。
[0023] 較佳地,所述為空閑頁索引分配存儲區(qū)域可以為:為空閑頁索引設(shè)置一個inode, 利用inode/freelist機制在所述數(shù)據(jù)塊部分為所述空閑頁索引分配存儲區(qū)域。
[0024] 較佳地,所述訪問文檔的入口信息可以包括:結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的存儲位 置及長度、文檔根結(jié)點的ID。
[0025] 較佳地,當(dāng)結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的存儲區(qū)域是采用inode/freelist機制分 配時,所述結(jié)點索引表的存儲位置可以為結(jié)點索引表對應(yīng)的inode標(biāo)識;所述結(jié)點數(shù)據(jù)區(qū) 的存儲位置為結(jié)點數(shù)據(jù)區(qū)對應(yīng)的inode標(biāo)識。
[0026] 由上述技術(shù)方案可見,在本發(fā)明中,預(yù)先配置代表不同樹型結(jié)構(gòu)的文檔類型,定義 文檔存儲格式包括結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)。利用上述帶結(jié)點索引的文檔存儲格式,可以 實現(xiàn)結(jié)點的快速搜索。在存儲某文檔時,首先根據(jù)該文檔的文檔類型,將文檔內(nèi)容映射為對 應(yīng)樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù)。通過此種方式,使文檔由結(jié)點構(gòu)成,各個結(jié)點間通過樹 型結(jié)構(gòu)組織起來。然后,根據(jù)文檔長度,在存儲介質(zhì)中為文檔分配一定的存儲空間,在該存 儲空間中進一步為結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分別分配各自的存儲區(qū)域。最后,將文檔對應(yīng) 的各個結(jié)點數(shù)據(jù)存儲到結(jié)點數(shù)據(jù)區(qū),并在結(jié)點索引表中記錄每個結(jié)點與該結(jié)點數(shù)據(jù)存儲位 置的對應(yīng)關(guān)系,在文件頭中存儲訪問文檔的入口信息。通過上述方式,就可以將一個文檔 按照樹型結(jié)構(gòu)在存儲介質(zhì)中進行存儲,同時采用帶結(jié)點索引的存儲格式。對于此類采用樹 型結(jié)構(gòu)和結(jié)點索引方式存儲后的文檔,當(dāng)用戶對文檔的部分內(nèi)容進行訪問時,可以直接對 該內(nèi)容對應(yīng)的結(jié)點進行訪問,而不需要預(yù)先對整個文檔進行處理,節(jié)省了系統(tǒng)資源,提高了 訪問性能;另外,本發(fā)明的方法依然保留文檔類型的配置,繼承了 XML文檔的優(yōu)勢。利用本 發(fā)明的文檔存儲方法可以支持復(fù)雜樹形結(jié)構(gòu)數(shù)據(jù)的存儲、存儲空間小、擴展性好、可增量修 改、易于提高存儲安全性。
[0027] 更進一步地,本發(fā)明對結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分配存儲區(qū)域時,將結(jié)點索引表 和結(jié)點數(shù)據(jù)區(qū)分別當(dāng)作兩個文件看待,采用與UNIX的inode/freelist近似的機制進行這 兩個存儲區(qū)域的分配、組織和回收,使這兩個存儲區(qū)域易于收縮和擴張,從而簡化了增加結(jié) 點及增長結(jié)點數(shù)據(jù)時的操作。
【專利附圖】
【附圖說明】
[0028] 圖1為本發(fā)明的文檔存儲方法總體流程圖。
[0029] 圖2為本發(fā)明實施例中文檔存儲方法具體流程圖。
[0030] 圖3為收縮文檔存儲空間的流程圖。
【具體實施方式】
[0031] 為使本發(fā)明的目的、技術(shù)手段和優(yōu)點更加清楚明白,以下結(jié)合附圖對本發(fā)明作進 一步詳細說明。
[0032] 本發(fā)明的基本思想是:預(yù)先配置由至少一種結(jié)點類型定義的具有樹型結(jié)構(gòu)的文檔 類型,定義包括結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的文檔存儲格式。在存儲某文檔時,首先根據(jù)該文 檔的文檔類型,將文檔內(nèi)容映射為對應(yīng)樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù)。然后,根據(jù)文檔長 度,在存儲介質(zhì)中為文檔分配一定的存儲空間,在該存儲空間中進一步為結(jié)點索引表和結(jié) 點數(shù)據(jù)區(qū)分別分配各自的存儲區(qū)域。最后,將文檔對應(yīng)的各個結(jié)點數(shù)據(jù)存儲到結(jié)點數(shù)據(jù)區(qū), 并在結(jié)點索引表中記錄每個結(jié)點與該結(jié)點數(shù)據(jù)存儲位置的對應(yīng)關(guān)系。
[0033] 在本發(fā)明的實施例中,為了敘述的方便,可以將依照上述存儲方式存儲的文檔統(tǒng) 稱為SurXml文檔(由Sursen公司定義的XML文檔)。
[0034] 圖1為本發(fā)明的文檔存儲方法總體流程圖。如圖1所示,該方法包括:
[0035] 步驟101,預(yù)先配置至少一個結(jié)點類型定義的具有樹型結(jié)構(gòu)的文檔類型;定義包 括結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的文檔存儲格式。
[0036] 本發(fā)明的核心是將文檔以樹型結(jié)構(gòu)直接存儲到存儲介質(zhì)中,本步驟中配置的文檔 類型即代表了樹型結(jié)構(gòu)的具體組織方式。
[0037] 步驟102,參照步驟101中配置的文檔類型,確定并存儲文檔的文檔類型,并根據(jù) 該文檔類型,將文檔的內(nèi)容映射為對應(yīng)樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù)。
[0038] 步驟103,根據(jù)對應(yīng)樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù)的長度,為文檔分配存儲空 間,在分配的存儲空間中為結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分配各自的存儲區(qū)域。
[0039] 步驟104,在結(jié)點數(shù)據(jù)區(qū)中存儲結(jié)點的數(shù)據(jù),并在結(jié)點索引表中記錄每個結(jié)點與該 結(jié)點數(shù)據(jù)存儲位置的對應(yīng)關(guān)系。
[0040] 至此,本發(fā)明的存儲方法流程結(jié)束。在上述流程中,步驟102和步驟103是順序執(zhí) 行的,事實上,也可以先執(zhí)行步驟103再執(zhí)行步驟102,或者兩個步驟同時執(zhí)行。
[0041] 上述為本發(fā)明的文檔在存儲介質(zhì)中存儲方法的總體概述,下面通過具體實施例說 明該存儲方法的【具體實施方式】。
[0042] 實施例:
[0043] 圖2為本發(fā)明實施例中文檔存儲方法具體流程圖。如圖2所示,該方法包括:
[0044] 步驟201,預(yù)先配置由至少一個結(jié)點類型定義的且具有樹型結(jié)構(gòu)的文檔類型,定義 包括文件頭、結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的文檔存儲格式。
[0045] 本實施例中,配置的文檔類型包括下列信息:a、文檔中包含哪些類型的結(jié)點(結(jié)點 類型);b、文檔中包含的各種類型的結(jié)點的名稱、結(jié)點中包含的各個屬性的名稱/類型;c、 各種結(jié)點之間可能的父子關(guān)系。通過上述信息,文檔類型即可以描述一種特定的樹型結(jié)構(gòu)。 舉一個簡單的文檔類型的例子,在該文檔類型中,根結(jié)點下有若干頁面(page)子結(jié)點,每個 page子結(jié)點下有若干文本(text)和圖像(image)子結(jié)點。具體來說,每個節(jié)點類型都定義 有一個結(jié)點類型標(biāo)記,唯一標(biāo)示一個結(jié)點類型。本步驟中還定義了帶結(jié)點索引的文檔存儲 格式,具體為文件頭、結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)。其中,文件頭用于提供訪問文件的入口信 息,并不能理解為訪問文件的入口信息一定存儲在文件的頭部,實際上,可以約定將入口信 息存儲在文件的任何部分,如文件的尾部;結(jié)點索引表用于記錄各結(jié)點數(shù)據(jù)的具體存儲位 置,以方便檢索各結(jié)點數(shù)據(jù);結(jié)點數(shù)據(jù)區(qū)用于存儲各結(jié)點數(shù)據(jù)。
[0046] 當(dāng)要存儲某文檔時,執(zhí)行以下操作。步驟202,參照步驟201中配置的文檔類型,確 定要存儲文檔的文檔類型,并存儲該文檔類型信息。
[0047] 本步驟中,確定文檔類型后,將該文檔類型信息進行存儲。這里涉及到文檔類型的 表示和文檔類型信息的存儲兩方面的內(nèi)容。
[0048] 文檔類型可以通過兩種格式來表示:類型表,如自定義的類型表,以及XML Schema/DTD/Relax NG,其中,Relax NG是由OASIS提出的一種文檔類型定義方式。
[0049] (一)類型表格式:
[0050] 類型表是一種數(shù)據(jù)結(jié)構(gòu),任何能夠描述文檔類型信息的數(shù)據(jù)結(jié)構(gòu),都可以認為是 類型表。這里給出一種示例實現(xiàn),但實際可能的實現(xiàn)并不限于該示例:
[0051] 屬性的定義,包括名稱和類型。這里,可以為每一個屬性定義唯一標(biāo)記,利用屬性 標(biāo)記作為屬性的名稱;屬性的類型可以是屬性的數(shù)據(jù)類型,也可以為每個屬性類型定義唯 一標(biāo)記。
[0052] 這是一種非常簡單的定義方法,對迭代、選擇、序列、重復(fù)等結(jié)構(gòu)都沒有加入,但大 部分文檔的類型信息也都能夠使用上述結(jié)構(gòu)進行描述。
[0053] (二)XML DTD/Schema/Relax NG 格式
[0054] XML文檔雖然在物理存儲上是線性的,但邏輯上也是由結(jié)點構(gòu)成的樹型結(jié)構(gòu)。因 此,用于描述XML文檔類型的DTD/Schema/Relax NG等格式也可以用于描述本發(fā)明的文檔 類型。
[0055] 此外,無論是DTD、Schema或Relax NG,都支持為結(jié)點定義名稱、屬性、子結(jié)點;與 類型表格式給出的簡單方法相比,這種方法對子結(jié)點的迭代、選擇、序列、重復(fù)有很好的支 持,能夠描述更復(fù)雜的文檔類型。
[0056] 這里給出一個使用Schema描述的文檔類型定義,DTD和Relax NG的形式雖然不 同,但三者在實質(zhì)上是比較類似的。另外,實際文檔類型并不受限于該示例:
[0057] 通過上述兩種方式的任意一種都可以表示文檔類型。下面介紹文檔類型信息的存 儲方式。
[0058] 存儲文檔類型信息時采用線性字符序列進行存儲。具體地,對于利用類型表格 式表示的文檔類型,可以根據(jù)所用的自定義類型表,規(guī)定一組序列化函數(shù),將類型表的數(shù) 據(jù)轉(zhuǎn)換為線性字符序列;對于利用DTD/Schema/Relax NG格式表示的文檔類型,因為DTD/ Schema/Relax NG文件本身就已經(jīng)是線性字符序列,所以可以直接存儲DTD/Schema/Relax NG文件本身。當(dāng)然,在存儲該文檔類型信息前,也可以根據(jù)需要,預(yù)先對要存儲的文檔類型 信息進行加密、壓縮和變換等處理,然后將處理結(jié)果作為文檔類型信息存儲。
[0059] 存儲文檔類型信息時,可以將文檔類型信息進行遠程存儲、本地存儲或存儲在程 序邏輯中。下面分別介紹三種存儲位置下,存儲文檔類型信息的不同實現(xiàn)方式。
[0060] (一)文檔類型信息可以在本地存儲,所謂本地存儲是指在存儲文檔的具體文件中 存儲文檔類型信息。這里給出一種示例方法:
[0061] 在文件中,增加一個自定義的存儲區(qū)域,用于存儲文檔類型信息,指定該區(qū)域的方 法,包括但不限于下述方法:自文件中某個指定位置開始的一段指定長度的區(qū)域;在文檔 類型的樹型結(jié)構(gòu)中增加一個特定的結(jié)點或?qū)傩裕鳛槲臋n類型信息的存儲。
[0062] 文檔類型信息存儲在本地后,訪問該文檔的程序則默認使用文檔內(nèi)部的文檔類型 信息。
[0063](二)文檔類型信息可以在遠程存儲,所謂遠程存儲是指在存儲文檔外部的其它文 件系統(tǒng)中存儲文檔類型信息。文檔類型信息在遠程存儲時,包括但不限于下述方法:遠程或 分布式文件系統(tǒng),如網(wǎng)絡(luò)文件系統(tǒng)(NFS)、WIN2000分布式文件系統(tǒng)(DFS)、安德魯文件系統(tǒng) (AFS);本地文件系統(tǒng);網(wǎng)頁(WEB)服務(wù)器;文件傳輸協(xié)議(FTP)服務(wù)器。將文檔類型信息存 儲在遠程后,還要將遠程的文檔類型信息的URL或路徑信息,存儲到SurXml文檔內(nèi)部,選擇 存儲位置的方法,與本地存儲方法選擇文檔類型信息存儲位置的方法相同。訪問SurXml文 檔的程序根據(jù)文檔中保存的URL或路徑信息查找文檔類型信息。
[0064](三)除上述兩種對文檔類型信息進行顯式(即存儲在文檔內(nèi)部或外部)的存儲外, 還可以將文檔類型信息存儲到訪問SurXml文檔的程序邏輯中。具體地,可以通過一組應(yīng)用 程序接口(API)函數(shù)進行硬編碼,在訪問SurXml文檔內(nèi)容之前,應(yīng)用程序需要調(diào)用該API函 數(shù),在內(nèi)存中建立文檔類型信息數(shù)據(jù);或者,直接將文檔類型信息存儲到訪問SurXml文檔 的應(yīng)用程序的源代碼或二進制映像中,訪問SurXml文檔的程序可以直接將文檔類型信息 復(fù)制到內(nèi)存中使用。這種非顯式的存儲方法,只能支持數(shù)量有限的文檔類型,而且程序中需 要為每一種文檔類型分配ID,在SurXml文檔中需要存儲所使用的文檔類型的ID。
[0065] 存儲文檔類型信息時,還可以是采取上述三種存儲方式中任意組合。如將部分文 檔類型信息進行遠程存儲、將部分文檔類型信息進行本地存儲,或?qū)⒉糠治臋n類型信息存 儲在程序邏輯中。
[0066] 步驟203,根據(jù)文檔類型,將文檔的內(nèi)容映射為對應(yīng)樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù) 據(jù)。
[0067] 本實施例中,定義結(jié)點的數(shù)據(jù)包括結(jié)點的內(nèi)容信息和位置信息。具體地,結(jié)點的 內(nèi)容信息用來描述本結(jié)點對應(yīng)的文檔內(nèi)容,包括結(jié)點類型標(biāo)記、結(jié)點長度、結(jié)點的屬性的名 稱/標(biāo)記和值;結(jié)點的位置信息用來描述本結(jié)點在整個文檔對應(yīng)的樹型結(jié)構(gòu)中的位置,有 可稱為相關(guān)結(jié)點索引信息。該相關(guān)結(jié)點索引信息包括結(jié)點的父結(jié)點ID、結(jié)點左右兄弟結(jié)點 ID、結(jié)點最左側(cè)子結(jié)點ID、結(jié)點的子結(jié)點數(shù)目、結(jié)點的所有子結(jié)點ID。其中,結(jié)點左右兄弟 結(jié)點ID和結(jié)點的所有子結(jié)點ID是可選項,沒有這兩項內(nèi)容,也能夠?qū)⒈窘Y(jié)點在樹型結(jié)構(gòu)中 的位置表述清楚,增加這兩項內(nèi)容的目的是提高檢索速度。
[0068] 本步驟中,根據(jù)文檔類型將文檔內(nèi)容映射為不同的結(jié)點及其數(shù)據(jù)。例如,映射HF 文檔時,將每個頁面映射為一個page結(jié)點,將該頁面內(nèi)的文字信息部分和圖像信息部分分 別映射為該page結(jié)點的兩個子結(jié)點,結(jié)點ID分別為A和B。Page結(jié)點的內(nèi)容信息包括:結(jié) 點類型標(biāo)記為page結(jié)點,結(jié)點長度值,結(jié)點屬性的名稱/標(biāo)記和值包括頁眉、頁腳和頁碼等 信息。Page結(jié)點的相關(guān)結(jié)點索引信息包括:父結(jié)點為PDF文檔的根節(jié)點,左右兄弟結(jié)點為 其它page結(jié)點,最左側(cè)子結(jié)點ID為A,子節(jié)點數(shù)目為2,所有子節(jié)點ID為A、B。
[0069] 步驟204,根據(jù)各個結(jié)點及其數(shù)據(jù)的長度,為文檔分配存儲空間,在存儲空間中為 文件頭、結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分別分配各自的存儲區(qū)域。
[0070] -般來說,文件頭的長度或者是固定的,或者比較短,不需要復(fù)雜的存儲分配機制 支持,可以直接對其分配固定的存儲區(qū)域;而對于結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)來說,其長度則 隨著結(jié)點數(shù)目的增加而增加,因此,在本實施例中,采用可收縮的存儲分配、回收機制來對 結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的存儲區(qū)域進行分配和組織。另外,該機制還用于大對象的存儲 分配。
[0071] 本實施例中采用的可收縮的存儲分配、回收機制為類似于UNIX文件系統(tǒng)中 inode/freelist的機制。具體地,將結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分別看做一個文件,各自對應(yīng) 一個 inode。
[0072] 在inode/freelist機制中,整個存儲空間分為三大部分:超級塊、Inode表和數(shù)據(jù) 塊,如表1所示。
[0073]
[0074] 表 1
【權(quán)利要求】
1. 一種文檔的存儲方法,其特征在于,預(yù)先配置由至少一種結(jié)點類型定義的且具有樹 型結(jié)構(gòu)文檔類型,設(shè)置包括結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)的文檔存儲格式,該方法包括: 確定文檔的文檔類型,,根據(jù)該文檔類型,將文檔的內(nèi)容映射為對應(yīng)樹型結(jié)構(gòu)中的各個 結(jié)點及其數(shù)據(jù); 根據(jù)對應(yīng)的樹型結(jié)構(gòu)中的各個結(jié)點及其數(shù)據(jù),為文檔分配存儲空間,在分配的存儲空 間中為結(jié)點索引表和結(jié)點數(shù)據(jù)區(qū)分配各自的存儲區(qū)域; 在分配的結(jié)點數(shù)據(jù)區(qū)中存儲結(jié)點的數(shù)據(jù),并在分配的結(jié)點索引表中記錄每個結(jié)點與該 結(jié)點數(shù)據(jù)存儲位置的對應(yīng)關(guān)系。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述文檔存儲格式中進一步設(shè)置有文件 頭,在分配的存儲空間中進一步為文件頭分配存儲區(qū)域,在文件頭中存儲文件的標(biāo)識信息 和訪問文檔的入口信息。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述存儲文檔類型的方法為;將所述文檔 類型的部分或全部信息存儲在為所述文檔分配的存儲空間中;或者, 將所述文檔類型的部分或全部信息存儲在文檔的外部,并將存儲該文檔類型的部分或 全部信息的統(tǒng)一資源定位U化或路徑信息存儲在為所述文檔分配的存儲空間中;或者, 將所述文檔類型的部分或全部信息存儲在訪問文檔的程序邏輯中,為所述文檔類型的 部分或全部信息分配標(biāo)識ID,將該ID信息存儲在為所述文檔分配的存儲空間中。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述文檔類型的信息包括;文檔中包含的 結(jié)點類型、結(jié)點名稱、結(jié)點屬性的名稱和類型、結(jié)點間的父子關(guān)系。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述結(jié)點的數(shù)據(jù)包括結(jié)點類型標(biāo)記、結(jié)點 長度、結(jié)點的屬性的名稱/標(biāo)記和值、相關(guān)結(jié)點索引信息。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述相關(guān)結(jié)點索引信息包括;結(jié)點最左側(cè) 子結(jié)點ID和結(jié)點的子結(jié)點數(shù)目。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述相關(guān)結(jié)點索引信息進一步包括;結(jié)點 的父結(jié)點標(biāo)識ID,和/或,結(jié)點左右兄弟結(jié)點ID,和/或,結(jié)點的所有子結(jié)點ID。
8. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述為文檔分配的存儲空間包括超級塊、i結(jié)點inode表和數(shù)據(jù)塊; 所述超級塊包括空閑塊表和空閑inode表,用于所述存儲空間中空閑空間的管理。
9. 根據(jù)權(quán)利要求8所述的方法,其特征在于, 所述為結(jié)點索引表分配存儲區(qū)域為:為結(jié)點索引表設(shè)置一個inode,利用inode/空閑 表化eelist機制在所述數(shù)據(jù)塊部分為所述結(jié)點索引表分配存儲區(qū)域; 所述為結(jié)點數(shù)據(jù)區(qū)分配存儲區(qū)域為:為結(jié)點數(shù)據(jù)區(qū)設(shè)置一個inode,利用inode/ 化eelist機制在所述數(shù)據(jù)塊部分為所述結(jié)點數(shù)據(jù)區(qū)分配存儲區(qū)域。
10. 根據(jù)權(quán)利要求8所述的方法,其特征在于,在所述超級塊中進一步包括inodeO,用 于記錄inode表所占用的數(shù)據(jù)塊號。
【文檔編號】G06F17/30GK104462147SQ201310441740
【公開日】2015年3月25日 申請日期:2013年9月25日 優(yōu)先權(quán)日:2013年9月25日
【發(fā)明者】王東臨 申請人:天津書生投資有限公司