專利名稱:檢索裝置和檢索方法
技術(shù)領(lǐng)域:
本發(fā)明的實(shí)施方式涉及檢索裝置和檢索方法。
背景技術(shù):
現(xiàn)在已經(jīng)開發(fā)了利用分布式系統(tǒng)實(shí)現(xiàn)XQuery處理的分布式XQuery處理技術(shù)。但是,分布式XQuery處理的嘗試還只是剛剛開始,關(guān)于分布式XQuery處理的論文僅處于偶爾可見的程度。作為分布式XQuery處理之一,XRPC是一種針對不同種類的分布式數(shù)據(jù)源的 XQuery處理的語言擴(kuò)展,作為XQuery的內(nèi)部函數(shù)具備RPC (RemoteProcedure Call 遠(yuǎn)程過程調(diào)用)功能,由此實(shí)現(xiàn)分布式XQuery。
發(fā)明內(nèi)容
在分布式XQuery處理的代表性現(xiàn)有技術(shù)XRPC中存在著例如用戶必須在XQuery 內(nèi)顯式描述作為特殊語言擴(kuò)展的XPRC這樣問題。本實(shí)施方式的檢索裝置包括第一受理部、第一生成部、第一發(fā)送部、第二發(fā)送部、 第二受理部、接收部、執(zhí)行部和第三發(fā)送部。第一受理部從客戶端(client)接受檢索請求。 第一生成部根據(jù)檢索請求生成對服務(wù)器請求檢索的分布式檢索請求、以及對分布式檢索請求的檢索結(jié)果進(jìn)行綜合的綜合請求。第一發(fā)送部向服務(wù)器發(fā)送分布式檢索請求。第二發(fā)送部向客戶端發(fā)送綜合請求的執(zhí)行結(jié)果的識別信息。第二受理部從客戶端受理由識別信息所識別的執(zhí)行結(jié)果的獲取請求。接收部從服務(wù)器接收針對分布式檢索請求的檢索結(jié)果。執(zhí)行部針對接收到的檢索結(jié)果執(zhí)行綜合請求。第三發(fā)送部向發(fā)出了獲取請求的客戶端發(fā)送綜合請求的執(zhí)行結(jié)果。
圖1是表示包含使用XRPC的情況的檢索裝置的數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)的一個實(shí)例的框圖。圖2是表示本實(shí)施方式的虛擬XML數(shù)據(jù)庫系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)實(shí)例的框圖。圖3是表示HTTP上的通信步驟的圖。圖4是表示第一實(shí)施方式的中央服務(wù)器的結(jié)構(gòu)實(shí)例的框圖。圖5是表示第一實(shí)施方式中的檢索處理的整體流程的流程圖。圖6是用于說明對GET消息進(jìn)行語法分析后對處理進(jìn)行分配的請求處理的圖。圖7是表示由虛擬計(jì)劃器(planner)執(zhí)行的分布式XQuery處理的一個實(shí)例的流程圖。
圖8是表示DXQuery生成處理的一個實(shí)例的流程圖。圖9是表示GXQuery生成處理的一個實(shí)例的流程圖。圖10是表示XQuery處理的一個實(shí)例的流程圖。圖11是表示獲取處理的一個實(shí)例的流程圖。圖12是表示合并處理的一個實(shí)例的流程圖。圖13是按照時(shí)間序列展示出客戶端和多個服務(wù)器的相互作用的狀況的序列圖。圖14是表示從客戶端輸入的XQuery的一個實(shí)例的圖。圖15是表示圖2的DB中存儲的數(shù)據(jù)的一個實(shí)例的圖。圖16是表示根據(jù)圖14的XQuery生成的DXQuery的一個實(shí)例的圖。圖17是表示作為圖16的DXQuery的執(zhí)行結(jié)果的結(jié)果XML的一個實(shí)例的圖。圖18是表示根據(jù)圖14的XQuery生成的GXQuery的一個實(shí)例的圖。圖19是表示作為圖18的GXQuery的執(zhí)行結(jié)果的結(jié)果XML的一個實(shí)例的圖。圖20是表示從客戶端輸入的XQuery的另一個實(shí)例的圖。圖21是表示針對圖20的XQuery生成的DXQuery的示意圖。圖22是表示DXQueryl的一個實(shí)例的圖。圖23是表示作為圖22的DXQueryl的執(zhí)行結(jié)果的結(jié)果XML的一個實(shí)例的圖。圖24是表示DXQuery2的一個實(shí)例的圖。圖25是表示作為圖24的DXQuery2的執(zhí)行結(jié)果的結(jié)果XML的一個實(shí)例的圖。圖26是表示根據(jù)圖20的XQuery生成的GXQuery的一個實(shí)例的圖。圖27是表示作為圖26的GXQuery的執(zhí)行結(jié)果的結(jié)果XML的一個實(shí)例的圖。圖28是表示第二實(shí)施方式中的中央服務(wù)器的結(jié)構(gòu)實(shí)例的框圖。圖29是表示由虛擬計(jì)劃器和泛化處理器執(zhí)行的分布式XQuery處理的一個實(shí)例的流程圖。圖30是表示泛化處理的一個實(shí)例的流程圖。圖31是表示分布式服務(wù)器定義的一個實(shí)例的圖。圖32是表示在輸入了圖14的XQuery和圖31的分布式服務(wù)器定義時(shí)利用泛化處理所輸出的DXQuery’的一個實(shí)例的圖。圖33是表示在輸入了圖14的XQuery和圖31的分布式服務(wù)器定義時(shí)利用泛化處理所輸出的VXQuery的一個實(shí)例的圖。圖34是表示在第二實(shí)施方式中所處理的XQuery、資源和XML的關(guān)系的一個實(shí)例的圖。圖35是表示第一或第二實(shí)施方式的檢索裝置的硬件結(jié)構(gòu)的說明圖。
具體實(shí)施例方式下面參照附圖詳細(xì)說明本發(fā)明的檢索裝置的優(yōu)選實(shí)施方式。下面以通過XQuery 形式的檢索請求對XML(Extensible Markup Language 可擴(kuò)展標(biāo)記語言)形式的數(shù)據(jù)進(jìn)行檢索的系統(tǒng)為例進(jìn)行說明,但可以應(yīng)用本發(fā)明的系統(tǒng)并不限于此。在XML中,構(gòu)成文檔結(jié)構(gòu)的各個部分(parts)被稱為“元素(Element) ”。各元素使用標(biāo)簽(Tag)進(jìn)行記述。具體而言,一個元素表現(xiàn)為由表示元素開始的標(biāo)簽(開始標(biāo)簽)和表示元素結(jié)束的標(biāo)簽(結(jié)束標(biāo)簽)這兩個標(biāo)簽將文本數(shù)據(jù)包夾。另外,由開始標(biāo)簽和結(jié)束標(biāo)簽所包夾的文本數(shù)據(jù)就是由開始標(biāo)簽和結(jié)束標(biāo)簽表示的一個元素中所包含的文本元素(文本節(jié)點(diǎn))。XQuery是用于查詢XML數(shù)據(jù)庫(XML-DBMS)的函數(shù)型語言,其特征是 FLffOR(for-let-where-order by-return)語法。作為RDB中的查詢語言的SQL是聲明式語言,與此相對,XQuery具有很多函數(shù)型語言的特征。下面從過程的角度出發(fā)來說明XQuery 的語言規(guī)范。for語句的語法是“for變量in表達(dá)式”。for語句的語法具有將滿足表達(dá)式的項(xiàng)目代入變量后執(zhí)行循環(huán)的意思。let語句的語法是“l(fā)et變量=表達(dá)式”。let語句的語法具有將滿足表達(dá)式的項(xiàng)目匯集起來作為序列代入變量的意思。序列指的是扁平的列表。where語句對for語句中重復(fù)執(zhí)行的循環(huán)進(jìn)行限制。where語句的語法是“where表達(dá)式”。where語句的語法具有僅針對滿足表達(dá)式的項(xiàng)目執(zhí)行循環(huán)、對于不滿足表達(dá)式的項(xiàng)目則跳過循環(huán)的意思。return語句對XQuery的處理結(jié)果進(jìn)行格式化。return語句的語法是 “return表達(dá)式”。在return語句的語法中可以記述包含變量在內(nèi)的任意的XML數(shù)據(jù)。變量的語法是“$字符串”。除了在嵌套查詢等中進(jìn)行雙重聲明的情況以外,具有相同字符串的變量被看作是同一變量。作為用于指定XML數(shù)據(jù)的元素之間的層次條件的路徑運(yùn)算符, XQuery中存在著以下運(yùn)算符。(1) “/”:表示元素之間是父子關(guān)系的運(yùn)算符(2) “//”:表示元素之間是祖孫關(guān)系的運(yùn)算符(3)“·”任意元素如上所述,作為利用分布式系統(tǒng)來實(shí)現(xiàn)XQuery處理的分布式XQuery處理技術(shù),已知有XRPC。圖1是表示包含使用XRPC的情況的檢索裝置(中央服務(wù)器100’ )的數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)的一個實(shí)例的框圖。如圖1所示,數(shù)據(jù)庫系統(tǒng)具有中央服務(wù)器100’、客戶端10’、具備數(shù)據(jù)庫(DB)21的DB服務(wù)器20’經(jīng)由網(wǎng)絡(luò)30連接而成的結(jié)構(gòu)??蛻舳?0,向中央服務(wù)器100,請求以XQuery形式記述的查詢41。查詢41 的意思是對于ActorA和ActorB,調(diào)用x. example, org網(wǎng)站中存在的XQuery43的函數(shù)f i ImsByActor。XQuery43的意思是從XML文件42提取具有與變量$actor匹配的 actorName 的 fiImName0在受理了這種查詢41時(shí)的處理概要如下所示。(1)對于“ActorA”,調(diào)用函數(shù) f ilmsByActor。在 XML 文件 42 中存在 2 個 actorName 中包含“ActorA”的元素,因此返回這2個filmName。(2)對于“ActorB”,調(diào)用函數(shù) filmsByActor。在 XML 文件 42 中不存在 actorName 中包含“ActorB”的元素,因此返回空數(shù)據(jù)。(3)將所得到的filmName表示為查詢41中記述的XML形式。結(jié)果XML44表示出此時(shí)所得到的XML。結(jié)果XML44是將films元素附加在函數(shù)所返回的filmName元素的上下而形成的。在XRPC中存在著如下所示的課題。(I)XQuery非透明用戶必須在XQuery內(nèi)顯式記述作為特殊的語言擴(kuò)展的XRPC。
(2)同類綜合DB服務(wù)器20’的查詢處理能力必須支持XQuery和XRPC。其結(jié)果是,針對不同種類的數(shù)據(jù)無法實(shí)現(xiàn)真正的虛擬化。(3)性能問題一旦XQuery的for循環(huán)內(nèi)存在RPC函數(shù),RPC消息(SOAP格式)的發(fā)送接收次數(shù)就會增大。另外,RPC函數(shù)返回單值,因此不適合雙值的返回。另外,內(nèi)部的 XQuery被封裝為RPC函數(shù),因此,難以對嵌套的XQuery進(jìn)行優(yōu)化。因此,包含作為第一實(shí)施方式的檢索裝置的中央服務(wù)器100的虛擬XML數(shù)據(jù)庫系統(tǒng)不使用RPC而實(shí)現(xiàn)分布式XQuery處理。圖2是表示本實(shí)施方式的虛擬XML數(shù)據(jù)庫系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)實(shí)例的框圖。虛擬XML 數(shù)據(jù)庫系統(tǒng)由客戶端10、中央服務(wù)器100、2臺DB服務(wù)器20a、20b經(jīng)由網(wǎng)絡(luò)30連接而成。DB服務(wù)器20a、20b分別具備用于存儲例如XML形式數(shù)據(jù)的數(shù)據(jù)庫(DB) 21a、21b。 此外,DB服務(wù)器20a、20b具備同樣的功能,因此,在以下說明中有時(shí)候簡稱為DB服務(wù)器20??蛻舳?0向中央服務(wù)器100請求以XQuery形式記述的查詢。網(wǎng)絡(luò)30可以采用 LAN (Local Area Network 局域網(wǎng))和 WAN (Wide Area Network 廣域網(wǎng))等任意的網(wǎng)絡(luò)結(jié)構(gòu)。網(wǎng)絡(luò)30上存在多種多樣的通信協(xié)議,以下以使用網(wǎng)際協(xié)議相互連接的計(jì)算機(jī)網(wǎng)絡(luò)、S卩IP網(wǎng)絡(luò)為例進(jìn)行說明。使用IP以外的通信協(xié)議時(shí)也可以應(yīng)用同樣的手法。圖3是表示HTTP (Hypertext Transfer Protocol 超文本傳輸協(xié)議)上的通信步驟的圖。圖3表示出客戶端10和中央服務(wù)器100之間的HTTP通信步驟,但是在中央服務(wù)器100和DB服務(wù)器20之間也按照同樣的通信步驟進(jìn)行通信。圖3的通信步驟是由 REST (Representational State Transfer 表述性狀態(tài)轉(zhuǎn)移)擴(kuò)展而成的。所謂的REST指的是用于分布式超媒體系統(tǒng)(hypermedia system)的軟件架構(gòu) (architecture)的類型,其特征為無狀態(tài)(stateless)式客戶端/服務(wù)器協(xié)議。HTTP消息包含為理解該請求(消息)所必需的全部信息。因此,客戶端10和中央服務(wù)器100的任意一方都不需要記住消息之間的會話狀態(tài)。另外,定義了若干個高使用頻度的方法。其中重要的方法是 get、post、put 禾口 delete。另外,在REST 中使用了由 URI (Uniform Resource Identifier 統(tǒng)一資源標(biāo)識符) 所表達(dá)的唯一地址(unique adress),用于唯一地識別資源。URI用作方法的參數(shù)。URI是由URL(Uniform Resource Locator 統(tǒng)一資源定位符)的概念擴(kuò)展而得到的。URI是按照固定的書寫格式指示資源的標(biāo)識符,在1998年規(guī)定為RFC2396,并于2005年修訂為RFC3986。例如,"xxxx.ne. jp” 上的資源‘‘index, html” 的 URI 表達(dá)為 ‘‘http://www. xxxx. ne. jp/yyyy/public/index, html,,。在本實(shí)施方式中,將REST擴(kuò)展為包含方法“query”和方法“gquery”。如下面的 (1)和(2)所示,這些方法是分別用于請求XQuery處理和分布式XQuery處理的執(zhí)行的方法。下面展示本實(shí)施方式中使用的方法的一個實(shí)例。此外,在以下說明中,小寫的 “uri”和“uri_*(*是任意的字符串)”表示其是按照uri的書寫格式所表達(dá)的標(biāo)識符。另外,“資源uri”或“資源uri_*”表示由標(biāo)識符“uri”或“uri_*”所識別的資源。(1) query 方法指定XQUery(圖3的“XQuery”)(步驟S101),取得保存有由指定的XQuery進(jìn)行的XQuery處理的結(jié)果XML的資源uri (步驟S102)。(2) gquery 方法指定XQUery(圖3的“XQuery”)(步驟S101),取得保存有由指定的XQuery進(jìn)行的分布式XQuery處理的結(jié)果XML的資源uri (步驟S102)。(3) get 方法指定uri (步驟S103),獲取所指定的uri的資源中所保存的結(jié)果XML (步驟S104)。(4) put 方法指定uri和XML (步驟S105),將XML保存到所指定的uri的資源中,獲取保存結(jié)果 (圖 3 的 “status,,)(步驟 S106)。圖4是表示第一實(shí)施方式的中央服務(wù)器100的結(jié)構(gòu)實(shí)例的框圖。中央服務(wù)器100 包括請求受理部110 (第一受理部、第二受理部)、虛擬計(jì)劃器120、XQUery處理器102 (執(zhí)行部)、資源分配部103 (分配部)和服務(wù)器通知檢測部104 (檢測部)。請求受理部110受理來自客戶端10或其他服務(wù)器(DB服務(wù)器20a、20b等)的請求。例如,請求受理部110受理query或gquery等XQuery處理請求以及get或put等資源處理請求,調(diào)用必要的處理。請求受理部110具備發(fā)送部111 (第二發(fā)送部、第三發(fā)送部), 用于發(fā)送對請求的響應(yīng)。如圖4的左側(cè)所示,請求受理部110例如從客戶端10受理數(shù)據(jù)的檢索請求401。 發(fā)送部111將保存著結(jié)果XML的資源的uri402返回給發(fā)送了檢索請求401的客戶端10。 另外,請求受理部110從客戶端10受理由uri指定的資源中所保存的結(jié)果XML的獲取請求 403。發(fā)送部111向發(fā)送了獲取請求403的客戶端10返回結(jié)果XML404。虛擬計(jì)劃器120執(zhí)行分布式XQuery處理中的計(jì)劃。虛擬計(jì)劃器120包括生成部 121 (第一生成部)、發(fā)送部122 (第一發(fā)送部)和接收部123。當(dāng)請求受理部110受理了請求執(zhí)行分布式XQuery處理的分布式gquery時(shí),生成部121根據(jù)所受理的檢索請求(gquery)所指定的XQuery生成DXQuery (分布式檢索請求) 和GXQuery (綜合請求),其中,DXQuery向DB服務(wù)器20的集合請求數(shù)據(jù)的檢索,GXQuery 對DXQuery的檢索結(jié)果進(jìn)行綜合。發(fā)送部122將DXQuery的檢索請求發(fā)送到DB服務(wù)器20。接收部123從DB服務(wù)器 20接收DXQuery的檢索結(jié)果。XQuery 處理器 102 執(zhí)行 XQuery。資源分配部103對以uri為鍵值的資源進(jìn)行管理。在XQuery中傳遞的是XML數(shù)據(jù),但是為了對其傳遞進(jìn)行控制,資源分配部103對各XML數(shù)據(jù)分配資源uri。資源分配部 103具備確保用于保存資源的區(qū)域的功能;返回用于表達(dá)所確保的區(qū)域的URI的uri返回功能;將XML數(shù)據(jù)代入資源uri的功能;以及獲取在uri所表示的區(qū)域中保存的XML數(shù)據(jù)的功能。服務(wù)器通知檢測部104使用廣播等在服務(wù)器之間進(jìn)行服務(wù)器信息(SInfo)的傳遞,檢測與網(wǎng)絡(luò)30連接的服務(wù)器。虛擬計(jì)劃器120向按照這種方式檢測到的DB服務(wù)器20 發(fā)送DXQuery。此外,也可以不配備服務(wù)器通知檢測部104,而是采用對虛擬計(jì)劃器120事先指定的DB服務(wù)器20進(jìn)行訪問的結(jié)構(gòu)。接著,使用圖5說明由按照這種方式構(gòu)成的第一實(shí)施方式的中央服務(wù)器100進(jìn)行的檢索處理。圖5是表示第一實(shí)施方式中的檢索處理的整體流程的流程圖。首先,通過中央服務(wù)器100的啟動而生成主線程(步驟S201)。以下的步驟S202 到步驟S208表示在主線程內(nèi)執(zhí)行的各個處理。在主線程中生成2個服務(wù)器通知檢測線程(服務(wù)器信息通知線程和服務(wù)器信息檢測線程)和針對每個請求而生成的請求處理線程(步驟S202、步驟S204、步驟S207)。
在服務(wù)器信息通知線程中,服務(wù)器通知檢測部104通過例如廣播定期地向DB服務(wù)器20等與網(wǎng)絡(luò)30連接的其他裝置發(fā)送中央服務(wù)器100的服務(wù)器信息(步驟S203)。該處理重復(fù)執(zhí)行到服務(wù)器信息通知線程結(jié)束為止。在服務(wù)器信息檢測線程中,服務(wù)器通知檢測部104從DB服務(wù)器20等與網(wǎng)絡(luò)30連接的其他裝置接收服務(wù)器信息,更新現(xiàn)有的服務(wù)器信息(步驟S205)。該處理重復(fù)執(zhí)行到服務(wù)器信息檢測線程結(jié)束為止。請求處理線程在套接字(socket)上的accept處理完成后生成。在accept處理中,受理等待連接的請求(request)并建立連接,創(chuàng)建新的套接字。請求受理部110判斷是否已利用所創(chuàng)建的套接字受理了 XQuery處理請求(query、 gquery)或資源處理請求(get、put)等請求(步驟S206)。在尚未受理的情況下(步驟 S206 否),重復(fù)該處理,一直到受理為止。在已受理了請求的情況下(步驟S206 是),請求受理部110生成請求處理線程 (步驟S207)。在請求處理線程中執(zhí)行請求處理,對所受理的請求進(jìn)行處理(步驟S208)。在請求處理中,對所接收到的HTTP消息、這里是GET消息進(jìn)行語法分析。HTTP消息指的是作為請求(request)從客戶端10向中央服務(wù)器100發(fā)送、并且作為響應(yīng)(response) 從中央服務(wù)器100返回到客戶端10的消息。HTTP消息的結(jié)構(gòu)由多行“消息頭”和“消息體”構(gòu)成,分別以空行(CR+LF)隔開。在消息頭中含有中央服務(wù)器100或客戶端10需要處理的請求或響應(yīng)的內(nèi)容等。消息體中含有需要傳送的數(shù)據(jù)本身。GET方法是ΗΤΤΡ/0. 9中定義的唯一一個方法,在HTTP中使用得最頻繁。遵循 HTTP/1. 1的服務(wù)器必須支持GET方法。圖6是用于說明對GET消息進(jìn)行語法分析后對處理進(jìn)行分配的請求處理的圖。請求受理部110從消息中提取方法,根據(jù)所取得的方法的種類(消息類型)進(jìn)行條件分支。(1) gquery方法的情況下因?yàn)檎埱蟮氖欠植际絏Query處理,所以調(diào)用虛擬計(jì)劃器120。(2) query方法的情況下因?yàn)檎埱蟮氖荴Query處理,所以利用XQuery處理器102執(zhí)行XQuery。(3) post方法的情況下利用資源分配部103創(chuàng)建資源,返回所創(chuàng)建的資源的uri。(4) get方法的情況下獲取由uri所指定的資源的數(shù)據(jù)。(5) put 方法將數(shù)據(jù)代入由uri所指定的資源。
9
(6) merge 方法將數(shù)據(jù)合并后代入所指定的資源。圖7是表示利用虛擬計(jì)劃器120執(zhí)行的分布式XQuery處理的一個實(shí)例的流程圖。 在分布式XQuery處理中,根據(jù)所輸入的XQuery生成以下兩種XQuery。此外,針對每個DB 服務(wù)器20生成多個DXQuery。GXQuery通常生成一個。(I)DXQuery 是用于訪問DB服務(wù)器20中存儲的XML數(shù)據(jù)的XQuery(2) GXQuery 是用于對DXQuery所輸出的XML數(shù)據(jù)進(jìn)行綜合的XQuery首先,虛擬計(jì)劃器120的生成部121對所輸入的XQuery進(jìn)行分析,由此執(zhí)行生成多個DXQuery的DXQuery生成處理(步驟S301)。DXQuery生成處理將在后面詳細(xì)敘述。虛擬計(jì)劃器120從所生成的DXQuery之中選擇一個(步驟S302)。虛擬計(jì)劃器120 從多個DB服務(wù)器20之中選擇一個(步驟S303)。虛擬計(jì)劃器120的發(fā)送部122向所選擇的DB服務(wù)器20發(fā)送所選擇的DXQuery的執(zhí)行請求(步驟S304)。接收到執(zhí)行請求的DB服務(wù)器20將保存著DXQuery的執(zhí)行結(jié)果(結(jié)果XML)的資源的URI (uri_d)發(fā)送到中央服務(wù)器100。由此,虛擬計(jì)劃器120獲取了保存著結(jié)果XML的資源的URI、即uri_d。接著,虛擬計(jì)劃器120判斷是否已經(jīng)向所有DB服務(wù)器20發(fā)送了執(zhí)行請求(步驟 S305)。在尚未全部發(fā)送的情況下(步驟S305:否),選擇一個尚未處理的DB服務(wù)器20,重復(fù)進(jìn)行處理(步驟S303)。在已經(jīng)全部發(fā)送了的情況下(步驟S305 是),虛擬計(jì)劃器120向自身服務(wù)器(中央服務(wù)器100)請求用于對分別保存有從各DB服務(wù)器20得到的多個資源uri_d的數(shù)據(jù)進(jìn)行合并的merge方法(步驟S306)。中央服務(wù)器100的請求受理部110接收到請求了執(zhí)行 merge方法的消息后,首先向虛擬計(jì)劃器120返回保存有合并的結(jié)果(結(jié)果XML)的資源的 URI (uri_m)。由此,虛擬計(jì)劃器120獲取到保存有結(jié)果XML的資源的URI、即uri_m。接著,虛擬計(jì)劃器120判斷是否已處理了所有的DXQuery(步驟S307)。在尚未全部處理的情況下(步驟S307 否),選擇一個尚未處理的DXQuery,重復(fù)進(jìn)行處理(步驟 S302)。在已經(jīng)處理了全部DXQuery的情況下(步驟S307 是),虛擬計(jì)劃器120的生成部 121執(zhí)行生成GXQuery的GXQuery生成處理(步驟S308),GXQuer輸出滿足所輸入的XQuery 的結(jié)果XML。GXQuery生成處理將在后面詳細(xì)敘述。接著,虛擬計(jì)劃器120將GXQuery的doc ()函數(shù)改寫為uri_m(步驟S309)。資源分配部103確保用于保存GXQuery的執(zhí)行結(jié)果的資源uri_g (步驟S310)。虛擬計(jì)劃器120 將uri_g作為作為GET響應(yīng)向客戶端返回(步驟S311)。XQuery 處理器 102 執(zhí)行 GXQuery (步驟 S312)。XQuery 處理器 102 將作為 GXQuery 的執(zhí)行結(jié)果的結(jié)果XML代入資源uri_g (步驟S313)。如后文所述,客戶端10向中央服務(wù)器100發(fā)送指定了 uri_g的get方法。請求受理部110受理了該get方法的執(zhí)行請求后,生成請求處理線程(圖5的步驟S207),用于等待針對資源uri_g的結(jié)果XML的代入。在步驟S313中,結(jié)果XML被代入資源uri_g后,在該請求處理線程中向客戶端10返回結(jié)果XML作為GET響應(yīng)。接著詳細(xì)說明步驟S301的DXQuery生成處理。圖8是表示DXQuery生成處理的一個實(shí)例的流程圖。在DXQuery生成處理中,與XQueryX相同,其中心是將XQuery看作樹結(jié)構(gòu),從doc ()函數(shù)開始執(zhí)行節(jié)點(diǎn)遍歷(traverse)處理。此外,所謂的XQueryX指的是能夠?qū)Query表達(dá)式描述為XML語法的規(guī)范。遍歷的規(guī)則如下。(1)探索doc()函數(shù)以下的路徑表達(dá)式。(2)探索相同docO函數(shù)以下的路徑表達(dá)式相互之間的比較表達(dá)式。返回值的規(guī)則如下。(1)將返回值變換為以下的由<rec>包圍的形式的XML(以下稱為REC格式)后返回。<rec><col ? >...</col ? ></rec>(2)<col ? >用于分隔變量的值。首先,生成部121將所輸入的XQuery進(jìn)行標(biāo)準(zhǔn)化(步驟S401)。在標(biāo)準(zhǔn)化過程中, 生成部121執(zhí)行將謂語分句展開為FLWOR句法結(jié)構(gòu)的處理,并執(zhí)行以let語句將return語句約束為由變量和標(biāo)簽組成的形式的處理等。接著,生成部121對所輸入的XQuery中出現(xiàn)的doc ()函數(shù)進(jìn)行標(biāo)記(檢測)(步驟S402)。此后則針對所出現(xiàn)的每個doc ()函數(shù)重復(fù)執(zhí)行從步驟S403到步驟S415的處理的循環(huán)。即,針對每個doc()函數(shù)生成DXQuery?;舅惴ㄊ菑膁oc ()函數(shù)開始邊標(biāo)記邊求出經(jīng)由路徑或常數(shù)能夠到達(dá)的范圍。生成部121判斷所標(biāo)記的部分(doc ()函數(shù))是否包含在FLWOR語法的某個分句中,并對處理進(jìn)行分配。即,生成部121判斷所標(biāo)記的部分是否包含在for語句中(步驟 S403)。在包含在for語句中的情況下(步驟S403 是),生成部121將由所標(biāo)記的變量、常數(shù)、函數(shù)和路徑構(gòu)成的部分重新進(jìn)行標(biāo)記(步驟S404)。S卩,生成部121以所標(biāo)記的doc() 函數(shù)為起點(diǎn)探索路徑,對已到達(dá)的部分重新進(jìn)行標(biāo)記。生成部121將標(biāo)記部分作為DXQuery 的for語句輸出(步驟S405)。在不包含在for語句中的情況下(步驟S403 否),生成部121判斷所標(biāo)記的部分是否包含在let語句中(步驟S406)。在包含在let語句中的情況下(步驟S406 是),生成部121將由所標(biāo)記的變量、常數(shù)、函數(shù)和路徑構(gòu)成的部分重新進(jìn)行標(biāo)記(步驟S407)。艮口, 生成部121以所標(biāo)記的docO函數(shù)為起點(diǎn)探索路徑,對已到達(dá)的部分重新進(jìn)行標(biāo)記。生成部121將標(biāo)記部分作為DXQuery的let語句輸出(步驟S408)。在不包含在let語句中的情況下(步驟S406 否),生成部121判斷所標(biāo)記的部分是否包含在order by語句中(步驟S409)。在包含在order by語句中的情況下(步驟
5409是),跳轉(zhuǎn)到步驟S415。在不包含在order by語句中的情況下(步驟S409 否),生成部121判斷所標(biāo)記的部分是否包含在where語句中(步驟S410)。在包含在where語句中的情況下(步驟
5410是),生成部121將由所標(biāo)記的變量、常數(shù)、函數(shù)和路徑構(gòu)成的部分重新進(jìn)行標(biāo)記(步驟S411)。生成部121將標(biāo)記部分作為DXQuery的where語句輸出(步驟S412)。在不包含在where語句中的情況下(步驟S410 否),生成部121判斷所標(biāo)記的部分是否包含在return語句中(步驟S413)。在包含在return語句中的情況下(步驟S413 是),生成部121以"return<rec> {X} </rec>,,的形式輸出DXQuery的return語句(步驟 S414)。在X的部分輸出以下的(1)和(2)的形式的語句。
11
(1)<col0>{$ 變量}</col0>(2)for$啞變量in$變量return<coll>{$啞變量}</coll>在步驟S413中判斷為不包含在return語句中的情況下(步驟S413 否),跳轉(zhuǎn)到步驟S415。在步驟S415中,生成部121判斷是否存在從標(biāo)記部分能夠到達(dá)的語句,即包含標(biāo)記部分中所含的變量、常數(shù)、函數(shù)、路徑等的其他語句(步驟S415)。當(dāng)存在時(shí)(步驟 S415:是),針對該語句重復(fù)執(zhí)行步驟S403以后的處理。當(dāng)不存在時(shí)(步驟S415:否),跳轉(zhuǎn)到步驟S416。在步驟S416中,生成部121判斷是否已處理了所輸入的XQuery中出現(xiàn)的所有 doc()函數(shù)(步驟S416)。在尚未處理的情況下(步驟S416:否),對接下來出現(xiàn)的docO 函數(shù)進(jìn)行標(biāo)記,重復(fù)進(jìn)行處理(步驟S402)。在已經(jīng)處理的情況下(步驟S416 是),結(jié)束 DXQuery生成處理。接著詳細(xì)說明步驟S308的GXQuery生成處理。圖9是表示GXQuery生成處理的一個實(shí)例的流程圖。在GXQuery生成處理中,使用由DXQuery生成處理標(biāo)記的XQuery進(jìn)行處理。在GXQuery生成處理中,主要針對所標(biāo)記的部分,根據(jù)先前生成的DXQuery計(jì)算出用于提取相應(yīng)數(shù)據(jù)的for語句或let語句,以該語句進(jìn)行置換。首先,生成部121獲取所輸入的XQuery中被標(biāo)記的部分(標(biāo)記部分)(步驟S501)。 生成部121判斷所標(biāo)記的部分是否包含for語句(步驟S502)。在包含for語句的情況下 (步驟S502 是),生成部121將所標(biāo)記的部分置換為從DXQuery中提取相應(yīng)數(shù)據(jù)的for語句并輸出(步驟S503)。生成部121輸出例如如下(1)所示形式的for語句。(1)for$ 啞變量 indoc([uri])/root/recfor$ 變量 in$ 啞變量/col/*在不包含for語句的情況下(步驟S502 否),生成部121判斷所標(biāo)記的部分是否包含let語句(步驟S504)。在包含let語句的情況下(步驟S504 是),生成部121將所標(biāo)記的部分置換為從DXQuery中提取相應(yīng)數(shù)據(jù)的let語句并輸出(步驟S505)。生成部 121輸出例如如下(2)所示形式的let語句。(2)let$ 變量=for$ 啞變量 1 in
doc([uri])/root/recfor$ 啞變量 2in$ 啞變量 1/col/*return$ 啞變量 2在不包含let語句的情況下(步驟S504 否),生成部121判斷所標(biāo)記的部分是否包含order by語句(步驟S506)。在包含order by語句的情況下(步驟S506 是),生成部121原樣輸出order by語句(步驟S507)。在不包含order by語句的情況下(步驟S506 否),生成部121判斷所標(biāo)記的部分是否包含where語句(步驟S508)。在包含where語句的情況下(步驟S508 是),生成部121將所標(biāo)記的部分置換為從DXQuery中提取相應(yīng)數(shù)據(jù)的let語句并輸出(步驟S509)。 生成部121輸出例如如下(3)所示形式的let語句。(3)let$ 啞變量=in$ 變量/col/*where啞變量比較表達(dá)式在不包含where語句的情況下(步驟S508 否),生成部121判斷所標(biāo)記的部分是否包含return語句(步驟S510)。在包含return語句的情況下(步驟S510 是),生成部 121原樣輸出return語句(步驟S511)。步驟S503、步驟S505、步驟S507、步驟S509和步驟S511執(zhí)行后,或者在步驟S510 中判斷為不包含return語句的情況下(步驟S510 否),生成部121判斷是否已經(jīng)處理了所有的標(biāo)記部分(步驟S512)。在尚未全部處理的情況下(步驟S512 否),獲取一個尚未處理的標(biāo)記部分,重復(fù)進(jìn)行處理(步驟S501)。在已經(jīng)處理的情況下(步驟S512:是),結(jié)束GXQuery生成處理。接著說明DB服務(wù)器20相應(yīng)于虛擬計(jì)劃器120的DXQuery的執(zhí)行請求所執(zhí)行的 XQuery處理。此外,當(dāng)從客戶端10不是請求了分布式XQuery處理(gquery)、而是請求了 XQuery處理(query)的情況下,XQuery處理器102所執(zhí)行的XQuery處理也按照相同的步驟執(zhí)行。圖10是表示XQuery處理的一個實(shí)例的流程圖。DB服務(wù)器20針對所請求的DXQuery確保資源uri_d (步驟S601)。DB服務(wù)器20 向中央服務(wù)器100返回uri_d作為GET響應(yīng)(步驟S602)。DB服務(wù)器20利用XQuery處理器執(zhí)行DXQuery (步驟S603)。DB服務(wù)器20將作為DXQuery的執(zhí)行結(jié)果的結(jié)果XML代入資源uri_d(步驟S604)。在XQuery處理器102執(zhí)行XQuery處理的情況下,生成用于等待針對資源uri_d的結(jié)果XML的代入的請求處理線程。接著說明利用get方法獲取資源的數(shù)據(jù)的獲取處理。圖11是表示獲取處理的一個實(shí)例的流程圖。請求受理部110獲取與get方法指定的針對資源uri的數(shù)據(jù)(步驟S701)。在無法獲取的情況下,生成用于等待數(shù)據(jù)代入的請求處理線程,進(jìn)入代入事件等待狀態(tài)。一旦數(shù)據(jù)被代入資源uri,請求受理部110就將數(shù)據(jù)作為GET響應(yīng)返回給get方法的請求方(步驟 S702)。接著說明利用merge方法合并資源的數(shù)據(jù)的合并處理。圖12是表示合并處理的
13一個實(shí)例的流程圖。請求受理部110確保用于保存合并處理的結(jié)果的資源urijii(步驟S801)。請求受理部110將所確保的資源的URI、即uri_m作為GET響應(yīng)返回到請求方(步驟S802)。請求受理部110對由merge方法請求了合并的資源集合中所包含的各資源執(zhí)行合并處理(步驟 S803)。此外,圖12的“U uri_d”表示被請求了合并的資源集合。另外,所謂的合并指的是將各資源的數(shù)據(jù)串聯(lián)地連接起來。請求受理部110將合并得到的XML數(shù)據(jù)、即結(jié)果XML代入uri_m。此外,在等待其他線程等對uri_m進(jìn)行結(jié)果XML的代入的情況下,生成用于等待結(jié)果XML的代入的請求處
理線程。圖13是按照時(shí)間序列展示出客戶端10和多個服務(wù)器(中央服務(wù)器100、DB服務(wù)器20a、DB服務(wù)器20b)的相互作用的狀況的序列圖。在圖13中,假定時(shí)間進(jìn)程為從左至
右ο首先,客戶端10向中央服務(wù)器100以gquery方法請求分布式XQuery處理(步驟 S901)。中央服務(wù)器100向DB服務(wù)器20a以query方法請求XQuery處理(步驟S902)。 此時(shí)的query方法使用生成部121所生成的DXQuery作為參數(shù)。中央服務(wù)器100從DB服務(wù)器20a獲取uri_dl (步驟S903),該uri_dl表示query方法的結(jié)果XML的資源的uri。中央服務(wù)器100向DB服務(wù)器20b以query方法請求XQuery處理(步驟S904)。 此時(shí)的query方法使用生成部121所生成的DXQuery作為參數(shù)。中央服務(wù)器100從DB服務(wù)器20b獲取uri_d2 (步驟S905),該uri_d2表示query方法的結(jié)果XML的資源的uri。中央服務(wù)器100以merge方法向自身服務(wù)器(中央服務(wù)器100)請求將資源uri_ dl和資源uri_d2合并(步驟S906)。中央服務(wù)器100從自身服務(wù)器(中央服務(wù)器100)獲取表示merge方法的結(jié)果XML的資源的URI的uri_m(步驟S907)。中央服務(wù)器100以get方法向DB服務(wù)器20a請求uri_dl的結(jié)果XML的獲取(步驟S908)。中央服務(wù)器100以get方法向DB服務(wù)器20b請求uri_d2的結(jié)果XML的獲取(步驟 S909)。中央服務(wù)器100將uri_g作為對gquery方法的GET響應(yīng)返回到客戶端10 (步驟
5910)。客戶端10以get方法向中央服務(wù)器100請求uri_g的結(jié)果XML的獲取(步驟
5911)。 中央服務(wù)器100以get方法向自身服務(wù)器(中央服務(wù)器100)請求針對在步驟S907 中所獲取的uri_m的結(jié)果XML的獲取(步驟S912)。另一方面,在生成了表示中央服務(wù)器100向DB服務(wù)器20a請求的query方法的執(zhí)行結(jié)果的結(jié)果XML的情況下,DB服務(wù)器20a將作為結(jié)果XML的xml_dl代入資源uri_dl中 (步驟 S913)。同樣地,在生成了表示中央服務(wù)器100向DB服務(wù)器20b請求的query方法的執(zhí)行結(jié)果的結(jié)果XML的情況下,DB服務(wù)器20b將作為結(jié)果XML的xml_d2代入資源uri_d2中 (步驟 S914)。
在生成了以merge方法向自身服務(wù)器(中央服務(wù)器100)請求的uri_dl和uri_d2 的合并結(jié)果、即結(jié)果XML的情況下,中央服務(wù)器100將作為結(jié)果XML的xml_m代入資源uri_ m(步驟 S915)。在生成了客戶端10以get方法向中央服務(wù)器100請求的uri_g的結(jié)果XML的情況下,中央服務(wù)器100將結(jié)果XML代入uri_g (步驟S916)。此外,如圖13所示,針對所請求的query方法,DB服務(wù)器20在獲得執(zhí)行結(jié)果之前將用于通知保存執(zhí)行結(jié)果的資源的響應(yīng)返回(步驟S903、步驟S905等)。S卩,針對query 方法,DB服務(wù)器20并不是在獲得XQuery處理的執(zhí)行結(jié)果之后返回用于通知執(zhí)行結(jié)果的響應(yīng),而是必須具備在獲得執(zhí)行結(jié)果之前返回用于通知保存執(zhí)行結(jié)果的資源的響應(yīng)的功能。 當(dāng)DB服務(wù)器20不具備該功能的情況下,也可以采用在中央服務(wù)器100內(nèi)構(gòu)建能夠代替該功能的功能的方式。在圖13的右側(cè)表示出在上述序列中處理的XQuery、資源和XML的關(guān)系。S卩,在DB 服務(wù)器20a和20b中分別執(zhí)行DXQuery,執(zhí)行結(jié)果保存到資源uri_dl和資源uri_d2中。此夕卜,嵌入了由資源uri_dl和資源uri_d2合并而成的資源uri_m的GXQuery的執(zhí)行結(jié)果保存在資源uri_g中,該資源發(fā)送到客戶端10。一旦獲得了 GXQuery的執(zhí)行結(jié)果、即結(jié)果XML,該結(jié)果XML就被發(fā)送到客戶端10。接著說明檢索處理的具體實(shí)例。圖14是表示從客戶端輸入的XQuery的一個實(shí)例的圖。圖14的XQuery表示“提取C0lumn3中包含‘神奈川,的所有row”。圖15是表示圖2的DB21a中存儲的數(shù)據(jù)的一個實(shí)例的圖。如圖15所示,DB21a表示出存儲著事務(wù)所名(columnl)、住所(C0lUmn2)、都道府縣(C0lUmn3)的事務(wù)所數(shù)據(jù)庫的實(shí)例。在圖15中示例出4個row (事務(wù)所)的數(shù)據(jù)。圖16是表示根據(jù)圖14的XQuery生成的DXQuery的一個實(shí)例的圖?;窘Y(jié)構(gòu)與圖 14相同。圖16的DXQuery表示“以REC格式提取column3中包含‘神奈川,的所有row”。圖17是表示圖16的DXQuery的執(zhí)行結(jié)果、即結(jié)果XML的一個實(shí)例的圖。圖17表示出利用DXQuery從圖15所示的DB21a檢索到的結(jié)果XML(xml_dl)的實(shí)例。圖18是表示根據(jù)圖14的XQuery生成的GXQuery的一個實(shí)例的圖。圖18的 GXQuery由以下2個部分構(gòu)成。(1)讀入DXQuery的結(jié)果XML并提取各rec的部分(2)提取rec的col ?的值的部分如圖16 和圖 18 所示,GXQuery+DXQuery =所輸入的 XQuery。這里進(jìn)一步說明根據(jù)圖14的XQuery生成圖16的DXQuery和圖18的GXQuery的處理。首先,從圖14 的 XQuery 中提取 doc ()函數(shù)“doc ( "database. XML”)”(圖 8 的步驟 S402)。針對for語句,從docO函數(shù)直到“//row”,該分句的主體被標(biāo)記,因此一直標(biāo)記到 “$x,,。針對where語句,“$x”已經(jīng)被標(biāo)記了?!?X//C0lumn3”也被標(biāo)記?!吧衲未ā笔浅?shù)。因此,where語句全部被標(biāo)記。其結(jié)果,生成了如圖16所示的一個DXQuery。接著生成GXQuery。在DXQuery中,for語句和where語句被標(biāo)記,因此,從DXQuery中提取相應(yīng)數(shù)據(jù)的for語句就變成了如圖18所示的樣子。圖19是表示圖18的GXQuery的執(zhí)行結(jié)果、即結(jié)果XML的一個實(shí)例的圖。如圖19 所示,作為GXQuery執(zhí)行結(jié)果的結(jié)果XML被保存在資源xml_g中。下面以比圖14更復(fù)雜的XQuery為例進(jìn)一步說明。圖20是表示從客戶端輸入的 XQuery的另一個實(shí)例的圖。圖20的XQuery表示“按照每個row的column3對row進(jìn)行合計(jì)”。例如,針對圖15這樣的數(shù)據(jù),其意味著“以都道府縣為單位計(jì)算事務(wù)所的總數(shù)”。這里對幾個內(nèi)部函數(shù)加以說明。(1) distinct-values 從所輸入的序列中提取值不相同的元素序列。(2) count 返回所輸入的序列的元素?cái)?shù)。圖21是表示針對圖20的DXQuery生成的示意圖。(1)探索doc()函數(shù)以下的路徑表達(dá)式。(2)探索相同docO函數(shù)以下的路徑表達(dá)式相互之間的比較表達(dá)式。按照這種遍歷規(guī)則,就會生成2個DXQuery (DXQueryl、DXQuery2)。圖22是表示DXQueryl的一個實(shí)例的圖。圖23是表示圖22的DXQueryl的執(zhí)行結(jié)果、即結(jié)果XML的一個實(shí)例的圖。圖24是表示DXQuery2的一個實(shí)例的圖。圖25是表示圖24的DXQUery2的執(zhí)行結(jié)果、即結(jié)果XML的一個實(shí)例的圖。圖26是表示根據(jù)圖20的 XQuery生成的GXQuery的一個實(shí)例的圖。如圖22、圖 24 和圖 26 所示,GXQuery+DXQuery (DXQueryl、DXQuery2)=所輸入的 XQuery。圖27是表示圖26的GXQuery的執(zhí)行結(jié)果、即結(jié)果XML的一個實(shí)例的圖。如圖27 所示,“以都道府縣為單位計(jì)算事務(wù)所的總數(shù)”的結(jié)果就作為結(jié)果XML被得到。按照這種方式,在第一實(shí)施方式的檢索裝置中,不使用XRPC就能夠?qū)崿F(xiàn)分布式 XQuery處理。因此,可以得到下述效果。(I)XQuery透明用戶不需要在XQuery內(nèi)顯式記述特殊的語言擴(kuò)展。(2)異質(zhì)綜合在通常的網(wǎng)絡(luò)和通信協(xié)議基礎(chǔ)上,RDBMS.ffeb服務(wù)等異質(zhì)數(shù)據(jù)庫也能夠連接起來構(gòu)成虛擬XML數(shù)據(jù)庫。利用有限的定義,地圖信息服務(wù)、天氣信息服務(wù)等不支持XQuery的非XML-DBMS的Web服務(wù)也可以成為虛擬XML數(shù)據(jù)庫的構(gòu)成元素。(3)高速性即使XQuery中含有for循環(huán),網(wǎng)絡(luò)上也不會產(chǎn)生與該循環(huán)次數(shù)相當(dāng)?shù)南⒘髁俊2粫馬PC之類的函數(shù)執(zhí)行那樣串行化,而是能夠由多個服務(wù)器并行處理。在通常的分布式數(shù)據(jù)庫中進(jìn)行結(jié)合運(yùn)算時(shí),作為使通信負(fù)載減少到最低程度的方法可以簡單地使用半聯(lián)接法(semi-joins)。第二實(shí)施方式的檢索裝置對DXQuery進(jìn)行變換(泛化),以滿足DB服務(wù)器的檢索能力(查詢處理能力),再根據(jù)變換后的DXQuery的檢索結(jié)果,生成變換前的DXQuery的檢索結(jié)果。由此能夠?qū)崿F(xiàn)與DB服務(wù)器的查詢處理能力相適應(yīng)的高精度檢索。圖28是表示第二實(shí)施方式中的中央服務(wù)器200的結(jié)構(gòu)實(shí)例的框圖。中央服務(wù)器 200包括請求受理部110、虛擬計(jì)劃器220、XQuery處理器102、資源分配部103、服務(wù)器通知檢測部104和泛化處理器230。在第二實(shí)施方式中增加了虛擬計(jì)劃器220的功能和泛化處理器230,這一點(diǎn)與第一實(shí)施方式不同。其他的結(jié)構(gòu)和功能與第一實(shí)施方式的中央服務(wù)器100的框圖、即圖4相同,因此標(biāo)注相同標(biāo)號,這里省略其說明。
虛擬計(jì)劃器220向泛化處理器230請求所生成的DXQuery的泛化,并利用發(fā)送部 222將泛化處理后的DXQuery (以下稱為DXQuery’ )發(fā)送到DB服務(wù)器20,這一點(diǎn)與第一實(shí)施方式的虛擬計(jì)劃器120不同。泛化處理器230包括變換部231和生成部232 (第二生成部)。變換部231將虛擬計(jì)劃器220的生成部121所生成的DXQuery變換為匹配于DB服務(wù)器20的查詢處理能力而泛化了的DXQuery’。生成部232生成驗(yàn)證DXQuery’的檢索結(jié)果的XQuery、即VXQuery (生成請求)。VXQuery是以DXQuery’的檢索結(jié)果產(chǎn)生的、驗(yàn)證DB服務(wù)器20的查詢處理能力的不足之處并對不足之處進(jìn)行補(bǔ)充從而使所生成的檢索結(jié)果與使用變換前的DXQuery的情況下相同的XQuery。圖29是表示利用虛擬計(jì)劃器220和泛化處理器230執(zhí)行的分布式XQuery處理的一個實(shí)例的流程圖。在本實(shí)施方式的分布式XQuery處理中生成對將DXQuery泛化后的 DXQuery,、VXQuery 和 VXQuery 的結(jié)果進(jìn)行綜合的 GXQuery。在步驟S1001至步驟S1003中執(zhí)行與第一實(shí)施方式的中央服務(wù)器100中的步驟 S301至步驟S303相同的處理,因此省略其說明。在步驟S1004中執(zhí)行根據(jù)DXQuery生成DXQuery’和VXQuery的泛化處理。在后文敘述泛化處理的詳細(xì)情況。接著,虛擬計(jì)劃器220的發(fā)送部222向所選擇的DB服務(wù)器20發(fā)送泛化處理后的 DXQuery'的執(zhí)行請求(步驟S1005)。接收到執(zhí)行請求的DB服務(wù)器20將保存著DXQuery’ 的執(zhí)行結(jié)果(結(jié)果XML)的資源的URI(uri_d)發(fā)送到中央服務(wù)器200。由此,虛擬計(jì)劃器 220獲取了保存著結(jié)果XML的資源的URI,即uri_d。接著,虛擬計(jì)劃器220利用所獲取的uri_d改寫VXQuery的doc ()函數(shù)(步驟 S1006)。虛擬計(jì)劃器220對自身服務(wù)器(中央服務(wù)器200)指定query方法,請求執(zhí)行 VXQuery (步驟S1007),獲取保存著VXQuery的結(jié)果XML的uri_v。步驟S1008與圖7的步驟S305相同,因此省略其說明。步驟S1009使用資源uri_ ν而不是資源uri_d,這一點(diǎn)與圖7的步驟S306不同。S卩,虛擬計(jì)劃器220對自身服務(wù)器 (中央服務(wù)器200)請求merge方法(步驟S1009),該merge方法用于合并分別保存在多個資源uri_v中的數(shù)據(jù)。在步驟S1010至步驟S1016中執(zhí)行與第一實(shí)施方式的中央服務(wù)器100中的步驟 S307至步驟S313相同的處理,因此省略其說明。接著說明步驟S1004的泛化處理。圖30是表示泛化處理的一個實(shí)例的流程圖。首先,泛化處理器230從各DB服務(wù)器20獲取分布式服務(wù)器定義(步驟Sl 101)。所謂的分布式服務(wù)器定義指的是表示DB服務(wù)器的查詢處理能力的信息。圖31是表示分布式服務(wù)器定義的一個實(shí)例的圖?!癝ERVICE http://example.com/ ? key = % 1”表示能夠處理賦予“key”的參數(shù)?!癤Queryf0r$Xin ”表示賦予“key”的參數(shù)置換為“contains ($x, "% 1,,),,。返回圖30,泛化處理器230將所選擇的DXQuery和分布式服務(wù)器定義的XQuery模式進(jìn)行對照。在不吻合的情況下(步驟S1103:否),變換部231對DXQuery進(jìn)行泛化(步驟S1104),然后返回步驟S1102而重復(fù)處理。 在DXQuery的泛化中,變換部231執(zhí)行例如以下處理⑴路徑的省略;(2) OR條件的展開;(3)將標(biāo)簽名變換為“*”(XML數(shù)據(jù)中所包含的元素名稱的變換)等。在DXQuery和分布式服務(wù)器定義的XQuery模式吻合的情況下(步驟S1103 是), 變換部231將泛化后DXQuery (在未經(jīng)泛化的情況下則是所選擇的DXQuery)作為DXQuery’ 輸出(步驟Sl 105)。接著,生成部232根據(jù)原來的DXQuery生成VXQuery (步驟Sl 106),結(jié)束泛化處理。圖32是表示在輸入了圖14的XQuery和圖31的分布式服務(wù)器定義時(shí)利用泛化處理所輸出的DXQuery’的一個實(shí)例的圖。與圖16的DXQuery進(jìn)行比較即可發(fā)現(xiàn),圖32的 DXQuery ’省略了 “row”這一標(biāo)簽名和“$x//column3”這一路徑。這樣,通過對DXQuery重復(fù)泛化操作而生成了與DB服務(wù)器20的查詢處理能力相吻合的DXQuery’。圖33是表示在輸入了圖14的XQuery和圖31的分布式服務(wù)器定義時(shí)經(jīng)過泛化處理后所輸出的VXQuery的一個實(shí)例的圖。圖34是表示在第二實(shí)施方式中所處理的XQuery、資源和XML的關(guān)系的一個實(shí)例的圖。在圖34中示出的是僅針對發(fā)送給DB服務(wù)器20b的DXQuery執(zhí)行了泛化處理的實(shí)例。 在DB服務(wù)器20a和20b中分別執(zhí)行DXQuery和DXQuery,,執(zhí)行結(jié)果保存到資源uri_dl和資源uri_d2中。對資源uri_d2執(zhí)行VXQuery,輸出執(zhí)行結(jié)果uri_v2。嵌入了由資源uri_ dl和資源uri_v2合并而成的資源uri_m的GXQuery的執(zhí)行結(jié)果保存到資源uri_g中,該資源發(fā)送到客戶端10。一旦獲得了 GXQuery的執(zhí)行結(jié)果、即結(jié)果XML,該結(jié)果XML就被發(fā)送到客戶端10。這里進(jìn)一步說明根據(jù)圖14的XQuery和圖31的分布式服務(wù)器定義生成圖32的 DXQuery,的過程。在圖31的分布式服務(wù)器定義中記述著“該DB服務(wù)器在獲取數(shù)據(jù)時(shí)只能使用關(guān)鍵字(key)進(jìn)行檢索(contains) ”這一與DB服務(wù)器20的查詢處理能力相關(guān)的聲明。泛化處理器230對圖14的XQuery和圖31的分布式服務(wù)器定義進(jìn)行比較,列舉出語法上的差異(圖30的步驟S1102)。泛化處理器230組合使用例如Yacc&Lex等語句分析和語法分析工具在存儲器中展開XQuery的語法樹,對2個存儲器中的語法樹進(jìn)行比較。其結(jié)果是,泛化處理器230能夠檢測出“doc () //row"和“doc () /*”、以及“$x// C0lUmn3”和“$x”的部分存在差異。這2個差異與XQuery的路徑有關(guān)。因此,變換部231 應(yīng)用“路徑的省略”這一泛化操作。泛化操作可以使用例如基于規(guī)則庫系統(tǒng)技術(shù)來實(shí)現(xiàn)。 艮口,利用由“if存在路徑上的差異then省略路徑”這樣的if語句和then語句這2部分所構(gòu)成的規(guī)則來表達(dá)泛化操作,使用推理機(jī)重復(fù)應(yīng)用這種規(guī)則集合,直到出現(xiàn)停止條件為止。 在這種情況下的停止條件指的是不再有DXQuery與分布式服務(wù)器定義的差異。例如,就圖14的XQuery而言,只要執(zhí)行了(1)從“doc () //row"到“doc () /*”的路徑省略、(2)從“$X//C0lUmn3”到“$x”的路徑省略這2個泛化操作,就能夠滿足停止條件。其后,以“return<rec>{. · . }</rec>”的形式輸出return語句,即可生成圖32的 DXQuery。接著進(jìn)一步說明根據(jù)圖14的XQuery和圖31的分布式服務(wù)器定義生成圖33的 VXQuery的過程。作為VXQuery生成對在上述泛化操作中被泛化的差異部分“ doc () //row,,和
18“ doc () /*,,以及 “ $x//C0lumn3 ” 和 “ $x” 進(jìn)行檢查的特殊的 XQuery。例如,生成部232將包含差異部分的語句“for $x in doc ()//row”和“where contains ($X//C0lumn3,“神奈川”)”嵌入到如下(A)所示的成為基礎(chǔ)的XQuery中,由此生成VXQuery。這時(shí),將根據(jù)需要嵌入的差異部分內(nèi)的變量改寫為成為基礎(chǔ)的XQuery內(nèi)的變量??梢允孪仍O(shè)定好作為基礎(chǔ)的XQuery。(A)For$0_in doc([uri_dl])/recFor$_l in$_0/col0/*return<rec>{<col0>{$x}</col0>}</rec>嵌入后的VXQuery如下(B)所示。(B)For$0_in doc([uri_dl])/recfor$_l in $_0/col0/*for$x in $_l//rowwhere contains ($x//column3,“神奈川”)return<rec>{<col0>{$x}</col0>}</rec>在上述VXQuery中,第三行和第四行被嵌入。另外,第三行的“$x”被置換為“$_1”。如上述所說明,根據(jù)第一和第二實(shí)施方式,無需使用XRPC就能夠?qū)崿F(xiàn)XQuery透明的分布式XQuery處理。接著,使用圖35說明第一或第二實(shí)施方式的檢索裝置(中央服務(wù)器)的硬件結(jié)構(gòu)。圖35是表示第一或第二實(shí)施方式的檢索裝置的硬件結(jié)構(gòu)的說明圖。第一或第二實(shí)施方式的檢索裝置包括CPU(Central Processing Unit:中央處理器)51 等控制裝置;ROM (Read Only Memory 只讀存儲器)52 或 RAM (Random Access Memory 隨機(jī)存取存儲器)53等存儲裝置;連接到網(wǎng)絡(luò)上進(jìn)行通信的通信I/F54 ; HDD (Hard Disk Drive 硬盤驅(qū)動器)、⑶(Compact Disc)驅(qū)動器裝置等外部存儲裝置;顯示器裝置等顯示裝置;鍵盤或鼠標(biāo)等輸入裝置;和連接各部分的總線61 ;其表現(xiàn)為使用了通常的計(jì)算機(jī)的硬件結(jié)構(gòu)。在第一或第二實(shí)施方式的檢索裝置中執(zhí)行的檢索程序被以可安裝形式或可執(zhí)行形式的文件記錄到 CD-ROM (Compact Disk Read Only Memory)、軟盤(FD)、CD-R (Compact Disk Recordable)、DVD(Digital Versatile Disk)等計(jì)算機(jī)可讀的記錄介質(zhì)中,以計(jì)算機(jī)程序產(chǎn)品的形式提供給用戶。另外,也可以將在第一或第二實(shí)施方式的檢索裝置中執(zhí)行的檢索程序保存到與因特網(wǎng)等網(wǎng)絡(luò)相連接的計(jì)算機(jī)上,通過經(jīng)由網(wǎng)絡(luò)下載提供給用戶。另外,也可以將在第一或第
19二實(shí)施方式的檢索裝置中執(zhí)行的檢索程序經(jīng)由因特網(wǎng)等網(wǎng)絡(luò)提供或發(fā)布給用戶。另外,也可以將第一或第二實(shí)施方式的檢索程序預(yù)先嵌入到ROM等之中提供給用戶。在第一或第二實(shí)施方式的檢索裝置中執(zhí)行的檢索程序具有模塊結(jié)構(gòu),這些模塊包含上述各部分(請求受理部、虛擬計(jì)劃器、XQuery處理器、資源分配部、服務(wù)器通知檢測部);作為實(shí)際的硬件,CPU51 (處理器)從上述存儲介質(zhì)讀取檢索程序并執(zhí)行,由此將上述各部分加載到主存儲裝置中,在主存儲裝置中生成上述各部分。以上說明了本發(fā)明的若干實(shí)施方式,但這些實(shí)施方式是作為實(shí)例而呈現(xiàn)的,其意圖并不是為了限定發(fā)明的范圍。這些新實(shí)施方式可以通過其他的各種各樣的方式加以實(shí)施,在不脫離發(fā)明主旨的范圍內(nèi)能夠作出各種各樣的省略、替換、變更。這些實(shí)施方式或其變形既包含在發(fā)明的范圍或主旨內(nèi),也包含在權(quán)力要求書中記載的發(fā)明及其均等的范圍內(nèi)。
權(quán)利要求
1.一種檢索裝置,由客戶端和存儲數(shù)據(jù)的多個服務(wù)器經(jīng)由網(wǎng)絡(luò)連接而成,其特征在于, 具備第一受理部,從所述客戶端受理所述數(shù)據(jù)的XQuery形式的檢索請求; 第一生成部,根據(jù)所述檢索請求生成分別對多個所述服務(wù)器請求所述數(shù)據(jù)的檢索的XQuery形式的分布式檢索請求、以及對所述分布式檢索請求的檢索結(jié)果進(jìn)行綜合的 XQuery形式的綜合請求;第一發(fā)送部,將所述分布式檢索請求發(fā)送到多個所述服務(wù)器; 第二發(fā)送部,將所述綜合請求的執(zhí)行結(jié)果的識別信息發(fā)送到所述客戶端; 第二受理部,從所述客戶端受理由所述識別信息所識別的執(zhí)行結(jié)果的獲取請求; 接收部,從多個所述服務(wù)器接收針對所述分布式檢索請求的XML形式的檢索結(jié)果; 執(zhí)行部,對分別從多個所述服務(wù)器接收到的所述檢索結(jié)果執(zhí)行所述綜合請求;以及第三發(fā)送部,對發(fā)送了所述獲取請求的所述客戶端發(fā)送所述綜合請求的執(zhí)行結(jié)果。
2.如權(quán)利要求1所述的檢索裝置,其特征在于,還具備分配部,確保用來保存所述綜合請求的執(zhí)行結(jié)果的區(qū)域并將所述區(qū)域的識別信息分配給所述執(zhí)行結(jié)果;所述第二發(fā)送部將所分配的所述識別信息發(fā)送給所述客戶端; 所述執(zhí)行部將所述綜合請求的執(zhí)行結(jié)果保存到所述區(qū)域中;所述第三發(fā)送部向發(fā)送了所述獲取請求的所述客戶端發(fā)送所述區(qū)域中保存的所述執(zhí)行結(jié)果。
3.如權(quán)利要求1所述的檢索裝置,其特征在于,還具備變換部,將所述分布式檢索請求變換為滿足所述服務(wù)器的檢索能力的XQuery形式的檢索請求;以及第二生成部,根據(jù)變換后的檢索請求的檢索結(jié)果生成XQuery形式的檢索請求,該 XQuery形式的檢索請求用于生成所述分布式檢索的檢索結(jié)果; 所述第一發(fā)送部將變換后的檢索請求發(fā)送到所述服務(wù)器; 所述接收部從所述服務(wù)器接收針對變換后的檢索請求的檢索結(jié)果; 所述執(zhí)行部還對所接收到的檢索結(jié)果執(zhí)行所述生成請求,并對所述生成請求的執(zhí)行結(jié)果執(zhí)行所述綜合請求。
4.如權(quán)利要求3所述的檢索裝置,其特征在于,所述變換部通過所述分布式檢索請求中包含的路徑的省略、OR條件的展開、以及所述數(shù)據(jù)中包含的元素名稱的變換中的至少1個,將所述分布式檢索請求變換為滿足所述服務(wù)器的檢索能力的檢索請求。
5.如權(quán)利要求1所述的檢索裝置,其特征在于,其還具備檢測部,用于檢測與所述網(wǎng)絡(luò)連接的所述服務(wù)器; 所述第一發(fā)送部將所述分布式檢索請求發(fā)送到檢測到的所述服務(wù)器。
6.一種檢索方法,在由客戶端和存儲數(shù)據(jù)的多個服務(wù)器經(jīng)由網(wǎng)絡(luò)連接而成的檢索裝置中執(zhí)行,其特征在于,從所述客戶端受理所述數(shù)據(jù)的XQuery形式的檢索請求;根據(jù)所述檢索請求生成分別對多個所述服務(wù)器請求所述數(shù)據(jù)的檢索的XQuery形式的分布式檢索請求、以及對所述分布式檢索請求的檢索結(jié)果進(jìn)行綜合的XQuery形式的綜合請求;將所述分布式檢索請求發(fā)送到多個所述服務(wù)器; 將所述綜合請求的執(zhí)行結(jié)果的識別信息發(fā)送到所述客戶端; 從所述客戶端受理由所述識別信息識別的執(zhí)行結(jié)果的獲取請求; 從多個所述服務(wù)器接收針對所述分布式檢索請求的XML形式的檢索結(jié)果; 對分別從多個所述服務(wù)器接收到的所述檢索結(jié)果執(zhí)行所述綜合請求; 對發(fā)送了所述獲取請求的所述客戶端發(fā)送所述綜合請求的執(zhí)行結(jié)果。
全文摘要
一種檢索裝置和檢索方法。檢索裝置包括第一受理部、第一生成部、第一發(fā)送部、第二發(fā)送部、第二受理部、接收部、執(zhí)行部和第三發(fā)送部。第一受理部從客戶端受理檢索請求。第一生成部根據(jù)檢索請求生成對服務(wù)器請求檢索的分布式檢索請求、以及對分布式檢索請求的檢索結(jié)果進(jìn)行綜合的綜合請求。第一發(fā)送部向服務(wù)器發(fā)送分布式檢索請求。第二發(fā)送部向客戶端發(fā)送綜合請求的執(zhí)行結(jié)果的識別信息。第二受理部從客戶端受理由識別信息所識別的執(zhí)行結(jié)果的獲取請求。接收部從服務(wù)器接收針對分布式檢索請求的檢索結(jié)果。執(zhí)行部對接收到的檢索結(jié)果執(zhí)行綜合請求。第三發(fā)送部向發(fā)出了獲取請求的客戶端發(fā)送綜合請求的執(zhí)行結(jié)果。
文檔編號G06F17/30GK102456070SQ20111024765
公開日2012年5月16日 申請日期2011年8月24日 優(yōu)先權(quán)日2010年10月25日
發(fā)明者服部雅一 申請人:東芝解決方案株式會社, 株式會社東芝