專利名稱:一種模式無(wú)關(guān)的gml文檔存儲(chǔ)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信息技術(shù)中的空間信息存儲(chǔ)與查詢技術(shù)領(lǐng)域,具體涉及地理標(biāo)注數(shù)據(jù) (GML數(shù)據(jù))的存儲(chǔ)方法。
背景技術(shù):
地理標(biāo)記語(yǔ)言(GML)是由開放地理信息協(xié)會(huì)(OGC)推出的一種基于XML數(shù)據(jù)格式 的地理標(biāo)記語(yǔ)言,是空間數(shù)據(jù)編碼、傳輸、存儲(chǔ)和發(fā)布的一種國(guó)際標(biāo)準(zhǔn),適用于hternet環(huán) 境中的地理數(shù)據(jù)共享、交換和集成。GML經(jīng)歷了最初由基于DTD的三個(gè)I^rofile描述地理信 息的1. χ版,到用三個(gè)模式(Schema)描述地理信息的2. χ版,以及由三十個(gè)模式來(lái)描述地 理信息拓?fù)洹⒏采w(Coverage)、觀察(observation)、時(shí)間(Temporal)以及動(dòng)態(tài)特性的3. χ 版。GML描述地理信息的能力越來(lái)越強(qiáng),解決了空間數(shù)據(jù)格式不一致的問題,提供包含結(jié)構(gòu) 和語(yǔ)義的數(shù)據(jù)表達(dá),符合當(dāng)前語(yǔ)義Web的要求,使地理信息在不同系統(tǒng)間的交換、集成和共 享變得更加容易。目前,在XML文檔管理方面有較多的研究,Edge方法是用一個(gè)稱為Edge的表來(lái) 存儲(chǔ)無(wú)模式XML文檔中的數(shù)據(jù)和結(jié)構(gòu)信息,表中每一行表示樹中的一條邊。每條邊有其 開始結(jié)點(diǎn)、目的結(jié)點(diǎn);邊在樹中的次序、邊的標(biāo)簽名字、邊的類型(目標(biāo)結(jié)點(diǎn)是指向一個(gè)值 (value),還是指向一個(gè)引用(ref))及邊的值(若邊指向一個(gè)引用,則其值為空)來(lái)表示。 Monet方法是Edge方法的改進(jìn),它對(duì)Edge中每個(gè)不同標(biāo)簽的邊,單獨(dú)創(chuàng)建一張表,用多張 表來(lái)存儲(chǔ)XML文檔中的數(shù)據(jù)和結(jié)構(gòu)信息。在Monet中,表的名字隱含指定了它的標(biāo)簽和類 型,表的個(gè)數(shù)等于XML文檔樹中不同標(biāo)簽路徑的數(shù)目。Htel方法用四張表來(lái)存儲(chǔ)XML文 檔中的數(shù)據(jù)和結(jié)構(gòu)信息,即路徑表、元素結(jié)點(diǎn)表、屬性結(jié)點(diǎn)表、文本結(jié)點(diǎn)表。)(Rel使用區(qū)域 (region)概念來(lái)表示文檔樹中每個(gè)結(jié)點(diǎn)的起始和結(jié)束位置,區(qū)域隱含了結(jié)點(diǎn)間的父子關(guān) 系。XParent方法對(duì)上述三種方法進(jìn)行了總結(jié),將其分為面向邊(Edge-Oriented)和面向結(jié) 點(diǎn)(Node- Oriented)的方法。并也采用了四種表來(lái)表示XML文檔中的數(shù)據(jù)和結(jié)構(gòu)信息,即 標(biāo)簽路徑表、數(shù)據(jù)路徑表、元素表和數(shù)據(jù)表,充分利用了 Edge、Monet、XRel的優(yōu)勢(shì),提供了 良好的查詢能力。但上述方法都是針對(duì)XML文檔存儲(chǔ)進(jìn)行設(shè)計(jì)的,沒有考慮GML文檔中的空間數(shù)據(jù) 信息,并不適于GML文檔存儲(chǔ)。由于GML是基于XML的,XML的存儲(chǔ)管理方法對(duì)于研究無(wú)模 式GML文檔的存儲(chǔ)管理有重要的借鑒意義。隨著GML的廣泛應(yīng)用,越來(lái)越多的地理信息以GML格式來(lái)描述。與XML編碼相似, GML也是以文本格式來(lái)表示地理信息的。由于GML文本文件相當(dāng)大,以文件方式來(lái)管理地理 空間數(shù)據(jù)很難提供較好的空間信息查詢、空間數(shù)據(jù)分析、存取控制、并發(fā)控制等功能。如何 有效地管理GML數(shù)據(jù),以便于進(jìn)行空間操作和分析、有利于空間數(shù)據(jù)的共享和GIS互操作成 為亟待解決的問題。將GML文檔存儲(chǔ)到對(duì)象關(guān)系數(shù)據(jù)庫(kù)中,GML非空間屬性作為普通字段, 空間屬性作為一個(gè)對(duì)象,利用對(duì)象關(guān)系數(shù)據(jù)庫(kù)現(xiàn)有技術(shù)管理GML數(shù)據(jù)是一種可行的解決方 案。GML應(yīng)用模式為GML文檔的編寫提供了格式規(guī)范和語(yǔ)義約束。有模式文檔可通過GML模式和數(shù)據(jù)庫(kù)模式之間建立映射機(jī)制來(lái)實(shí)現(xiàn)存儲(chǔ)。但在很多應(yīng)用中,GML文檔的模式并不 清楚,甚至沒有模式,如何將這種GML文檔存儲(chǔ)到數(shù)據(jù)庫(kù)中并滿足不同的查詢要求,是亟待 解決的問題。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種GML文檔存儲(chǔ)方法,以便能實(shí)現(xiàn)對(duì)GML文檔中的結(jié)構(gòu) 信息和數(shù)據(jù)信息進(jìn)行管理。本發(fā)明提出的GML文檔存儲(chǔ)方法,不使用任何被存儲(chǔ)文檔的模式,通過把原文檔 解析成一棵文檔樹,創(chuàng)建一種通用對(duì)象關(guān)系模式來(lái)存儲(chǔ)文檔的結(jié)構(gòu)和數(shù)據(jù)。將GML文檔看作是由元素結(jié)點(diǎn)、文本結(jié)點(diǎn)、幾何體結(jié)點(diǎn)等構(gòu)成的一棵樹。元素(element)結(jié)點(diǎn),表示GML文檔中的元素,它以元素的標(biāo)簽命名,可以包含多 個(gè)文本結(jié)點(diǎn)和子元素結(jié)點(diǎn)。文本(text)結(jié)點(diǎn),是只包含字符串信息的結(jié)點(diǎn),表示GML文檔中非空間數(shù)據(jù)信息, 不包含任何子結(jié)點(diǎn)。GML文檔中元素可包含若干屬性,在文檔樹中以屬性(attribute)結(jié)點(diǎn) 表示。屬性結(jié)點(diǎn)由屬性名和屬性值構(gòu)成,屬性結(jié)點(diǎn)也不含任何子結(jié)點(diǎn)。幾何體(geometry)結(jié)點(diǎn),是特殊的元素結(jié)點(diǎn),表示GML文檔中的空間數(shù)據(jù)的幾何 信息。幾何體結(jié)點(diǎn)按照其表示的空間信息可以分為點(diǎn)(Point)、線(LineString)、多邊形 (Polygon)、矩形(Box)(—種特殊多邊形)、多點(diǎn)(Multipoint)、多線(MultiLineString)、多 多邊形(MultiPolygon)等類型。通過對(duì)樹中結(jié)點(diǎn)和邊的處理,實(shí)現(xiàn)GML文檔到數(shù)據(jù)庫(kù)中的存儲(chǔ),并支持空間信息 分析和非空間信息的查詢。它具有以下特點(diǎn)1)用對(duì)象關(guān)系數(shù)據(jù)庫(kù)來(lái)管理GML文檔;2)GML文檔的存儲(chǔ)與其模式無(wú)關(guān);3)用于存儲(chǔ)GML文檔的數(shù)據(jù)庫(kù)表結(jié)構(gòu)格式固定;4)支持多文檔的GML數(shù)據(jù)存儲(chǔ)。本發(fā)明是一種基于對(duì)象關(guān)系數(shù)據(jù)庫(kù)的GML文檔存儲(chǔ)方法,將GML文檔中的結(jié)構(gòu)信 息和數(shù)據(jù)信息存儲(chǔ)到對(duì)象關(guān)系數(shù)據(jù)庫(kù)中。不依賴GML文檔的模式信息,直接對(duì)給定的GML 文檔進(jìn)行處理,將GML文檔中的數(shù)據(jù)存儲(chǔ)到對(duì)象關(guān)系數(shù)據(jù)庫(kù)中。本發(fā)明采用固定的表結(jié)構(gòu)來(lái)存儲(chǔ)GML文檔。任何格式的GML文檔,其所包含結(jié)構(gòu) 信息和數(shù)據(jù)均被解析并存儲(chǔ)到同一表結(jié)構(gòu)。GML文檔存儲(chǔ)到數(shù)據(jù)庫(kù)中,應(yīng)該支持對(duì)非空間信息的查詢與處理,也應(yīng)支持空間數(shù) 據(jù)分析與運(yùn)算。為了達(dá)到這個(gè)目標(biāo),提出了基于結(jié)點(diǎn)和邊的模型映射方法,定義了標(biāo)簽路 徑表、邊表、文本數(shù)據(jù)表和幾何數(shù)據(jù)表,對(duì)文檔樹中的結(jié)點(diǎn)和邊進(jìn)行處理。四種表的結(jié)構(gòu)如 下LabelPath (pathID, pathExpr) Edge (docID,pID,cID)TxtData (docID, pathID, ordinal, nID, type, value) GeoData (docID, pathID, ordinal, nID, type, shape)LabelPath是標(biāo)簽路徑表,用于記錄文檔樹結(jié)點(diǎn)的標(biāo)簽路徑信息,pathID表示標(biāo)簽路徑的ID,pathExpr表示相應(yīng)的路徑表達(dá)式;Edge是邊表,表用于記錄具有文檔樹的邊,docID.pID和cID分別表示文檔標(biāo)識(shí)、父結(jié) 點(diǎn)和子結(jié)點(diǎn)在文檔中的ID ;TxtData是文本數(shù)據(jù)表,記錄文本結(jié)點(diǎn)和屬性結(jié)點(diǎn)信息,ordinal表示具有相同標(biāo)簽路 徑和父結(jié)點(diǎn)的子結(jié)點(diǎn)的次序,nID表示該結(jié)點(diǎn)的編號(hào),type表示該結(jié)點(diǎn)類型(文本結(jié)點(diǎn)還是 屬性結(jié)點(diǎn),文本結(jié)點(diǎn)用“T”來(lái)標(biāo)識(shí),屬性結(jié)點(diǎn)用“A”來(lái)標(biāo)識(shí)),value表示該結(jié)點(diǎn)的值;GeoData是幾何體數(shù)據(jù)表,記錄幾何體結(jié)點(diǎn)的信息,type表示幾何體結(jié)點(diǎn)的類型(包括 點(diǎn)類型、多點(diǎn)類型、線類型、多線類型、多邊形類型、多多邊形類型),shape表示幾何體結(jié)點(diǎn) 的信息。本發(fā)明GML文檔存儲(chǔ)方法,支持多文檔的GML數(shù)據(jù)存儲(chǔ)。不同文檔是根據(jù)Edge表、 TxtData表及GeoData表中docID字段的值來(lái)區(qū)分。
圖IGML文檔片段。圖2 GML文檔片段對(duì)應(yīng)的文檔樹。圖3 GML文檔存儲(chǔ)系統(tǒng)框架。圖4存儲(chǔ)時(shí)間耗費(fèi)。
具體實(shí)施方式
1.建立GML文檔數(shù)據(jù)模型。圖1給出一個(gè)文檔實(shí)例的部分內(nèi)容。GML文檔可以看成是一棵由若干結(jié)點(diǎn)構(gòu)成的 樹,樹中結(jié)點(diǎn)包括根結(jié)點(diǎn)、元素結(jié)點(diǎn)、屬性結(jié)點(diǎn)、文本結(jié)點(diǎn)和幾何體結(jié)點(diǎn)、命名空間結(jié)點(diǎn)、處 理指令結(jié)點(diǎn)和注釋結(jié)點(diǎn)。圖2是圖1中文檔實(shí)例對(duì)應(yīng)的文檔樹結(jié)構(gòu),包含了根結(jié)點(diǎn)、 元素結(jié)點(diǎn)、屬性結(jié)點(diǎn)、文本結(jié)點(diǎn)和幾何體結(jié)點(diǎn)。圖2中符號(hào)Δ、〇、口、 O分別表示了文檔樹中元素結(jié)點(diǎn)、屬性結(jié)點(diǎn)、文本結(jié)點(diǎn)和幾何體結(jié)點(diǎn)。在GML文檔樹中,對(duì) 于幾何體結(jié)點(diǎn),在解析器遇到幾何體結(jié)點(diǎn)時(shí),將其作為一個(gè)對(duì)象來(lái)處理。2.構(gòu)造GML文檔樹。GML文檔是以文本文件形式存儲(chǔ)的,將文檔中的數(shù)據(jù)與結(jié)構(gòu)信息存儲(chǔ)到數(shù)據(jù)庫(kù)中, 先要解析GML文檔,構(gòu)建文檔樹,對(duì)樹中不同類型結(jié)點(diǎn)編號(hào)(node id),并確定具有相同父 結(jié)點(diǎn)和相同標(biāo)簽的結(jié)點(diǎn)在兄弟中的次序(ordinal)。構(gòu)造GML文檔樹的步驟如下51輸入GML文檔52使用SAX解析器解析GML文檔;53得到根結(jié)點(diǎn);54設(shè)置結(jié)點(diǎn)的編號(hào),確定結(jié)點(diǎn)在兄弟中的次序;55判斷結(jié)點(diǎn)類型,如果結(jié)點(diǎn)不是幾何體類型,則56為當(dāng)前結(jié)點(diǎn)賦予結(jié)點(diǎn)編號(hào);57為下一結(jié)點(diǎn)計(jì)算編號(hào);S8得到當(dāng)前結(jié)點(diǎn)的父結(jié)點(diǎn);S9設(shè)置具有相同標(biāo)簽名的兄弟結(jié)點(diǎn)的序號(hào);S10如果父結(jié)點(diǎn)不為空,計(jì)算結(jié)點(diǎn)node的ordianal值;S11取得子結(jié)點(diǎn);S12轉(zhuǎn)向S4,處理每個(gè)子結(jié)點(diǎn)S13如果是幾何體結(jié)點(diǎn)S14構(gòu)造幾何體對(duì)象;S15為幾何體計(jì)算編號(hào)和次序;S16獲取下一結(jié)點(diǎn),如果結(jié)點(diǎn)為空,結(jié)束,否則,轉(zhuǎn)向S4。3. GML文檔的數(shù)據(jù)庫(kù)模式。GML文檔存儲(chǔ)到數(shù)據(jù)庫(kù)中,應(yīng)該支持對(duì)非空間信息的查詢與處理,也應(yīng)支持空間數(shù) 據(jù)分析與運(yùn)算。為了達(dá)到這個(gè)目標(biāo),提出了基于結(jié)點(diǎn)和邊的模型映射方法(Node and Edge based Model-mapping, NEM)。NEM定義了標(biāo)簽路徑表、邊表、文本數(shù)據(jù)表和幾何數(shù)據(jù)表,對(duì) 文檔樹中的結(jié)點(diǎn)和邊進(jìn)行處理。四種表的結(jié)構(gòu)包括(1)路徑表用于存儲(chǔ)GML文檔中元素的路徑;(2)邊表用于存儲(chǔ)GML文檔中元素之間的父子關(guān)系;(3)文本數(shù)據(jù)表用于存儲(chǔ)GML文檔中文本結(jié)點(diǎn)和屬性結(jié)點(diǎn)的信息;(4)幾何體數(shù)據(jù)表用于記錄幾何體結(jié)點(diǎn)的信息。圖2中的文檔樹存儲(chǔ)到數(shù)據(jù)庫(kù)中以后,可以用表1至表4中的結(jié)點(diǎn)、邊和路徑信息 來(lái)描述。表 1 LablePath 表
權(quán)利要求
1. 一種模式無(wú)關(guān)的GML文檔存儲(chǔ)方法,其特征在于,通過把原GML文檔解析成一棵文檔 樹,并創(chuàng)建一種通用對(duì)象關(guān)系模式來(lái)存儲(chǔ)文檔的結(jié)構(gòu)和數(shù)據(jù);其中所述把GML文檔解析成一棵文檔樹,是把GML文檔解析成由元素結(jié)點(diǎn)、文本結(jié)點(diǎn)、幾何 體結(jié)點(diǎn)構(gòu)成的一棵樹元素結(jié)點(diǎn),表示GML文檔中的元素,并以元素的標(biāo)簽命名,它包含多個(gè)文本結(jié)點(diǎn)和子元文本結(jié)點(diǎn),是只包含字符串信息的結(jié)點(diǎn),表示GML文檔中非空間數(shù)據(jù)信息,不包含任何 子結(jié)點(diǎn);GML文檔中元素包含若干屬性,在文檔樹中以屬性結(jié)點(diǎn)表示,屬性結(jié)點(diǎn)由屬性名和 屬性值構(gòu)成,屬性結(jié)點(diǎn)也不含任何子結(jié)點(diǎn);幾何體結(jié)點(diǎn),是特殊的元素結(jié)點(diǎn),表示GML文檔中的空間數(shù)據(jù)的幾何信息;幾何體結(jié)點(diǎn) 按照其表示的空間信息分為點(diǎn)、線、多邊形、矩形、多點(diǎn)、多線、多多邊形七種類型;所述創(chuàng)建一種通用對(duì)象關(guān)系模式來(lái)存儲(chǔ)文檔的結(jié)構(gòu)和數(shù)據(jù),是將GML文檔中的結(jié)構(gòu)信 息和數(shù)據(jù)信息存儲(chǔ)到對(duì)象關(guān)系數(shù)據(jù)庫(kù)中,即采用固定的表結(jié)構(gòu)來(lái)存儲(chǔ)GML文檔中的結(jié)構(gòu)信 息和數(shù)據(jù)信息;所述固定的表結(jié)構(gòu)由基于結(jié)點(diǎn)和邊的模型映射方法創(chuàng)建,表格結(jié)構(gòu)分為四 種,具體如下LabelPath (pathID, pathExpr),是標(biāo)簽路徑表,用于記錄文檔樹結(jié)點(diǎn)的標(biāo)簽路徑信 息,pathID表示標(biāo)簽路徑的ID,pathExpr表示相應(yīng)的路徑表達(dá)式;Edge (docID, pID, cID),是邊表,表用于記錄具有文檔樹的邊,docID、pID和cID分 別表示文檔標(biāo)識(shí)、父結(jié)點(diǎn)和子結(jié)點(diǎn)在文檔中的ID ;TxtData (docID,pathID, ordinal, nID, type, value),是文本數(shù)據(jù)表,記錄文本結(jié) 點(diǎn)和屬性結(jié)點(diǎn)信息,ordinal表示具有相同標(biāo)簽路徑和父結(jié)點(diǎn)的子結(jié)點(diǎn)的次序,nID表示該 結(jié)點(diǎn)的編號(hào),type表示該結(jié)點(diǎn)類型,value表示該結(jié)點(diǎn)的值;GeoData (docID, pathID, ordinal, nID, type, shape), ^/1 ^ , id^/Lfnl 體結(jié)點(diǎn)的信息,type表示幾何體結(jié)點(diǎn)的類型,包括點(diǎn)類型、多點(diǎn)類型、線類型、多線類型、多 邊形類型、多多邊形類型,shape表示幾何體結(jié)點(diǎn)的信息。
全文摘要
本發(fā)明屬于信息技術(shù)中的空間信息存儲(chǔ)與查詢技術(shù)領(lǐng)域,具體為一種GML文檔存儲(chǔ)方法。該方法在存儲(chǔ)GML文檔時(shí)不依賴文檔對(duì)應(yīng)的模式,而直接根據(jù)GML文檔中的結(jié)構(gòu)信息和數(shù)據(jù)信息進(jìn)行存儲(chǔ),屬于模式無(wú)關(guān)的GML文檔存儲(chǔ)方法。通過字符流解析器將GML文檔中的結(jié)構(gòu)信息和數(shù)據(jù)信息進(jìn)行解析,將GML文檔的結(jié)構(gòu)和數(shù)據(jù)以路徑表、邊表、文本數(shù)據(jù)表和幾何體數(shù)據(jù)表的形式存儲(chǔ)到對(duì)象關(guān)系數(shù)據(jù)庫(kù)中。實(shí)驗(yàn)證明,本發(fā)明所提出存儲(chǔ)方法具有較小的時(shí)間耗費(fèi)和良好的可擴(kuò)展性、可行的,能有效地存儲(chǔ)和管理GML文檔。
文檔編號(hào)G06F17/30GK102054048SQ20111000348
公開日2011年5月11日 申請(qǐng)日期2011年1月10日 優(yōu)先權(quán)日2011年1月10日
發(fā)明者關(guān)佶紅, 周水庚, 朱付保, 王發(fā)標(biāo) 申請(qǐng)人:同濟(jì)大學(xué), 復(fù)旦大學(xué)