新四季網

公共查詢運行期系統以及應用編程接口的製作方法

2023-04-23 22:12:46

專利名稱:公共查詢運行期系統以及應用編程接口的製作方法
技術領域:
本發明一般涉及在數據源上進行軟體查詢的領域,更具體而言涉及使用XML中間語言在一個或多個數據源上進行查詢。
背景技術:
可擴展標記語言(XML)是一種全球資訊網協會(W3C)認可的文件格式化標準(參考http//www.w3c.org/tr),該標準提供一種一般的語法給具有人類可讀的標識符的標記數據。儘管XML可以容易地以一種嚴格定義的格式描述一個文件的內容,但是還存在其他不容易描述的數據源,這些數據源不是因為他們的結構與標準文本文件的結構不一致就是由於其他的非XML兼容特性。這種數據源的實例可以是電子表格或關係資料庫。
在具有多樣數據編程模塊的數據源上執行一個類似XML的檢索的任務稱為虛擬XML。該術語通常解釋為包括在虛擬XML視圖上進行查詢。虛擬XML是一個關於建立穿越數據存取編程模型的一致性的概念,並允許用戶以它們所認為的方式代替實存格式來處理他們的數據。有關在虛擬XML上進行查詢的概念涉及數據處理,就如同它是XML而不曾真正地將它轉換成XML。此概念的優勢在於把XML編碼的開銷一直保持到一個最小值。如果虛擬XML方案具有這種優勢是合乎需要的——能夠運用一種查詢語言在一個非XML數據源上進行查詢就如同該數據源是XML查詢。還期望在實際數據和虛擬XML之間的映射具有高保真度。
存在大量本來執行一個虛擬XML的任務。一個問題是效率。可以簡單地用一個虛擬XML接口來揭露一個數據源,例如XML閱讀器,然後在該數據源上用現有的XML查詢工具進行查詢,例如XML文件對象模型(DOM)。然而,所有的這些作業發生在XML查詢引擎中而不是由數據源自己來執行。假設該數據源本身及其相關的數據管理系統在以其特別設計的語言來管理其數據查詢方面比一個具有不同數據模型的外部查詢系統更有效率。
這方面引入了在執行一個虛擬XML查詢中的另一個問題;XML數據並不總是用優先的數據模型及其類型系統來進行最佳定位。可以將所有類型的優先數據源映射為XML類型,但是該處理過程丟失了保真度並且還是低效的。此外,一個系統中的類型不明顯等效於另一個。例如,表示諸如XML中的圖像那樣的二進位數據需要一個代價高的到XML字符集的轉換(例如,64位基數編碼)。
優先嘗試通過構造兩個不同的數據結構在解決問題的虛擬XML上進行查詢;一是為了查詢一是為了映射,然後一前一後遍歷它們以在原始數據源上直接產生一個有效的查詢,甚至不實現該虛擬XML視圖。儘管該方法起初運行得很好,但是當查詢和映射語言複雜性增加之時發展變得及其困難。在查詢或映射中的概念經常不直接翻譯成目標數據模型,而且以複合XML視圖來組成複合查詢需要許許多多的語義分析和改寫。
另外,一種能夠支持在多個數據源上把用一種語言的查詢轉換成查詢表現或查詢結果的系統體系結構通常需要高代價地執行M乘以N路徑,其中M是輸入選項的數量且N是輸出選項的數量。通過使用標準體系結構,這種轉換編譯器在數量上變得很大。
因此需要一種統一表示以及一種單獨的系統體系結構以便在XML和非XML數據源上為了XML查詢和視圖而執行虛擬XML。本發明應用於上述需求並用一個運用一個統一表示的體系結構以及一個供本發明用戶所使用的應用編程接口來解決上述需求。
發明概述提供一種用於編譯和執行輸入查詢以產生查詢結果的系統,該系統包括一個用於接收一個輸入的輸入裝置,一個用於產生輸入查詢的語義意義的中間語言編譯器,一個用於將XML中間語言表示轉換成目標語言以便形成目標查詢的目標產生器(或目標語言編譯器),以及一個執行引擎。執行引擎允許在數據源上執行輸入查詢。該執行引擎可以直接地執行XML中間語言,或者在執行該查詢之前先將XML中間語言轉換成一個目標語言。該輸入查詢可以來自任何XML查詢或視圖,而且該目標語言可以是任何能夠在一個數據源上進行查詢的查詢語言。該數據源可以是關係類型或非關係類型(例如分層的)數據,而且該系統能夠在多個數據源上進行查詢。
描述一種與應用程式進行通信的方法,該應用程式定義一種應用程式語言的功能性。一個應用程式可以向查詢系統發送一個或多個請求來設置一個或多個編譯參數和命令,這些編譯參數和命令用於將一個或多個輸入查詢轉換成一個XML中間語言表示。另外,一個應用程式可以向該系統發送一個或多個請求來將XML中間語言表示轉換成一個可執行的查詢。該系統可以向應用程式發送事件狀態,例如進程狀態,中間結果,最終結果,錯誤信息,警告和幫助信息。
接下來參照附圖所進行的說明性實施例的詳細描述將使本發明附加的特徵和優點變得明顯。
附圖的簡要描述連同附圖一起看前面所述的摘要以及接下來優選實施例的詳細描述將會更好地理解。為了舉例說明本發明,在附圖中顯示了本發明典型結構;然而,本發明並不局限於這些特定方法以及所揭示的工具。在附圖中

圖1示出了在其中實現發明方面的一個典型計算環境的框圖。
圖2描述了在其中實現發明方面的一個框圖體系結構;以及圖3舉例說明適用於本發明的特徵的一個流程圖。
說明性實施例的詳細描述概述本發明針對在來自多個查詢源的多種類型數據源上的查詢問題。對在虛擬XML數據源上的查詢問題的一個解決方法可以使用一個統一中間語言。本發明的XML中間語言明確表示一個查詢的意義或語義。把XML中間語言稱為查詢中間語言(QIL)。
QIL針對通常所說的「查詢/視圖組合」問題。舉例來說,假設在不是XML數據就是XML虛擬數據,或其他數據的一個虛擬XML視圖上執行一個XML查詢。一種解決方法可以是將數據源具體化為XML,但是這也許是非常低效的,而且所需要的存儲器可能要多於系統所可以採用的。另一個解決方法是可視化該視圖,用虛擬視圖組成該查詢,並將結果翻譯成在原始數據上進行的操作。用戶看見在一個邏輯XML數據模型上的一個XML查詢,但是該工具使用它提供的任何查詢系統來查詢本地數據格式。在關係資料庫中使用該解決方法用於結構化查詢語言(SQL)在SQL視圖上進行查詢,而且過去在XML視圖上進行查詢的一個XML工具已經使用了該解決方法。然而,使用諸如QIL那樣的一種XML中間語言,可以在執行任何一個查詢之前將原始假定地複合視圖分解成更小的基本查詢操作。因此,一個在一個複合視圖上的查詢變成一個在一個查詢加上一個簡單視圖上的查詢。查詢組合將它轉變成在僅僅是在簡單視圖上的一個查詢,從而簡化問題。換言之,該XML視圖本身簡單地變成一個查詢。
XML中間語言QIL提供(1)XML查詢和XML視圖的統一表示,從而極大地簡化查詢/視圖組合問題以及(2)處理所有作為「虛擬XML」的視圖極大地簡化了系統的接口。代替具有一個適用於每一種可能語言和數據模型的API,所有的API可以分享一個公共數據模型,XML中間語言QIL的運算符。
XML中間語言QIL還針對一個眾所周知的編譯器問題。通常地,用一種語言,編譯器需要在N後端目標計算機上執行M前端語言,其中M和N是整數。如果執行了每一個成對的組合,需要M乘於N的編譯器工具來覆蓋所需要的組合。然而,如果通過介紹一個公共中間表示來使它們分離,那麼該編譯器的複雜性就降低到僅僅是M加上N。
本發明揭示了一個適用於使用QIL的查詢運行期系統的體系結構以及一個典型的應用編程接口,該應用編程接口通過一個或多個應用程式來啟動使用該系統。
示範的計算裝置圖1以及接下來所進行的討論意圖提供在其中能夠執行本發明的一個合適的計算環境的摘要概述。然而還應該了解,手持,可攜式和其他計算裝置以及各種打算使用的與本發明有關的計算對象。因此,在以下描述一個通用計算機的同時,這是另一個例子,可以以其他計算裝置執行本發明,諸如一個具有網絡/總線互操作性和交互作用的客戶。因此,可以在一個其中提示了極少或極小的客戶資源的網絡主機服務環境中執行本發明,例如其中客戶裝置僅僅充當一個對網絡/總線的接口的一個網絡環境,例如放置在設備中的一個對象,或其他同樣的計算裝置和對象。實質上,合乎需要的,適當的根據本發明的操作環境可以是任何能夠存儲數據或從中檢索數據的地方。
儘管不需要,但是可以經由一個作業系統來執行本發明,供一個服務開發者為一個裝置和對象所使用,和/或包括在根據本發明進行操作的應用程式軟體內部。可以在計算機可執行指令的通用上下文中描述軟體,例如,由一個或多個諸如客戶工作站,伺服器或其他裝置那樣的計算機所執行的程序模塊。通常,程序模塊包括例程,程序,對象,組成部分,數據結構等等執行特殊任務或實現特殊的抽象數據類型的。一般地,可以如同在不同實施例中所希望的那樣組合或重新分配程序模塊的功能性。此外,本領域的那些技術人員將理解可以用其他計算機配置實踐本發明。其他適合於本發明所使用的眾所周知的計算系統,環境和/或配置包括但並不局限於個人計算機(PC),自動櫃員機,伺服器計算機,手持或膝上型裝置,多處理器系統,基於微處理器的系統,可編程用戶電子裝置,網絡PC,裝置,光,環境控制元件,微型計算機,主機等。還可以在分布式計算環境中實踐本發明,在該分布式環境中由通過一個通信網絡/總線或其他數據傳輸媒體而連接的遠程處理裝置來執行任務。在分布式計算環境中,程序模塊可以位於包括存儲裝置的本地和遠程計算機存儲媒體中,而且客戶結點可以輪流起伺服器結點的作用。
因此圖1舉例說明在其中可以執行本發明的一個合適的計算系統環境100的實例,儘管在上面已經說清楚,計算系統環境100僅僅是一個合適的計算環境的實例而並不打算表示任何有關本發明使用範圍或功能範圍的限制。皆不應該把計算環境100解釋為具有任何依賴性或涉及在示範的操作環境100中舉例說明的任何一個組成部分或組成部分的組合的需求。
參看圖1,一個用於執行本發明的典型系統包括以計算機系統110形式的通用計算裝置。計算機系統110的組成部分可以包括但並不局限於處理單元120,系統存儲器130,以及系統總線121,該系統總線把包括系統存儲器的各個系統組成部分連接到處理單元120。系統總線121可以是包括存儲器總線或存儲器控制器,外圍總線,以及使用任何一種總線體系結構的本地總線在內的任何一種類型的總線結構。舉例來說但並不局限於此,這種體系結構包括工業標準結構(ISA)總線,微通道結構(MCA)總線,擴展工業標準結構(EISA)總線,視頻電子標準協會(VESA)本地總線,以及周邊元件擴展接口(PCI)總線(通稱附加板總線)。
計算機系統110一般包括多個計算機可讀媒體。計算機可讀媒體可以是能夠由計算機系統110進行存取的任何的現有的媒體,它包括易失和非易失性媒體,可移動和不可移動媒體。舉例來說但並不局限於此,計算機可讀媒體可以包含計算機存儲介質和通信媒體。計算機存儲介質包括以任何方法或技術存儲諸如計算機可讀指令,數據結構,程序模塊或其他數據那樣的信息的易失和非易失性,可移動和不可移動媒體。計算機存儲介質包括但並不局限於隨機存取存儲器(RAM),只讀存儲器(ROM),電可擦除只讀存儲器(EEPROM),閃速存儲器或其他存儲器技術,只讀光碟(CDROM),可重寫光碟(CDRW),數位化視頻光碟(DVD)或其他光碟存儲器,磁帶盒,磁帶,磁碟存儲器或其他磁存儲器,或其它可以用來存儲所需要信息的媒體,可以由計算機系統110存取該需要的信息。通信媒體一般包括有計算機可讀指令,數據結構,程序模塊或其他在諸如載波或其他傳送機制那樣的調製數據信號中的數據,通信媒體包括任何信息投送媒體。術語「調製數據信號」意味著具有一個或多個自己特徵集或者以對信號中的信息進行編碼的方式進行改變的一個信號。舉例來說但並不局限於此,通信媒體包括諸如有線網或直線連接那樣的有線媒體,以及諸如聲波,射頻,紅外線那樣的無線媒體和其他無線媒體。以上的任何組合還應該包含在計算機可讀媒體的範圍之內。
系統存儲器130包括以易失和/或非易失性存儲器形式的計算機存儲介質,例如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132。基本輸入/輸出系統133(BIOS)一般存儲在ROM131中,基本輸入/輸出系統133(BIOS)包含有助於在計算機系統110中的兩個元件之間傳送信息的基本例程,例如在啟動期間。RAM132一般包含立即可到達和/或立刻由處理系統120進行操作的數據和/或程序模塊。舉例來說但並不局限於此,圖1舉例說明作業系統134,應用程式135,其他程序模塊136,以及程序數據137。
計算機系統110還可以包括其他可移動/不可移動,易失/非易失性計算機存儲介質。僅僅藉助於實例,圖1舉例說明對不可移動,非易失性磁性媒體進行讀寫的一個硬碟驅動器141,對可移動,非易失性磁碟152進行讀寫的一個磁碟驅動器151,以及諸如CDROM,CDRW,DVD那樣的對可移動,非易失性光碟156進行讀寫的一個光碟驅動器155,或其他光媒體。其他可以用於示範操作環境中的可移動/不可移動,易失性/非易失性計算機存儲介質包括但並不局限於磁帶盒,快閃記憶體卡,數位化視頻光碟,數字視頻磁帶,固態RAM,固態ROM等。硬碟驅動器141一般通過諸如接口140那樣的一個不可移動存儲器接口連接到系統總線120,磁碟驅動器151和光碟驅動器155通常由諸如接口150那樣的一個可移動存儲器接口連接到系統總線121。
以上討論並在圖1中舉例說明的驅動器及其相關的計算機存儲介質對計算機系統110提供存儲計算機可讀指令,數據結構,程序模塊和其他數據。例如在圖1中,將硬碟驅動器141圖解為存儲作業系統144,應用程式145,其他程序模塊146,以及程序數據147。注意到這些組成部分可以相同於或區別於作業系統134,應用程式135,其他程序模塊136,以及程序數據137。這裡對作業系統144,應用程式145,其他程序模塊146,以及程序數據147提供了不同的數字至少舉例說明他們是不同的版本。用戶可以通過諸如鍵盤162和指示器161那樣的輸入裝置向計算機系統110輸入命令或信息,指示器一般涉及滑鼠,跟蹤球或觸摸墊。其他輸入裝置(未顯示)可以包括麥克風,遊戲杆,遊戲墊,衛星碟(satellite dish),掃描儀等。經常通過一個連接到系統總線121的用戶輸入接口160將這些輸入裝置以及其他輸入裝置連接到處理單元120,但是可以由其他接口和總線結構來將這些和其他輸入裝置連接到處理單元120,例如並行埠,遊戲埠或通用串行總線(USB)。還經由諸如視頻接口190那樣的一個接口把監視器191或其他類型的顯示裝置連接到系統總線121,視頻接口190可以輪流與視頻存儲器(未顯示)進行通信。除了監視器191以外,計算機系統還可以包括其他諸如揚聲器197和印表機196那樣的外圍輸出裝置,他們可以通過一個輸出外圍接口195來連接。
計算機系統110可以在與一個或多個諸如遠程計算機180那樣的遠程計算機進行邏輯連接的網絡或分布式環境中運行。遠程計算機180可以是個人計算機,伺服器,路由器,網絡PC,同等裝置或其他通用網絡結點,而且遠程計算機180通常包括多個或所有上述與計算機系統110有關的元件,儘管在圖1中僅僅舉例說明了存儲器裝置181。圖1中所描述的邏輯連接包括區域網(LAN)171和廣域網(WAN)173,但是還可以包括其他網絡/總線。這種網絡環境在家庭,辦公室,企業廣域計算機網絡,內部網和國際網際網路中是平常的。
在LAN網絡環境中使用的時候,計算機系統110通過一個網絡接口或適配器170連接到LAN171。在WAN網絡環境中使用的時候,計算機系統通常包括數據機172或其他用於在諸如國際網際網路那樣的WAN173上建立通信連接的裝置。可以經由用戶輸入接口160將數據機172連接到系統總線121,該數據機可以是內部數據機或外部數據機。在網絡環境中,可以在遠程存儲器裝置中存儲所描述的與計算機系統110相關的程序模塊或其部分。舉例來說但並不局限於此,圖1舉例說明遠程應用程式185是保存在存儲器裝置181上的。將理解到所示網絡連接是示範的,而且可以使用其他在計算機之間建立通信鏈路的方法。
多種分布的計算體制已經或正在按照個人計算和國際網際網路的趨同現象進行發展。為應用程式和計算裝置提供給單用戶和商業用戶一個無縫操作性的和啟動網絡的接口,使計算活動為漸增的網絡瀏覽程序或面向網絡的。
例如,微軟的.NETTM平臺包括伺服器,諸如基於網絡的數據存儲器那樣的積木式服務,以及可下載的裝置軟體,該.NETTM平臺可以從微軟公司中獲得,是一種微軟方法,Redmond,華盛頓98052。當這裡所描述的示範實施例與保存在一個計算裝置中的軟體有關時,還可以經由一個作業系統,應用編程接口(API)或在任何一個協同處理器,顯示裝置之間的一個「中間人」對象以及一個請求對象來執行本發明的一個或多個部分,像這樣可以執行根據本發明的操作,在所有.NETTM語言和服務中所執行並經由所有.NETTM語言和服務來進行存取的,同時在其他分布的計算機制中。
典型實施例圖2描述了一個包括當前發明的特徵的典型系統體系結構的方框圖。顯示了一個包括中間語言編譯器和目標執行引擎的查詢運行期體系結構200。該體系結構描述執行接收,編譯,解碼,以及為了在多個數據源上查詢XML而進行的數據存取的基本方塊。可以實現多個前端語言編譯器210,他們與XML或XML相關標準一致。可以從如圖1所示的任何一個輸入裝置接收或輸入原來的或輸入的查詢。回到圖2,前端編譯器210可以接收一個XML查詢,XML視圖或其他相關的XML語言來產生輸入查詢的意義中一個經過編譯的XML中間語言表示215。用於前端編譯器的標準語言類型包括Xpath,XML樣式表語言(XSL),XSLT,XML查詢語言(XQuery)的全球資訊網協會(W3C)公布標準。除了別的以外,XML視圖編譯器還可以在使用並包括XQuery視圖的W3C的XML標準。在查詢和視圖語言以及多個目標模型之間的中間語言抽象化允許將諸如除虛擬XML數據以外的來自微軟的.NETTM的真實XML數據用作數據源。
多個後端目標產生器220支持多個相關的目標查詢語言執行引擎230。可以構造每一個後端目標產生器220以致它們有效地處理與每一個所支持的數據源中的數據模型相一致的數據源。例如,可以為了在帶有一個SQL資料庫管理系統的關係資料庫上的查詢效率而優化用於SQL資料庫資源的一個目標查詢語言產生器。因此,例如,還可以把目標查詢語言產生器220a與一個執行引擎230a進行配套來將中間語言表示215轉換成一個與特定數據源240不矛盾的目標機器語言。選擇性地,目標產生器還可以把XML中間語言表示215轉換成另一種中間語言,例如微軟中間語言(MSIL),以致一個執行引擎可以直接查詢一個或多個數據源240。
例如,在執行編譯查詢時,該執行引擎通常對用戶產生可進一步處理,存儲,顯示有效的查詢結果250,或準備給一個接著發生的軟體應用的查詢結果250。目標產生器220以及相應的執行引擎230可以包括像XML和SQL那樣的查詢語言來命名一些。
該體系結構的另一個特徵是數據可利用率的模化程度。例如,現在生成一個XML中間語言表示215的時候,可以產生一個輸出以致該中間語言表示本身可以應用於另一個系統或對延遲的目標編譯有效。而且,可以直接執行XML中間語言本身,它實際上不用轉換成一個特定的,非XML中間語言指令查詢。因此,不需要一個使用特別適合於執行XML中間語言表示的一個執行引擎的編譯器,XML中間語言可以用於在一個或多個數據源上進行查詢。作為系統輸出中的另一個可選項,目標產生器輸出可以用作用於在一個單獨系統中執行的或由另一個非系統應用程式執行的輸出。
還應該注意到圖2的典型體系結構在構造查詢方面內在地允許了極大的靈活性。該查詢體系結構允許輸入多個查詢以致可以產生組成多個查詢的一種中間語言。另外,可以適當地使用多個後端目標產生器和執行引擎在不同數據模型的數據源上進行查詢。體系結構200還允許減少前端和後端的置換數量。圖2描述M個前端編譯器和N個後端編譯器,其中M和N是整數。通常,這種組合將產生總數可能為M乘以N的系統路徑。然而,由於運用了通用中間語言,所以置換數量有利地減少到了M加N。
如圖2所描述產生的XML中間語言是一個XML查詢或視圖表示。照這樣,因為它是一個XML查詢的明確意義表示,所以稱其為查詢中間語言(QIL)。可以將查詢中間語言(QIL)視為一個穿越所有XML查詢和視圖語言編譯器的語義表示。QIL類似於一個普通的抽象語法樹(AST),但是不同的在於QIL捕獲的是語義而不是語言的語法,或意味著QIL捕獲一個查詢。另一個差異在於QIL是一個圖形結構而不是一個像AST那樣的樹形結構。
QIL啟動抽象化多個不同的XML查詢語言並在多個不同的目標數據源(例如關係和無關數據)上查看定義語言(例如Xpath,XSLT和XQuery)。照這樣,QIL啟動一個公共結構來支持所有可兼容的XML語言。每一個操作都是明確且無二義性的,該操作最好優先地完全地與幫助從使用QIL的後端引擎產生QIL的前端編譯器相分離。
在一個標題為QUERY INTERMEDIATE LANGUAGE METHODAND SYSTEM的共同申請的專利申請中提供一個實例查詢中間語言定義,該申請轉讓給Redmond的微軟公司,WA(序列號XX/XXX,XXX,同時在同一日期提出申請)。認為將該共同申請的內容全面引入本文以供參考。
圖3表示關於一個公共查詢運行期體系結構(例如,涉及圖2所描述的示範體系結構)的典型應用編程接口(API)的流程圖。可以將API視為保存在系統裡(例如圖2的),而且API允許一個應用程式利用系統來與應用程式進行通信。該通信允許系統資源變得對應用程式有效。回到圖3,在這裡描述了接收輸入查詢的處理過程,將該查詢編譯成一個XML中間語言,將中間語言表示轉換成一個目標語言,執行該目標語言,以及產生查詢結果,並且突出典型應用程式接口。
最初,一個應用程式可以提供315或意識到接收一個輸入查詢310。該應用程式可以與查詢系統接口來發出一個或多個請求來設置軟體環境控制參數和編譯控制可選項320。該步驟允許配置一個或多個前端編譯器來接受輸入查詢並為該輸入查詢的編譯準備軟體和受控制的硬體。該應用程式可以監視322狀態以及如同所希望的由應用程式經由狀態請求向監視功能390設置參數的進程。
在325,將查詢系統參數變成查詢系統,然後一個應用程式可以與該查詢系統接口來編譯輸入查詢310的中間語言表示330來得到輸入查詢的一個XML語義意義。可以從系統330經由應用程式控制來輸出或監控該語義意義用於延遲的處理過程或以致可以用在一個不同系統中。監控功能390允許應用程式監控系統在產生中間語言方面的執行以及註冊控制和配置設置。一旦產生中間語言表示,在332可以將產生的中間語言表示傳到用於用戶目的的監控或輸出功能以及另一個所需要的應用程式。另外,在334可以將中間語言表示傳到一個用於由一個目標產生器執行編譯的軟體模塊。在336可以將另一個二中選一的中間語言表示傳到一個用於直接執行的查詢執行引擎。
如果將中間語言表示傳到一個目標產生器,那麼應用程式可以對查詢系統產生請求340來選擇一個目標產生器,酌情配置編譯器,並產生一個目標產生器輸出。如前所述,在342,該應用程式可以監控目標產生器設置以及活動,為的是確保應用程式和查詢系統的運行。正如前面所提到的那樣,可以經由應用程式停止或暫停查詢系統,在這一點上是因為已經產生了一個有效產品——目標指定查詢。可以為備將來之用而存儲該目標指定查詢,或由另一個系統使用該目標指定查詢來在一個或更多個數據源上進行查詢。
假設將持續運行該查詢系統,可以在345將目標指定查詢傳到一個能夠執行該查詢的執行引擎。應用程式可以產生請求350來在一個或多個數據源380上執行目標指定查詢。如前所述,在352,應用程式可以監控該設置和執行引擎的活動以確保查詢系統的目標運行。
伴隨著完全地執行,在355,執行引擎把查詢結果傳到一個累加器,如果需要的話,其中查詢系統可以暫時保持查詢結果360以便用於進一步的處理。經由一個來自應用程式362的請求,該查詢結果是可存取的,其中可以傳遞或監控該結果。
典型的應用編程接口所提供的根據本發明的API接口的實例如下所示1.前端編譯器命令查詢編譯器用於產生一個來自多個XML查詢語言的QIL封裝XmlExpression。以下提供三個用於XML查詢語言的編譯器實例XpathCompiler,XsltCompiler,以及XqueryCompiler。編譯器的標準應用包括設置XmlenvironmentBase以及編譯一個查詢。
可以在編譯過程中設置適當的XmlCompilerEnvironmentBase編譯器環境來為該查詢無關的編譯器提供信息。例如,單獨的Xpath語法不允許用作在其他命名空間中進行查詢。如果將編譯器環境上的XmlNamesoaceResolver設置為把前綴映射到適當命名空間URI,則Xpath查詢現在可以在其他命名空間上進行查詢。注意,編譯器環境不是為多數查詢執行所必需的。
編譯查詢通常發生在已經指定適當編譯器環境之後。在那個時候,可以由用戶或其他輸入源提供或編譯該實際查詢。查詢結果是一個XmlExpression經常提供給該查詢一個相關的事實對象。該事實對象表示所給定的查詢的確實性和因此可以執行或不可以執行什麼活動以及從而把一層安全性加到該查詢上。
基於安全性的事實允許用戶經由一個安全性認證,可選項來精確地指定有多少查詢自己可以執行。例如,如果不允許任何的存取,那麼任何需要諸如連接資料庫那樣的任何類型數據存取的查詢將失敗。既然不能從資料庫存取數據,那麼可以成功的查詢將僅僅是那些返回一個靜態結果的(例如,「數字(3+5)」)。如果僅僅允許讀存取,那麼將不執行逆向更新。無論如何,確保不改變數據源。這映射到Xpath引導器API的能力。如果允許附加的存取,那麼將僅僅執行INSERT語句。這確保了無論如何都將不改變原始數據,僅允許添加。如果允許自由存取,那麼將執行任何更新。這包括在任何數據源內完全刪除數據。這映射到Xpath編輯器API的能力。
AXPath編譯器類別1.命令XpathCompiler;XpathCompiler(XmlCompilerEnvironmentBaseXmlCompilerEnvironment);說明一種方法命令,構造了該類的一個實例。如果提供XmlCompilerEnvironmentBase,將其設置為用於該實例的XmlCompilerEnvironment。
參數XmlCompilerEnvironment;將XmlCompilerEnvironmentBase設置為在該類的實例上的XmlCompilerEnvironment。
2.命令OnCompilationEvent;說明一個為了在編譯期間接收信息而註冊的事件。編譯器可以報告警告和用戶可以作用的其他信息。該事件並不約束編譯。
3.命令XmlCompilerEnvironmentBaseXmlCompilerEnvironment{get;set}說明一個XML編譯器環境屬性。允許用戶獲得或設置要使用的XmlCompilerEnvironmentBase。該編譯器環境提供信息給在查詢本身不傳送的查詢編譯器。
4.命令XmlExpression Compile(string queryText);說明一種編譯方法。此功能編譯所得到的一個Xpath查詢,並返回一個XmlExpression,該XmlExpression是所得到的查詢的QIL表示。合乎需要地設置所得到的查詢的確實性來與請求編碼的確實性相吻合。
參數query;
在XmlExpression內進行編譯的查詢。返回一個XML表達式,它是經過編譯的查詢。
B.XSLT編譯器類別-設計XsltCompiler以在XmlExpression內編譯XSLTstylesheets。
1.命令XsltCompiler;XsltCompiler(XmlCompilerEnvironmentBaseXmlCompilerEnvironment);說明一種編譯器方法。構造該類的一個實例。如果提供XmlCompilerEnvironmentBase,將其設置為用於該實例的XmlCompilerEnvironment。
參數XmlCompilerEnvironment將XmlCompilerEnvironmentBase設置為在該類的實例上的XmlCompilerEnvironment。
2.命令OnCompilationEvent;說明一個為了在編譯期間接收信息而註冊的事件。編譯器可以報告警告和用戶可以作用的其他信息。該事件並不約束編譯。
3.命令XmlCompilerEnvironmentBase XmlCompilerEnvironment{get;set;}說明一種屬性,允許用戶得到或設置要使用的XmlCompilerEnvironmentBase。該編譯器環境提供信息給除了進行編譯的實際查詢以外的查詢編譯器。XmlCompilerEnvironment的一個默認實例。
4.命令XmlExpression Compile(string queryUri,XmlResolver resolver);XmlExpression Compile(string queryUri,XmlResolver resolver,Evidenceevdence);說明一種編譯方法。經由XmlResolver參數解析QueryUri並將QueryUri編譯為XSLT樣式表。XmlResolver參數還可以用於解析任何用於編譯原始樣式表的xsl:include和xsl:import指令。用現有事實來確定所得到的查詢的確實性以及接下來它可以執行什麼活動。如果超載沒有使用事實,那麼用所得到的URI來產生用於查詢的適當事實。返回一個XmlExpression,該XmlExpression是經過編譯的查詢。
參數queryUri;
URI要進行解析以檢索要編譯的XSLT樣式表。
Resolver;XmlResolver用於解析XSLT樣式表以及該樣式表中任何xsl:include和xsl:import指令。
evidence;安全性事實,確定所得到的查詢的確實性。
5.命令XmlExpression Compile(XmlReader queryText,XmlResolver resolver);XmlExpressionCompile(XmlReader queryText,XmlResolver resolver,Evidence evdence);說明一種編譯方法。該功能返回XmlExpression,該XmlExpression表示現有經由XmlReader的XSLT查詢。用現有事實來確定所得到的查詢的確實性以及接下來它能夠執行什麼活動。如果超載沒有使用事實,編譯器將試圖經由IdataEvidence接口來獲得適當事實。如果不執行該接口,適當的接口例外。返回一個XmlExpression,該XmlExpression是經過編譯的查詢。
參數query;一個XmlReader,包含了將要在一個XmlExpression中進行編譯的XSLT。
resolver;用XmlResolver解析所得到的XSLT中的xsl:include和xsl:import指令。
evidence;安全性事實,確定所得到的查詢的確實性。
C.Xquery編譯器類別1.命令XsltCompiler;XsltCompiler(XmlCompilerEnvironmentBaseXmlCompilerEnvironment);說明一種編譯器方法,構造該類的一個實例。如果提供XmlCompilerEnvironmentBase,將其設置為用於該實例的XmlCompilerEnvironment。
參數XmlCompilerEnvironment將XmlCompilerEnvironmentBase設置為在該類的實例上的XmlCompilerEnvironment。
2.命令OnCompilationEvent;說明一個為了在編譯期間接收信息而註冊的事件。編譯器可以報告警告和用戶可以作用的其他信息。該事件並不約束編譯。
3.命令XmlCompilerEnvironmentBase XmlCompilerEnvironment{get;set;}說明一種屬性,允許用戶得到或設置要使用的XmlCompilerEnvironmentBase。該編譯器環境提供信息給除了進行編譯的實際查詢以外的查詢編譯器。這是XmlCompilerEnvironment的一個默認實例。
4.命令XmlExpression Compile(TextReader queryText);說明一種編譯方法。該功能返回XmlExpression,該XmlExpression表示現有XQuery查詢。用現有事實來確定應該允許執行什麼查詢。
參數query;要在一個XmIExpression內編譯該查詢。
evidence;安全性事實,確定所得到的查詢的確實性。
5.命令XmlEpression Compile(string queryText);說明該功能編譯並返回一個XmlExpression,該XmlExpression用於所得到的查詢。所提供的事實顯示所得到的查詢的確實性。
參數query;一個字符串,包含了要在一個XmlExpression內進行編譯的查詢。
evidence;安全性事實,確定所得到的查詢的確實性。
6.命令XmlExpression Compile(string queryUri,XmlResolver resolver);說明經由XmlResolver參數解析QueryUri並將QueryUri編譯為XQuery。返回一個XmlExpression,該XmlExpression是經過編譯的查詢。
參數queryUri;URI要進行解析以檢索要編譯的XSLT樣式表。
resolver;用於解析要編譯的Xquery的XmlResolver。
II.編譯器環境命令通常地,編譯器環境用於提供附加信息給查詢編譯器來幫助它們編譯實際查詢。特別地,該結構用於解析外部功能,變量,以及希望用來編譯一個查詢的默認文件。注意到所有的解析都應該返回一個XmlExpression是非常重要的。
XmlViewSchema和map:view功能是功能解析的一個實例。沒有查詢語言想到要嵌入映射並因此需要允許發生嵌入映射的拓展。XmlViewSchema具有將map:view功能解析為一個XmlExpression並因此由專用編譯器所使用的能力。該編譯器可以通過一個在查詢語法中沒有聲明的變量來進行讀取。這是另一個在其中Xpath需要編譯器環境的領域。在上下文文件解析中,每一個XML查詢語言不得不在一個默認文件或上下文文件上進行查詢。
XmlCompilerEnvironmentBase是一個抽象類,它是一個完整編譯器環境。該類僅僅具有解析多個數據項的能力,該能力是一種允許工具來執行動態操作的給定的編譯器需求。XmlCompilerEnvironmentBase是查詢編譯器運行的環境。它可以提供任何給定的編譯器可以需要的對多數可選項的解析。可以在IxmlCompilerInclude和IxmlNamespace上執行所有的方法。除了執行IxmlCompilerInclude以外,XmlCompilerEnvironmentBase還啟動對其他諸如模式,命名空間,和應該執行該查詢的方法那樣的數據項進行解析。
XQuery具有在編譯查詢以執行靜態類型的分析的過程中運行W3C的Xml模式的能力(Xml模式定義-XSD)。該編譯器環境提供這些模式的解析。可以利用命名空間/前綴解析以致用戶通常可以重複使用在編譯之間所使用的前綴-命名空間綁定,該前綴-命名空間綁定不必每次在查詢本身指定。可以通過執行IxmlNamespaceResolver來提供該功能性。可以提供創建類型API指令來啟動用戶查找比效率更多的問題。
除了為XmlEnvironmentBase提供解析之外,提供一種把這些解析數據項添加到環境的方法。XmlCompilerEnvironment可以經由至少三種供編譯器所使用的方法來添加功能。XmlCompilerEnvironment可以實現IxmlCompilerInclude並用他們來解析一個給定的功能。實質上,將會在所添加的工具上傳送「ResolveFunction」方法請求以致他們可以視圖解析它。編譯器環境還能夠添加以一個XmlExpression形式的預編譯查詢庫。可以將查詢庫定義為一組用戶定義的在單個XmlExpression中進行編譯的XQuery功能。照這樣,任何查詢語言可以通過調出一個外部功能來運行XQuery的功能。可以適當地將參數映射到用於給定功能的查詢庫。該編譯器環境還可以添加非查詢庫的XmlExpression。可以將專用的經過編譯的查詢(諸如Xpath或XSLT)添加作為一個查詢功能。
XmlCompilerEnvironment還可以用多種方法添加變量。XmlCompilerEnvironment可以實現IxmlCompilerInclude並用他們來解析一個給定的變量。實質上,將會在所添加的工具上傳送「ResolveFunction」方法請求以致他們可以視圖解析它。該編譯器環境還允許運行XmlExpression作為變量。這類似於將XmlExpression添加為一種功能。這提供用戶以一種不同的語言運行一種特定語言的特徵的能力。添加一個類屬對象作為一個允許用戶在他們的查詢內部綁定對象值的變量。把該對象轉換成適當的XSD類型和供查詢所使用的值。
XmlCompilerEnvironment可以設置將由查詢編譯器所使用的上下文文件。存在至少三種在XmlCompilerEnvironment上設置適當的上下文文件的方法。可以用一個執行IxmlCompilerInclude的對象來設置查詢的上下文文件。XmlCompilerEnvironment可以簡單地將ResolveContextDocument方法請求下傳到IxmlCompilerInclude用於文件解析。XmlViewSchema是其中一個實例。這啟動用戶利用映射而不使用map:view功能。照這樣,用戶可以經由一個查詢來創建一個虛擬XML視圖,差不多就像他們處理映射支持那樣。對於用戶而言,在單獨的查詢中揭穿過分簡單的映射以及擁有附加的邏輯比緊緊地耦合他們要簡單。諸如XSLT和XQuery那樣的語言具有在一個上下文和已命名的文件上同步進行查詢的能力。通過將上下文文件的解析設置成URI,可以將上下文文件重定向到動態解析而不是暗中供應。這種簡易的編程就如用戶可以指定單個XmlResolver以在上面進行查詢而不是一個上下文文件和一個XmlResolver的組合。
還應該注意到其中將變量或功能添加到XmlCompilerEnvironment的順序可以影響其中解析成功發生的順序。一種處理過程規則支持為了成功匹配而檢查直接命名的功能/變量。無法成功添加重複命名的功能/變量。注意到包含在單個XmlExpression中的查詢庫屬於該類別。另一個處理過程規則支持根據添加給他們的規則,為了匹配而連續測試IXmlCompilerInclude。一個IxmlCompilerInclude可以包含如同其他數據項那樣的重複功能/變量。如果包含重複的一個直接命名的功能/變量,那麼除非將會首先解析直接命名的功能/變量,否則決不解析他。如果另一個IxmlCompilerInclude包含重複功能/變量,那麼僅僅該首先添加的IxmlCompilerInclude將解析該給定的數據項。
例如,如果產生一個XmlCompilerEnvironment並添加兩個IxmlCompilerInclude用於功能解析,然後當視圖解析實際功能時,可以檢查第一IxmlCompilerInclude。如果解析失敗,則為了成功地解析而檢查第二IxmlCompilerInclude。如果將一個帶有XmlExpression的已命名功能添加到環境中,將會在執行IxmlCompilerInclude之前檢查它,這是因為可以在執行IxmlCompilerInclude之前檢查直接命名的功能/變量。
以下給出示範的編譯器環境命令1.命令XmlEpression ResolveFunction(XmlQualifiedNamefunctionName,XmlEpression[]functionParameters);說明一種功能解析方法。該方法允許編譯器在編譯過程中解析外部功能。現有名稱和參數用做解析工具。如果解析失敗,功能返回零。返回一個表示該功能結果的XmlEpression。如果解析失敗,返回零。
參數functionName;正在查找的功能的全限定名。
FunctionParameters;一個XmlEpression數組,該數組表示該功能正在調用的參數。XML編譯器環境工具將在解析期間利用該信息用於確認屬性和最佳參數的類型。
2.命令XmlEpression Resolve Variable(XmlQualifiedName VariableName);說明該方法允許編譯器在編譯過程中解析外部變量。該變量的全限定名用於解析。如果解析失敗,功能返回零。返回一個表示該變量值的XmlEpression。如果解析失敗,返回零。
參數vairableName;正在查找的變量的全限定名。
3.命令XmlExpression ResolveContexDocument;說明該方法允許編譯器動態解析如何檢索該上下文文件。如果解析失敗,該方法返回零。返回一個表示如何解析上下文文件的XmlEpression。如果解析失敗,返回零。
4.命令XmlSchema ResolveSchema(string namespace);說明允許編譯器檢索一個用於給定命名空間的一個模式。如果不能解析該模式,方法返回零。返回一個用於給定命名空間的經過編譯的模式的XmlSchema對象。如果不能解析該模式,則返回零。
參數namespace用於解析模式的命名空間。
5.命令bool IsDebug{get;};說明一個屬性,允許編譯器確定它們是否應該用調試特性曲線來編譯一個查詢。
6.命令XmlCompilerEnvironment;XmlCompilerEnvironment(bool IsDebug);說明一種方法,例示一個新的XmlCompilerEnvironment。如果提供一種超載,該超載提供一個用於IsDebug的值,則將在基本XmlCompilerEnvironment類別上調用的IsDebug存儲程序上返回該值。如果使用默認構造符,則默認該值為錯誤。
7.命令XmlNamespaceManager XmlNamespaceManager{get;set;}說明XmlNamespaceManager屬性用於由XmlCompilerEnvironmentBase.ResolvePrefix和XmlCompilerEnvironmentBase.ResolveNamespace方法所進行的解析。
8.命令XmlSchemaSet XmlSchemaSet{get;set;}說明XmlSchemaSet屬性用於由XmlCompilerEnvironmentBase.ResolveSchema方法所進行的解析來設置並獲得XML模式類型信息。
9.命令void SetContextDocumentResolution(IxmlCompilerIncludedocumentResolver);說明該上下文文件方法允許用戶設置上下文文件的解析來生成一個IxmlCompilerInclude工具。
參數documentResolver一個IxmlCompilerInclude工具,可以解析上下文文件。
10.命令void SetContextDocumentResolution(IxmlExpressiondocumentExpresssion);說明該文件上下文方法允許用戶將一個默認文件設置為XmlExpression。這將有助於在另一個查詢或映射上組合XSLT或Xpath.
參數documentExpresssion
將在用當前的環境編譯的查詢中組合XmlExpression來代替默認文件解析。
11.命令void SetContextDocumentResolution(string contextDocumentUri);說明該文件上下文方法允許用戶設置默認文件名,將在運行期間文件解析的過程中使用該默認文件名。這可用於XPath和XSLT,其中僅僅存在一個默認文件或者默認和命名文件的一個組合。
參數contextDocumentUri;將在運行期經由所提供的XmlResolver進行解析的名稱。
12.命令void AddFunctions(IxmlCompilerInclude functionResolver);說明該功能方法把IxmlCompilerInclude添加到編譯器環境,該編譯器環境啟動IxmlCompilerInclude來用於在編譯的過程中解析功能。
參數function resolver;一個能夠進行功能解析的IxmlCompilerInclude工具。
13.命令void AddFunctions(XmlExpression library);說明該功能方法用於添加一個現有XmlExpression作為一個功能庫。例如用戶具有許多XQuery功能,於是這些功能在XmlExpression中進行編譯。然後用戶添加XmlExpression作為一個功能庫並使其與一個給定的命名空間相關聯。於是可以在其他查詢的內部重複使用這些功能(不局限於XQuery)。
參數library一個經過編譯的XmlExpression,它包含以前編譯的功能。
14.命令voidAddFunction(XmlQualifiedName name,XmlExpression function);說明該功能方法允許用戶綁定一個XmlExpression作為用於其他查詢的編譯中的一個功能。例如;對於XQuery,將會認為整個XQuery為單個的功能。對於XSLT,將會認為整個樣式表為單個的功能。對於XPath,將會認為整個Xpath為單個的功能。
參數name;一個全限定名,在查詢中參考在該全限定名下的功能。
Function;綁定的XML表達式15.命令void AddVariables(IxmlCompilerInclude variableResolver);說明該變量解析方法把IxmlCompilerInclude添加到編譯器環境,該編譯器環境啟動IxmlCompilerInclude來用於在編譯的過程中進行變量解析。
參數variableResolver;能夠提供變量解析的IxmlCompilerInclude工具。
16.命令voidAddVariable(XmlQualifiedName name,XmlExpression variable);說明該變量添加方法把一個外部參數綁定到一個特殊的定義。一個用於XQuery的有效功能是不包含在XQuery功能內的。將會認為整個XSLT樣式表為一個變量。將會認為整個Xpath表達式為一個變量。
17.命令void AddVariable(XmlQualifiedName name,object variable);說明一種變量添加方法,將一個公共語言運行期對象綁定到一個變量。把該對象轉換成XSD等值並使用其值。
參數Name;要綁定的外部屬性的名稱。
Variable定義了變量的公共語言運行期對象。
18.命令void AddVariableDeclaration(XmlQualifiedNamename,XmlSchemaType,XmlEpression defaultValue);說明一種變量聲明添加方法,聲明一個變量而還沒有定義該變量。將經由XmlArgumentList在執行時間時提供定義。如果在XmlArgumentList中沒有找到適當的變量,將用已提供的defaultValue來代替使用。
參數name;要聲明的變量的全限定名。
Type;該聲明的變量的XmlSchemaType。
defaultValue;該變量的默認值。
III.XML表達式命令XmlExpression是所給定的XML查詢的編譯形式。實質上這是QIL的一個封裝。XmlExpression是一個可組合對象。也就是說,一旦創建了一個XmlExpression,就可以在編譯不同查詢的過程中重複使用XmlExpression來啟動諸如查詢庫或虛擬視圖那樣的附加功能。
存在至少兩種可在XmlExpression上利用的方法;一個值返回一個IxmlValueReader以及一個返回XmlSchemaType對象的類型,IxmlValueReader在如果它是一個靜態值的時候可以用於檢索給定的XmlExpression的值,該XmlSchemaType對象能夠用於檢索XmlExpression的XSD類型。
1.命令IxmlValueReaderValue{get;};說明返回XmlExpression的一個值IxmlValueReader。還返回一個對象,如果該值是常數,則該對象執行IxmlValueReader。
2.命令XmlSchemaType Type{get;}說明該特性允許返回一個XmlSchemaType,XmlSchemaType表示如XML所表示的XmlExpression類型。如果該值是一個常數,還返回一個XmlSchemaType。
IV.後端目標查詢產生器命令目標查詢產生器(或目標語言編譯器)用於產生能夠在特定數據源上執行一個給定的查詢的對象。這裡描述兩個示範形式。XmlILGenerator引擎能夠在RXPathNavigator或XpathEditor工具上執行查詢。這允許諸如XmlCache那樣任何能夠揭穿RXPathNavigator的數據源具有「嵌入」查詢能力。SQLGenerator引擎能夠直接處理XmlExpression,並因此能夠優化SQL語句用於執行。
A.XML目標命令1.命令XmlILGenerator;說明該方法命令構造一個新XmlILGenerator。
2.命令XmlCommand Generate(XmlExpression query);說明該方法命令產生一個用於給定XmlExpression的XmlCommand。然後可以執行XmlCommand來檢索查詢的結果。返回該查詢的一種可執行形式XmlCommand。
參數query;來自所產生的XmlCommand的XmlExpression。
3.命令OnGenerateEvent;說明一個為了在產生期間接收信息而註冊的事件。產生器可以報告警告和用戶可以作用的其他信息。該事件並不約束產生XmlCommand。
B.SQL目標命令1.命令SqlGenerator;
說明該產生器採用QIL並能夠對資料庫進行查詢。該方法構造一個新的SqlGenerator。
2.命令XmlCommand Generate(XmlExpression query);說明該方法命令產生一個用於給定XmlExpression的XmlCommand。然後可以執行XmlCommand來檢索查詢的結果。返回該查詢的一種可執行形式XmlCommand。
參數Query;來自所產生的XmlCommand的XmlExpression。
3.命令OnGenerateEvent;說明一個為了在產生期間接收信息而註冊的事件。產生器可以報告警告和用戶可以作用的其他信息。該事件並不約束產生XmlCommand。
V.XML命令XmlCommand可以是查詢系統運行期內其中一個合成的輸出對象。這是一個能夠由用戶或其他程序所執行的物理查詢計劃。為XmlCommand提供數據源解析以及能夠用於執行該查詢的運行期參數。
1.命令OnExceutionEvent;說明可以在執行查詢的過程中用該事件命令來報告信息返回到用戶,該用戶不是部分結果集合。例如,多個W3C查詢標準允許在處理過程期間執行相關動作。該執行運行期可以向用戶報告該動作。
2.命令void Execute(RXPathNavigator contextDocument,XmlArgumentList argList,XmlWriter results);Void Execute(RXPathNavigator contextDocument,XmlResolver datasource,XmlArgumentList argList,XmlWriter results);說明該執行方法在所提供的RXPathNavigator上執行該查詢,該RXPathNavigator帶有給定的XmlArgumentList作為運行期參數。結果輸出到所提供的XmlWriter。
參數contextDocument;要在上面進行查詢的默認文件。
argumentList;
XmlArgumentList將包含任何可以用於執行該查詢的運行期參數。
results;寫入查詢結果XmlWriter。
3.命令void Execute(XpathEditor contextDocument,AmlArgumentList,XmlWriter results);說明該執行方法可以在所提供的作為運行期參數的IxmlInforsetEditor上執行該查詢。將結果輸出到所提供的XmlWriter。該超載允許執行更新,就如它利用一個XpathEditor而不是一個RXPathNavigator。
參數defaultDocument;要在上面進行查詢的默認文件。
argumentList;XmlArgumentList將包含任何可以用於執行該查詢的運行期參數。
results;寫入查詢結果XmlWriter。
4.命令void Execute(XmlResolver,dataSources,XmlArgumentListargList,XmlWriter results);說明該執行方法通過經由XmlResolver存取數據源以及使用如XmlArgumentList所提供的運行期參數來執行該查詢。將結果輸出到所提供的XmlWriter。
參數dataSources;一個用於檢索命名的數據源的XmlResolver,該數據源可以用於執行一個查詢。
argumentList;XmlArgumentList將包含任何執行查詢所必需的運行期參數。
results;將查詢結果寫入XmlWriter。
5.命令void Exectue(string contectDocumentUri,XmlResolverdataSources,XmlArgumentList argList,XmlWriterresults);void Execute(string contextDocumentUri,XmlResolver
dataSources,XmlArgumentList argList,TextWriter results);void Execute(string contectDocumentUri,XmlResolverdataSources,XmlArgumentList argList,Stream results);說明該執行方法通過經由XmlResolver存取數據源以及使用如XmlArgumentList所提供的運行期參數來執行該查詢。將默認文件映射入帶有所提供名稱的XmlResolver。將結果輸出到所提供的XmlWriter。
參數contextDocumentUri;將經由XmlResolver參數解析的上下文文件的URI。
dataSources;一個用於檢索上下文和命名的數據源的XmlResolver,該數據源可以用於執行一個查詢。
argumentList;XmlArgumentList將包含任何執行查詢所必需的運行期參數。
Results;寫入查詢結果XmlWriter,TextWriter,或Stream。
6.命令XmlReader Execte(RXPathNavigatordefaultDocument,XmlArgumentList argList;說明該方法在所提供的RXPathNavigator上執行查詢,RXPathNavigator具有作為運行期參數的XmlArgumentList。由一個XmlReader返回結果。返回一個XmlReader,該XmlReader返回查詢結果。
參數defaultDocument;由解析器解析的默認文件名。
argumentList;XmlArgumentList將包含任何用於執行該查詢的運行期參數7.命令XmlReader Execute(XpathEditor defaultDocumt,XmlArgumentList argList;說明該方法在所提供的XpathEditor上執行查詢,XpathEditor帶有作為運行期參數的給定的XmlArgumentList。由一個XmlReader返回結果。該超載執行允許,就如它採用XpathEditor對抗XmlReader。返回一個XmlReader,該XmlReader返回查詢結果。
參數defaultDocument;由解析器解析的默認文件名。
argumentList;XmlArgumentList將包含任何用於執行該查詢的運行期參數。
8.命令XmlReader Execute(XmlResolver dataSources,XmlArgumentList,argList;說明該執行方法通過經由XmlResolver存取數據源以及使用如XmlArgumentList所提供的運行期參數來執行該查詢。由一個XmlReader返回結果。
參數dataSources;一個用於檢索命名的數據源的XmlResolver,該數據源可以用於執行一個查詢。
argumentList;XmlArgumentList將包含任何執行查詢所必需的運行期參數。
9.命令XmlReader Execute(string contextDocumentUri,XmlResolver,dataSources,XmlArgumentList argList;說明該執行方法通過經由XmlResolver存取數據源來執行該查詢並使用運行時間參數作為由XmlArgumentList所提供的運行時間參數。將默認文件映射入帶有所提供的名稱的XmlResolver。將結果輸出到所提供的XmlWriter。
參數contextDocumentUri;將經由XmlResolver參數解析的上下文相關的文件的URI。
dataSources;一個用於檢索名為數據源的XmlResolver,該數據源可以用於執行一個查詢。
argumentList;XmlArgumentList將包含任何執行查詢所必需的運行時間參數。
10.命令void Execute(XmlResolver,inputSrc,XmlArgumentList argListXmlResolver,outputSrc;說明該方法用給定的作為運行期參數的XmlArgumentList以及作為所希望的輸入源的XmlResolver來執行該查詢。輸出該結果。
參數argList;
XmlArgumentList將包含任何可以用來執行該查詢的運行期參數。
inputSrc;一個返回用於所希望的輸入的數據源的XmlResolver。
outputSrc;一個返回用於所希望的輸入的數據源的XmlResolver。
VI.查詢事件信息1.命令string Message{get;};說明一個來自執行運行期的信息,該信息可以將存儲體以外的信息傳送給用戶。
如上所述,在連同多個計算裝置和網絡體系結構對本發明典型實施例進行描述的時候,可以將基礎概念應用於其中合乎需要地執行一個查詢系統和一個應用編程接口的任何計算裝置或系統中。因此,可以將本發明的方法和系統應用於多個應用程式和裝置。在此選擇了典型的程式語言,名稱以及實例作為多種選擇的表示時,這些語言,名稱和實例將不意味著受到限制。本領域普通技術人員將理解存在提供目標代碼的多種方式來獲得通過本發明所實現的相同,相似或相等的系統和方法。
可以連同硬體或軟體或適當的兩者組合來執行在此所描述的多種基數。因此,本發明的方法和裝置,或特定特徵及其部分可以以程序代碼的方式(即指令)嵌入有形的媒體,例如軟磁碟,CD-ROM,硬碟驅動器或其他任何機器可讀存儲介質,其中當由諸如計算機那樣的一個機器輸入並執行程序代碼時,該機器變成一個用於實踐本發明的裝置。要是在可編程計算機上執行程序代碼,該計算裝置一般將包括一個處理器,一個該處理器可讀的存儲介質(包括易失性和非易失性存儲器和/或存儲元件),至少一個輸入裝置,以及至少一個輸出裝置。最好以一個高級別程序上的或面向對象的程式語言執行一個或多個可以利用本發明信號處理服務的程序(例如,通過使用數據處理API等)來與一臺計算機進行通信。然而如果需要的話,可以用彙編語言或機器語言來執行該程序。總之,該語言可以是一種編譯語言或解釋語言,並結合硬體工具。
還可以經由具體化為程序代碼形式的通信來實踐本發明的方法和裝置,在一些傳輸媒介上傳送該程序代碼,例如在電線或電纜上,通過光纖或經由任何其他形式的傳輸,其中在由諸如EPROM,門陣列,可編程邏輯裝置(PLD),客戶計算機,視頻信號記錄器等,或一個具有如同以上典型實施例中所描述的信號處理能力的一個接收機那樣的機器來接收並存入和執行該程序代碼時,該機器變成用於實踐本發明的裝置。當在一個通用處理器上執行時,該程序代碼結合處理器來提供一個同一裝置,該統一裝置進行操作以啟用本發明的功能性。另外,任何連同本發明使用的存儲技術可以總是硬體和軟體的一個組合。
在連同多個附圖的優選實施例對本發明進行了描述的時侯,要理解到可以使用其他類似的實施例,或者可以不脫離其中而對所描述的實施例進行修改和添加用以執行與本發明相同的功能。此外,還應該強調,期待包括手持式裝置作業系統和其他特定應用作業系統在內的多種計算機平臺,尤其隨著無線網絡裝置持續擴增。因此,本發明將不受任何單個實施例的限制,但是最好應該根據所附權利要求在廣度和範圍上進行分析。
權利要求
1.一種在用於構造可執行查詢的系統中與應用程式進行通信的方法,包括該系統接收來自應用程式的一個或多個請求來設置一個或多個編譯參數和命令以便用於將一個或多個輸入查詢轉換成一個XML中間語言表示;以及該系統接收來自應用程式的一個或多個請求來將該XML中間語言表示轉換成一種可執行查詢。
2.根據權利要求1所述的方法,進一步包括該應用程式接收來自該系統的一個或多個由事件狀態,進程狀態,中間結果,最終結果,錯誤信息,警告和幫助信息所組成的組。
3.根據權利要求1所述的方法,其中用於設置一個或多個環境,編譯參數和編譯命令包含以下的一個或多個來自該系統的信息接收的啟動、指定查詢權限和執行權限、選擇輸入查詢和編譯器類型、以及建立估計環境。
4.根據權利要求3所述的方法,其中該編譯器類型包含XPath,XSLT和XQuery語言編譯器。
5.根據權利要求1所述的方法,其中XML中間語言表示是一個輸入查詢的語義表示。
6.根據權利要求1所述的方法,其中將XML中間語言轉換成可執行查詢包含為目標查詢執行引擎中的直接執行而準備XML中間語言。
7.根據權利要求1所述的方法,其中將XML中間語言轉換成可執行查詢包含使用一個目標產生器將XML中間語言轉換成一個目標表示。
8.根據權利要求7所述的方法,其中目標表示是由XML語言目標、SQL語言目標以及中間語言目標所構成的組的一個或多個。
9.一種為與應用程式進行通信而使用權利要求1所述的方法來構造可執行查詢的系統。
10.一種用於編譯和執行產生查詢結果的輸入查詢的系統,包括一個輸入裝置,用於接收一個輸入查詢;一個或多個中間語言編譯器,其中從該輸入查詢編譯一個XML中間語言表示;一個或多個目標產生器,其中將XML中間語言表示轉換成形成一個目標查詢的一個或多個目標表示;一個或多個數據源,用於在該數據源上進行查詢;以及一個執行引擎,其中在一個或多個數據源上執行目標查詢來產生該查詢結果。
11.根據權利10所述的系統,其中該輸入查詢包括由Xpath、XSLT和XQuery言中的一個或多個形成的一個查詢。
12.根據權利要求10所述的系統,其中該XML中間語言表示表達了該輸入查詢的意義。
13.根據權利要求10所述的系統,其中一個或多個目標產生器包含XML語言產生器、SQL語言產生器和中間語言產生器中的一個或多個。
14.根據權利要求10所述的系統,其中一個或多個數據源包含關係數據源和無關數據源中的一個或多個。
15.根據權利要求14所述的系統,其中無關數據源包括電子表格和文字處理文件。
全文摘要
一種查詢運行期體系結構以及一個適用於該體系結構的典型應用編程接口。該體系結構輸入一個或多個XML查詢和視圖並啟動翻譯該查詢,其中可以在不同數據模型的多個數據源上運行該查詢和視圖。該體系結構結合前端編譯器,該前端編譯器將輸入查詢和視圖轉換成表示各自查詢意義或視圖意義的一個中間語言表示。於是該體系結構可以允許將中間語言表示進行後端編譯成與所需要查詢的數據源相一致的目標語言。該體系結構還允許執行那些目標編譯來析取該查詢所需要的數據。本發明還揭示了一個用於查詢運行期系統的實例應用編程接口。
文檔編號G06F9/45GK1573759SQ200410071468
公開日2005年2月2日 申請日期2004年6月23日 優先權日2003年6月23日
發明者A·A·德塞, M·W·弗塞爾, A·E·金伯爾, M·L·布倫達吉, S·杜比奈茨, T·F·弗雷格 申請人:微軟公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀