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