語(yǔ)義Web服務(wù)學(xué)習之路 by
51cto推薦博客 - ziapple2007-11-17 00:08:39
1---OWL Web本體語(yǔ)言描述 [
http://ziapple.blog.51cto.com/271886/50891 ] OWL全稱(chēng)Ontology Web Language,是一種Web本體建模語(yǔ)言,她是在RDF基礎之上發(fā)展起來(lái)的,由于RDF在語(yǔ)義描述上存在缺陷,所以OWL應運而生,OWL不是語(yǔ)義的終結,語(yǔ)義的復雜化使得不斷有新的標準推出,實(shí)際上已經(jīng)出現了替代OWL的版本,由于OWL是W3C推薦標準,并且與RDF有天然的聯(lián)系,所以我們簡(jiǎn)單學(xué)習一下OWL。
具體語(yǔ)法可以參考
http://www.transwiki.org/tw/owloverview.htm,如果你覺(jué)得繁體版看著(zhù)別扭的化,推薦
http://w3school.com.cn/rdf/rdf_owl.asp,該網(wǎng)站翻譯比較全,而且還有實(shí)例。
如果你要學(xué)習Ontology的話(huà),OWL是必不可少的環(huán)節,但OWL不是學(xué)習中的難點(diǎn),如果你要對Ontology實(shí)際運用有個(gè)整體了解的話(huà),可以跟隨我學(xué)習下面的章節,我們姑且認為你已經(jīng)學(xué)會(huì )了OWL的建模(其實(shí)我也不會(huì ),回頭再學(xué)也不遲,關(guān)鍵是整體把握)。
2---OWL的應用 [
http://ziapple.blog.51cto.com/271886/51873 ]
前面假設你已經(jīng)學(xué)會(huì )了OWL,本章主要講述OWL具體如何應用,在此之前,你需要掌握
1.protege本體建模工具
2.racer推理機工具
掌握上面兩種工具的思想及使用方法你就可以真正步入語(yǔ)義web服務(wù)的正軌了,請不要著(zhù)急,作者會(huì )通過(guò)實(shí)例詳細講述兩種工具的使用。今天比較晚了,今天只講一些思想不講實(shí)例,講完我就睡。
1.protege是斯坦福大學(xué)ksl團隊做的東西,其核心是基于知識管理的本體建模工具,她只負責建模不負責推理,建模包括:
1.Class(類(lèi))
2.Individual(實(shí)體)
3.Rules(規則)
這三者合起來(lái)就生成一個(gè)owl后綴的文件,所以,建立本體并不復雜,而且很多本體都已經(jīng)建好了,建議大家在做owl之前先上這個(gè)網(wǎng)
https://mailman.stanford.edu/pipermail/protege-owl/2006-September/000137.html看看有沒(méi)有需要的本體,推薦參考如下文章
http://protege.stanford.edu/doc/users_guide/這是官方網(wǎng)的使用手冊,我從別人那里下了一份離線(xiàn)手冊,傳上去供大家分享。
2.推理機有很多種,最常見(jiàn)的是jena和racer,jess建議大家最好別用,太低級,jess和clisp是很簡(jiǎn)單的前向式推理那種,作者本科上專(zhuān)家決策時(shí)就學(xué)過(guò)。jena和racer的區別想了解的可以去g.cn(剛發(fā)現的google最短域名)搜一下,保證讓你滿(mǎn)意,這里用racer,racer可以去官網(wǎng)下
http://www.racer-systems.com/,試用版需要注冊一下,能下來(lái),花點(diǎn)耐心收幾次郵箱就可以了。
不要以為racer就是用來(lái)owl推理的,racer在owl以前就有,她有自己的racer格式,只不過(guò)owl比較流行racer就有了支持owl的版本。
就說(shuō)到這,該睡了,其實(shí)離語(yǔ)義網(wǎng)已經(jīng)很近了,接著(zhù)你就離語(yǔ)義web服務(wù)就很近了。語(yǔ)義網(wǎng)有做好的例子,參考
http://www.ksl.stanford.edu/people/dlm/webont/wineAgent/,是一個(gè)基于強大知識庫的葡萄酒智能篩選的例子,這個(gè)例子除了源代碼看不了外其他什么都可以看,這個(gè)作者以后也會(huì )詳細介紹。
3-實(shí)例 [
http://ziapple.blog.51cto.com/271886/57621 ]
很長(cháng)時(shí)間沒(méi)跟大家分享經(jīng)驗了,寫(xiě)這篇文章的時(shí)候,離web語(yǔ)義學(xué)習之路2已經(jīng)有一段時(shí)間了,一是沒(méi)時(shí)間,二是最近也是在研究UDDI的東西,路3其實(shí)準備的比較倉促,但沒(méi)有關(guān)系了,本來(lái)就是個(gè)人學(xué)習嘛。路3主要講上會(huì )給大家推薦的WineAgent實(shí)例,仔細研究了它之后,發(fā)現
http://www.ksl.stanford.edu/people/dlm/webont/wineAgent/里面涵蓋的東西非常多,是一個(gè)非常不錯的學(xué)習web語(yǔ)義的參考。wineAgent主要內容:
1.它采用JTP推理機來(lái)完成推理。
jtp是一個(gè)非常好的推理機,跟路2介紹的racer不一樣,jtp是基于jena推理的,它的好處在于代碼開(kāi)源,完全是用java寫(xiě)的,非常方面我們用java來(lái)編程。
2.daml+oil實(shí)現
路2我們推薦的本體標準是owl,但這沒(méi)有關(guān)系,daml和owl是一脈相承的,owl就是從daml的基礎上發(fā)展而來(lái)的,而且daml可以很容易轉換為owl,所以我們不用擔心本體建模的問(wèn)題。
在整個(gè)實(shí)現過(guò)程中,我們必須知道以下內容
1.owl語(yǔ)法,知道了owl你自然就知道了daml,這其實(shí)在我們的路1就已經(jīng)說(shuō)明了,另外建模的話(huà)大家可以多看看protege可視化建模工具,附件給大家分享一個(gè)protege中文入門(mén)手冊,呵呵,轉自別人的成果。
2.jtp語(yǔ)法,目前我還未找到任何關(guān)于jtp的詳細語(yǔ)法介紹,但既然它是基于jena的,我想會(huì )jena語(yǔ)法的話(huà),應該不是問(wèn)題,本人觀(guān)察了racer、jena的用戶(hù)手冊以及jtp的一些語(yǔ)法片段,發(fā)現推理機的語(yǔ)法幾乎是一樣的,所以我們學(xué)習路2的racer就足夠了。附件中本人會(huì )附上racer的用戶(hù)手冊,手冊有2個(gè),給大家的是具體語(yǔ)法參考,另外一個(gè)是userGuide,由于文件大于2M上傳不上,其實(shí)如果大家能吧racer試用版的下下來(lái)里面自帶就有。
我的實(shí)例
JTP可以在這個(gè)網(wǎng)址
http://www.ksl.stanford.edu/software/JTP/下載,里面也有很多說(shuō)明,具體就不說(shuō)了。里面包含如下內容
jtp-daml.sh和jtp-owl.sh是linux下的運行文件,jtp-daml.bat和jtp-owl.bat是windows下的執行文件,src是源代碼,我們也可以不借助.bat運行環(huán)境,直接用java來(lái)構建推理機。以下是我做的
1.新建一個(gè)tomcat工程叫jtptest,把上圖的lib下的包拷貝到web-inf/lib下,新建一個(gè)test.java,內容如下:
package org.bjtu;
import java.net.URL;
import jtp.*;
import jtp.context.daml.*;
import jtp.fol.*;
public class test
{
//定義知識庫,即一個(gè)owl/daml文件位置。
public static final String KB_URL = "http://www.daml.org/2001/03/daml+oil-ex";
//public static final String DRC = "http://www.ksl.stanford.edu/software/jtp/drc.ser";
public static void main (String [] argv) throws Exception
{
DamlReasoningContext drc = new DamlReasoningContext();
drc.setUp();
drc.loadKB(new URL (KB_URL));
//推出Peter的年齡
ReasoningStepIterator rsi = drc.ask("(|http://www.daml.org/2001/03/daml+oil-ex#|::age |
http://www.daml.org/2001/03/daml+oil-ex#|::|Peter| ?x)");
ReasoningStep rs = null;
while ((rs = rsi.next()) != null)
{
Literal lit = SubstUtils.deReferenceLiteral((Literal)rs.getGoal());
System.out.println("X = " + lit.getArgs().get(1));
}
}
}
運行java Application,結果如下:
4-一個(gè)組裝web服務(wù)的例子 [
http://ziapple.blog.51cto.com/271886/59050 ]
這個(gè)例子是從網(wǎng)上一篇《一個(gè)用owl組裝web服務(wù)的例子》的一個(gè)改進(jìn),OWL-S可以用來(lái)描述Web服務(wù),也許對理解Web服務(wù)的組裝有些作用。這個(gè)服務(wù)是對已有Web服務(wù)進(jìn)行組裝和執行,所以你并不需要發(fā)布自己的Web服務(wù)。你需要安裝
Protege和
OWL-S Editor插件,我用的版本前者是3.1 beta build 191,后者是build 15,它們在一起運行得還不錯。
所用的Web服務(wù)在
http://www.bs-byg.dk/hashclass.wsdl,它包含兩個(gè)方法:HashString和CheckHash,前者用指定編碼方式(MD5、SHA1等等)對指定字符串編碼,后者根據指定編碼方式檢查一個(gè)字符串(HashString)是否是另一個(gè)字符串(OriginString)的編碼結果。我們將把這兩個(gè)方法組裝成一個(gè)服務(wù),對輸入的編碼方式和待編碼字符串先進(jìn)行編碼,然后檢查編碼的結果是否正確,如果正確返回true,否則返回false。
1、確認你的OWL-S Editor已經(jīng)安裝到Protege里,啟動(dòng)Protege,新建一個(gè)owl文件類(lèi)型的工程,在菜單project->config里勾選上owls選項,按確定后Protege的主界面會(huì )多出一個(gè)OWL-S Editor頁(yè),接著(zhù)安裝
graphviz,網(wǎng)上介紹了很多配置graphviz的方法,其實(shí)直接安裝到C:\Program Files\ATT\graphviz就可以了。
聲明:如果你安裝不成功的話(huà),那很有可能是版本的問(wèn)題,筆者用protege3.3.1無(wú)論owls-editor用什么版本都不能用,害我調了一天也沒(méi)調出來(lái),protege3.2.1據說(shuō)可以和owls-editor build17一起用。安裝方法很簡(jiǎn)單,直接解壓owls-editor到protege主目錄plugins下。安裝后如圖1:
2、轉到OWL-S Editor頁(yè),按左上角的WSDL按鈕,在彈出的對話(huà)框里輸入Web服務(wù)的地址
http://www.bs-byg.dk/hashclass.wsdl,然后按回車(chē),過(guò)一會(huì )兒在對話(huà)框里會(huì )顯示出這個(gè)Web服務(wù)的信息,左邊是Operations列表
3、因為每次只能import一個(gè)Operation,所以先選擇HashString,然后按右下方的Import按鈕,這時(shí)系統會(huì )提示要把生成的owls文件(擴展名為.owl)保存在一個(gè)位置,你可以選擇任何位置。
說(shuō)明:從wsdl轉到owl可能會(huì )花上cpu一點(diǎn)時(shí)間,如果電腦沒(méi)反應不是死機,等個(gè)幾十秒一分鐘應該就可以了。
4、使用同樣的方法把CheckHash方法也導入進(jìn)來(lái),這樣我們就有了兩個(gè)可用于組裝的Web服務(wù)了。如果你愿意的話(huà),可以單獨執行看看,方法是選擇一個(gè)Service,然后按綠色的執行按鈕。
5、現在開(kāi)始組裝它們。為此我們新建一個(gè)Service實(shí)例(按Create Service按鈕)、一個(gè)Profile實(shí)例、一個(gè)CompositeProcess實(shí)例和一個(gè)WSDLGrounding實(shí)例,分別命名為myservice、myprofile、myprocess和mygrounding好了。
6、接下來(lái)把它們連接起來(lái),首先選中myservice,把它的describedBy屬性置為myprocess,presents屬性置為myprofile,supports屬性置為mygrounding。
7、現在對myprocess進(jìn)行編輯,OWL-S Editor提供了一個(gè)可視化的編輯界面(Visual Editor),利用它可以很方便的定義CompositeProcess的各個(gè)步驟。選中myprocess,右邊切換到Visual Editor,這里有一些粉紅色的按鈕用來(lái)定制流程。我們首先創(chuàng )建一個(gè)Sequence(表示按順序執行),然后選中這個(gè)Sequence,創(chuàng )建兩個(gè)Perform和一個(gè)Produce,每個(gè)Perform代表調用一個(gè)Web服務(wù),而Produce的作用是在最后得到返回值。這時(shí)右邊的圖形應該像下面這樣,因為我們尚未對Perform和Produce進(jìn)行定制。
8、在圖形的Perform/Produce節點(diǎn)上點(diǎn)一下就可以修改它的屬性,先來(lái)修改第一個(gè)。點(diǎn)一下第一個(gè)矩形節點(diǎn)(第一個(gè)Perform),在對話(huà)框里把process屬性設置為wi1:HashStringProcess(注意:如果導入WSDL時(shí)改變了前綴,這里就不是wi1),為了方便閱讀,把Name屬性改為hashPerform。類(lèi)似的,第二個(gè)矩形節點(diǎn)的process屬性應該是wi2:CheckHashProcess,Name則改為checkPerform;對于唯一的Produce節點(diǎn),改名為produce?,F在右邊的圖如下所示。
9、現在從Visual Editor切換到Properties頁(yè),在這里為myprocess定義輸入和輸出參數。它的輸入應該是wi1:HashType和wi1:Str,而輸出應該是wi2:CheckHashResult,也就是說(shuō),對于我們組裝出來(lái)的Web服務(wù)來(lái)說(shuō),輸入是編碼類(lèi)型和待編碼字符串,而輸出是驗證結果。
10、上面我們定義了myprocess擁有的參數,現在就要用到它們了。切換回Visual Editor,在樹(shù)型列表里選則第一個(gè)Perform(hashPerform),把右邊切換到Properties頁(yè),現在ToParameter屬性里還是空白,我們要把myprocess的輸入映射到這個(gè)Perform,所以按添加按鈕把兩個(gè)輸入參數(wi1:HashType和wi1: Str)加到ToParameter里。選中它們中的一個(gè),可以看到右邊有BindingType選項,缺省為valueSource這一項,就用它即可,在下面的FromPerform下拉框里只有一個(gè)選項TheParentPerform,選中它。在最下面的FromParameter里選擇和你選擇的ToParameter項一樣的那個(gè)選項(wi1:HashType->wi1:HashType,wi1:Str->wi1:Str)。
11、對于checkPerform,它有三個(gè)輸入參數,我們希望HashType和hashPerform具有同樣的值,所以它的設置和上一步里對HashType的設置一樣;OriginalString的設置和上一步的Str一樣;HashString屬性是上一步得到的結果,所以FromPerform屬性應該是hashPerform,FromParameter屬性則是wi1:HashStringResult。
12、對produce的設置很簡(jiǎn)單,在ToParameter屬性里加入我們要的結果wi2:CheckHashResult,FromPerform選checkPerform,FromParameter選wi2:CheckHashResult?,F在,myprocess對應的process圖如下所示。
13、對myprocess的設置到此就結束了,最困難的部分完成了,剩下的工作都很簡(jiǎn)單和顯而易見(jiàn)。選中mygrounding,在它的hasAtomicProcessGrounding屬性里加上wi1:HashStringAtomicProcessGrounding和wi2:CheckHashAtomicProcessGrounding。
14、現在myservice已經(jīng)可以執行了(myprofile里還可以增加一些信息用來(lái)描述這個(gè)服務(wù))?,F在選中myservice,按下執行按鈕,在彈出的對話(huà)框里HashType框填MD5,Str框填test(任意字符串都可以),然后按Execute按鈕就會(huì )看到結果,當然,這個(gè)服務(wù)不論你輸入什么字符串都會(huì )得到true值,原因不用我說(shuō)了吧。