專利名稱::一種基于gdom及其持久化的gml解析方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種面向符合GML國(guó)際/國(guó)家標(biāo)準(zhǔn)的GML文檔的解析技術(shù),具體說(shuō)是一種基于GML操作模型GDOM并在其持久化基礎(chǔ)上的GML解析方法。
背景技術(shù):
:地理編碼語(yǔ)言(Geogr即hyMarkupLanguage,GML)自2000年由開(kāi)放地理信息系統(tǒng)聯(lián)盟(OpenGISConsortium,OGC)提出以來(lái),就受到了地理信息系統(tǒng)領(lǐng)域?qū)<覍W(xué)者、軟件廠商和應(yīng)用開(kāi)發(fā)人員的關(guān)注。憑借其開(kāi)放和自我描述的格式體系、完善豐富的空間數(shù)據(jù)表達(dá)技術(shù)、靈活多變的應(yīng)用模式生成方法等眾多優(yōu)點(diǎn),GML迅速在空間數(shù)據(jù)的表達(dá)與建模、傳輸與交換、集成與共享等諸多GIS研究與應(yīng)用方向中產(chǎn)生著積極的影響。特別是隨著GML國(guó)際標(biāo)準(zhǔn)(IS019136)和中國(guó)國(guó)家標(biāo)準(zhǔn)《地理信息地理標(biāo)記語(yǔ)言(GML)》(GB/T23708-2009)的實(shí)施,可以預(yù)見(jiàn)GML還將在國(guó)內(nèi)外更多新的GIS研究和應(yīng)用領(lǐng)域發(fā)揮重要作用?;趥鹘y(tǒng)XML解析的概念及方法,GML解析則是按照GML標(biāo)準(zhǔn)中核心模式的一般規(guī)則和基本模式組件的內(nèi)容特點(diǎn),遵循一定的接口標(biāo)準(zhǔn),通過(guò)軟件實(shí)現(xiàn),判斷GML文檔中元素的類型,提取元素間的語(yǔ)義含義。它和GML查詢有著本質(zhì)的不同,后者更強(qiáng)調(diào)面向元素值的操作,如提取或修改。作為我們理解GML應(yīng)用模式和數(shù)據(jù)的基礎(chǔ),GML解析已經(jīng)成為GML存儲(chǔ)、GML索引、GML查詢等其他GML數(shù)據(jù)資源處理工作的支撐技術(shù)。目前,XML解析主要有兩種主流的解析規(guī)范和技術(shù)方法一個(gè)是W3C制定的面向文檔的對(duì)象式解析(DocumentObjectModel,D0M);另一個(gè)是由DavidMegginson制定和維護(hù)的基于事件驅(qū)動(dòng)的推動(dòng)式解析(SimpleAPIforXML,SAX)?;贒OM和SAX,眾多主流的軟件廠商開(kāi)發(fā)了不同特點(diǎn)的XML解析器,如IBM的XML4J,Microsoft的MSXML,SUN的ProjectX,Oracle的XMLParser等。這些解析器雖然可以直接適用于GML的解析,但也存在很多缺陷l)DOM和SAX中沒(méi)有面向GML對(duì)象的接口描述,這使得開(kāi)發(fā)人員必須在現(xiàn)有解析器的基礎(chǔ)上擴(kuò)展面向GML解析的眾多接口,這明顯限制了GML解析的范圍;2)由于DOM和SAX的模型沒(méi)有針對(duì)GML核心模式中一般規(guī)則和GML對(duì)象的聲明與描述,這使得解析器在解析GML文檔時(shí)需要不斷地匹配龐大的、多達(dá)近30個(gè)的GML核心模式內(nèi)容體系,以提取文檔中元素的具體GML對(duì)象含義,這直接導(dǎo)致了GML解析效率的低下;3)基于DOM的解析器需要把GML文檔一次性載入計(jì)算機(jī)內(nèi)存進(jìn)行處理,這對(duì)于具有龐大空間信息的GML文檔來(lái)講,顯然是不可能的。基于SAX的解析器雖然可以通過(guò)事件驅(qū)動(dòng)的方式提高GML解析的效率,但其不能在GML文檔的元素間自由的進(jìn)行循環(huán)遍歷,這為GML元素間關(guān)系的判斷帶來(lái)新的難題。此外,一些面向GML開(kāi)發(fā)的軟件廠商也紛紛推出了自己的GML解析產(chǎn)品,典型的如,GALDOS歷經(jīng)三個(gè)版本的GMLSDK,SNOWFLAKE公司的GMLViewer、ESRI公司的GML互操作插件、SAFE公司的GML讀取工具等,這些軟件雖然增加了針對(duì)GML對(duì)象的提取接口,但由于其仍然基于DOM或SAX規(guī)范,因此在面向GML解析時(shí),還存在上述的諸多缺陷。一些GML研究者也提出了自己的解析方法,如,蘭小機(jī)提出的"GML3.0通用解析引擎",高曉黎提出的4"基于語(yǔ)法語(yǔ)義庫(kù)的通用GML模式解析"。這些方法雖具有一定的創(chuàng)新性,但都面向數(shù)據(jù)量較小的GML應(yīng)用模式文件,且解析接口有限,這同面向大數(shù)據(jù)量的GML文檔解析有著本質(zhì)的區(qū)別。
發(fā)明內(nèi)容針對(duì)現(xiàn)有技術(shù)存在的GML對(duì)象和解析接口不夠豐富等情況以及GML解析存在效率較低的缺陷,本發(fā)明提出了一種基于GDOM及其持久化的GML解析方法,面向GML文檔解析的GML文檔對(duì)象模型(GMLDocumentObjectModel,GDOM),制定了不同對(duì)象的解析接口,設(shè)計(jì)了面向GDOM的持久化方法,有效地減少了GML解析所需要的數(shù)據(jù)內(nèi)容,實(shí)現(xiàn)了GDOM持久化文件的解析。本發(fā)明一種基于GDOM及其持久化的GML解析方法,其步驟分為GDOM對(duì)象模型設(shè)計(jì)、GDOM語(yǔ)義解析接口設(shè)計(jì)、持久化處理方法以及GDOM數(shù)據(jù)的解析流程1、GDOM對(duì)象模型設(shè)計(jì)GDOM對(duì)象模型包含基本對(duì)象類型和擴(kuò)展對(duì)象類型兩部分。其中基本對(duì)象類型有7種要素節(jié)點(diǎn)(FeatureNode)、要素特性節(jié)點(diǎn)(FeaturePropertyNode)、要素成員節(jié)點(diǎn)(FeatureMemberNode)、幾何特性節(jié)點(diǎn)(GeometryPropertyNode),幾何節(jié)點(diǎn)(GeometryObjectNode),空間閉包節(jié)點(diǎn)(BoundingShapeNode)和GML文檔(根)節(jié)點(diǎn)(DocumentNode)。GDOM中所有節(jié)點(diǎn)對(duì)象(除DocumentNode),均由BaseNode繼承而來(lái),它提供GDOM節(jié)點(diǎn)對(duì)象的基本操作;DocumentNode與XMLDOM規(guī)范中的Document類型類似,指向GML實(shí)例文檔的根節(jié)點(diǎn),提供文檔數(shù)據(jù)最初(或最頂層)的訪問(wèn)入口。其他GDOM對(duì)象提供ownerDocument屬性,用于關(guān)聯(lián)其所屬的GML文檔節(jié)點(diǎn);FeatureNode對(duì)應(yīng)GML文檔中的要素,提供要素名稱、要素幾何類型、要素空間閉包等要素基本信息的訪問(wèn)。FeatureNode可以包含要素特性對(duì)象、幾何特性對(duì)象、幾何對(duì)象和空間閉包對(duì)象;FeaturePropertyNode主要用于支持要素之間的嵌套。GML應(yīng)用模式中可以直接使用核心模式中提供的FeatureProperty進(jìn)行要素間的嵌套。但通常情況下,GML應(yīng)用模式會(huì)構(gòu)建包含語(yǔ)義特征的要素特性節(jié)點(diǎn),要素特性節(jié)點(diǎn)的節(jié)點(diǎn)名稱與應(yīng)用模式相關(guān);FeatureMemberNode用于創(chuàng)建要素集合,該節(jié)點(diǎn)對(duì)象提供相應(yīng)的屬性字段,返回成員所屬的要素集;FeatureNode通過(guò)GeometryPropertyNode實(shí)現(xiàn)對(duì)幾何對(duì)象的引用。它記錄了幾何特性(GeometryProperty)在應(yīng)用模式中的名稱、幾何特性所包含的幾何對(duì)象的維度等信息;GeometryObjectNode可以代表幾何單形、幾何復(fù)形、幾何組合和幾何聚合,它提供針對(duì)幾何的基本操作,包括提取參考系、提取幾何類型、計(jì)算空間閉包以及提取坐標(biāo)信息等;Bo皿dingSh即eNode用于確定要素的矩形邊界范圍,一般包含邊界范圍的左上角與右下角兩個(gè)坐標(biāo)值。GDOM基本對(duì)象能夠表達(dá)使用GML要素模型與幾何模型構(gòu)建的GML應(yīng)用模式,是對(duì)GML文檔的高層語(yǔ)義描述。其中GeometryObjectNode是對(duì)GML幾何模型中各種幾何類型的抽象,如果需要構(gòu)建更為詳細(xì)的幾何節(jié)點(diǎn)對(duì)象則需要對(duì)GeometryObjectNode進(jìn)行擴(kuò)展。GDOM的擴(kuò)展對(duì)象類型是GML核心模式中對(duì)象(基本對(duì)象)的定義,擴(kuò)展對(duì)象類型通過(guò)繼承建立與基本對(duì)象類型的關(guān)系。例如,通過(guò)分析GML的核心幾何模式文件,在GDOM基本對(duì)象類型的基礎(chǔ)上,對(duì)GDOM幾何GeometryObjectNode進(jìn)行擴(kuò)展。為了表達(dá)各種GML幾何對(duì)象之間的聯(lián)系,GDOM還定義一些用于節(jié)點(diǎn)對(duì)象繼承與引用的輔助節(jié)點(diǎn),如BaseSurfaceNode(PrimitiveSurfaceNode、PolygonNode、OrientableSurfaceNode的父類)、BaseCurveNode(PrimitveCurveNode、LineStringNode、OrientableCurveNode的父類)、BaseRingNode(RingNode、LinearRingNode的父類)。2、GDOM語(yǔ)義解析接口設(shè)計(jì)GDOM語(yǔ)義解析接口方法直接針對(duì)GD0M,基本對(duì)象包含44個(gè)接口函數(shù),擴(kuò)展對(duì)象包含47個(gè)接口函數(shù),輔助對(duì)象包含16個(gè)接口函數(shù)?;緦?duì)象包含7類,其中Doc聽(tīng)ntNode有10個(gè)解析接口,F(xiàn)eatureNode包含13個(gè)解析接口,F(xiàn)eaturePropertyNode包含2個(gè)接口,F(xiàn)eatureMenberNode包括2個(gè)接口,Geometry0bjectNode包括13個(gè)接口,GeometryPropertyNode包含2個(gè)接口,BoundingShape包含2個(gè)接口;擴(kuò)展對(duì)象包含26類對(duì)象,輔助對(duì)象有7類,每類對(duì)象都包相應(yīng)的解析接口(詳見(jiàn)表1、2、3)。3、持久化處理GDOM持久化的過(guò)程實(shí)際上是把GML數(shù)據(jù)文件及模式文件中的部分信息,按照GDOM要求的模式進(jìn)行組織,并將其組織成GDOM元數(shù)據(jù)文件的過(guò)程。存儲(chǔ)GDOM對(duì)象信息的描述文件稱為GDOM元數(shù)據(jù)文件,具體分為兩種結(jié)構(gòu)元數(shù)據(jù)文件和內(nèi)容元數(shù)據(jù)文件。前者存儲(chǔ)GDOM語(yǔ)義樹(shù)結(jié)構(gòu)信息,后者存儲(chǔ)GDOM語(yǔ)義樹(shù)節(jié)點(diǎn)內(nèi)容信息。(1)GDOM持久化數(shù)據(jù)結(jié)構(gòu)GDOM結(jié)構(gòu)元數(shù)據(jù)保存GDOM對(duì)象的嵌套結(jié)構(gòu)信息,不記錄具體的數(shù)據(jù)內(nèi)容。GDOM對(duì)象被定義成GDOM結(jié)構(gòu)元數(shù)據(jù)中的復(fù)雜元素類型。對(duì)象之間的嵌套關(guān)系轉(zhuǎn)換為元素類型之間的引用關(guān)系。GDOM結(jié)構(gòu)元數(shù)據(jù)利用XML文檔的層次嵌套結(jié)構(gòu),描述GDOM對(duì)象間的嵌套關(guān)系,把基于GDOM樹(shù)GML語(yǔ)義級(jí)別的文檔遍歷操作,諸如下一幾何節(jié)點(diǎn)、前一要素節(jié)點(diǎn)等,轉(zhuǎn)換為對(duì)GDOM結(jié)構(gòu)元數(shù)據(jù)的路徑查詢。GDOM內(nèi)容元數(shù)據(jù)與結(jié)構(gòu)元數(shù)據(jù)類似,同樣使用XML復(fù)雜元素類型表示GDOM對(duì)象。GDOM對(duì)象的屬性值,表現(xiàn)為復(fù)雜元素類型中子元素的值。因此,內(nèi)容元數(shù)據(jù)中的復(fù)雜元素僅包含簡(jiǎn)單類型的子元素,不存在復(fù)雜元素之間的嵌套關(guān)系。GDOM內(nèi)容元數(shù)據(jù)記錄與GML文檔內(nèi)容的映射關(guān)系,保證GDOM管理引擎在提供接口操作時(shí)能夠找到相應(yīng)的記錄信息。GDOM對(duì)象的屬性值與GML數(shù)據(jù)文件的內(nèi)容之間通過(guò)映射實(shí)現(xiàn)關(guān)聯(lián),具體的映射關(guān)系包括元素名映射方式、元素值映射方式和屬性值映射方式三種。元素名映射方式,GDOM對(duì)象的屬性值是GML文檔中某個(gè)元素的名稱,如FeaturePropertyNode的getPropertyName操作,它提取的屬性值是與其關(guān)聯(lián)的XML元素的元素名稱。元素值映射方式,GDOM對(duì)象的屬性值是GML文檔中某個(gè)元素的文本值,如PolygonNode的getExteriorCoords操作,它所提取的屬性值是與其關(guān)聯(lián)的XML元素的元素值。屬性值映射方式,GDOM對(duì)象的屬性值是GML文檔中某個(gè)元素的屬性值,如FeatureNode的getgmlid操作,它所提取的屬性值是與其關(guān)聯(lián)的XML元素的id屬性值。多元素值映射方式,對(duì)象的屬性值由數(shù)據(jù)文件中多個(gè)簡(jiǎn)單元素節(jié)點(diǎn)的值組合而成,如PolygonNode的getlnteriorCoords操作,它所提取的內(nèi)容是多邊形所有內(nèi)環(huán)節(jié)點(diǎn)的坐標(biāo)值。結(jié)構(gòu)元數(shù)據(jù)與內(nèi)容元數(shù)據(jù)之間通過(guò)GDOM對(duì)象編碼相關(guān)聯(lián)。GDOM對(duì)象編碼是GDOM對(duì)象在GDOM語(yǔ)義樹(shù)上的唯一標(biāo)識(shí),它的編碼包含兩部分,前3位為GDOM對(duì)象類型編碼,后六位為索引號(hào),由對(duì)象類型編碼與索引號(hào)組合而成。索引號(hào)與對(duì)象在GDOM樹(shù)中的出現(xiàn)的順序有關(guān),每一類GD0M對(duì)象使用單獨(dú)的索引號(hào),按照GDOM樹(shù)的深度優(yōu)先順序依次增加。如GDOM對(duì)象編碼為002000002,表示按照深度優(yōu)先的順序,該對(duì)象是GDOM語(yǔ)義樹(shù)中第二個(gè)GDOM要素對(duì)象(圖1)。(2)GD0M持久化過(guò)程GDOM的持久化過(guò)程首先是讀入GML應(yīng)用模式文件,建立應(yīng)用模式標(biāo)簽和核心模式標(biāo)簽的映射;然后讀入GML數(shù)據(jù)文檔,對(duì)GML文檔進(jìn)行基于數(shù)據(jù)流的遍歷,通過(guò)判斷GML標(biāo)簽建立相應(yīng)的GDOM對(duì)象,并把GML數(shù)據(jù)文檔中的數(shù)據(jù)寫(xiě)入GDOM對(duì)象,同時(shí)建立GDOM對(duì)象的堆棧,建立對(duì)象之間的邏輯包含關(guān)系,形成GDOM實(shí)例;最終把內(nèi)存中的GDOM對(duì)象序列化為結(jié)構(gòu)元數(shù)據(jù)文件和內(nèi)容元數(shù)據(jù)文件,其過(guò)程如圖2所示。以School,xml為例(圖3),通過(guò)本方法可以形成GDOM實(shí)例(圖4)及兩個(gè)持久化文件(圖5、6)。4、基于GD0M持久化的解析由于GDOM對(duì)象已經(jīng)持久化為GDOM結(jié)構(gòu)文件和內(nèi)容文件,因此,基于GDOM對(duì)GML解析的過(guò)程實(shí)際上是對(duì)結(jié)構(gòu)文件和內(nèi)容文件內(nèi)容的讀取。并通過(guò)GDOM對(duì)象的接口實(shí)現(xiàn)調(diào)用。在GML解析過(guò)程中,外部模塊調(diào)用解析函數(shù),解析函數(shù)通過(guò)訪問(wèn)器訪問(wèn)GDOM對(duì)象,GDOM對(duì)象按照解析接口的要求開(kāi)始遍歷持久化文件,首先遍歷結(jié)構(gòu)元數(shù)據(jù)文件,如果找到滿足解析接口的數(shù)據(jù),則返回該數(shù)據(jù),否則根據(jù)結(jié)構(gòu)元數(shù)據(jù)文件和內(nèi)容數(shù)據(jù)元文件的映射關(guān)系遍歷內(nèi)容元數(shù)據(jù)文件,如果找到滿足要求的數(shù)據(jù),返回該數(shù)據(jù),否則需要根據(jù)內(nèi)容元文件記錄的編碼對(duì)GML值文件進(jìn)行查找,直至發(fā)現(xiàn)滿足解析接口的數(shù)據(jù)(圖7)。本發(fā)明方法,針對(duì)面向GML文本解析接口不夠豐富、缺乏規(guī)范以及效率低下等方法弊端,設(shè)計(jì)了具有豐富的GML對(duì)象表達(dá)和語(yǔ)義操縱接口的文檔對(duì)象模型(GDOM)。為提高GML解析的效率,設(shè)計(jì)了面向GDOM對(duì)象的持久化存儲(chǔ)方法、定義了存儲(chǔ)GDOM語(yǔ)義樹(shù)結(jié)構(gòu)信息的結(jié)構(gòu)元數(shù)據(jù)和存儲(chǔ)GDOM語(yǔ)義樹(shù)節(jié)點(diǎn)內(nèi)容信息的內(nèi)容元數(shù)據(jù)。在此基礎(chǔ)上,基于SAX的方法實(shí)現(xiàn)了GDOM持久化文件的生成,基于DOM方法實(shí)現(xiàn)了GDOM持久化文件的解析。為高效、靈活地處理GML或其它半結(jié)構(gòu)化空間數(shù)據(jù)資源提供了解決辦法。圖1GD0M持久化后數(shù)據(jù)的索引號(hào);圖2GD0M數(shù)據(jù)持久化過(guò)程;圖3示例實(shí)例數(shù)據(jù)文檔schools,xml;圖4Schools.xml的GDOM樹(shù)結(jié)構(gòu);圖5Schools.xml的結(jié)構(gòu)元數(shù)據(jù)文件;圖6Schools.xml的內(nèi)容元數(shù)據(jù)文件;圖7基于GDOM數(shù)據(jù)持久化的解析流程;圖8基于GDOM及其持久化的GML解析方法在GML空間查詢中的應(yīng)用。具體實(shí)施例方式下面結(jié)合具體實(shí)施例,對(duì)本發(fā)明做詳細(xì)說(shuō)明。以GML數(shù)據(jù)的空間查詢?yōu)槔珿DOM對(duì)象由構(gòu)建到向應(yīng)用程序提供解析操作步驟如下(圖8):7GDOM元數(shù)據(jù)文件的構(gòu)建GDOM元數(shù)據(jù)文檔的生成依賴于GML語(yǔ)義解析過(guò)程。GD0M管理引擎將GML數(shù)據(jù)解析中遇到的XML對(duì)象類型翻譯為相應(yīng)的GDOM對(duì)象類型,并按照GDOM元數(shù)據(jù)的模式文件創(chuàng)建GDOM元數(shù)據(jù)文件。該過(guò)程首先是DOM對(duì)象類型與GDOM對(duì)象類型的映射過(guò)程。GML數(shù)據(jù)文件中有兩種類型的元素可以映射為GDOM對(duì)象,一類是GML核心模式中的元素類型,另一類是應(yīng)用模式中由GML核心元素類型擴(kuò)展而來(lái)元素類型,它們各自使用不同的映射方式(l)GML核心模式定義的元素類型。此種的映射相對(duì)簡(jiǎn)單,使用靜態(tài)映射文件記錄表中所定義的GML核心元素類型與GDOM對(duì)象類型之間映射關(guān)系即可。(2)GML應(yīng)用模式定義的擴(kuò)展元素類型。擴(kuò)展元素類型對(duì)應(yīng)的GDOM對(duì)象類型即為其父類型對(duì)應(yīng)的GDOM對(duì)象類型。因此,可以通過(guò)對(duì)應(yīng)用模式的解析,構(gòu)建動(dòng)態(tài)映射文件,記錄擴(kuò)展元素類型與GDOM對(duì)象類型之間的映射。由于擴(kuò)展元素類型通常使用與應(yīng)用相關(guān)的名稱來(lái)定義,導(dǎo)致記錄這種映射關(guān)系的映射文件會(huì)根據(jù)應(yīng)用模式的不同發(fā)生變化。GDOM對(duì)象的構(gòu)建與GML解析GDOM對(duì)象構(gòu)建器從GDOM內(nèi)容元數(shù)據(jù)中提取對(duì)象屬性的值及其映射方式初始化GDOMObjects。初始狀態(tài)的GDOMObjects中屬性信息分為兩類一類屬性的映射方式為SimpleType的屬性,它們的值從GDOM內(nèi)容數(shù)據(jù)文件中直接提??;另一類屬性的值需要根據(jù)映射方式,動(dòng)態(tài)從GML文檔中提取。因此,對(duì)于第二類屬性,初始時(shí)GDOMObjects只記錄與屬性信息相關(guān)聯(lián)的節(jié)點(diǎn)編碼及其值的映射方式。GDOMObjects不支持直接通過(guò)類成員的方式提取信息。屬性值的獲取全部通過(guò)Get訪問(wèn)器。Get訪問(wèn)器實(shí)現(xiàn)了具體的GML解析操作,按照指定的映射方式調(diào)用本原GML數(shù)據(jù)庫(kù)系統(tǒng)底層相應(yīng)的查詢接口,向應(yīng)用程序返回真實(shí)的屬性值。GML查詢對(duì)解析接口的引用以GML的空間查詢?yōu)槔紫刃枰獙?duì)輸入的查詢語(yǔ)句進(jìn)行分析,找出空間算子連接的對(duì)象,然后引入解析接口,判斷連接的對(duì)象是否為GeometryObjectNode,如果是則進(jìn)行下一步運(yùn)算,并返回查詢結(jié)果,否則退出空間查詢,并提示錯(cuò)誤信息。表1GD0M基本對(duì)象及其接口函數(shù)集<table>tableseeoriginaldocumentpage9</column></row><table><table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>表2GD0M擴(kuò)展對(duì)象及其接口函數(shù)集<table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table><table>tableseeoriginaldocumentpage13</column></row><table><table>tableseeoriginaldocumentpage14</column></row><table>權(quán)利要求一種基于GDOM及其持久化的GML解析方法,其步驟是A、GDOM對(duì)象模型設(shè)計(jì)GDOM對(duì)象模型包含基本對(duì)象類型和擴(kuò)展對(duì)象類型兩部分;其中基本對(duì)象類型有7種要素節(jié)點(diǎn)(FeatureNode)、要素特性節(jié)點(diǎn)(FeaturePropertyNode)、要素成員節(jié)點(diǎn)(FeatureMemberNode)、幾何特性節(jié)點(diǎn)(GeometryPropertyNode),幾何節(jié)點(diǎn)(GeometryObjectNode),空間閉包節(jié)點(diǎn)(BoundingShapeNode)和GML文檔節(jié)點(diǎn)(DocumentNode);要素節(jié)點(diǎn)、要素特性節(jié)點(diǎn)、要素成員節(jié)點(diǎn)、幾何特性節(jié)點(diǎn),幾何節(jié)點(diǎn),空間閉包節(jié)點(diǎn),均由BaseNode繼承而來(lái),它提供GDOM節(jié)點(diǎn)對(duì)象的基本操作;DocumentNode指向GML實(shí)例文檔的根節(jié)點(diǎn),提供文檔數(shù)據(jù)最初的訪問(wèn)入口。其他GDOM對(duì)象提供ownerDocument屬性,用于關(guān)聯(lián)其所屬的GML文檔節(jié)點(diǎn);FeatureNode對(duì)應(yīng)GML文檔中的要素,提供要素名稱、要素幾何類型、要素空間閉包的訪問(wèn);FeatureNode包含要素特性對(duì)象、幾何特性對(duì)象、幾何對(duì)象和空間閉包對(duì)象;FeaturePropertyNode用于支持要素之間的嵌套;FeatureMemberNode用于創(chuàng)建要素集合,該節(jié)點(diǎn)對(duì)象提供相應(yīng)的屬性字段,返回成員所屬的要素集;FeatureNode通過(guò)GeometryPropertyNode實(shí)現(xiàn)對(duì)幾何對(duì)象的引用,記錄了幾何特性(GeometryProperty)在應(yīng)用模式中的名稱、幾何特性所包含的幾何對(duì)象的維度;GeometryObjectNode代表幾何單形、幾何復(fù)形、幾何組合和幾何聚合,它提供針對(duì)幾何的基本操作,包括提取參考系、提取幾何類型、計(jì)算空間閉包以及提取坐標(biāo)信息;BoundingShapeNode用于確定要素的矩形邊界范圍,一般包含邊界范圍的左上角與右下角兩個(gè)坐標(biāo)值;B、GDOM語(yǔ)義解析接口設(shè)計(jì)GDOM語(yǔ)義解析接口直接針對(duì)GDOM,基本對(duì)象包含7類,其中DocumentNode有10個(gè)解析接口,F(xiàn)eatureNode包含13個(gè)解析接口,F(xiàn)eaturePropertyNode包含2個(gè)接口,F(xiàn)eatureMenberNode包括2個(gè)接口,GeometryObjectNode包括13個(gè)接口,GeometryPropertyNode包含2個(gè)接口,BoundingShape包含2個(gè)接口;擴(kuò)展對(duì)象包含26類對(duì)象,輔助對(duì)象有7類,每類對(duì)象都包相應(yīng)的解析接口;C、持久化處理GDOM持久化處理是把GML數(shù)據(jù)文件及模式文件中的部分信息,按照GDOM要求的模式進(jìn)行組織,并將其組織成GDOM元數(shù)據(jù)文件的過(guò)程;存儲(chǔ)GDOM對(duì)象信息的描述文件稱為GDOM元數(shù)據(jù)文件,具體分為兩種結(jié)構(gòu)元數(shù)據(jù)文件和內(nèi)容元數(shù)據(jù)文件。前者存儲(chǔ)GDOM語(yǔ)義樹(shù)結(jié)構(gòu)信息,后者存儲(chǔ)GDOM語(yǔ)義樹(shù)節(jié)點(diǎn)內(nèi)容信息;(1)GDOM持久化數(shù)據(jù)結(jié)構(gòu)GDOM結(jié)構(gòu)元數(shù)據(jù)保存GDOM對(duì)象的嵌套結(jié)構(gòu)信息,不記錄具體的數(shù)據(jù)內(nèi)容;GDOM對(duì)象被定義成GDOM結(jié)構(gòu)元數(shù)據(jù)中的復(fù)雜元素類型;對(duì)象之間的嵌套關(guān)系轉(zhuǎn)換為元素類型之間的引用關(guān)系;GDOM結(jié)構(gòu)元數(shù)據(jù)利用XML文檔的層次嵌套結(jié)構(gòu),描述GDOM對(duì)象間的嵌套關(guān)系,把基于GDOM樹(shù)GML語(yǔ)義級(jí)別的文檔遍歷操作;GDOM內(nèi)容元數(shù)據(jù),同樣使用XML復(fù)雜元素類型表示GDOM對(duì)象;內(nèi)容元數(shù)據(jù)中的復(fù)雜元素僅包含簡(jiǎn)單類型的子元素,不存在復(fù)雜元素之間的嵌套關(guān)系;GDOM內(nèi)容元數(shù)據(jù)記錄與GML文檔內(nèi)容的映射關(guān)系,保證GDOM管理引擎在提供接口操作時(shí)能夠找到相應(yīng)的記錄信息;GDOM對(duì)象的屬性值與GML數(shù)據(jù)文件的內(nèi)容之間通過(guò)映射實(shí)現(xiàn)關(guān)聯(lián),具體的映射關(guān)系包括元素名映射方式、元素值映射方式和屬性值映射方式三種元素值映射方式,GDOM對(duì)象的屬性值是GML文檔中某個(gè)元素的文本值,它所提取的屬性值是與其關(guān)聯(lián)的XML元素的元素值;屬性值映射方式,GDOM對(duì)象的屬性值是GML文檔中某個(gè)元素的屬性值,它所提取的屬性值是與其關(guān)聯(lián)的XML元素的id屬性值;多元素值映射方式,對(duì)象的屬性值由數(shù)據(jù)文件中多個(gè)簡(jiǎn)單元素節(jié)點(diǎn)的值組合而成,它所提取的內(nèi)容是多邊形所有內(nèi)環(huán)節(jié)點(diǎn)的坐標(biāo)值;結(jié)構(gòu)元數(shù)據(jù)與內(nèi)容元數(shù)據(jù)之間通過(guò)GDOM對(duì)象編碼相關(guān)聯(lián);GDOM對(duì)象編碼包含兩部分,前3位為GDOM對(duì)象類型編碼,后六位為索引號(hào),由對(duì)象類型編碼與索引號(hào)組合而成;索引號(hào)與對(duì)象在GDOM樹(shù)中的出現(xiàn)的順序有關(guān),每一類GDOM對(duì)象使用單獨(dú)的索引號(hào),按照GDOM樹(shù)的深度優(yōu)先順序依次增加;(2)GDOM持久化過(guò)程GDOM的持久化過(guò)程首先是讀入GML應(yīng)用模式文件,建立應(yīng)用模式標(biāo)簽和核心模式標(biāo)簽的映射;然后讀入GML數(shù)據(jù)文檔,對(duì)GML文檔進(jìn)行基于數(shù)據(jù)流的遍歷,通過(guò)判斷GML標(biāo)簽建立相應(yīng)的GDOM對(duì)象,并把GML數(shù)據(jù)文檔中的數(shù)據(jù)寫(xiě)入GDOM對(duì)象,同時(shí)建立GDOM對(duì)象的堆棧,建立對(duì)象之間的邏輯包含關(guān)系,形成GDOM實(shí)例;最終把內(nèi)存中的GDOM對(duì)象序列化為結(jié)構(gòu)元數(shù)據(jù)文件和內(nèi)容元數(shù)據(jù)文件;D、基于GDOM持久化的解析基于GDOM對(duì)GML解析的過(guò)程是對(duì)結(jié)構(gòu)文件和內(nèi)容文件內(nèi)容的讀取,并通過(guò)GDOM對(duì)象的接口實(shí)現(xiàn)調(diào)用;在GML解析過(guò)程中,外部模塊調(diào)用解析函數(shù),解析函數(shù)通過(guò)訪問(wèn)器訪問(wèn)GDOM對(duì)象,GDOM對(duì)象按照解析接口的要求開(kāi)始遍歷持久化文件,首先遍歷結(jié)構(gòu)元數(shù)據(jù)文件,如果找到滿足解析接口的數(shù)據(jù),則返回該數(shù)據(jù),否則根據(jù)結(jié)構(gòu)元數(shù)據(jù)文件和內(nèi)容數(shù)據(jù)元文件的映射關(guān)系遍歷內(nèi)容元數(shù)據(jù)文件,如果找到滿足要求的數(shù)據(jù),返回該數(shù)據(jù),否則需要根據(jù)內(nèi)容元文件記錄的編碼對(duì)GML值文件進(jìn)行查找,直至發(fā)現(xiàn)滿足解析接口的數(shù)據(jù)。全文摘要本發(fā)明公開(kāi)了一種基于GDOM及其持久化的GML解析方法,其步驟分為GDOM對(duì)象模型設(shè)計(jì)、GDOM語(yǔ)義解析接口設(shè)計(jì)、持久化處理方法以及GDOM數(shù)據(jù)的解析流程。本發(fā)明方法,針對(duì)面向GML文本解析接口不夠豐富、缺乏規(guī)范以及效率低下等方法弊端,設(shè)計(jì)了具有豐富的GML對(duì)象表達(dá)和語(yǔ)義操縱接口的文檔對(duì)象模型(GDOM)。為提高GML解析的效率,設(shè)計(jì)了面向GDOM對(duì)象的持久化存儲(chǔ)方法、定義了存儲(chǔ)GDOM語(yǔ)義樹(shù)結(jié)構(gòu)信息的結(jié)構(gòu)元數(shù)據(jù)和存儲(chǔ)GDOM語(yǔ)義樹(shù)節(jié)點(diǎn)內(nèi)容信息的內(nèi)容元數(shù)據(jù)。在此基礎(chǔ)上,基于SAX的方法實(shí)現(xiàn)了GDOM持久化文件的生成,基于DOM方法實(shí)現(xiàn)了GDOM持久化文件的解析。為高效、靈活地處理GML或其它半結(jié)構(gòu)化空間數(shù)據(jù)資源提供了解決辦法。文檔編號(hào)G06F9/44GK101794225SQ20101011484公開(kāi)日2010年8月4日申請(qǐng)日期2010年2月26日優(yōu)先權(quán)日2010年2月26日發(fā)明者吳薇,孫寶華,孫玉婷,張書(shū)亮,鄒紅,閭國(guó)年,馬少松申請(qǐng)人:南京師范大學(xué)