專利名稱:一種xml壓縮數(shù)據(jù)的多查詢處理方法
技術(shù)領(lǐng)域:
本發(fā)明屬數(shù)據(jù)庫技術(shù)領(lǐng)域,具體涉及一種快速有效 地對一個XML文檔進(jìn)行多查詢處理的方法。采用該方法 可以在分布式協(xié)作的服務(wù)器/客戶端網(wǎng)絡(luò)下,有效地克服 XML文檔自身的冗余問題,并高效地實現(xiàn)多查詢處理。
背景技術(shù):
繼HTM"Hyper Text Markup Language) 語言之后,
XML (eXtensibleMarkup Language)語言業(yè)已逐漸成為互
聯(lián)網(wǎng)信息的主要表示和交換工具。隨著XML文檔的使用
曰頻繁廣泛網(wǎng)絡(luò)上越來越多的信息以XML的模式來
進(jìn)行存儲和傳遞,同時一些需要傳遞的XML文檔規(guī)模也
不斷增大。在有限帶寬和處理能力的條件下,怎樣有效
的進(jìn)行信息的傳遞,既能提高查詢技術(shù)又減小對帶寬的
消耗,成為當(dāng)、/ * 目'J研究的熱點話題之一。對XML文檔進(jìn)行
壓縮從而減小其規(guī)模成為一種可能的解決方式。由于XML
文檔不同于般的文本性文檔,它同時包含了數(shù)據(jù)信息
和數(shù)據(jù)間的結(jié)構(gòu)關(guān)系,怎樣才能有效地利用XML文檔的
特征來進(jìn)行有效的壓縮,同時又不會對查詢處理帶來過
多的冗余操作,是針對XML壓縮的兩個關(guān)鍵問題。
2000年第 一 種針對XML的壓縮方法XMill被提出, 其動機(jī)是最大程度的減小XML文檔的規(guī)模。因此XMill 將XML的結(jié)構(gòu)和數(shù)據(jù)分割開來,先對文檔抽取結(jié)構(gòu) (skeleton),再對文檔進(jìn)行遍歷,對相同路徑下的所有 結(jié)點歸類到同一個桶中,遍歷結(jié)束之后,每個桶內(nèi)的數(shù)據(jù)具有相同的特性,如全部都是整數(shù),或全都是字符串。 由于針對整數(shù)、字符串和浮點數(shù)的最優(yōu)壓縮技術(shù)互不相
同,針對分類之后得到的桶,XMill選擇最適合的方法進(jìn) 行壓縮,從而保證了整個文檔的高壓縮率。
不同于XMill, XMLPPM針對遍歷XML文檔的SAX流 進(jìn)行動態(tài)的壓縮,這個方法通過采用了部分匹配預(yù)測 (Prediction by Partial Match)方法進(jìn)行壓縮而得以 命名。在SAX遍歷的過程中,對于每個XML標(biāo)簽,都構(gòu) 造一個PPM模型進(jìn)行編碼。該模型包含了幾個部分Syms 部分,用于存儲首次出現(xiàn)的標(biāo)簽和屬性(attribute)名; Elts部分,利用索引表示當(dāng)前的標(biāo)簽并保存下來以維持 原文檔的結(jié)構(gòu);Atts則用于區(qū)分標(biāo)簽和屬性,因為其中 只保存了屬性名和文本數(shù)據(jù);Chars用來保存每個標(biāo)簽對 應(yīng)的數(shù)據(jù)。在Chars中的每個文本數(shù)據(jù)之前,都標(biāo)注上 對應(yīng)元素的索弓l;而Atts和Chars中都通過"〈n> "來 維持四個模型之間的關(guān)系,從而維持模型之間的交叉依 賴。通過使用PPM模型來對即將來到的字符串進(jìn)行預(yù)測, XMLPPM方法實現(xiàn)了當(dāng)前XML壓縮方法中的最高壓縮率。
XMill和XMLPPM通過對XML文檔的數(shù)據(jù)和結(jié)構(gòu)進(jìn)行 分離并針對數(shù)據(jù)類型選擇壓縮方法實現(xiàn)了較高的壓縮 率,但是這兩種方法得到的壓縮文檔不能保存原有的結(jié) 構(gòu),如果要對壓縮文檔進(jìn)行查詢,就需要將整個文檔進(jìn) 行解壓縮,而這將耗費比壓縮更多的時間和空間。因此 學(xué)者們轉(zhuǎn)向了支持直接?xùn)嗽兊膲嚎s方法。2002年,針對 日益廣泛的手機(jī),PDA和Palm的有限CPU,第 一 種同態(tài) 壓縮技術(shù)XGRIND得以提出。
XGRIND是一種非自適應(yīng)的壓縮方法,在壓縮開始前, 它必須采用DTD來建立字典,同時還要對原文檔進(jìn)行一次預(yù)掃描以搜集所有的詞頻信息,從而建立對應(yīng)的
Huffman編碼器。在壓縮過程中,對于文檔中每個元素和 屬性,直接采用字典中對應(yīng)的索引數(shù)進(jìn)行替代。而對大 量的非枚舉型元素,采用已有的Huffman編碼器進(jìn)行編 碼。此外枚舉型數(shù)據(jù)則直接使用二元編碼。XGRIND旨在 保留原文檔的結(jié)構(gòu),因此壓縮后的文檔實現(xiàn)了和原文檔 的——對應(yīng),也使得大部分的XPath査詢能夠直接在壓 縮文檔上進(jìn)行執(zhí)行。但對于包含范圍謂詞(range predicate)查詢,必須對壓縮文檔進(jìn)行對應(yīng)部分的局部 解壓縮。由于該方法只針對XML文檔的冗余標(biāo)簽,而沒 有解決文檔中的路徑和數(shù)據(jù)重復(fù)問題,其壓縮率遠(yuǎn)遠(yuǎn)低 于XMill和XMLPPM。同時由于無法對所有的復(fù)雜查詢進(jìn) 行直接解析,XGRIND的査詢支持率也不盡人意。
在分析了 XGRIND的優(yōu)點和缺點之后,2004年XPress 被提出。這一方法創(chuàng)新性地提出了針對標(biāo)簽壓縮的逆向 數(shù)學(xué)編碼,不僅有效地進(jìn)行編碼,同時增強了其對查詢 執(zhí)行的支持。這一方法將標(biāo)簽(包括元素和屬性)轉(zhuǎn)化 為 一 個浮點數(shù)據(jù),轉(zhuǎn)化規(guī)則依賴于該標(biāo)簽所處的路徑和 所有的祖先結(jié)點信息。這種壓縮方法通過數(shù)值區(qū)間的包 含來表示結(jié)點之間的祖先和后代關(guān)系。對于文檔中的文 本數(shù)據(jù),XPress則根據(jù)數(shù)據(jù)特征來選擇使用字典或 Huffman編碼。由于逆向編碼有效的保持了路徑信息, XPress對查詢的支持率大大提高。同時這一編碼方式, 對于復(fù)雜路徑中的后代査詢也進(jìn)行了有效的解決。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種XML壓縮數(shù)據(jù)的多查詢 處理方法,其是一種在分布式網(wǎng)絡(luò)環(huán)境下的結(jié)構(gòu)化査詢索引樹結(jié)構(gòu),使之作為全局結(jié)構(gòu)優(yōu)化整個網(wǎng)絡(luò)的穩(wěn)定性, 并具有多樣的査詢支持能力。 該方法步驟是
a,對原始的XML文檔進(jìn)行壓縮;
b,采用 SQIT構(gòu)造算法,建立結(jié)構(gòu)化査詢索引樹
SQIT;
c,根據(jù)建立的構(gòu)化査詢索引樹SQIT,進(jìn)行SQIT查 詢算法處理。
所述的SQIT構(gòu)造算法,其步驟是 步驟l,輸入?yún)?shù)Sq和R,其中,Sq是査詢集合,R是査 詢樹的根節(jié)點;
步驟2,初始化循環(huán)變量qn為0,用來標(biāo)記當(dāng)前處理的 査詢;
步驟3 ,判斷條件,如果Sq中還有未被處理的査詢,就執(zhí) 行4 ;否則,就執(zhí)行1 2 ;
步驟4,Q是Sq中正在被處理的查詢,如果Q是復(fù)雜查詢, 就將Q轉(zhuǎn)化為SXP,然后初始化循環(huán)變量sn; 步驟5,針對當(dāng)前每一個棧,都執(zhí)行6;
步驟6,如果Q包含當(dāng)前棧頂元素,就執(zhí)行7;否則,執(zhí)
行8;
步驟7,把Q壓入當(dāng)前棧內(nèi),如果Q包含多個棧頂元素, 就合并這些棧,并把Q作為棧頂元素;
步驟8 ,如果棧頂元素包含Q ,就執(zhí)行9 ;否則,執(zhí)行5 ;
步驟9,把Q壓入到棧的次頂元素中;
步驟10,如果Q與所有的棧頂元素都沒有包含關(guān)系,就 新建一個棧,把Q壓入新棧;
步驟11,計算共享前綴,并把所有棧頂元素記為R的孩 子;步驟12,初始化循環(huán)變量n為0;
步驟13,針對每一個棧,如果含有多個元素,就遞歸執(zhí) 行1;
步驟14,輸出SQIT樹,結(jié)束。
所述的SQIT査詢算法處理,其步驟是 步驟1,輸入?yún)?shù)Doc和Sqit,其中,Doc是壓縮的XML 文檔,Sqit是包含所有子?xùn)嗽兊腟QIT樹; 步驟2,初始化,新建關(guān)于Doc根節(jié)點的路徑結(jié)構(gòu)PSr, 并將Sqit的根壓入到PSr的UnsatNodes中,再把PSr壓入 到路徑棧中;
步驟3 ,針對每 一 個標(biāo)志T ,執(zhí)行4 ;
步驟4,新建T的路徑結(jié)構(gòu)PST,并把路徑棧的棧頂元素
記為PSp。
七發(fā)明的優(yōu)點在于,在分布式協(xié)作的服務(wù)器/'客戶端網(wǎng)
絡(luò)下為了有效地克服XML文檔自身的冗余問題,并高
效地實現(xiàn)多査詢處理,我們提出了 一種針對壓縮數(shù)據(jù)的
基于結(jié)構(gòu)化査詢索引樹(SQIT)的多查詢處理算法該
方法不僅能夠支持更加復(fù)雜的査詢,還能增強通査詢
樹在分布式環(huán)境中的魯棒性,以適應(yīng)分布式環(huán)境中中轉(zhuǎn)
節(jié)點不穩(wěn)定的情況。在同類技術(shù)和方法中,本發(fā)明處于
領(lǐng)先水平,是相關(guān)領(lǐng)域的技術(shù)突破。在與其他技術(shù)所作
的同等實驗中,這些技術(shù)優(yōu)勢得到了極佳的驗證。
圖1SQIT構(gòu)造流程圖。
圖2基于SQIT的査詢處理流程圖。
圖3一組查詢及對應(yīng)的SQIT示意圖。
圖4SQIT上的復(fù)雜査詢執(zhí)行過程示意圖。
具體實施例方式
有關(guān)的一些名詞、概念和定義 1, XPath的包含關(guān)系
對兩個XPath查詢Ql和Q2,如果對任何給定的XML 文檔Q 1的結(jié)果都被Q2的查詢結(jié)果所包含,我們稱Q 1被 Q2所包含,并將這個關(guān)系記為Q2 Ql。
2 , 查詢樹
對客戶端針對服務(wù)器端一個XML文檔提交的/7個 XPath查詢("…。 ),服務(wù)器端根據(jù)以下規(guī)則構(gòu)造査詢樹 a)服務(wù)器端持有的壓縮XML文檔記為査詢樹的虛擬根 節(jié)點,因為任何 一 個査詢結(jié)果都是被該文檔所包含;
根節(jié)點的后代節(jié)點魚厶 朱 口由所有查詢的對應(yīng)節(jié)點所組
欣 對每個査詢節(jié)占 "、、作遞歸定義對于當(dāng)前節(jié)點,必、有
個后代査詢節(jié)占隹A 朱 口(為空時即為葉節(jié)點)。利用
分類算法對集合內(nèi)所有查詢進(jìn)行分類。分類結(jié)束后
每個類內(nèi)最大査詢對應(yīng)的節(jié)點是當(dāng)前節(jié)點的孩子節(jié)
點類內(nèi)的其它査詢節(jié)點組成該孩子的后代查詢節(jié)
點集。
3, XPath的簡化 對于一個形如。=…/a"的XPath, 可簡化為『=/a,/^…/a,,記為。-C;對于形如 C = //a…,則等同于對整個XML文檔(doc)進(jìn)行查詢。 4, 查詢索弓|樹(Query Index Tree, QIT):
QIT是在服務(wù)器端的查詢索引。對客戶端提交的/2
個査詢",C ......,",根據(jù)查詢之間的包含關(guān)系,
確定査詢樹如下a) 由于所有查詢的結(jié)果都是被査詢文 査詢樹的根標(biāo)記為";
b) 每個分支節(jié)點都有一個子孫集合, 都被當(dāng)前分支節(jié)點的查詢所包含;
c) 每個節(jié)點標(biāo)記為(Qid, begin, end
表示提交該節(jié)點査詢對應(yīng)的客戶端 作為該節(jié)點査詢結(jié)果在壓縮文檔中 當(dāng)前節(jié)點位置標(biāo)記的結(jié)果精確與否 5,子索引
客戶端提交的査詢。對應(yīng)的子索引為服務(wù)器端的QIT 中以。的節(jié)點的子樹,該子樹提供的信息包括節(jié)點。的 所有子孫節(jié)點查詢,以及每個子孫節(jié)點查詢在壓縮文檔 中的查詢結(jié)果索引。
6,復(fù)雜路徑結(jié)構(gòu)SXP:
給定XPath査詢。,根據(jù)。的分割片斷以及片斷之間 的關(guān)系組合而成的結(jié)構(gòu)即為SXP。SXP作為 一 種樹形結(jié)構(gòu), 表示為(r, A, &),其中
a) K表示有查詢。的分割片斷組成的集合;
b) A為主鏈接集合,即組成P的主路徑中的所有有向 邊,其中最后一個分割片斷的結(jié)束元素即為最終返 回的元素名。
c) &為次鏈接集合,其中每條邊都用于連接謂詞中的 分支片斷和對應(yīng)主路徑上的分割片斷。
7,結(jié)構(gòu)化査詢索引樹SQIT:
與普通査詢樹相同,SQIT是基于査詢之間的包含關(guān) 系確定層次結(jié)構(gòu),但進(jìn)一步挖掘了父子節(jié)點之間的共享 前綴關(guān)系以提高查詢處理的時間。SQIT的定義如下
給定 一 個提交的XPath查詢集SQ= {Ql, Q2, , Qn},
檔"的 一 部分, 集合中所有查詢
,p/l )。其中Qid id, begin禾卩 end 的位置,P/I表示SQ對應(yīng)的SQIT表示為一個三元組(VQ, E, R),其中每 個元素的意義為
VQ是一個查詢節(jié)點的有限集合,其中每個節(jié)點對應(yīng) 一個SQ中獨立的査詢。E是代表査詢樹中父子關(guān)系的邊 的集合;R為查詢樹的虛擬根,用以保證根據(jù)包含關(guān)系得 到的結(jié)構(gòu)是樹而不是森林。在下文中我們交替使用"査 詢"和"査詢節(jié)點"表示查詢樹中的節(jié)點及其對應(yīng)查詢。
每個査詢節(jié)點都被定義為一個 (Qcid, SXPQ, begin[], end[])的四元結(jié)構(gòu),其中"Qcid"用于表示 對應(yīng)客戶端的標(biāo)志,"SXPQ"為該查詢對應(yīng)的SXP結(jié)構(gòu); 而"begin [] " " end []"分別用來記錄該查詢對應(yīng)每個結(jié) 果片段的起始和結(jié)束位置。
所有的查詢節(jié)點組成根節(jié)點R的后代集合;E是用于 代表VQ中節(jié)點間包含關(guān)系的邊的集合。
算法描述 1 , SQIT的構(gòu)造算法
SQIT的構(gòu)造算法如圖l所示。SQIT的構(gòu)造算法,主 要通過遞歸計算查詢之間的包含關(guān)系來實現(xiàn)。在算法主 體當(dāng)中,我們采用棧結(jié)構(gòu)來存儲 一 個分支上的查詢節(jié)點, 而每個棧中的節(jié)點都會被遞歸地進(jìn)行分類直到每個分類 中只有一個節(jié)點為止。構(gòu)造SQIT的流程圖如圖2所示, 其 一 般步驟如下
Step 1:首先建立一個空棧,并將隨機(jī)抽取的第一 個査詢推入該棧當(dāng)中。
Step 2:針對每一個新到來的査詢,如果是復(fù)雜查 詢,就對它轉(zhuǎn)化為SXP,然后,將它和當(dāng)前所有棧的棧頂
査詢比較,針對不同情況,分別做如下的處理
a)如果該査詢被某個棧的棧頂查詢所包含,新查詢的節(jié)點將被推入這個棧,而目前的棧頂節(jié)點將保持不 變。
b)如果新查詢包含了某個棧的棧頂節(jié)點査詢,它將作 為這個棧的桟頂被保存,同時繼續(xù)和其他棧頂比 較,因為可能有其他桟的棧頂也被當(dāng)前査詢所包 含。 一 旦這種情況出現(xiàn),我們將把兩個棧進(jìn)行合并, 并且把新査詢作為合并棧的棧頂。
C)如果對新査詢沒有棧頂與之存在包含關(guān)系,我們將 為它建立一個新棧。
Step 3:在所有查詢都執(zhí)行完成后,每個棧代表一 個獨立的查詢類。對包含超過一個節(jié)點的類,遞歸調(diào)用 分類算法并根據(jù)包含關(guān)系建立層次結(jié)構(gòu),直到整棵SQIT 建立完成。
在以上的算法執(zhí)行過程中,我們討論了 一個査詢包 含多個分類的情況,但同時還有 一 種情況,即 一 個查詢 可能被超過一個的分支所包含。如果要在SQIT中完全保 存這種關(guān)系,SQIT將被構(gòu)造成為 一 個圖而不是樹,這樣 使得査詢處理的過程需要判斷哪些是祖先哪些是后代。 例如 XPath 査詢 QH= " /a/求/d/e ,,, 同時被 QC = "/a/*/d"和QD二" /a/7e"所包含。為了避免SQIT演
變成圖,我們可以采用一些啟發(fā)式策略,例如選擇包含
節(jié)點比較少的分支(例如QD )。這是因為分支中節(jié)點越多,嵌套的層數(shù)可能越深,那么對每個XML節(jié)點遞歸判斷的
可能性就越高,因此選擇節(jié)點較少的分支可以減小查詢
處理的復(fù)雜度。另外 一 種直觀的方法則是將這個查詢歸
類到遇到的第一個包含它的分支中,在我們的算法里,
為了簡化問題就采用了這種策略。
2 ,多査詢處理算法在查詢處理的過程中,壓縮文檔將按照SAX流的方 式被遍歷。對每個壓縮狀態(tài)下的標(biāo)簽,SQIT中的每個査 詢都有且只有以下的一種狀態(tài)滿足,不滿足或部分滿 足。在査詢處理過程中,三種不同類型的數(shù)據(jù)結(jié)構(gòu)將被 用來保存對應(yīng)這個標(biāo)簽T的查詢節(jié)點狀態(tài)
a) UnsatNodes保存SQ I T中不滿足子樹的根節(jié)點;
b) WaitCXPs保存在T處獲得部分滿足的片段對應(yīng)的后 繼片段;
c) SatNodes保存在T處獲得完全滿足的所有節(jié)點。
最后,我們用 一 個棧path structure來保存這個壓 縮標(biāo)簽T對應(yīng)的三個結(jié)構(gòu)。
對 一 個壓縮的XML標(biāo)簽T,如果SQIT中的 一 個查詢 不能被滿足,則沒有必要檢測它的任何 一 個子孫。我們 只用保存棧中這些節(jié)點的不滿足狀態(tài)即可。因為SQIT中 的祖先節(jié)點査詢包含了所有后代的査詢, 一旦SQIT中一 棵子樹的根不能得到滿足,那么這棵子樹內(nèi)的所有其他 節(jié)點都不可能被當(dāng)前標(biāo)簽所滿足。
對于每個到來的標(biāo)簽,還有 一 些節(jié)點可能在這個標(biāo) 簽上獲得部分滿足。對每個部分滿足的復(fù)雜査詢來說, 我們將保存其SXP結(jié)構(gòu)中等待被滿足的部分(當(dāng)前被滿 足片斷的后繼片斷)放入當(dāng)前標(biāo)簽的WaitCXPs當(dāng)中。
圖3詳細(xì)描述了基于SQIT的多査詢處理算法,圖4 是其流程圖。其 一 般執(zhí)行步驟如下
Step 1:首先,對查詢文檔的根元素構(gòu)造一個初始 的pathstructure(PS)結(jié)構(gòu),并把SQIT根節(jié)點的所有 孩子插入到該PS結(jié)構(gòu)的UnsatNodes中去。
Step 2:當(dāng)一個遍歷到下一個新的壓縮標(biāo)簽T時(假 設(shè)T的父親標(biāo)簽為P),每個P的UnsatNodes中的査詢節(jié)點Qu和P的WaitCXPs中等待的分割片斷都要與T進(jìn)行 比較。對任何 一 個Qu節(jié)點,我們按照以下策略來檢測該 節(jié)點是否能被當(dāng)前標(biāo)簽滿足利用共享索引5\來確定哪 些檢測可以直接跳過。 一 旦5",的值大于當(dāng)前檢測CXP的 層數(shù),那么當(dāng)前CXP將被跳過。只有當(dāng)比較的CXP層數(shù) 與&相等時,這個CXP的后繼片斷將被加入到WaitCXPs 當(dāng)中對于共享索引為零的SXP孩子,它們的首個分割片 斷將被與71比較。
針對査詢節(jié)點Qu的不同情況,分別做如下的處理
a) 如果Qu的查詢是簡單路徑查詢,對應(yīng)的區(qū)間將和 當(dāng)前壓縮標(biāo)簽的值進(jìn)行比較;
b) 如果Qu的查詢是復(fù)雜查詢且己經(jīng)被轉(zhuǎn)化成為對應(yīng) 的SXP ,則根片斷將和T進(jìn)行比較,
c) 如果跟片斷被滿足,那么所有的后繼片斷將作為等 候片斷被插入T的WaitCXPs中,同時Qu的SXP孩 子節(jié)點也要與當(dāng)前的T繼續(xù)比較。
d) 如果Qu在此處獲得完全滿足,那么Qu的所有孩子 都必須跟T進(jìn)行比較。但如果Qu在T處仍然處于 不滿足狀態(tài),那么Qu將被保存到T的UnsatNodes 中去。
下面通過 一 個實例來說明如何執(zhí)行XML數(shù)據(jù)多查詢 處理技術(shù)。它可以通過如下幾個步驟來完成 首先對原始XML文檔進(jìn)行壓縮 利用算法1,建立結(jié)構(gòu)化查詢索引樹SQIT。 根據(jù)建立完成的結(jié)構(gòu)化査詢索引樹SQIT,利用查詢 算法3進(jìn)行査詢處理。
其中,每一步的具體過程在發(fā)明內(nèi)容部分已有詳細(xì) 描述。附圖5 —組査詢及對應(yīng)的SQIT:
査詢集SQ={QA, QB, QI}在圖5下方的框當(dāng)中,由
客戶端提交的九個査詢,并被組織成上方的樹所示的 SQIT??梢钥闯鲇捎赒B被QA包含,QB對應(yīng)的節(jié)點成為 QA節(jié)點的后代。
當(dāng)標(biāo)簽<^>到來時,。,的第 一 個片段 "/a "獲得滿 足,同時"的第一個片段與。p的相同,當(dāng)然也可以被滿 足。因此"和"的第 一 個片段可以被同時評估;否則當(dāng) "被完全滿足后才開始評估。w時,。。結(jié)果中每個元素的 路徑信息都己經(jīng)被丟失。除了及時地保留了每個潛在結(jié) 果的路徑信息以外,我們可以通過前綴共享原則來避免 "和。w反復(fù)地與標(biāo)簽Q,比較,因為這樣的比較可能由于 前綴的不斷共享而重復(fù)到更深的層次,使得查詢評估的 復(fù)雜度呈指數(shù)增長。因此我們使用了共享索引標(biāo)記到從 SQIT分支節(jié)點指出的有向邊上。在例3中,從"到"的 有向邊上,標(biāo)記的共享索引"(1)"表示"共享了與其父 親節(jié)點相同的第 一 個片段。而。,的第 一 個片段 "/a/b " 對應(yīng)的區(qū)間與 "/a "的區(qū)間沒有直接的關(guān)系,因此。f和 "之間的共享索引為"(0)"。
附圖6SQIT上的復(fù)雜查詢執(zhí)行過程
在圖5中,QA, QC, QD, QB, QF和QH是由不同客戶 端A-H提交的復(fù)雜査詢。在SQIT構(gòu)造階段,這些查詢都 被轉(zhuǎn)化為SXP結(jié)構(gòu)并插入到SQIT當(dāng)中。我們用Qij表示 每個查詢的分割片斷,其中i〈{A, B,…,H},而j代表 每個SXP中每個片斷(即CXP)的編號。圖6展示了查詢 執(zhí)行的過程。
首先QA作為根節(jié)點的孩子在初始化過程中插入文檔 根元素的 UnsatNodes中。在壓縮標(biāo)簽〈a〉到來時,在根節(jié)點UnsatNodes中的節(jié)點QA被檢測,并發(fā)現(xiàn)與當(dāng)前標(biāo) 簽匹配,因此QA作為〈a〉的SatNodes被插入,同時QA 的所有孩子(包括SXP與路徑查詢的孩子)都將與當(dāng)前 標(biāo)簽〈a〉進(jìn)行比較。顯然QC和QD的第一個CXP能夠獲得 滿足,因此它們的SXP孩子將被繼續(xù)檢測,同時QH的第 一個CXP也獲得滿足。對于以上幾個獲得滿足的CXP,他 們的后繼片斷(QC2, QD2和 QH2)將被插入到〈a〉的 WaitCXPs當(dāng)中。其中QG作為簡單路徑,對應(yīng)的區(qū)間無法 與〈a〉的編碼相匹酉己。因此QG將豐皮插入〈a〉的UnsatNodes 中。同樣的動作在不同標(biāo)簽到來時執(zhí)行。例如當(dāng)標(biāo)簽〈d〉 到來時,QC將獲得完全滿足并插入到〈d〉的SatNodes中, 而他的孩子節(jié)點QB ,作為無法被滿足的復(fù)雜查詢,將被 插入至U對應(yīng)的UnsatNodes中。
權(quán)利要求
1、一種XML壓縮數(shù)據(jù)的多查詢處理方法,該方法步驟是a,對原始的XML文檔進(jìn)行壓縮;b,采用SQIT構(gòu)造算法,建立結(jié)構(gòu)化查詢索引樹SQIT;c,根據(jù)建立的構(gòu)化查詢索引樹SQIT,進(jìn)行SQIT查詢算法處理。
2、 按權(quán)利要求l所述的XML壓縮數(shù)據(jù)的多査詢處理方法, 其中SQIT構(gòu)造算法的步驟是步驟l,輸入?yún)?shù)Sq和R,其中,Sq是査詢集合,R是査 詢樹的根節(jié)點;步驟2,初始化循環(huán)變量qn為0,用來標(biāo)記當(dāng)前處理的 查詢;步驟3 ,判斷條件,如果Sq中還有未被處理的查詢,就執(zhí) 行4 ;否則,就執(zhí)行1 2 ;步驟4,Q是Sq中正在被處理的査詢,如果Q是復(fù)雜查詢, 就將Q轉(zhuǎn)化為SXP,然后初始化循環(huán)變量sn; 步驟5,針對當(dāng)前每一個棧,都執(zhí)行6;步驟6 ,如果Q包含當(dāng)前棧頂元素,就執(zhí)行7 ;否則,執(zhí) 行8;步驟7,把Q壓入當(dāng)前棧內(nèi),如果Q包含多個棧頂元素, 就合并這些棧,并把Q作為棧頂元素 ,步驟8 ,如果棧頂元素包含Q ,就執(zhí)行9 ;否則,執(zhí)行5 ; 步驟9,把Q壓入到棧的次頂元素中;步驟10,如果Q與所有的棧頂元素都沒有包含關(guān)系,就 新建一個棧,把Q壓入新棧;步驟11,計算共享前綴,并把所有棧頂元素記為R的孩 子;步驟12,初始化循環(huán)變量n為0;步驟13,針對每一個棧,如果含有多個元素,就遞歸執(zhí) 行1;步驟14,輸出SQIT樹,結(jié)束。
3、按權(quán)利要求l所述的XML壓縮數(shù)據(jù)的多査詢處理方法, 其中SQIT査詢算法處理,其步驟是步驟1,輸入?yún)?shù)Doc和S,it,其中,Doc是壓縮的XML 文檔,S。it是包含所有子查詢的SQIT樹; 步驟2,初始化,新建關(guān)于Doc根節(jié)點的路徑結(jié)構(gòu)PSr, 并將S,"的根壓入至lJ PSr的U固tNodes中,再把PSr壓入 到路徑棧中;步驟3 ,針對每 一 個標(biāo)志T ,執(zhí)行4 ;步驟4,新建T的路徑結(jié)構(gòu)PST,并把路徑棧的棧頂元素 記為PSp。
全文摘要
本發(fā)明為一種壓縮XML數(shù)據(jù)多查詢處理方法,其是一種在分布式網(wǎng)絡(luò)環(huán)境下的結(jié)構(gòu)化查詢索引樹結(jié)構(gòu),使之作為全局結(jié)構(gòu)優(yōu)化整個網(wǎng)絡(luò)的穩(wěn)定性,并具有多樣的查詢支持能力;該方法步驟是a,對原始的XML文檔進(jìn)行壓縮;b,采用SQIT構(gòu)造算法,建立結(jié)構(gòu)化查詢索引樹SQIT;c,根據(jù)建立的構(gòu)化查詢索引樹SQIT,進(jìn)行SQIT查詢算法處理。在給定XML源文檔和查詢語句的基礎(chǔ)上,首先構(gòu)造對應(yīng)的結(jié)構(gòu)化查詢索引樹SQIT,然后在此基礎(chǔ)上進(jìn)行查詢處理。本發(fā)明方法新穎高效,并具有很好的可擴(kuò)展性。
文檔編號G06F17/30GK101436199SQ20081020069
公開日2009年5月20日 申請日期2008年9月27日 優(yōu)先權(quán)日2008年9月27日
發(fā)明者周傲英, 和菊珍, 王曉玲 申請人:復(fù)旦大學(xué)