国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      公共查詢運(yùn)行期系統(tǒng)以及應(yīng)用編程接口的制作方法

      文檔序號(hào):6424959閱讀:196來源:國知局
      專利名稱:公共查詢運(yùn)行期系統(tǒng)以及應(yīng)用編程接口的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明一般涉及在數(shù)據(jù)源上進(jìn)行軟件查詢的領(lǐng)域,更具體而言涉及使用XML中間語言在一個(gè)或多個(gè)數(shù)據(jù)源上進(jìn)行查詢。
      背景技術(shù)
      可擴(kuò)展標(biāo)記語言(XML)是一種萬維網(wǎng)協(xié)會(huì)(W3C)認(rèn)可的文件格式化標(biāo)準(zhǔn)(參考http//www.w3c.org/tr),該標(biāo)準(zhǔn)提供一種一般的語法給具有人類可讀的標(biāo)識(shí)符的標(biāo)記數(shù)據(jù)。盡管XML可以容易地以一種嚴(yán)格定義的格式描述一個(gè)文件的內(nèi)容,但是還存在其他不容易描述的數(shù)據(jù)源,這些數(shù)據(jù)源不是因?yàn)樗麄兊慕Y(jié)構(gòu)與標(biāo)準(zhǔn)文本文件的結(jié)構(gòu)不一致就是由于其他的非XML兼容特性。這種數(shù)據(jù)源的實(shí)例可以是電子表格或關(guān)系數(shù)據(jù)庫。
      在具有多樣數(shù)據(jù)編程模塊的數(shù)據(jù)源上執(zhí)行一個(gè)類似XML的檢索的任務(wù)稱為虛擬XML。該術(shù)語通常解釋為包括在虛擬XML視圖上進(jìn)行查詢。虛擬XML是一個(gè)關(guān)于建立穿越數(shù)據(jù)存取編程模型的一致性的概念,并允許用戶以它們所認(rèn)為的方式代替實(shí)存格式來處理他們的數(shù)據(jù)。有關(guān)在虛擬XML上進(jìn)行查詢的概念涉及數(shù)據(jù)處理,就如同它是XML而不曾真正地將它轉(zhuǎn)換成XML。此概念的優(yōu)勢在于把XML編碼的開銷一直保持到一個(gè)最小值。如果虛擬XML方案具有這種優(yōu)勢是合乎需要的——能夠運(yùn)用一種查詢語言在一個(gè)非XML數(shù)據(jù)源上進(jìn)行查詢就如同該數(shù)據(jù)源是XML查詢。還期望在實(shí)際數(shù)據(jù)和虛擬XML之間的映射具有高保真度。
      存在大量本來執(zhí)行一個(gè)虛擬XML的任務(wù)。一個(gè)問題是效率??梢院唵蔚赜靡粋€(gè)虛擬XML接口來揭露一個(gè)數(shù)據(jù)源,例如XML閱讀器,然后在該數(shù)據(jù)源上用現(xiàn)有的XML查詢工具進(jìn)行查詢,例如XML文件對象模型(DOM)。然而,所有的這些作業(yè)發(fā)生在XML查詢引擎中而不是由數(shù)據(jù)源自己來執(zhí)行。假設(shè)該數(shù)據(jù)源本身及其相關(guān)的數(shù)據(jù)管理系統(tǒng)在以其特別設(shè)計(jì)的語言來管理其數(shù)據(jù)查詢方面比一個(gè)具有不同數(shù)據(jù)模型的外部查詢系統(tǒng)更有效率。
      這方面引入了在執(zhí)行一個(gè)虛擬XML查詢中的另一個(gè)問題;XML數(shù)據(jù)并不總是用優(yōu)先的數(shù)據(jù)模型及其類型系統(tǒng)來進(jìn)行最佳定位??梢詫⑺蓄愋偷膬?yōu)先數(shù)據(jù)源映射為XML類型,但是該處理過程丟失了保真度并且還是低效的。此外,一個(gè)系統(tǒng)中的類型不明顯等效于另一個(gè)。例如,表示諸如XML中的圖像那樣的二進(jìn)制數(shù)據(jù)需要一個(gè)代價(jià)高的到XML字符集的轉(zhuǎn)換(例如,64位基數(shù)編碼)。
      優(yōu)先嘗試通過構(gòu)造兩個(gè)不同的數(shù)據(jù)結(jié)構(gòu)在解決問題的虛擬XML上進(jìn)行查詢;一是為了查詢一是為了映射,然后一前一后遍歷它們以在原始數(shù)據(jù)源上直接產(chǎn)生一個(gè)有效的查詢,甚至不實(shí)現(xiàn)該虛擬XML視圖。盡管該方法起初運(yùn)行得很好,但是當(dāng)查詢和映射語言復(fù)雜性增加之時(shí)發(fā)展變得及其困難。在查詢或映射中的概念經(jīng)常不直接翻譯成目標(biāo)數(shù)據(jù)模型,而且以復(fù)合XML視圖來組成復(fù)合查詢需要許許多多的語義分析和改寫。
      另外,一種能夠支持在多個(gè)數(shù)據(jù)源上把用一種語言的查詢轉(zhuǎn)換成查詢表現(xiàn)或查詢結(jié)果的系統(tǒng)體系結(jié)構(gòu)通常需要高代價(jià)地執(zhí)行M乘以N路徑,其中M是輸入選項(xiàng)的數(shù)量且N是輸出選項(xiàng)的數(shù)量。通過使用標(biāo)準(zhǔn)體系結(jié)構(gòu),這種轉(zhuǎn)換編譯器在數(shù)量上變得很大。
      因此需要一種統(tǒng)一表示以及一種單獨(dú)的系統(tǒng)體系結(jié)構(gòu)以便在XML和非XML數(shù)據(jù)源上為了XML查詢和視圖而執(zhí)行虛擬XML。本發(fā)明應(yīng)用于上述需求并用一個(gè)運(yùn)用一個(gè)統(tǒng)一表示的體系結(jié)構(gòu)以及一個(gè)供本發(fā)明用戶所使用的應(yīng)用編程接口來解決上述需求。
      發(fā)明概述提供一種用于編譯和執(zhí)行輸入查詢以產(chǎn)生查詢結(jié)果的系統(tǒng),該系統(tǒng)包括一個(gè)用于接收一個(gè)輸入的輸入裝置,一個(gè)用于產(chǎn)生輸入查詢的語義意義的中間語言編譯器,一個(gè)用于將XML中間語言表示轉(zhuǎn)換成目標(biāo)語言以便形成目標(biāo)查詢的目標(biāo)產(chǎn)生器(或目標(biāo)語言編譯器),以及一個(gè)執(zhí)行引擎。執(zhí)行引擎允許在數(shù)據(jù)源上執(zhí)行輸入查詢。該執(zhí)行引擎可以直接地執(zhí)行XML中間語言,或者在執(zhí)行該查詢之前先將XML中間語言轉(zhuǎn)換成一個(gè)目標(biāo)語言。該輸入查詢可以來自任何XML查詢或視圖,而且該目標(biāo)語言可以是任何能夠在一個(gè)數(shù)據(jù)源上進(jìn)行查詢的查詢語言。該數(shù)據(jù)源可以是關(guān)系類型或非關(guān)系類型(例如分層的)數(shù)據(jù),而且該系統(tǒng)能夠在多個(gè)數(shù)據(jù)源上進(jìn)行查詢。
      描述一種與應(yīng)用程序進(jìn)行通信的方法,該應(yīng)用程序定義一種應(yīng)用編程語言的功能性。一個(gè)應(yīng)用程序可以向查詢系統(tǒng)發(fā)送一個(gè)或多個(gè)請求來設(shè)置一個(gè)或多個(gè)編譯參數(shù)和命令,這些編譯參數(shù)和命令用于將一個(gè)或多個(gè)輸入查詢轉(zhuǎn)換成一個(gè)XML中間語言表示。另外,一個(gè)應(yīng)用程序可以向該系統(tǒng)發(fā)送一個(gè)或多個(gè)請求來將XML中間語言表示轉(zhuǎn)換成一個(gè)可執(zhí)行的查詢。該系統(tǒng)可以向應(yīng)用程序發(fā)送事件狀態(tài),例如進(jìn)程狀態(tài),中間結(jié)果,最終結(jié)果,錯(cuò)誤信息,警告和幫助信息。
      接下來參照附圖所進(jìn)行的說明性實(shí)施例的詳細(xì)描述將使本發(fā)明附加的特征和優(yōu)點(diǎn)變得明顯。
      附圖的簡要描述連同附圖一起看前面所述的摘要以及接下來優(yōu)選實(shí)施例的詳細(xì)描述將會(huì)更好地理解。為了舉例說明本發(fā)明,在附圖中顯示了本發(fā)明典型結(jié)構(gòu);然而,本發(fā)明并不局限于這些特定方法以及所揭示的工具。在附圖中

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