国产精品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ù)的快速查詢方法與流程

      文檔序號(hào):11514882閱讀:461來(lái)源:國(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)記語(yǔ)言,是一套定義語(yǔ)義標(biāo)記的規(guī)范。xml提供統(tǒng)一的方法來(lái)描述和交換獨(dú)立于應(yīng)用程序的結(jié)構(gòu)化數(shù)據(jù)。隨著網(wǎng)絡(luò)應(yīng)用的快速發(fā)展,使得xml類型的數(shù)據(jù)成為基于互聯(lián)網(wǎng)數(shù)據(jù)交換的主流數(shù)據(jù)形式。xml流數(shù)據(jù)是以流的形式在線傳輸、實(shí)時(shí)到達(dá),需要即時(shí)解析和處理,因此針對(duì)大規(guī)模xml流數(shù)據(jù)的快速查詢處理是流查詢模型的研究熱點(diǎn)。

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

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

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

      2)員工表中必須要有部門(mén)編號(hào),標(biāo)注自己所屬部門(mén),需占用員工表空間;

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

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

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

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

      但是由于語(yǔ)法上的限制,一般情況下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ù)查詢語(yǔ)言,xquery在xpath之后成為w3c推薦標(biāo)準(zhǔn)。xquery天生支持xpath并將其作為xquery語(yǔ)法的一部分,xquery顯然能完成xpath所能完成的任何任務(wù)。

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



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

      為了解決上述問(wèn)題,本發(fā)明提供一種xml流數(shù)據(jù)的快速查詢方法,采用基于xml流數(shù)據(jù)的快速層次融合式查詢模型qxmtq(quickxmlmultipletagsquery),能夠滿足查詢自適應(yīng)性和較高時(shí)空效率的要求。

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

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

      步驟1、xmlschema定義預(yù)處理:構(gòu)建查詢導(dǎo)航pat樹(shù)

      步驟101、搜索根元素并根據(jù)其元素信息創(chuàng)建查詢樹(shù)的根節(jié)點(diǎn);

      步驟102、判斷是否為schema定義文檔中的最末元素,如果是結(jié)束此預(yù)處理,否則跳轉(zhuǎn)到步驟103;

      步驟103、通過(guò)當(dāng)前元素尋找所有子元素,構(gòu)建相對(duì)應(yīng)的子標(biāo)簽節(jié)點(diǎn)并放入查詢樹(shù)中,在該子標(biāo)簽節(jié)點(diǎn)中放入此子元素標(biāo)簽特定的詳細(xì)信息,同時(shí)在父-子標(biāo)簽節(jié)點(diǎn)中放入導(dǎo)航信息;

      步驟104、根據(jù)節(jié)點(diǎn)及其所有直屬孩子節(jié)點(diǎn)構(gòu)建patriciatries輔助快速搜索結(jié)構(gòu),中間pat節(jié)點(diǎn)記錄“共同”部分的長(zhǎng)度,葉子pat節(jié)點(diǎn)指向?qū)?yīng)的直屬孩子標(biāo)簽節(jié)點(diǎn);

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

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

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

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

      步驟204、判斷是否查詢標(biāo)簽路徑列表末尾,如果不是執(zhí)行步驟205,否則結(jié)束查詢參數(shù)預(yù)處理;

      步驟205、針對(duì)每一查詢標(biāo)簽路徑,首先分拆成一個(gè)標(biāo)簽序列,按照順序處理每一個(gè)標(biāo)簽,在查詢導(dǎo)航pat樹(shù)結(jié)構(gòu)中的對(duì)應(yīng)標(biāo)簽節(jié)點(diǎn)標(biāo)注為需要查詢聚焦:此標(biāo)簽節(jié)點(diǎn)狀態(tài)為“通過(guò)”,同時(shí)把父標(biāo)簽節(jié)點(diǎn)通向該標(biāo)簽節(jié)點(diǎn)的每一個(gè)pat節(jié)點(diǎn)標(biāo)注狀態(tài)為“通過(guò)”,其它的pat節(jié)點(diǎn)的狀態(tài)為“拒絕”;然后順序檢查下一個(gè)標(biāo)簽,直到此標(biāo)簽序列結(jié)束,跳轉(zhuǎn)執(zhí)行步驟204;

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

      步驟301、解析目標(biāo)xml流數(shù)據(jù)文檔,解析過(guò)程中根據(jù)產(chǎn)生的事件回調(diào)不同方法,其中事件“startelement”執(zhí)行步驟302、事件“characters”執(zhí)行步驟303、事件“endelement”執(zhí)行步驟304;

      步驟302、輸入標(biāo)簽匹配搜索查詢導(dǎo)航pat樹(shù)中從當(dāng)前標(biāo)簽節(jié)點(diǎn)也就是父標(biāo)簽節(jié)點(diǎn)開(kāi)始通過(guò)pat輔助結(jié)構(gòu)和其對(duì)應(yīng)的快速搜索算法,能夠快速檢查確定是否定位到正確的孩子節(jié)點(diǎn)標(biāo)簽上,根據(jù)匹配結(jié)果更新上下文狀態(tài),包括:“接受”和“拒絕”狀態(tài);

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

      步驟304、如果到達(dá)標(biāo)注謂詞計(jì)算位置的標(biāo)簽節(jié)點(diǎn),則提取表達(dá)式中的各標(biāo)簽路徑對(duì)應(yīng)值,然后開(kāi)始按照謂詞表達(dá)式語(yǔ)法計(jì)算樹(shù)結(jié)構(gòu)來(lái)計(jì)算表達(dá)式,結(jié)果為真則執(zhí)行步驟305,結(jié)果為假則拒絕收集以此標(biāo)簽節(jié)點(diǎn)為根節(jié)點(diǎn)的分支的所有標(biāo)簽值集;

      步驟305、如果計(jì)算結(jié)果為真并且本標(biāo)簽節(jié)點(diǎn)為“接受”狀態(tài),則收集本次標(biāo)簽對(duì)應(yīng)值并放入緩存中;

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

      作為優(yōu)選,步驟3中查詢處理過(guò)程以xml流數(shù)據(jù)為主導(dǎo),查詢導(dǎo)航pat樹(shù)為輔助指導(dǎo)作用,同時(shí)記錄系統(tǒng)的狀態(tài)變化或者上下文變化;假定當(dāng)前流數(shù)據(jù)節(jié)點(diǎn)元素nd下的某個(gè)孩子節(jié)點(diǎn)ndc,其標(biāo)簽為tdc,需要搜索匹配的對(duì)象是查詢樹(shù)中對(duì)應(yīng)節(jié)點(diǎn)nq下的所有孩子標(biāo)簽節(jié)點(diǎn)標(biāo)簽列表tlqc,找到標(biāo)簽tdc對(duì)應(yīng)查詢樹(shù)中孩子標(biāo)簽節(jié)點(diǎn)后同時(shí)檢測(cè)其是否為查詢聚焦的標(biāo)簽節(jié)點(diǎn)。因?yàn)樵摌?biāo)簽列表是當(dāng)前節(jié)點(diǎn)下所有孩子節(jié)點(diǎn)的全集,對(duì)應(yīng)需要的查詢聚焦的孩子節(jié)點(diǎn)標(biāo)簽列表為tlqfc,二者的關(guān)系為tlqc包含tlqfc;采用patriciatrie匹配搜索算法進(jìn)行匹配,分為如下幾種情況:

      a)查詢聚焦標(biāo)簽列表tlqfc為空,意味著以ndc為根節(jié)點(diǎn)的數(shù)據(jù)分支無(wú)須繼續(xù)查詢處理,可以剪掉此數(shù)據(jù)分支;

      b)tlqc等于tlqfc,意味著ndc數(shù)據(jù)節(jié)點(diǎn)無(wú)需匹配必然是是用戶查詢聚焦的標(biāo)簽,可以繼續(xù)后續(xù)查詢處理;

      c)tlqfc不為空同時(shí)tlqc真包含tlqfc,采用patricia搜索算法,其中pat節(jié)點(diǎn)記錄標(biāo)簽跳過(guò)的共同部分長(zhǎng)度,分支對(duì)應(yīng)不同的目標(biāo)匹配標(biāo)簽,搜索從pat根節(jié)點(diǎn)依次向下,直到到達(dá)“接受”或“拒絕”pat節(jié)點(diǎn);如果是“拒絕”pat節(jié)點(diǎn),意味著以ndc為根節(jié)點(diǎn)的數(shù)據(jù)分支無(wú)須繼續(xù)查詢處理,可以剪掉此數(shù)據(jù)分支;如果是“接受”pat節(jié)點(diǎn),意味著此ndc為查詢聚焦的標(biāo)簽。

      本發(fā)明的xml流數(shù)據(jù)的查詢方法,在xml流數(shù)據(jù)中進(jìn)行由多個(gè)具有復(fù)雜層次結(jié)構(gòu)關(guān)系的標(biāo)簽路徑組成的層次融合式查詢,并構(gòu)建了解決此問(wèn)題的快速查詢模型——快速xml多標(biāo)簽路徑查詢(qxmtq)。qxmtq模型基于簡(jiǎn)潔的查詢接口(qi)、查詢導(dǎo)航pat樹(shù)數(shù)據(jù)結(jié)構(gòu)模型(qgpatt)和快速查詢處理引擎(qqe),其中在qi中提供要查詢的標(biāo)簽路徑,由模型自適應(yīng)標(biāo)簽路徑之間的復(fù)雜層次結(jié)構(gòu)關(guān)系,支持謂詞表達(dá)式參數(shù)接口(可選);qgpatt共享標(biāo)簽導(dǎo)航結(jié)構(gòu)和輔助快速搜索結(jié)構(gòu)pat可以使qqe更快速、更精準(zhǔn)地匹配目標(biāo)標(biāo)簽、過(guò)濾無(wú)關(guān)分支、查詢并獲取相關(guān)的標(biāo)簽值。通過(guò)測(cè)試表明qxmtq模型針對(duì)大規(guī)模xml流數(shù)據(jù)查詢多個(gè)層次復(fù)雜的標(biāo)簽路徑具有非常突出的查詢時(shí)空效率。

      附圖說(shuō)明

      圖1:xmlschema定義預(yù)處理流程圖;

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

      圖3:查詢處理流程圖。

      具體實(shí)施方式

      本發(fā)明提供一種xml流數(shù)據(jù)的快速查詢方法,采用基于xml流數(shù)據(jù)的快速層次融合式查詢模型qxmtq(quickxmlmultipletagsquery),該模型接收多個(gè)查詢標(biāo)簽路徑,這些路徑之間的關(guān)系比較復(fù)雜,包括:“父子關(guān)系”、“兄弟關(guān)系”、“叔侄關(guān)系”、“祖先-子孫關(guān)系”、“叔公-侄孫關(guān)系”等。經(jīng)過(guò)解析查詢提取之后的結(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ì)查詢過(guò)程進(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ù)變化。

      由于xml定義文件、查詢請(qǐng)求參數(shù)同xml數(shù)據(jù)變化頻度不一致,一般地,xml定義文件幾乎不會(huì)變化;查詢請(qǐng)求參數(shù)的預(yù)處理具有相對(duì)的獨(dú)立性,不需每次處理xml數(shù)據(jù)之前處理xml定義文件或者查詢參數(shù),所以整個(gè)查詢過(guò)程分為以下三大部分:

      2、對(duì)xml定義文件的預(yù)處理

      1)構(gòu)建xml定義全集樹(shù),xmlschema描述了xml文檔的整個(gè)結(jié)構(gòu),包括:文檔中的元素定義、屬性定義、子元素定義及子元素循環(huán)次數(shù)等信息。所有輸入的xml流數(shù)據(jù)都遵循此描述定義,充分利用這些信息對(duì)xml的解析和查詢過(guò)程進(jìn)行指導(dǎo)同時(shí)過(guò)濾無(wú)關(guān)分支,能夠加快處理速度?;趚mlschema定義的元素及其結(jié)構(gòu)關(guān)系(元素和屬性作為節(jié)點(diǎn),結(jié)構(gòu)關(guān)系作為導(dǎo)向指針)構(gòu)建xml定義全集樹(shù)(查詢導(dǎo)航pat全集樹(shù)的前身,只具有標(biāo)簽節(jié)點(diǎn)),此樹(shù)中的節(jié)點(diǎn)稱為標(biāo)簽節(jié)點(diǎn);

      2)構(gòu)建“父-子”節(jié)點(diǎn)的patriciatrie索引,為了加快由父親節(jié)點(diǎn)搜索尋找對(duì)應(yīng)指定標(biāo)簽名字的孩子節(jié)點(diǎn)的過(guò)程,構(gòu)建具有“父-子”節(jié)點(diǎn)的patriciatrie索引,作為匹配搜索的靜態(tài)輔助索引結(jié)構(gòu)。在所有的孩子標(biāo)簽字符串中尋找“共享”部分(pat結(jié)構(gòu)節(jié)點(diǎn)),“不同”部分作為pat分支,依次類推最終構(gòu)造具有patriciatries結(jié)構(gòu)的查詢導(dǎo)航pat全集樹(shù),該索引結(jié)構(gòu)中的節(jié)點(diǎn)稱為pat節(jié)點(diǎn)。

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

      3.1、構(gòu)建謂詞語(yǔ)法計(jì)算樹(shù)

      對(duì)輸入的謂詞表達(dá)式進(jìn)行語(yǔ)法分析,分解謂詞條件表達(dá)式之后構(gòu)造謂詞語(yǔ)法計(jì)算樹(shù),操作數(shù)作為葉子節(jié)點(diǎn),把相關(guān)的操作符作為其父節(jié)點(diǎn),依次類推。這里的操作數(shù)包括:數(shù)字、字符串、true、false以及標(biāo)簽路徑(可以看作腳本語(yǔ)言變量,計(jì)算之前把其對(duì)應(yīng)的標(biāo)簽值代入其中)。然后按照條件表達(dá)式語(yǔ)義分析謂詞語(yǔ)法計(jì)算樹(shù),并整理成由條件分項(xiàng)組成的由條件分項(xiàng)組成的可計(jì)算序列。最后把每個(gè)條件表達(dá)式子項(xiàng)中涉及到的標(biāo)簽路徑追加到查詢標(biāo)簽路徑列表中。

      3.2、在查詢導(dǎo)航pat全集樹(shù)中聚焦查詢標(biāo)簽路徑

      1)輸入的查詢標(biāo)簽路徑列表中的每一條路徑都是用戶關(guān)注的,系統(tǒng)需要根據(jù)此路徑到xml流數(shù)據(jù)中查詢提取相關(guān)的標(biāo)簽值。因此,需要在xml定義導(dǎo)航pat全集樹(shù)結(jié)構(gòu)中針對(duì)符合查詢標(biāo)簽路徑的各中間標(biāo)簽節(jié)點(diǎn)標(biāo)注:“拒絕”或“通過(guò)”;各葉子標(biāo)簽節(jié)點(diǎn)標(biāo)注“拒絕”或“接受”;其它標(biāo)簽節(jié)點(diǎn)都為“拒絕”。同時(shí)在符合查詢標(biāo)簽路徑的每一“父子”標(biāo)簽節(jié)點(diǎn)的patriciatrie結(jié)構(gòu)索引中也需要增加相關(guān)標(biāo)注:查詢標(biāo)簽的pat鏈中的各pat節(jié)點(diǎn)標(biāo)注“通過(guò)”,最后一個(gè)pat節(jié)點(diǎn)標(biāo)注“接受”,其它pat節(jié)點(diǎn)都為“拒絕”。最后經(jīng)過(guò)針對(duì)查詢標(biāo)簽路徑聚焦后的樹(shù)結(jié)構(gòu)稱為查詢導(dǎo)航pat樹(shù)。

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

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

      1)讀入xml數(shù)據(jù)流文檔,采用sax(simpleapiforxml)技術(shù)。sax是輕量級(jí)的xml解析方法,其大致工作過(guò)程為:閱讀器(reader)首先讀入部分xml流數(shù)據(jù),后續(xù)的解析工作由事件驅(qū)動(dòng),包括:startdocument、enddocument、startelement、endelement及characters,依此類推重復(fù)上述過(guò)程直至xml流數(shù)據(jù)結(jié)束。對(duì)比dom解析,sax邊讀邊解析,無(wú)需讀入整個(gè)文檔到內(nèi)存,特別適合解析大型xml文檔。本發(fā)明把只針對(duì)查詢標(biāo)簽路徑的查詢過(guò)濾處理也加入到事件回調(diào)方法中,進(jìn)一步縮小需匹配處理的xml數(shù)據(jù)量,有利于節(jié)省存儲(chǔ)空間,減少解析時(shí)間,提高時(shí)空效率。

      2)查詢處理過(guò)程以xml流數(shù)據(jù)為主導(dǎo),查詢導(dǎo)航pat樹(shù)為輔助指導(dǎo)作用,同時(shí)記錄系統(tǒng)的狀態(tài)變化或者上下文變化。

      假定當(dāng)前流數(shù)據(jù)節(jié)點(diǎn)元素nd下的某個(gè)孩子節(jié)點(diǎn)ndc,其標(biāo)簽為tdc,需要搜索匹配的對(duì)象是查詢樹(shù)中對(duì)應(yīng)節(jié)點(diǎn)nq下的所有孩子標(biāo)簽節(jié)點(diǎn)標(biāo)簽列表tlqc,找到標(biāo)簽tdc對(duì)應(yīng)查詢樹(shù)中孩子標(biāo)簽節(jié)點(diǎn)后同時(shí)檢測(cè)其是否為查詢聚焦的標(biāo)簽節(jié)點(diǎn)。因?yàn)樵摌?biāo)簽列表是當(dāng)前節(jié)點(diǎn)下所有孩子節(jié)點(diǎn)的全集,對(duì)應(yīng)需要的查詢聚焦的孩子節(jié)點(diǎn)標(biāo)簽列表為tlqfc,二者的關(guān)系為tlqc包含tlqfc。為了加快匹配過(guò)程,本發(fā)明采用高效、快速的patriciatrie匹配搜索算法,分為如下幾種情況:

      a)查詢聚焦標(biāo)簽列表tlqfc為空,意味著以ndc為根節(jié)點(diǎn)的數(shù)據(jù)分支無(wú)須繼續(xù)查詢處理,可以剪掉此數(shù)據(jù)分支;

      b)tlqc等于tlqfc,意味著ndc數(shù)據(jù)節(jié)點(diǎn)無(wú)需匹配必然是是用戶查詢聚焦的標(biāo)簽,可以繼續(xù)后續(xù)查詢處理;

      c)tlqfc不為空同時(shí)tlqc真包含tlqfc,采用patricia搜索算法,其中pat節(jié)點(diǎn)記錄標(biāo)簽跳過(guò)的共同部分長(zhǎng)度,分支對(duì)應(yīng)不同的目標(biāo)匹配標(biāo)簽,搜索從pat根節(jié)點(diǎn)依次向下,直到到達(dá)“接受”或“拒絕”pat節(jié)點(diǎn)。如果是“拒絕”pat節(jié)點(diǎn),意味著以ndc為根節(jié)點(diǎn)的數(shù)據(jù)分支無(wú)須繼續(xù)查詢處理,可以剪掉此數(shù)據(jù)分支。如果是“接受”pat節(jié)點(diǎn),意味著此ndc為查詢聚焦的標(biāo)簽。

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

      如圖1、2、3所示,本發(fā)明xml流數(shù)據(jù)的快速查詢方法,具體處理流程包括以下步驟:

      步驟1、xmlschema定義預(yù)處理:構(gòu)建查詢導(dǎo)航pat樹(shù)

      步驟101搜索根元素并根據(jù)其元素信息創(chuàng)建查詢樹(shù)的根節(jié)點(diǎn)。

      步驟102判斷是否為schema定義文檔中的最末元素,如果是結(jié)束此預(yù)處理,否則跳轉(zhuǎn)到步驟103。

      步驟103通過(guò)當(dāng)前元素尋找所有子元素,構(gòu)建相對(duì)應(yīng)的子標(biāo)簽節(jié)點(diǎn)并放入查詢樹(shù)中,在該子標(biāo)簽節(jié)點(diǎn)中放入此子元素標(biāo)簽特定的詳細(xì)信息,同時(shí)在父-子標(biāo)簽節(jié)點(diǎn)中放入導(dǎo)航信息,包括:“父子”指針、“子父”指針等。

      步驟104根據(jù)節(jié)點(diǎn)及其所有直屬孩子節(jié)點(diǎn)構(gòu)建patriciatries輔助快速搜索結(jié)構(gòu),中間pat節(jié)點(diǎn)記錄“共同”部分的長(zhǎng)度,葉子pat節(jié)點(diǎn)指向?qū)?yīng)的直屬孩子標(biāo)簽節(jié)點(diǎn)。

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

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

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

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

      步驟204判斷是否查詢標(biāo)簽路徑列表末尾,如果不是執(zhí)行步驟205,否則結(jié)束查詢參數(shù)預(yù)處理。

      步驟205至207針對(duì)每一查詢標(biāo)簽路徑,首先分拆成一個(gè)標(biāo)簽序列,按照順序處理每一個(gè)標(biāo)簽,在查詢導(dǎo)航pat樹(shù)結(jié)構(gòu)中的對(duì)應(yīng)標(biāo)簽節(jié)點(diǎn)標(biāo)注為需要查詢聚焦:此標(biāo)簽節(jié)點(diǎn)狀態(tài)為“通過(guò)”,同時(shí)把父標(biāo)簽節(jié)點(diǎn)通向該標(biāo)簽節(jié)點(diǎn)的每一個(gè)pat節(jié)點(diǎn)標(biāo)注狀態(tài)為“通過(guò)”,其它的pat節(jié)點(diǎn)的狀態(tài)為“拒絕”。然后順序檢查下一個(gè)標(biāo)簽,重復(fù)執(zhí)行步驟207,直到此標(biāo)簽序列結(jié)束,跳轉(zhuǎn)執(zhí)行步驟204。

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

      步驟301解析目標(biāo)xml流數(shù)據(jù)文檔,解析過(guò)程中根據(jù)產(chǎn)生的事件回調(diào)不同方法,其中事件“startelement”執(zhí)行步驟302、事件“characters”執(zhí)行步驟303、事件“endelement”執(zhí)行步驟304。在解析過(guò)程中直接開(kāi)始查詢過(guò)濾處理,減小需匹配處理的目標(biāo)xml流數(shù)據(jù)規(guī)模,有利于節(jié)省存儲(chǔ)空間,減少解析時(shí)間,提高時(shí)空效率。

      步驟302輸入標(biāo)簽匹配搜索查詢導(dǎo)航pat樹(shù)中從當(dāng)前標(biāo)簽節(jié)點(diǎn)也就是父標(biāo)簽節(jié)點(diǎn)開(kāi)始通過(guò)pat輔助結(jié)構(gòu)和其對(duì)應(yīng)的快速搜索算法,能夠快速檢查確定是否定位到正確的孩子節(jié)點(diǎn)標(biāo)簽上,根據(jù)匹配結(jié)果更新上下文狀態(tài),包括:“接受”和“拒絕”狀態(tài)。

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

      步驟304如果到達(dá)標(biāo)注謂詞計(jì)算位置的標(biāo)簽節(jié)點(diǎn),則提取表達(dá)式中的各標(biāo)簽路徑對(duì)應(yīng)值,然后開(kāi)始按照謂詞表達(dá)式語(yǔ)法計(jì)算樹(shù)結(jié)構(gòu)來(lái)計(jì)算表達(dá)式,結(jié)果為真則執(zhí)行步驟305,結(jié)果為假則拒絕收集以此標(biāo)簽節(jié)點(diǎn)為根節(jié)點(diǎn)的分支的所有標(biāo)簽值集。

      步驟305如果計(jì)算結(jié)果為真并且本標(biāo)簽節(jié)點(diǎn)為“接受”狀態(tài),則收集本次標(biāo)簽對(duì)應(yīng)值并放入緩存中。

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

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1