專利名稱:一種基于區(qū)間編碼的gml文檔索引方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信息技術(shù)中的空間信息存儲(chǔ)與查詢技術(shù)領(lǐng)域,具體涉及地理標(biāo)注數(shù)據(jù)(GML 數(shù)據(jù))的索引與查詢方法。
背景技術(shù):
地理標(biāo)記語(yǔ)言GML是開放地理信息系統(tǒng)組織OGC為了解決WebGIS環(huán)境下不同格式地 理數(shù)據(jù)共享而制定了一套基于XML的地理信息編碼工具。目前GML作為一種可擴(kuò)展的、標(biāo) 準(zhǔn)化的地理信息編碼方式,為地理信息的建模、傳輸、存儲(chǔ)和發(fā)布提供了一個(gè)公共的地理對(duì) 象描述標(biāo)準(zhǔn),從而使得各個(gè)獨(dú)立開發(fā)的應(yīng)用之間的互操作成為可能。GML也由原來(lái)的三個(gè)基 模式(Base Schema)的2. χ版發(fā)展為由三十個(gè)基模式組成的3. χ版。GML描述地理信息的 能力越來(lái)越強(qiáng),不僅解決了空間數(shù)據(jù)格式不一致的問(wèn)題,而且提供包含結(jié)構(gòu)和語(yǔ)義的數(shù)據(jù) 表達(dá),符合當(dāng)前語(yǔ)義Web的要求,使地理信息在不同系統(tǒng)間的交換、集成和共享變得更加容 易ο隨著GML在諸多領(lǐng)域的廣泛應(yīng)用,越來(lái)越多的地理信息以GML格式來(lái)描述。由 于GML文檔相當(dāng)大,以文件方式來(lái)管理地理空間數(shù)據(jù)很難提供較好的空間信息查詢、空間 數(shù)據(jù)分析、存取控制、并發(fā)控制等功能。如何有效地管理GML數(shù)據(jù)已成為亟待解決的問(wèn)題。 Corcoles等分析比較了基于RDBMS的三個(gè)存儲(chǔ)模型LegoDB,Monet,Xparent用于存儲(chǔ)GML 數(shù)據(jù)時(shí)可擴(kuò)展性及查詢時(shí)間;Sripada等列舉了 GML領(lǐng)域的研究問(wèn)題,如GML存儲(chǔ)、解析、查 詢、可視化和GML在移動(dòng)設(shè)備上的應(yīng)用等。Zhu等利用支持空間數(shù)據(jù)操作的對(duì)象關(guān)系數(shù)據(jù)庫(kù) 系統(tǒng)對(duì)GML文檔進(jìn)行管理。對(duì)于GML的查詢處理,Corcoles等等提出了一種基于XML-QL 的GML查詢語(yǔ)言規(guī)范,該規(guī)范基于的數(shù)據(jù)模型和代數(shù)支持空間特征。這套查詢語(yǔ)言包含基 于結(jié)構(gòu)化查詢語(yǔ)言SQL的SELECT-FROM-WHERE語(yǔ)法,包括支持空間操作的算子(相離、相切 等),也包括傳統(tǒng)非空間算子,但這種方法沒有利用到現(xiàn)有的XML查詢處理技術(shù),其查詢處理 要求從頭實(shí)現(xiàn)。Vatsavai比較了幾種XML查詢語(yǔ)言,提出了基于XQuery的GML查詢語(yǔ)言 GML-QL,描述了 GML-QL的結(jié)構(gòu),給出了具體的GML文檔查詢實(shí)例,但沒有給出相應(yīng)的數(shù)據(jù)模 型、語(yǔ)法結(jié)構(gòu)和語(yǔ)義處理。Guan等在XQuery的基礎(chǔ)上提出了 GML查詢語(yǔ)言GQL,定義了空 間數(shù)據(jù)類型、增加了空間處理算子并給出了相應(yīng)的形式語(yǔ)義。為了提高GML查詢效率,必須為GML數(shù)據(jù)的基礎(chǔ)上,建立相應(yīng)的索引。半結(jié)構(gòu)化數(shù) 據(jù)索引技術(shù)近年來(lái)也得到廣泛深入的研究,按索引模式分為三類路徑索引、編碼一連接索 引和序列匹配索引。路徑索引提取XML文檔中的全部或部分路徑信息建立索引,以便在查 詢的時(shí)候減少查詢數(shù)據(jù)空間,提高查詢效率。路徑索引最大的優(yōu)點(diǎn)是簡(jiǎn)單易行,但是對(duì)于結(jié) 構(gòu)復(fù)雜、規(guī)模大的文檔,路徑索引的規(guī)模也會(huì)變得很大。編碼-連接索引將XML文檔樹中的 結(jié)點(diǎn)按照一定的方法進(jìn)行編碼,通過(guò)比較結(jié)點(diǎn)之間的編碼,快速的確定結(jié)點(diǎn)之間的結(jié)構(gòu)關(guān) 系(父/子關(guān)系,祖先/后代關(guān)系),使用起來(lái)簡(jiǎn)單靈活,容易應(yīng)用到關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中。序 列匹配索引采用編碼方法將XML文檔數(shù)據(jù)和XML查詢表達(dá)式編碼成序列,使用編碼序列代 替路徑作為查詢的基本單元,將XML路徑表達(dá)式查詢等價(jià)成發(fā)現(xiàn)查詢表達(dá)式編碼序列在文 檔數(shù)據(jù)編碼序列中的子模式匹配過(guò)程。序列匹配索引可以避免昂貴的連接操作,提高查詢效率,但基于序列匹配的索引方法不能絕對(duì)保證一個(gè)匹配序列總是對(duì)應(yīng)正確的查詢結(jié)果, 需要進(jìn)一步處理匹配結(jié)果后才能得到正確結(jié)果,增加了索引的時(shí)間。與XML —樣,GML文檔也可以看作一個(gè)樹形結(jié)構(gòu),區(qū)間編碼方案為樹中每一個(gè)結(jié)點(diǎn) 賦予一個(gè)區(qū)間編碼的,G],通過(guò)結(jié)點(diǎn)的區(qū)間編碼確定結(jié)點(diǎn)間的父子關(guān)系和子孫關(guān)系。目 前,半結(jié)構(gòu)化數(shù)據(jù)的區(qū)間編碼方案主要有三種,Dietz編碼為樹Γ中的每一個(gè)結(jié)點(diǎn)賦予一 個(gè)由先序遍歷序號(hào)和后序遍歷序號(hào)組成的二元組〈preOrder,postOrder〉,結(jié)點(diǎn)u和ν是 祖先 / 后裔關(guān)系,當(dāng)且僅當(dāng) preOder (u) < preOrder (ν)且 post Order (ν) < postOrder 0/)。Li編碼為樹Γ中的每一個(gè)結(jié)點(diǎn)賦予一個(gè)由結(jié)點(diǎn)線序遍歷號(hào)和結(jié)點(diǎn)后裔范圍組成的二 元組<o fer,sii^〉,樹Γ中的任意兩個(gè)結(jié)點(diǎn) 和r是祖先/后裔關(guān)系,當(dāng)且僅當(dāng)order (ju) < order (κ)且 order (κ) + size (κ) < = order (ju) + size ( )。Zhang 編石馬為樹 T1 中的每一個(gè)結(jié)點(diǎn)賦予一個(gè)二元組<IirstOrder, lastOrder>, firstOrder是對(duì)樹T的所有 結(jié)點(diǎn)進(jìn)行先序遍歷時(shí),在遍歷該結(jié)點(diǎn)的所有后裔結(jié)點(diǎn)之前訪問(wèn)該結(jié)點(diǎn)時(shí)的序號(hào),IastOrder 是在遍歷完該結(jié)點(diǎn)的所有后裔結(jié)點(diǎn)后再一次訪問(wèn)該結(jié)點(diǎn)時(shí)的序號(hào)。樹r中的兩個(gè)結(jié)點(diǎn) 和r是祖先/后裔關(guān)系,當(dāng)且僅當(dāng)firstOrder (u) < f irstOrder (…且f irstOrder (… < IastOrder (υ)。上述幾種方法主要針對(duì)XML文檔進(jìn)行編碼,沒有考慮到GML文檔中大量的空間數(shù) 據(jù)。為了提高GML的查詢效率,需要一種適合GML文檔特點(diǎn)的索引技術(shù)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種查詢效率高的GML文檔索引方法。本發(fā)明提出的GML文檔索引方法,是基于區(qū)間編碼的GML文檔索引方法,該方只需 對(duì)GML文檔進(jìn)行一次掃描,就可以對(duì)文檔樹中的每個(gè)結(jié)點(diǎn)進(jìn)行編碼。具有如下特點(diǎn)
1、采用SAX解析器解析GML文檔,創(chuàng)建文檔樹;
2、采用前序遍歷依次為文檔樹中的每個(gè)結(jié)點(diǎn)進(jìn)行編碼;
3、文檔樹中的結(jié)點(diǎn)用一個(gè)五元組來(lái)表示;
4、索引結(jié)構(gòu)由元素索引、屬性索引、文本索引及幾何體索引組成。本發(fā)明方法支持非空間查詢、空間查詢及混合查詢處理。本發(fā)明是一種基于區(qū)間編碼的方法,用流式解析器對(duì)給定的GML文檔進(jìn)行解析, 為GML文檔中的元素、屬性、文本、幾何體等要素進(jìn)行編碼,被編碼的結(jié)點(diǎn)以一個(gè)五元組的 形式表示,五元組具體形式為(t/oc/j, firstOrder, IastOrder, parentOrder, kind), 其中,
Ac/々是文檔的編號(hào)
firs tOrder是前序遍歷文檔樹期間首次被訪問(wèn)時(shí)的序號(hào) IastOrder是最后一次被訪問(wèn)時(shí)的序號(hào)。parentOrder是該結(jié)點(diǎn)父結(jié)點(diǎn)的firstOrder ,kind是該結(jié)點(diǎn)的類別(元素結(jié)點(diǎn)、屬 性結(jié)點(diǎn)、值結(jié)點(diǎn)或幾何體結(jié)點(diǎn)等)。根據(jù)上述編碼方案,容易證明如下結(jié)論文檔樹中的任意結(jié)點(diǎn)",則,其祖先結(jié)點(diǎn)r 的集合為
{v\ firstOrder (ν) < firstOrder(u) and IastOrder(ν) > firstOrder (")}其雙親結(jié)點(diǎn)r的滿足
{v\ firstOrder (ν) - parentOrder (u)}
其子孫結(jié)點(diǎn)r的集合為
{v\ firstOrder(ν) > firstOrder (u) and firstOrder(ν) < IastOrder (")}
其孩子結(jié)點(diǎn)r的集合為
{v\ parentOrder (ν) - firstOrder (u)}
其兄弟結(jié)點(diǎn)r的集合為
{v\ parentOrder (ν) - parentOrder(u)}
基于區(qū)間編碼的GML文檔索引結(jié)構(gòu)由元素索引、屬性索引、文本索引及幾何體索引組 成,對(duì)于元素、屬性和文本結(jié)點(diǎn),以B+-樹方式組織索引,將結(jié)點(diǎn)的名字的標(biāo)識(shí)符作為關(guān)鍵 字,葉子節(jié)點(diǎn)指向具有同名的元素的一組定長(zhǎng)記錄,每個(gè)索引項(xiàng)記錄了結(jié)點(diǎn)的區(qū)間編碼及 類型(元素、屬性或值結(jié)點(diǎn))。對(duì)于幾何體結(jié)點(diǎn),以R-樹或四叉樹方式組織索引,索引項(xiàng)記錄 了幾何體結(jié)點(diǎn)的區(qū)間按編碼及其形狀(點(diǎn)、線或多邊形)。 在查詢處理中,采用以XQuery為基礎(chǔ)的GQL查詢語(yǔ)言,以實(shí)現(xiàn)對(duì)GML文檔的非空 間查詢、空間查詢及混合查詢。實(shí)驗(yàn)證明這種方法是能夠有效地處理在GML文檔上進(jìn)行的 值查詢和空間分析操作,查詢結(jié)果仍以GML格式來(lái)表示。該查詢表達(dá)式的處理步驟如下
51查詢分解將條件子句中查詢條件分解為若非空間子查詢和空間子查詢,求這些 子查詢的交集;
52查詢優(yōu)化同時(shí)存在非空間查詢和空間查詢條件時(shí),為了提高查詢效率,應(yīng)先處理 非空間查詢,在此基礎(chǔ)上,再進(jìn)行空間分析與運(yùn)算;
53查詢執(zhí)行對(duì)于非空間查詢,根據(jù)結(jié)點(diǎn)的B+-樹索引結(jié)構(gòu),快速定位滿足條件的元 素和文本結(jié)點(diǎn);在此基礎(chǔ)上,利用R-樹索引結(jié)構(gòu),進(jìn)行空間條件計(jì)算,找到滿足條件的集合 體結(jié)點(diǎn);
54結(jié)果輸出對(duì)多個(gè)查詢條件的查詢結(jié)果進(jìn)行合并,按照查詢表達(dá)式中RETURN語(yǔ)句 指定的輸出格式,將查詢和計(jì)算結(jié)果以GML格式輸出。
圖1基于區(qū)間的GML文檔樹編碼。
圖2GML數(shù)據(jù)索引結(jié)構(gòu)。
圖3結(jié)點(diǎn)索引結(jié)構(gòu)。
圖4幾何體索引結(jié)構(gòu)。
圖5無(wú)索引時(shí)三種查詢時(shí)間對(duì)比。
圖6有索引時(shí)三種查詢時(shí)間對(duì)比。
具體實(shí)施方式
1.編碼方案
Dietz編碼要掃描兩遍文檔才能為每個(gè)結(jié)點(diǎn)進(jìn)行編碼,Li編碼不易確定結(jié)點(diǎn)間的兄弟 關(guān)系和前驅(qū)后繼關(guān)系??紤]到GML文檔往往很大,應(yīng)盡量減少編碼所花時(shí)間,在最少的掃描 遍數(shù)里,對(duì)每個(gè)結(jié)點(diǎn)進(jìn)行編碼。為此,擴(kuò)展^iang編碼,增加結(jié)點(diǎn)的父結(jié)點(diǎn)的序號(hào)和結(jié)點(diǎn)類別,只需一遍掃描,將GML文檔樹中每個(gè)結(jié)點(diǎn)表示為一個(gè)五元組 (.doc ID, firstOrder, IastOrder, par en t Order, kind)
其中,i/OC/々是文檔的編號(hào),/ir^Crifer是前序遍歷文檔樹期間首次被訪問(wèn)時(shí)的序號(hào), IastOrder是最后一次被訪問(wèn)時(shí)的序號(hào)。pare/Crtfer是該結(jié)點(diǎn)父結(jié)點(diǎn)的firstOrder ,kind 是該結(jié)點(diǎn)的類別(如元素結(jié)點(diǎn)、屬性結(jié)點(diǎn)、值結(jié)點(diǎn)或幾何體結(jié)點(diǎn)等)。圖1給出了文檔樹的五 元組的中間三元表示。根據(jù)上述編碼方案,容易證明如下結(jié)論文檔樹中的任意結(jié)點(diǎn)",則,其祖先結(jié)點(diǎn)r 的集合為
{v\ firstOrder (ν) < firstOrder(u) and IastOrder(ν) > firstOrder (")} (1)
其雙親結(jié)點(diǎn)r的滿足
{v\ firstOrder (ν) - parentOrder (u)}
其子孫結(jié)點(diǎn)r的集合為
{v\ firstOrder(ν) > firstOrder (u) and firstOrder(v) < IastOrder (u) (2} 其孩子結(jié)點(diǎn)r的集合為
{v\ parentOrder (ν) - firstOrder (u)}(3)
其兄弟結(jié)點(diǎn)r的集合為
{v parentOrder (κ) = parentOrder( )}(4)。2.索引與數(shù)據(jù)組織
GML數(shù)據(jù)支持值查詢和結(jié)構(gòu)查詢,值查詢可以通過(guò)GML文檔名、元素名/值,屬性名/值 進(jìn)行;結(jié)構(gòu)查詢可以通過(guò)查詢表達(dá)式中祖先/子孫關(guān)系進(jìn)行。基于區(qū)間編碼的GML索引結(jié)構(gòu)由元素索引、屬性索引、文本索引及幾何體索引組 成,如圖2所示。對(duì)于元素、屬性和文本結(jié)點(diǎn),以B+-樹方式組織索引,將結(jié)點(diǎn)的名字的標(biāo)識(shí) 符作為關(guān)鍵字,葉子節(jié)點(diǎn)指向具有同名的元素的一組定長(zhǎng)記錄,如圖3所示,每個(gè)索引項(xiàng)記 錄了結(jié)點(diǎn)的區(qū)間編碼及類型(元素、屬性或值結(jié)點(diǎn))。對(duì)于幾何體結(jié)點(diǎn),以R-樹或四叉樹方式組織索引,如圖4所示,索引項(xiàng)記錄了幾何 體結(jié)點(diǎn)的區(qū)間按編碼及其形狀(點(diǎn)、線或多邊形)。R-樹是一棵平衡的多路查找樹,所有的葉 結(jié)點(diǎn)都在同一層,并存儲(chǔ)幾何體對(duì)象的最小接矩形MBR (Minimum Bounding Rectangles)。 四叉樹(Quad-Tree)基于空間劃分來(lái)組織索引結(jié)構(gòu),將已知范圍的空間劃成四個(gè)相等的子 空間,如果需要可以將每個(gè)或其中幾個(gè)子空間繼續(xù)劃分下去,形成一個(gè)基于四叉樹的空間 劃分。四叉樹適于更新比較頻繁的空間數(shù)據(jù),R樹更適合最臨近查詢。3. GML查詢處理
對(duì)GML文檔進(jìn)行編碼后,對(duì)GML文檔的查詢就轉(zhuǎn)變?yōu)樵诰幋a空間上的查詢。表1是一 個(gè)GML文檔片段,包含道路和地區(qū)的地圖。表IGML文檔片斷
權(quán)利要求
1.一種基于區(qū)間編碼的GML文檔索引方法,其特征在于具體步驟為1)采用SAX解析器解析GML文檔,創(chuàng)建GML文檔樹;2)采用前序遍歷依次為GML文檔樹中的每個(gè)結(jié)點(diǎn)進(jìn)行編碼;包括對(duì)GML文檔中的元素、 屬性、文本、幾何體要素進(jìn)行編碼;3)對(duì)文檔樹中被編碼的結(jié)點(diǎn)用一個(gè)五元組來(lái)表示;五元組具體形式為( /%/々, firstOrder, IastOrder, paren tOrder, 左 i/ o0,其中Ac/々是文檔的編號(hào);firstOrder是前序遍歷文檔樹期間首次被訪問(wèn)時(shí)的序號(hào);IastOrder是最后一次被訪問(wèn)時(shí)的序號(hào);parentOrder是該結(jié)點(diǎn)父結(jié)點(diǎn)的firstOrder ;kind是該結(jié)點(diǎn)的類別,類別包括元素結(jié)點(diǎn)、屬性結(jié)點(diǎn)、值結(jié)點(diǎn)和幾何體結(jié)點(diǎn)。
2.如權(quán)利要求1所述的基于區(qū)間編碼的GML文檔索引方法,其特征在于,索引結(jié)構(gòu)由元 素索引、屬性索引、文本索引及幾何體索引組成(1)對(duì)于元素、屬性和文本結(jié)點(diǎn),以B+-樹方式組織索引,將結(jié)點(diǎn)的名字的標(biāo)識(shí)符作為 關(guān)鍵字,葉子節(jié)點(diǎn)指向具有同名的元素的一組定長(zhǎng)記錄,每個(gè)索引項(xiàng)記錄了結(jié)點(diǎn)的區(qū)間編 碼及類型元素、屬性或值結(jié)點(diǎn);(2)對(duì)于幾何體結(jié)點(diǎn),以R-樹或四叉樹方式組織索引,索引項(xiàng)記錄幾何體結(jié)點(diǎn)的區(qū)間 按編碼及其形狀點(diǎn)、線或多邊形。
3.如權(quán)利要求1所述的基于區(qū)間編碼的GML文檔索引方法,其特征在于,采用以 XQuery為基礎(chǔ)的GQL查詢語(yǔ)言,實(shí)現(xiàn)對(duì)GML文檔的非空間查詢、空間查詢及混合查詢,查詢 結(jié)果仍以GML格式來(lái)表示;查詢表達(dá)式的處理步驟如下51查詢分解將條件子句中查詢條件分解為若非空間子查詢和空間子查詢,求這些 子查詢的交集;52查詢優(yōu)化同時(shí)存在非空間查詢和空間查詢條件時(shí),先處理非空間查詢,在此基礎(chǔ) 上,再進(jìn)行空間分析與運(yùn)算;53查詢執(zhí)行對(duì)于非空間查詢,根據(jù)結(jié)點(diǎn)的B+-樹索引結(jié)構(gòu),快速定位滿足條件的元 素和文本結(jié)點(diǎn);在此基礎(chǔ)上,利用R-樹索引結(jié)構(gòu),進(jìn)行空間條件計(jì)算,找到滿足條件的集合 體結(jié)點(diǎn);54結(jié)果輸出對(duì)多個(gè)查詢條件的查詢結(jié)果進(jìn)行合并,按照查詢表達(dá)式中RETURN語(yǔ)句 指定的輸出格式,將查詢和計(jì)算結(jié)果以GML格式輸出。
全文摘要
本發(fā)明屬于信息技術(shù)中的空間信息存儲(chǔ)與查詢技術(shù)領(lǐng)域,是一種基于區(qū)間編碼的GML文檔索引方法,將GML文檔樹中結(jié)點(diǎn)按前序遍歷中第一次和最后一次被訪問(wèn)時(shí)的次序進(jìn)行編碼。對(duì)元素、屬性、文本結(jié)點(diǎn)以B+-樹方式來(lái)組織索引,以提高值查詢和結(jié)構(gòu)查詢的查詢速度;對(duì)幾何體結(jié)點(diǎn)按R-樹方式組織索引,以便提高空間查詢和分析效率。查詢語(yǔ)言采用基于XQuery的GML查詢語(yǔ)言GQL,并對(duì)三種查詢(非空間查詢、空間查詢及混合查詢)進(jìn)行了分析與比較。實(shí)驗(yàn)證明,所提出的GML文檔編碼方案和索引機(jī)制是可行的,能夠有效地處理在GML文檔上進(jìn)行的值查詢和空間分析操作。
文檔編號(hào)G06F17/30GK102073719SQ20111000347
公開日2011年5月25日 申請(qǐng)日期2011年1月10日 優(yōu)先權(quán)日2011年1月10日
發(fā)明者關(guān)佶紅, 周水庚, 朱付保, 王煒立 申請(qǐng)人:同濟(jì)大學(xué), 復(fù)旦大學(xué)