欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種XML數(shù)據(jù)的快速查詢方法與流程

文檔序號(hào):11514881閱讀:226來源:國(guó)知局
一種XML數(shù)據(jù)的快速查詢方法與流程

本發(fā)明屬于信息交換和查詢領(lǐng)域,尤其涉及一種xml數(shù)據(jù)的快速查詢方法,具體為在xml數(shù)據(jù)中進(jìn)行由多個(gè)具有復(fù)雜結(jié)構(gòu)關(guān)系的標(biāo)簽路徑組成的層次融合式查詢,并返回二維結(jié)果值集合。



背景技術(shù):

xml(extensiblemarkuplanguage),即可擴(kuò)展的標(biāo)記語言,是一套定義語義標(biāo)記的規(guī)范。xml提供統(tǒng)一的方法來描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。是internet環(huán)境中跨平臺(tái)的、依賴于內(nèi)容的技術(shù),也是當(dāng)今處理分布式結(jié)構(gòu)信息的有效工具。隨著網(wǎng)絡(luò)應(yīng)用的快速發(fā)展,使得xml類型的數(shù)據(jù)成為基于互聯(lián)網(wǎng)數(shù)據(jù)交換的主流數(shù)據(jù)形式。

xml格式數(shù)據(jù)具有天然的層次結(jié)構(gòu)關(guān)系即樹形結(jié)構(gòu)關(guān)系,因此在很多應(yīng)用場(chǎng)合下針對(duì)xml數(shù)據(jù)的查詢也具有層次關(guān)系特性。在傳統(tǒng)關(guān)系數(shù)據(jù)庫中一種常見的層次數(shù)據(jù)查詢應(yīng)用:有條件地從不同層級(jí)的數(shù)據(jù)表中檢索多個(gè)字段的數(shù)據(jù)。假定以下關(guān)系:部門(部門編號(hào),部門名稱);員工(員工編號(hào),部門編號(hào),員工姓名,職位,性別,年齡),部門和員工之間是一對(duì)多的關(guān)系(樹狀結(jié)構(gòu)),對(duì)應(yīng)的簡(jiǎn)寫:dept(dep_id,dep_name)和emp(emp_id,dep_id,name,title,gender,age)。顯然部門表和員工表是不同層次關(guān)系的表,后者是前者的子表,現(xiàn)在要檢索出“年齡大于40歲的所有的員工姓名、職位和所屬部門名稱”,那么對(duì)應(yīng)的sql腳本語句如下:

selectemp.name,emp.title,dept.dept_name

fromdept,emp

wheredept.dept_id=emp.dep_id

andage>40;

總結(jié)這種層次表聯(lián)接(融合性)查詢具有以下特點(diǎn):

1)數(shù)據(jù)的循環(huán)層次,結(jié)果集是以員工層次為中心的循環(huán)數(shù)據(jù)集而不是部門,在sql中缺省以最低層次為循環(huán)中心;

2)員工表中必須要有部門編號(hào),標(biāo)注自己所屬部門;

3)連接操作體現(xiàn)出層次之間的關(guān)聯(lián)關(guān)系同時(shí)又具有隔離性,即具有相同部門編號(hào)的員工(在員工表中)的所屬部門信息(在部門表中)也相同,同時(shí)不同的部門擁有不同的員工,即使有跨部門員工,此員工信息也會(huì)出現(xiàn)多次(部門編號(hào)不同,一對(duì)多關(guān)系);

4)要查詢的字段也具有層次融合性,每個(gè)員工除了自己的專有信息外還包括所屬部門的名字。

作為數(shù)據(jù)交換的主體,xml又具有很強(qiáng)的層級(jí)結(jié)構(gòu)自描述特性,上面的兩張具有“父子關(guān)系”的數(shù)據(jù)表(部門表和員工表)可以很容易轉(zhuǎn)換成二級(jí)循環(huán)(部門和員工)的xml格式數(shù)據(jù),下層xml分支嵌套在上層的某個(gè)循環(huán)分支中,即多個(gè)員工信息(同一部門的員工)的下層分支嵌入到所屬部門的上層分支中,具有天然或缺省的層次聯(lián)接條件,不需要在員工層標(biāo)明部門編號(hào)(部門編號(hào)作為嵌入的員工層分支的祖先節(jié)點(diǎn)形式存在),避免了上述特點(diǎn)2)節(jié)省了存儲(chǔ)空間?;诖?,針對(duì)此類xml數(shù)據(jù)提出上述的層次融合式查詢需求也是很自然的事情。那么目前的針對(duì)xml的查詢處理技術(shù)是不是能夠很好的解決上述問題呢?

xpath是一種在xml文檔中查找信息的語言,是w3c推薦標(biāo)準(zhǔn),迄今為止,學(xué)術(shù)界集中討論的基于xml的處理都是圍繞著xpath展開的。xpath借助于路徑表達(dá)式來選取xml文檔中的節(jié)點(diǎn)、節(jié)點(diǎn)集合、原子值、以及節(jié)點(diǎn)和原子值的混合。通過沿著位置路徑表達(dá)式(path)或者步(steps)來選取相關(guān)節(jié)點(diǎn)。

但是由于語法上的限制,一般情況下xpath返回的都是一維的結(jié)果集,結(jié)果集的元素之間都是兄弟關(guān)系,即使使用聯(lián)合操作"|"強(qiáng)行合并兩個(gè)表達(dá)式返回的值集合也不能得到正確的層次融合式結(jié)果集。因此單獨(dú)使用xpath不能直接返回具有不同層次結(jié)構(gòu)關(guān)系的多個(gè)字段(或者標(biāo)簽路徑)的值集合。

xquery建立在xpath表達(dá)式基礎(chǔ)之上用于xml的數(shù)據(jù)查詢語言,xquery在xpath之后成為w3c推薦標(biāo)準(zhǔn)。xquery天生支持xpath并將其作為xquery語法的一部分,xquery顯然能完成xpath所能完成的任何任務(wù)。

但是xquery是圖靈完備的(turing-complete),可以被看作是一種通用語言,因而很容易克服xpath的諸多局限,xquery提供了一批重要的內(nèi)置函數(shù)和運(yùn)算符,而且還提供了表達(dá)對(duì)結(jié)果集進(jìn)行任意轉(zhuǎn)換的功能。但xquery使用的復(fù)雜性明顯增加,使用xquery返回具有不同層次結(jié)構(gòu)關(guān)系的結(jié)果集往往需要編寫非常復(fù)雜多層嵌套的xquery腳本,甚至需要編程語言的幫助下才能完成融合式的查詢,而且腳本的執(zhí)行在時(shí)空效率上要依賴于所選擇的xquery查詢引擎。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明要解決的技術(shù)問題是,提供一種xml數(shù)據(jù)的快速查詢方法,能夠滿足查詢自適應(yīng)性和較高時(shí)空效率的要求。

為實(shí)現(xiàn)上述目的,本發(fā)明采用如下的技術(shù)方案:

一種xml數(shù)據(jù)的快速查詢方法,包括以下步驟:

步驟1、查詢參數(shù)預(yù)處理:構(gòu)建謂詞表達(dá)式語法計(jì)算樹、查詢導(dǎo)航樹

步驟、101如果謂詞表達(dá)式不存在的話,跳轉(zhuǎn)到步驟104,如果存在,順序執(zhí)行下一步驟;

步驟102、按照表達(dá)式ebnf范式,語法分析謂詞條件表達(dá)式,并把操作數(shù)作為葉子節(jié)點(diǎn),把相關(guān)的操作符作為其父節(jié)點(diǎn),依次類推構(gòu)造謂詞語法計(jì)算樹;

步驟103、把每個(gè)條件表達(dá)式子項(xiàng)中的標(biāo)簽路徑追加到查詢標(biāo)簽路徑表中;

步驟104、針對(duì)查詢標(biāo)簽列表中的每一個(gè)標(biāo)簽路徑,分拆成一組標(biāo)簽序列;

步驟105至107針對(duì)此標(biāo)簽路徑的標(biāo)簽序列,按照順序處理每一個(gè)標(biāo)簽:如果此標(biāo)簽沒在查詢樹結(jié)構(gòu)中,則創(chuàng)建新的節(jié)點(diǎn)結(jié)構(gòu)編入查詢樹中,在節(jié)點(diǎn)中放入此標(biāo)簽的詳細(xì)信息,同時(shí)把導(dǎo)航信息放入此節(jié)點(diǎn)中,包括:“父子”指針、“子父”指針,按照順序檢查下一個(gè)標(biāo)簽、重復(fù)執(zhí)行步驟105;如果在查詢樹結(jié)構(gòu)中已經(jīng)存在,順序查找下一個(gè)標(biāo)簽,重復(fù)執(zhí)行步驟105;直到標(biāo)簽序列結(jié)束執(zhí)行步驟108。

步驟108遍歷查詢導(dǎo)航樹,繼續(xù)豐富節(jié)點(diǎn)的導(dǎo)航信息。

步驟2、查詢處理并提供二維結(jié)果集

步驟201、解析目標(biāo)xml數(shù)據(jù)讀入內(nèi)存中,構(gòu)造數(shù)據(jù)對(duì)象樹,此對(duì)象樹節(jié)點(diǎn)中只存在“父子關(guān)系”的向下單向指針,無“子父關(guān)系”的向上指針;

步驟202、遍歷查詢導(dǎo)航樹同時(shí)遍歷xml數(shù)據(jù)樹,對(duì)于查詢樹中的查詢節(jié)點(diǎn)和數(shù)據(jù)樹中的相關(guān)數(shù)據(jù)節(jié)點(diǎn)采用“雙樹剪枝”算法作遍歷檢查處理:查詢標(biāo)簽節(jié)點(diǎn)存在但無數(shù)據(jù)標(biāo)簽節(jié)點(diǎn)與之對(duì)應(yīng),則以此查詢節(jié)點(diǎn)為根節(jié)點(diǎn)的查詢分支不再遍歷;查詢節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的標(biāo)簽名相同,則通過此標(biāo)簽節(jié)點(diǎn)或者收集其標(biāo)簽路徑的結(jié)果值放入緩存;數(shù)據(jù)標(biāo)簽節(jié)點(diǎn)存在但無查詢標(biāo)簽節(jié)點(diǎn)與之對(duì)應(yīng),則遍歷跳過以此數(shù)據(jù)節(jié)點(diǎn)為根節(jié)點(diǎn)的數(shù)據(jù)分支;

步驟203和204、如果遍歷到已標(biāo)注謂詞計(jì)算位置的標(biāo)簽節(jié)點(diǎn)上,則提取表達(dá)式中的各標(biāo)簽路徑對(duì)應(yīng)值,然后開始按照謂詞表達(dá)式語法計(jì)算樹結(jié)構(gòu)要求計(jì)算表達(dá)式,結(jié)果為真則執(zhí)行步驟205,結(jié)果為假則執(zhí)行步驟206;

步驟205、收集本次的標(biāo)簽對(duì)應(yīng)值并放入緩存中;

步驟206、越過此指定循環(huán)點(diǎn)路徑的分支,繼續(xù)下一個(gè)分支,如果是最后的數(shù)據(jù)分支,則執(zhí)行步驟207,如果不是則執(zhí)行步驟202;

步驟207、收集所有緩存中的標(biāo)簽對(duì)應(yīng)結(jié)果集,合并組成二維標(biāo)簽結(jié)果集,并返回。

作為優(yōu)選,采用雙樹剪枝算法作遍歷檢查處理過程為:遍歷的過程中,當(dāng)前標(biāo)簽節(jié)點(diǎn)要選定下一個(gè)孩子標(biāo)簽節(jié)點(diǎn)時(shí):假定nq為當(dāng)前查詢樹節(jié)點(diǎn),nlqc為nq的所有孩子節(jié)點(diǎn)集合,其標(biāo)簽列表為tlqc,nqc為nq的目標(biāo)孩子節(jié)點(diǎn),tqc為其標(biāo)簽;nd為當(dāng)前數(shù)據(jù)樹節(jié)點(diǎn),其標(biāo)簽和nq節(jié)點(diǎn)的標(biāo)簽相同,nldc為nd的所有孩子節(jié)點(diǎn)集合,其標(biāo)簽列表為tldc,ndc為nd的孩子節(jié)點(diǎn),tdc為其標(biāo)簽;對(duì)于nlqc的所有查詢子節(jié)點(diǎn)對(duì)應(yīng)的標(biāo)簽,依次要到數(shù)據(jù)樹的nldc中查找和檢查:

a)當(dāng)數(shù)據(jù)子節(jié)點(diǎn)標(biāo)簽tdc不屬于tlqc時(shí),意味著以ndc為根節(jié)點(diǎn)的數(shù)據(jù)分支無須繼續(xù)查詢,數(shù)據(jù)樹遍歷時(shí)可以剪掉此分支,即對(duì)數(shù)據(jù)樹剪枝;

b)當(dāng)tdc等于tqc時(shí),意味著以nqc和ndc為根節(jié)點(diǎn)的分支都需要繼續(xù)深入遍歷查詢,如果nqc為葉子節(jié)點(diǎn),則收集此標(biāo)簽對(duì)應(yīng)的結(jié)果,否則要對(duì)其孩子節(jié)點(diǎn)重復(fù)上述過程;

c)當(dāng)tqc不屬于tldc時(shí),意味著要查詢的標(biāo)簽在nldc中不存在,那么以nqc為根節(jié)點(diǎn)的查詢分支無須繼續(xù)查詢,查詢樹遍歷時(shí)可以剪掉此分支,即對(duì)查詢樹剪枝。

本發(fā)明的種xml數(shù)據(jù)的快速查詢方法,在xml數(shù)據(jù)中進(jìn)行由多個(gè)具有復(fù)雜層次結(jié)構(gòu)關(guān)系的標(biāo)簽路徑組成的層次融合式查詢,構(gòu)建了解決此問題的查詢模型——xml多標(biāo)簽路徑查詢(xmtq)。xmtq模型基于簡(jiǎn)潔的查詢接口(qi)、查詢導(dǎo)航樹數(shù)據(jù)結(jié)構(gòu)模型(qgt)和查詢處理引擎(qe),其中在qi中只提供要查詢的標(biāo)簽路徑即可,不需關(guān)注其復(fù)雜的結(jié)構(gòu)關(guān)系,可由模型自適應(yīng)標(biāo)簽路徑之間的結(jié)構(gòu)關(guān)系,也支持謂詞表達(dá)式參數(shù)接口;qgt具有“樹干”標(biāo)簽節(jié)點(diǎn)遍歷結(jié)果共享和快捷的遍歷導(dǎo)航路線特征,可以指導(dǎo)qe更快速、更精準(zhǔn)地遍歷、跳過無關(guān)分支、查詢并獲取相關(guān)的標(biāo)簽值。通過測(cè)試表明xmtq模型針對(duì)大規(guī)模xml數(shù)據(jù)查詢多個(gè)層次復(fù)雜的標(biāo)簽路徑具有突出的查詢時(shí)空效率。

附圖說明

圖1:查詢參數(shù)預(yù)處理流程圖;

圖2:查詢處理流程圖。

具體實(shí)施方式

本發(fā)明提供一種xml數(shù)據(jù)的快速查詢方法,采用新的層次融合式查詢模型xmtq(xmlmultipletagsquery),該模型接收多個(gè)查詢標(biāo)簽路徑,這些路徑之間的關(guān)系比較復(fù)雜,包括:“父子關(guān)系”、“兄弟關(guān)系”、“叔侄關(guān)系”、“祖先-子孫關(guān)系”、“叔公-侄孫關(guān)系”等。經(jīng)過查詢提取之后的結(jié)果集是一個(gè)二維的集合,第一維是按照xml數(shù)據(jù)中存放順序的每個(gè)指定“家族”/分支對(duì)應(yīng)的結(jié)果子集,第二維的結(jié)果子集是一個(gè)映射表,其中“鍵”對(duì)應(yīng)的是標(biāo)簽路徑,“值”是標(biāo)簽路徑所指定的融合后的結(jié)果值,具體技術(shù)方案如下:

1、提供簡(jiǎn)單的查詢接口

用戶只需要簡(jiǎn)單地提供查詢標(biāo)簽路徑列表、指定的循環(huán)點(diǎn)標(biāo)簽路徑和謂詞表達(dá)式(可選)即可,不需要額外關(guān)注多個(gè)查詢標(biāo)簽路徑之間復(fù)雜的結(jié)構(gòu)關(guān)系,不需要對(duì)查詢過程進(jìn)行干預(yù),不需要做“二次編程”或者“再查找”收集結(jié)果的工作。系統(tǒng)會(huì)封裝并自適應(yīng)查詢標(biāo)簽路徑的復(fù)雜層次結(jié)構(gòu)關(guān)系,查詢并自動(dòng)提取相應(yīng)的結(jié)果值集合,使得用戶能夠更專注自己的業(yè)務(wù)需求,快速適應(yīng)業(yè)務(wù)變化。

由于查詢請(qǐng)求參數(shù)同xml數(shù)據(jù)變化頻度不一致,一般地,查詢參數(shù)發(fā)生變化時(shí)系統(tǒng)必須要重新對(duì)查詢參數(shù)進(jìn)行預(yù)處理,而不是每次處理xml數(shù)據(jù)之前處理查詢參數(shù),所以整個(gè)查詢過程分為以下兩大部分:

2、查詢請(qǐng)求參數(shù)的預(yù)處理

2.1、構(gòu)建謂詞語法計(jì)算樹

按照如下條件表達(dá)式的ebnf范式對(duì)輸入的謂詞表達(dá)式進(jìn)行語法分析:

<條件>→<條件分項(xiàng)1>{or<條件分項(xiàng)1>}

<條件分項(xiàng)1>→<條件分項(xiàng)2>{and<條件分項(xiàng)2>}

<條件分項(xiàng)2>→not(<條件分項(xiàng)3>)|<條件分項(xiàng)3>

<條件分項(xiàng)3>→<表達(dá)式><關(guān)系運(yùn)算符><表達(dá)式>|(<條件>)

<表達(dá)式>→<項(xiàng)>{+<項(xiàng)>}|<項(xiàng)>{-<項(xiàng)>}

<項(xiàng)>→<因子>{*<因子>}|<因子>{/<因子>}

<因子>→tag_path|num|string|false|true|(<表達(dá)式>)

<關(guān)系運(yùn)算符>→<|<=|>|>=|==|?。?/p>

分解謂詞條件表達(dá)式之后構(gòu)造謂詞語法計(jì)算樹,操作數(shù)作為葉子節(jié)點(diǎn),把相關(guān)的操作符作為其父節(jié)點(diǎn),依次類推。同時(shí)把每個(gè)條件表達(dá)式子項(xiàng)中涉及到的標(biāo)簽路徑追加到查詢標(biāo)簽路徑列表中。

2.2、構(gòu)建查詢導(dǎo)航樹

1)輸入的查詢標(biāo)簽路徑是絕對(duì)路徑,每個(gè)標(biāo)簽路徑都是從根節(jié)點(diǎn)開始逐次向下,這些路徑之間存在著大量的可以共享的標(biāo)簽,那么可以把這些查詢路徑進(jìn)行某種程度上的合并,即構(gòu)建查詢樹,同時(shí)能夠反映出各個(gè)路徑之間的結(jié)構(gòu)層次關(guān)系。

2)每個(gè)構(gòu)成查詢樹的節(jié)點(diǎn)除了要有標(biāo)簽的信息之外,還要有詳盡的導(dǎo)航信息,方便對(duì)此查詢樹的遍歷,同時(shí)還要標(biāo)注可以對(duì)謂詞表達(dá)式計(jì)算的位置。

3、查詢處理并收集結(jié)果集

1)解析目標(biāo)xml數(shù)據(jù)讀入內(nèi)存中,構(gòu)造數(shù)據(jù)對(duì)象樹,此對(duì)象樹節(jié)點(diǎn)中只存在“父子關(guān)系”的向下單向指針,無“子父關(guān)系”的向上指針,有利于節(jié)省存儲(chǔ)空間,減少解析時(shí)間,提高時(shí)空效率。

2)查詢導(dǎo)航樹和xml數(shù)據(jù)樹的遍歷過程中,采用雙樹剪枝算法(查詢樹和數(shù)據(jù)樹)。

遍歷的過程中,當(dāng)前標(biāo)簽節(jié)點(diǎn)要選定下一個(gè)孩子標(biāo)簽節(jié)點(diǎn)時(shí):假定nq為當(dāng)前查詢樹節(jié)點(diǎn),nlqc為nq的所有孩子節(jié)點(diǎn)集合,其標(biāo)簽列表為tlqc,nqc為nq的目標(biāo)孩子節(jié)點(diǎn),tqc為其標(biāo)簽;nd為當(dāng)前數(shù)據(jù)樹節(jié)點(diǎn),其標(biāo)簽和nq節(jié)點(diǎn)的標(biāo)簽相同,nldc為nd的所有孩子節(jié)點(diǎn)集合,其標(biāo)簽列表為tldc,ndc為nd的孩子節(jié)點(diǎn),tdc為其標(biāo)簽。對(duì)于nlqc的所有查詢子節(jié)點(diǎn)對(duì)應(yīng)的標(biāo)簽,依次要到數(shù)據(jù)樹的nldc中查找和檢查:

a)當(dāng)數(shù)據(jù)子節(jié)點(diǎn)標(biāo)簽tdc不屬于tlqc時(shí),意味著以ndc為根節(jié)點(diǎn)的數(shù)據(jù)分支無須繼續(xù)查詢,數(shù)據(jù)樹遍歷時(shí)可以剪掉此分支,即對(duì)數(shù)據(jù)樹剪枝;

b)當(dāng)tdc等于tqc時(shí),意味著以nqc和ndc為根節(jié)點(diǎn)的分支都需要繼續(xù)深入遍歷查詢,如果nqc為葉子節(jié)點(diǎn),則收集此標(biāo)簽對(duì)應(yīng)的結(jié)果,否則要對(duì)其孩子節(jié)點(diǎn)重復(fù)上述過程;

c)當(dāng)tqc不屬于tldc時(shí),意味著要查詢的標(biāo)簽在nldc中不存在,那么以nqc為根節(jié)點(diǎn)的查詢分支無須繼續(xù)查詢,查詢樹遍歷時(shí)可以剪掉此分支,即對(duì)查詢樹剪枝。

3)在已標(biāo)注的計(jì)算點(diǎn)開始計(jì)算謂詞表達(dá)式,結(jié)果為真則繼續(xù)遍歷查詢,否則要跳過對(duì)此分支的遍歷查詢,跳轉(zhuǎn)到下一個(gè)循環(huán)分支。

如圖1和2所示,本發(fā)明實(shí)施例提供一種xml數(shù)據(jù)的快速查詢方法,具體流程包括以下步驟:

步驟1、查詢參數(shù)預(yù)處理:構(gòu)建謂詞表達(dá)式語法計(jì)算樹、查詢導(dǎo)航樹

步驟101如果謂詞表達(dá)式不存在的話,跳轉(zhuǎn)到步驟104,如果存在,順序執(zhí)行下一步驟。

步驟102按照表達(dá)式ebnf范式,語法分析謂詞條件表達(dá)式,并把操作數(shù)作為葉子節(jié)點(diǎn),把相關(guān)的操作符作為其父節(jié)點(diǎn),依次類推構(gòu)造謂詞語法計(jì)算樹。

步驟103把每個(gè)條件表達(dá)式子項(xiàng)中的標(biāo)簽路徑追加到查詢標(biāo)簽路徑表中。

步驟104針對(duì)查詢標(biāo)簽列表中的每一個(gè)標(biāo)簽路徑,分拆成一組標(biāo)簽序列。

步驟105至107針對(duì)此標(biāo)簽路徑的標(biāo)簽序列,按照順序處理每一個(gè)標(biāo)簽:如果此標(biāo)簽沒在查詢樹結(jié)構(gòu)中,則創(chuàng)建新的節(jié)點(diǎn)結(jié)構(gòu)編入查詢樹中,在節(jié)點(diǎn)中放入此標(biāo)簽的詳細(xì)信息,同時(shí)把導(dǎo)航信息放入此節(jié)點(diǎn)中,包括:“父子”指針、“子父”指針,按照順序檢查下一個(gè)標(biāo)簽、重復(fù)執(zhí)行步驟105;如果在查詢樹結(jié)構(gòu)中已經(jīng)存在,順序查找下一個(gè)標(biāo)簽,重復(fù)執(zhí)行步驟105;直到標(biāo)簽序列結(jié)束執(zhí)行步驟108。

步驟108遍歷查詢導(dǎo)航樹,繼續(xù)豐富節(jié)點(diǎn)的導(dǎo)航信息。

步驟2、查詢處理并提供二維結(jié)果集

步驟201解析目標(biāo)xml數(shù)據(jù)讀入內(nèi)存中,構(gòu)造數(shù)據(jù)對(duì)象樹,此對(duì)象樹節(jié)點(diǎn)中只存在“父子關(guān)系”的向下單向指針,無“子父關(guān)系”的向上指針,有利于節(jié)省存儲(chǔ)空間,減少解析時(shí)間,提高時(shí)空效率。

步驟202遍歷查詢導(dǎo)航樹同時(shí)遍歷xml數(shù)據(jù)樹,對(duì)于查詢樹中的查詢節(jié)點(diǎn)和數(shù)據(jù)樹中的相關(guān)數(shù)據(jù)節(jié)點(diǎn)采用“雙樹剪枝”算法作遍歷檢查處理:查詢標(biāo)簽節(jié)點(diǎn)存在但無數(shù)據(jù)標(biāo)簽節(jié)點(diǎn)與之對(duì)應(yīng),則以此查詢節(jié)點(diǎn)為根節(jié)點(diǎn)的查詢分支不再遍歷;查詢節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的標(biāo)簽名相同,則通過此標(biāo)簽節(jié)點(diǎn)或者收集其標(biāo)簽路徑的結(jié)果值放入緩存;數(shù)據(jù)標(biāo)簽節(jié)點(diǎn)存在但無查詢標(biāo)簽節(jié)點(diǎn)與之對(duì)應(yīng),則遍歷跳過以此數(shù)據(jù)節(jié)點(diǎn)為根節(jié)點(diǎn)的數(shù)據(jù)分支。

步驟203和204如果遍歷到已標(biāo)注謂詞計(jì)算位置的標(biāo)簽節(jié)點(diǎn)上,則提取表達(dá)式中的各標(biāo)簽路徑對(duì)應(yīng)值,然后開始按照謂詞表達(dá)式語法計(jì)算樹結(jié)構(gòu)要求計(jì)算表達(dá)式,結(jié)果為真則執(zhí)行步驟205,結(jié)果為假則執(zhí)行步驟206。

步驟205收集本次的標(biāo)簽對(duì)應(yīng)值并放入緩存中。

步驟206越過此指定循環(huán)點(diǎn)路徑的分支,繼續(xù)下一個(gè)分支,如果是最后的數(shù)據(jù)分支,則執(zhí)行步驟207,如果不是則執(zhí)行步驟202。

步驟207收集所有緩存中的標(biāo)簽對(duì)應(yīng)結(jié)果集,合并組成二維標(biāo)簽結(jié)果集,并返回。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
赫章县| 右玉县| 宁津县| 黄梅县| 黎川县| 淅川县| 平舆县| 攀枝花市| 古丈县| 丰顺县| 运城市| 微博| 阳东县| 巧家县| 眉山市| 和硕县| 碌曲县| 马公市| 惠东县| 会泽县| 武川县| 汝阳县| 镇康县| 灵台县| 平顺县| 孟州市| 常宁市| 十堰市| 兴化市| 延长县| 东安县| 舟曲县| 怀集县| 福泉市| 闽侯县| 新野县| 广德县| 肇东市| 东丽区| 米易县| 平定县|