肖彭燕
(上海海洋大學(xué)信息學(xué)院,上海 201306)
隨著計算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,特別是SOA[1]技術(shù)的出現(xiàn),為web服務(wù)奠定了實現(xiàn)基礎(chǔ)。近年來,魚類分類的信息化工作也得到了很大的發(fā)展。由于單個服務(wù)提供的功能有限,組合已有的服務(wù)可以滿足用戶更多的需求。為了有效共享,重用這些服務(wù),需要一種機(jī)器能理解的知識表達(dá)方法。本體能夠幫助解決這些知識表達(dá)的問題,利用知識共享,信息集成,語義Web[2]和Web服務(wù)等技術(shù)可以有效地集成魚類分類信息。
為此,筆者在領(lǐng)域本體的背景下,基于魚類分類的一個例子,提出了一個高效的服務(wù)組合算法。該算法在搜索過程中,引入啟發(fā)式函數(shù),該函數(shù)使服務(wù)組合搜索過程可以根據(jù)已有的web服務(wù)經(jīng)驗進(jìn)行動態(tài)調(diào)整,從而能夠更好地適應(yīng)網(wǎng)絡(luò)不穩(wěn)定性。由于評判服務(wù)組合方法好壞的標(biāo)準(zhǔn)不僅要求組合的服務(wù)在功能上滿足服務(wù)請求,而且還要求服務(wù)組合效率能得到保證,故設(shè)置一個滿意度閥值,即只要找到一個局部最優(yōu)解,在功能上滿足服務(wù)請求,即可作為搜索結(jié)果。這大大減少了服務(wù)搜索范圍,降低了服務(wù)組合時間,提高了服務(wù)組合效率。
在語義Web中,各種資源被賦予了明確的語義信息,計算機(jī)可以分辨和識別這些語義信息,并對其自動進(jìn)行解釋、交換和處理。語義Web的體系結(jié)構(gòu)一共有7層,見圖1。
圖1 語義Web體系結(jié)構(gòu)
語義Web需要能夠?qū)eb文檔中的術(shù)語含義進(jìn)行形式化描述。本體作為表達(dá)知識的共享概念模型,已日漸成為知識工程,知識管理,智能信息集成,信息檢索等多個領(lǐng)域的重要組成部分。收集各種魚類信息[3],如魚類名稱、生態(tài)照片、生態(tài)影片、瀕危魚種、魚類分布、魚類標(biāo)本、魚類電子書、疾病防治診斷等資料,對獲得的信息進(jìn)行詳細(xì)分析,從中提取知識,通過多種知識表示元素將這些概念之間的關(guān)聯(lián)表達(dá)出來,這些知識表示元素就是元本體,分為概念、屬性、關(guān)系、函數(shù)等。為了讓機(jī)器理解上述的概念和關(guān)系,需對這些魚類信息進(jìn)行形式化描述,即采用具體的本體描述語言來編寫本體,OWL[4]本體描述語言作為W3C的官方標(biāo)準(zhǔn)語言,用來描述Web文檔和應(yīng)用中內(nèi)在的類和關(guān)系。用OWL語言描述漁業(yè)領(lǐng)域本體,生成OWL格式的文件節(jié)選見圖2。
圖2 魚類信息OWL格式文件節(jié)選
對于OWL格式的文件,可利用Jena提供的API進(jìn)行解析,轉(zhuǎn)換成相應(yīng)的Java類,并生成類的屬性與方法,進(jìn)而可使用Java編程,處理用戶需求。
OWL把一個Web服務(wù)認(rèn)為是一個過程,將服務(wù)之間的匹配計算轉(zhuǎn)換為輸入、輸出之間擴(kuò)展語義匹配。因此,給出服務(wù)的定義如下:(1)一個Web服務(wù)可以表示為 WS(In,Out),其中 In={I1,I2,…,Ii}是服務(wù)的輸入?yún)?shù)的集合,Out={O1,O2,…,On}是服務(wù)的輸出參數(shù)的集合;(2)一個服務(wù)組合是滿足服務(wù)請求的一個服務(wù)序列,表示為〈WS1,WS2,…,WSn〉。
基于語義的Web服務(wù)動態(tài)組合過程以基于領(lǐng)域本體的服務(wù)間概念相似度為基礎(chǔ),找出與服務(wù)請求中有語義關(guān)聯(lián)的后繼服務(wù),繼續(xù)找出該后繼服務(wù)的后繼服務(wù),依此類推,直到某個后繼服務(wù)是目標(biāo)服務(wù),從而得到服務(wù)序列,該序列就是服務(wù)組合的結(jié)果。由于一個服務(wù)可能存在多個語義相關(guān)的后繼服務(wù),因此這些語義相關(guān)的服務(wù)就構(gòu)成了一個服務(wù)組合圖。以魚類分類系統(tǒng)為例說明這一服務(wù)組合過程:假設(shè)魚類分類系統(tǒng)中存在各種Web服務(wù),如魚類名稱服務(wù)、魚類分布服務(wù)、魚類生態(tài)影片服務(wù)、魚類疾病診斷服務(wù)、魚類經(jīng)濟(jì)價值服務(wù)等,為了完成用戶各種需求,需要組合這些服務(wù):當(dāng)用戶輸入魚類名稱,要求輸出的結(jié)果為其經(jīng)濟(jì)價值,通過一系列的服務(wù)組合,即可得到目標(biāo)服務(wù);如果用戶的需求發(fā)生改變,要求輸入魚類名稱,輸出治療方案,只需修改輸入輸出參數(shù)即可,不必重新編寫代碼來滿足用戶需求。過程描述見圖3。
圖3 魚類服務(wù)組合圖
圖3中,方框表示輸入、輸出參數(shù),橢圓表示服務(wù),有向邊相連的兩個服務(wù)表示兩者之間存在語義關(guān)聯(lián)。
代價樹深度優(yōu)先搜索的思想描述如下,從剛剛擴(kuò)展的節(jié)點(diǎn)之后繼節(jié)點(diǎn)中選擇一個代價最大的節(jié)點(diǎn)為下一個搜索目標(biāo),并進(jìn)行擴(kuò)展或判斷。為了提高響應(yīng)時間,在服務(wù)組合過程中,對在此算法的基礎(chǔ)上進(jìn)行改進(jìn),設(shè)置一個滿意度閾值,只要滿足一定條件(如用戶滿意度),即可作為搜索結(jié)果。為了進(jìn)一步提高組合的效率,在搜索過程中引入啟發(fā)式函數(shù) h(x)。
由于網(wǎng)絡(luò)的不穩(wěn)定性,一個服務(wù)可能由于各種原因調(diào)用不成功,定義Suc(w)表示該web服務(wù)執(zhí)行的成功次數(shù),F(xiàn)ail(w)表示該web服務(wù)執(zhí)行失敗的次數(shù)。h(x)的初始值為 1|x=0,h(x)的計算見式(1)、式(2)。
其中,式(1)表示第i次調(diào)用該web服務(wù)后,第i+1次成功執(zhí)行情況下的h(x)的值;式(2)表示第i次調(diào)用該web服務(wù)后,第i+1次執(zhí)行失敗情況下的h(x)的值。
從定義可知,對于某個web服務(wù),調(diào)用成功的次數(shù)越多,h(x)的值越大,反之,若調(diào)用失敗的次數(shù)越多,則h(x)值越小??紤]到web服務(wù)執(zhí)行的頻率,如一個web服務(wù)執(zhí)行成功50次和執(zhí)行失敗51次之間的差距是很小的,因此h(x)的調(diào)整量呈指數(shù)級的衰減,h(x)的取值范圍在0到2之間。
條件:設(shè)置棧route、search,棧元素數(shù)據(jù)類型為字符串,分別用來存儲解路徑和搜索路徑。為方便起見,在每個服務(wù)中添加布爾型標(biāo)記flag,flag為false時表示該弧線未被搜索到,否則表示該弧線已被搜索過,flag的使用防止了搜索時重復(fù)走已經(jīng)走過的路。初始化滿意度函數(shù) U(s)=1,Success(w)=0,F(xiàn)ail(w)=0。輸入:服務(wù)請求WSr=(Ir,Or),服務(wù)組合滿意度ζ。輸出:服務(wù)組合序列〈WS1,WS2,…,WSn〉。
算法執(zhí)行步驟如下。(1)初始化棧route=null。(2)判斷是否有與服務(wù)請求輸入?yún)?shù)相匹配的服務(wù),即是否有弧相連接(是否有后繼服務(wù))。若有,則按從小到大的順序依次存入earch[WSr],并且令flag=0。(3)取出首元素 WSi=search[WSr]。若 WSi為空,則 goto 6;否則,若 WSi調(diào)用成功,則 Success(w)++,調(diào) 整 h(x),入棧 router,令 flag=1,、U(s)+=weight﹡h(x),并重新調(diào)整 search[WSr]的順序,再分別把WSi所有的后繼服務(wù)的權(quán)值及更新后的啟發(fā)式函數(shù)h(x)值之和按從小到大的順序依次入棧search[WSi];若WSi調(diào)用不成功,則Fail(w)++,調(diào)整h(x),進(jìn)而重新調(diào)整 search[WSr]的順序。(4)判斷服務(wù)WSi是否是目標(biāo)服務(wù)狀態(tài),若是目標(biāo)服務(wù),則判斷 U(s)是否≥ξ,若成立,則 goto 6,否則 goto 5;若不是目標(biāo)服務(wù),goto 2。(5)刪除棧router中的首元素,并從棧search[gettop(router)]中讀取第一個flag=0的元素WSj,若WSj為null,則繼續(xù)刪除棧router中首元素,并從相應(yīng)的首元素的棧數(shù)組中搜索第一個flag=0的元素WSk,直到WSk不為null,將 WSk 入棧 router,goto 2。(6)若 router為 null,則服務(wù)組合失??;若router不為null,則服務(wù)組合成功,遍歷棧router中的服務(wù)即可。
實驗環(huán)境部署在一臺CPU為Intel(R)Pentium(R)Dual T2410@2.00GHz、內(nèi)存為2.00GB的PC機(jī)上,操作系統(tǒng)為Windows XP,開發(fā)工具為E-clipse,開發(fā)語言為Java,OWL解析工具為Jena提供的API。9個數(shù)據(jù)集的服務(wù)數(shù)量分別為500、700、900、1 100、1 300、1 500、1 700、1 900、2 100,取平均組合時間作為結(jié)果。將本算法與另一種啟發(fā)式的web service組合算法(BF*[6])以及簡單的遍歷方式(simple)對比,進(jìn)行算法性能的評估,得到的實驗結(jié)果如圖4所示。
圖4 本文算法與BF*,simple算法服務(wù)組合效率比較
由圖4可以看出,就時間效率而言,研究采用的算法比BF*、simple都要好。BF*算法的性能變化波動較大,這與其啟發(fā)式規(guī)則有關(guān),而研究采用的算法,隨著web服務(wù)數(shù)量的增長,曲線緩慢上升,服務(wù)組合時間的增長幅度相對較小。
通過實驗分析,可以看出研究采用的算法具有以下的優(yōu)點(diǎn):(1)語義性;(2)能在保證組合質(zhì)量的前提下,高效的進(jìn)行服務(wù)組合;(3)動態(tài)適應(yīng)性,每次服務(wù)組合過程后,通過對相應(yīng)的路徑的啟發(fā)式函數(shù)值進(jìn)行更新,為下次服務(wù)選擇提供依據(jù)。
通過對魚類信息的Web服務(wù)組合,可以滿足用戶各種各樣的需求,而不用重新編寫代碼來實現(xiàn),提高了系統(tǒng)的效率。由于現(xiàn)有的服務(wù)標(biāo)準(zhǔn)和協(xié)議僅限于語法的層次,沒有語義功能,所以研究在基于領(lǐng)域本體的背景下,生成了一個服務(wù)組合圖。基于該圖,在搜索的過程中,采用代價樹的深度優(yōu)先搜索方式,并引入啟發(fā)式函數(shù),使其在搜索過程中根據(jù)已有的web服務(wù)組合經(jīng)驗,淘汰較差的web services,提高了系統(tǒng)的自適應(yīng)性。下一步將重點(diǎn)研究更好的啟發(fā)式函數(shù)計算方法,充分利用服務(wù)組合,實現(xiàn)基于SOA技術(shù)的魚類分類信息系統(tǒng)構(gòu)建。
[1] 邢少敏,周伯生.SOA研究進(jìn)展[J].計算機(jī)科學(xué),2008,35(9):13-20.
[2] Tim Berners-Lee,James Hendler,Ora Lassila.The Semantic Web[J].Scientific American(S0036-8733),2001,284(5):34-43.
[3] 成慶泰,鄭葆珊.中國魚類系統(tǒng)檢索 [M].北京:科學(xué)出版社,1987.
[4] Smith M K,Welty C,McGuinness DL.OWL Web ontology guide[EB/OL].http://www.w3.org/TR/owl-guide/,2004.
[5] 潘謙紅,王 炬.基于屬性論的文本相似度計算[J].計算機(jī)學(xué)報,1999,22(6):651-655.
[6] 方賢進(jìn),李龍澍.多模式匹配算法的優(yōu)化研究 [J].軟件時空,2007,(03):211.