本站小編為你精心準備了數據流查詢方法參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
摘要:針對目前XML數據流處理中通常采用的查詢語言XPath和XQuery均不支持空間運算,無法應用到空間數據流處理技術中的問題,設計了一種通過擴展現有商業化XQuery引擎功能基礎上的空間數據流檢索方法。
關鍵詞:可擴展標記語言數據流;XQuery;空間數據
隨著Web應用中數據交換越來越頻繁,產生了大量不間斷的數據流。由于XML已經成為Internet環境中數據表示和交換的標準,數據流大量以XML格式表現。如何從不間斷的XML數據流中匹配、抽取和轉換部分數據流以滿足商務應用的需求成為當前國際數據庫領域的一個研究熱點。目前針對XML數據流的處理研究有很多,但研究的對象均是普遍意義上的XML數據流,對于以XML格式表現的空間信息及查詢中需要空間關系運算的數據流處理研究較少。研究如何在目前的XML數據流處理中支持空間運算有著重要意義。
1存在的問題
在目前針對XML數據流的研究中,其基本思想都是將用XPath表示的查詢表達式轉換為狀態樹型自動機,處理程序以流的方式接收并處理XML文檔,看其滿足哪一個狀態節點的要求以觸發查詢匹配操作。如果滿足所有狀態節點的要求,則向用戶返回相關的文檔或結果[1]。由于XPath表達復雜查詢的局限性,W3C制定了專門針對XML的查詢語言規范XQuery。XQuery語言的核心是XPath和FLWOR(for、let、where、orderby和return)表達式,復雜的XQuery查詢語句很難用合適的狀態機來表達。將XQuery直接改造成XML數據流的查詢語言也引出了大量研究[2~5]。目前標準的XPath和XQuery規范均不支持空間數據類型及空間運算,且空間分析功能算法復雜。通過這些規范自身的數據類型定義和基本函數庫來實現復雜空間數據類型以及空間分析功能的擴展很困難,使得這些研究很難應用到包含空間運算的數據流查詢中。要在XML數據流查詢中支持空間運算,需要先擴展XQuery規范以支持空間數據操作函數。自定義實現支持空間運算的XQuery引擎是理想的方法。文獻[6,7]中已提出了直接擴展XQuery以支持空間功能的方法。但自定義實現XQuery引擎需要完整的詞法分析、語法分析、查詢規范化以及翻譯執行等,使得這些方法均停留在理論階段,很難實際應用。
針對這些問題,本文設計了一種在商業化引擎基礎上擴展XQuery空間功能的方法,然后以事件流處理方式接收XML文檔以實現空間數據流查詢的方法。
2XQuery引擎空間功能的擴展
擴展XQuery引擎以支持空間運算,除了自定義實現支持空間運算的XQuery引擎方法外,還可以利用現有的XQuery引擎進行擴展。目前的商業化XQuery引擎均提供使用外部函數的功能擴展方法,如目前知名的商業化XQuery引擎Saxon提供的功能擴展機制可以允許在XQuery查詢語句中調用Java或.NET方法作為外部函數。其使用方法簡單,只需要在XQuery查詢語句中聲明外部函數所在的名稱空間就可以調用外部方法。這為XQuery引擎實現包括空間分析的查詢提供了便捷的途徑。
2.1空間數據類型的表達方法
采取調用外部方法來擴展XQuery引擎的功能,不可避免地會產生空間數據作為參數傳遞的問題。以采用Java語言實現擴展方法為例。雖然容易用Java對象表達各種空間數據類型,但由于XQuery引擎規范本身不支持直接以Java對象表達的空間數據類型,為了使XQuery語句中支持空間數據類型并能夠使空間數據在Java類和XQuery引擎中傳遞,需要找到一種合適的空間數據表達方法。
GML是一個用XMLschema描述的XML語法,用來進行空間和非空間的地理信息建模、傳輸和存儲。GML已成為Web應用中所接受并容易理解的一種空間信息的交換格式。由于GML文檔本身也是一個XML文檔,可以用DOM對象document來表達,在Saxon的XQuery實現中能夠支持DOM對象的傳遞,采用GML表達空間數據以支持空間數據在XQuery引擎與外部Java類之間的傳遞成為自然的選擇。將GML在XQuery引擎與外部方法之間進行傳遞,需要引入GML的schema描述。在GML規范中,feature.xsd定義了抽象地理特征模型,geometry.xsd定義了具體的幾何形狀信息,提供了點(point)、線(line)、多邊形(polygon)、點集(multipoint)、線集(multiline)和多邊形集(multipolygon)等基本幾何圖形以及復合類型(complextype)的幾何圖形。在本方法中只用到了空間數據類型的幾何定義,所以引入geometry.xsd即可。在XQuery語句中定義如下:
importschemanamespaceGML="/gml/"
at"geometry.xsd";
引入GML的schema后,可以將GML進行描述的空間變量定義為schema限制的element變量作為參數進行傳遞,定義如下:
Let$p=doc(′test.xml′)/schema-element(GML:linestring)
2.2空間功能的擴展
定義了空間數據的表達方式后,對空間運算功能的實現在外部方法中進行。參照文獻[6]中定義的空間方法,本文定義了SPATIAL類封裝,實現了部分空間方法。由于Saxon的XQuery實現中,支持對Java類的靜態方法調用以及實例化對象方法調用,但對于需要實例化對象的方法調用相對復雜。為了方便調用,所有空間方法均定義為SPATIAL類的靜態成員方法。定義如下:
publicclassSPATIAL{
publicstaticbooleanWithIn(Documenta,Documentb){…}
publicstaticbooleanToughes(Documenta,Documentb){…}
publicstaticbooleanCrosses(Documenta,Documentb){…}
……}
實現了上述定義空間方法后,通過該類就可以擴展Saxon的XQuery引擎。擴展方法很簡單,只需在XQuery語句中聲明該空間類的名稱空間,在查詢語句中需要空間運算的地方調用該類的各種方法即可。比如要使用空間包含的方法,先聲明名稱空間:declarenamespaceSPATIAL=“java:myclass.SPATIAL”;然后只需在調用方法前加入名稱空間即可,如SPATIAL:Disjoin(…)。
另外需要注意的是,如果擴展的方法返回值不是簡單數據類型則需要進一步處理。本文方法只是返回空間的包含相交等關系是否為真,是簡單的布爾類型,不需要進一步處理。
3基于擴展引擎的空間數據流查詢方法
擴展后的XQuery引擎可以處理帶有空間信息的XML文檔。但由于目前的XQuery引擎通常被設計來處理在內存中裝配好的源XML文檔,對于動態的數據流而言無法直接處理。為了能夠對空間數據流進行處理,還需要借助SAX(simpleAPIforXML)之類基于事件的XML解析程序輔助處理,以避免在采取操作之前需要存儲文檔的所有內容。
本文原文
SAX是事件驅動的XML處理器,允許正在讀取XML文檔時處理該文檔。文檔的讀入過程也就是SAX的解析過程。其觸發的事件主要包括:startDocument表示文檔開始;endDocument表示文檔結束;startElement表示元素開始;endElement表示元素結束;characters表示字符數據。將SAX與Saxon組合處理以XML格式表達空間數據流時,需要在相應的事件處理程序中調用XQuery查詢語句。以一簡單的物流監控為例,監控中心希望監控車輛在某指定時段內的指定區域的行駛是否符合預設路線。假設車輛每隔5min將該時段內的行駛軌跡及狀態信息以XML文檔格式形成不間斷的數據流發送給監控中心。其數據格式DTD定義如下:
〈xsd:complexTypename="DTStateHistory"〉
〈xsd:elementname=IDtype="xsd:Integer"〉
〈xsd:sequence〉
〈xsd:elementname="StateUnit"type="DTstateUnit"minOccurs=
"1"maxOccurs="unbounded"/〉
〈/xsd:sequence〉
〈/xsdcomplexType〉
〈xsd:complexTypename="DTStateUnit"〉
〈xsd:elementname="Time"type="xsd:Date"/〉
〈xsd:elementname="Position"type="GML:Point"/〉
…(其他必要屬性信息)
〈/xsdcomplexType〉
用SAX和Saxon組合處理該數據流,當數據流不斷到達時,SAX處理程序監聽數據流并觸發相應的事件。在元素DTStateHistory的endElement事件到達時,將該段數據流轉換為XML文檔存入內存,以DOM數據類型表示作為Saxon引擎的數據源,由Saxon引擎執行預先設定的查詢語句。查詢的XQuery語句如下:
declarenamespaceSPATIAL="java:myclass.SPATIAL"
declarevariable$RouteasGML:MultiLineStringexternal
for$StateUnitindatasource("cachedatastream")/DTStateHistory//StateUnit
let$p=$StateUnit/schema-element(GML:point)
wherefn:timeWithin($StateUnit/Time,Duration)andSPATIAL:Disjoin($p,$Route)
return〈alerttime〉{$StateUnit/Time}〈/alerttime〉
〈alertPosition〉{$p}〈/alertPosition〉
該查詢語句檢索存放在緩存中的XML文檔,并將位置信息封裝到一個element作為參數與設定的路徑進行匹配。匹配工作由外部的SPATIAL類的Disjoin方法完成。如果該點不在預訂路線上則返回該點的時間和位置信息到新的XML文檔。隨著事件的不斷觸發,程序不斷緩存數據并調用該語句進行處理,實現對數據流的處理。
4結束語
本文研究了一種處理XML空間數據流的方法。該方法通過先擴展XQuery引擎的空間運算功能,然后結合XML流式處理方法對空間數據流進行處理,為空間數據流的查詢和檢索提供了一種簡便的途徑。在今后的工作中將擴展數據關聯分析及趨勢分析等數據挖掘等功能,結合XML數據流挖掘技術的研究,研究基于XQuery的空間數據流挖掘方法。
參考文獻:
[1]高軍,楊冬青,唐世渭,等.基于樹自動機的XPath在XML數據流上的高效執行[J].軟件學報,2005,16(2):223-232.
[2]KOCHC,SCHERZINGERS,SCHWEIKARDTN,etal.Schema-basedschedulingofeventprocessorsandbufferminimizationforqueriesonstructureddatastream[C]//Procofthe30thVLDBConference.Toronto:EprintarXiv,2004:228-239.
[3]FEGARASL.ThejoyofSAX[C]//Procofthe1stInternationalWorkshoponXQueryImplementation,Experience,andPerspectives.Paris:MaisondealChimie,2004:61-66.
[4]LIXiao-gang,AGRAWALG.EfficientevaluationofXQueryoverstreamingdata[C]//Procofthe31stVLDBConference.Trondheim,Norway:[s.n.],2005:265-276.
[5]BOSES,FEGARASL.DatastreammanagementforhistoricalXMLdata[C]//ProcofSIGMOD.NewYork:ACMPress,2004:239-250.
[6]GUANJi-hong.GQL:extendingXQuerytoqueryGMLdocuments[J].GeospatialInformationScience,2006,9(2):118-126.
[7]楊穎,韓忠明,楊磊.數據流的核心技術與應用發展研究綜述[J].計算機應用研究,2005,22(11):4-7.
[8]CHUNGW.AnextensionofXQueryformovingobjectsoverGML[C]//ProcofInternationalConferenceonInformationTechnology:CodingandComputing.LasVegas:IEEEComputerSociety,2004:142-147.
[9]WritingextensionfunctionsinJava,Saxondocumentation[EB/OL].[2006]./documentation/extensibility/functions.html.
[10]RUSSELLG.TypEx:atypebasedapproachtoXMLstreamquerying[C]//ProcofInternationalWorkshopontheWebandDatabases(WebDB).UK:ACMSIGMOD,2003:55-60.
[11]於荔,鮑培明,張書亮.GML空間數據的對象化存儲研究[J].南京師范大學學報:工程技術版,2006:6(1):67-71.
[12]蘭小機,閭國年,劉德兒,等.基于XQuery的GML查詢語言研究[J].測繪科學,2005,30(6):99-102.