在應用程序中利用Jena API處理OWL本體



接觸Semantic Web的時間還不是很長,所以現在寫的這方面內容算是筆記性質,很可能存在很多誤解,歡迎指出或討論:)

一般來說,我們在Protege這樣的編輯器裏構建了本體,就會想在應用程序裏使用它,這就需要一些開發接口。用程序操作本體是很必要的,因爲在很多情況下,我們要自動生成本體,靠人手通過Protege創建所有本體是不現實的。Jena是HP公司開發的這樣一套API,似乎HP公司在本體這方面走得很靠前,其他大公司還在觀望嗎?

可以這樣說,Jena對應用程序就像Protege對我們,我們使用Protege操作本體,應用程序則是使用Jena來做同樣的工作,當然這些應用程序還是得由我們來編寫。其實Protege本身也是在Jena的基礎上開發的,你看如果Protege的console裏報異常的話,多半會和Jena有關。最近出了一個Protege OWL API,相當於對Jena的包裝,據說使用起來更方便,這個API就是Protege的OWL Plugin所使用的,相信作者經過OWL Plugin的開發以後,說這些話是有一定依據的。

題目是說用Jena處理OWL,其實Jena當然不只能處理OWL,就像Protege除了能處理OWL外還能處理RDF(S)一樣。Jena最基本的使用是處理RDF(S),但畢竟OWL已經成爲W3C的推薦標準,所以對它的支持也是大勢所趨。

好了,現在來點實際的,怎樣用Jena讀我們用Protege創建的OWL本體呢,假設你有一個OWL本體文件(.owl),裏面定義了動物類(http://www.zoo.com/ont/Animal,注意這並不是一個實際存在的URL,不要試圖去訪問它),並且它有一些實例,現在看如下代碼:

OntModel m = ModelFactory.createOntologyModel();
File myFile = ...;
m.read(new FileInputStream(myFile), "");
ResIterator iter 
= m.listSubjectsWithProperty(RDF.type, m.getResource("http://www.zoo.com/ont/Animal"));
while (iter.hasNext()) {
    Resource animal 
= (Resource) iter.next();
    System.out.println(animal.getLocalName());
}

和操作RDF(S)不同,com.hp.hpl.jena.ontology.OntModel是專門處理本體(Ontology)的,它是com.hp.hpl.jena.rdf.model.Model的子接口,具有Model的全部功能,同時還有一些Model沒有的功能,例如listClasses()、listObjectProperties(),因爲只有在本體裏纔有“類”和“屬性”的概念。

上面的代碼很簡單,從ModelFactory創建一個OntModel,從指定文件把模型讀到內存裏。再下面的代碼是一個例子,作用是取出模型中所有Animal的實例(Individual,也叫個體),並打印它們的名稱。要從OntModel裏取實例,也可以用listIndividuals()方法,只不過你得在得到的實例中判斷它們是不是Animal的實例,我覺得不如用上面這種簡易查詢的方式來得方便。

Jena裏擴展了很多Iterator,比如ResIterator、StmtIterator和NodeIterator等等,剛開始用會覺得很彆扭,好象還不如都用java標準的Iterator,不知道Jena的設計者是怎麼考慮的。要熟練掌握還是得對整個Jena的API有全局掌握纔好。

在循環裏,我們得到的每個元素都是一個Resource,因爲本體裏的任何東西都是資源,不論你想得到Subject、Property還是Object,在Jena裏實際得到的都是資源(Resource),在Jena裏,Property是Resource的子接口,而Jena並沒有Subject或Object接口。(注:在OWL本體中,Subject->Property->Object組成一個三元組,例如:張小剛->父親->張大剛;或者:綿羊多利->rdf:type->動物,rdf:type是一個特殊的屬性,表示前者是後者的實例)

暫時先寫到這,關於在本體中引入其他本體和使用推理,下次繼續。

http://www.cnblogs.com/bjzhanghao/archive/2005/01/06/87598.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章