對Jena的簡單理解和一個例子_第1頁
對Jena的簡單理解和一個例子_第2頁
對Jena的簡單理解和一個例子_第3頁
對Jena的簡單理解和一個例子_第4頁
對Jena的簡單理解和一個例子_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

對Jena的簡單理解和一個例子對Jena的簡單理解和一個例子對Jena的簡單理解和一個例子作者茫人/marine02Jena是德國北部的一座城市,有人說那是“一個讓我有歸屬感的地方”。本文簡單介紹Jena(Jena2.4),使用Protégé3.1(不是最新版本)創(chuàng)建一個簡單的生物(Creature)本體,然后參照Jena文檔中的一個例子對本體進行簡單的處理,輸出本體中的Class、Property等信息。本文內容安排如下:Ø介紹JenaØ運行JenaØJenaOntologyAPIØ例子Ø參考資料

、介紹JenaJena由HPLabs()開發(fā)的Java開發(fā)工具包,用于SemanticWeb(語義網)中的應用程序開發(fā);Jana是開源的,在下載的文檔中有Jena的完整代碼。Jena框架主要包括:以RDF/XML、三元組形式讀寫RDF資源描述框架是(RDF)是描述資源的一項標準(在技術上是W3C的推薦標準),Jena文檔中有一部分呢詳細介紹了RDF和JenaRDFAPI,其內容包括對JenaRDF包的介紹、RDF模型的創(chuàng)建、讀寫、查詢等操作,以及RDF容器等的討論。RDFS,OWL,DAML+OIL等本體的操作Jena框架包含一個本體子系統(tǒng)(OntologySubsystem),它提供的API允許處理基于RDF的本體數據,也就是說,它支持OWL,DAML+OIL和RDFS。本體API與推理子系統(tǒng)結合可以從特定本體中提取信息,Jena2還提供文檔管理器(OntDocumentManager)以支持對導入本體的文檔管理。利用數據庫保存數據Jena2允許將數據存儲到硬盤中,或者是OWL文件,或者是關系數據庫中。本文處理的本體就是OWL文件讀入的。d)查詢模型Jena2提供了ARQ查詢引擎,它實現SPARQL查詢語言和RDQL,從而支持對模型的查詢。另外,查詢引擎與關系數據庫相關聯(lián),這使得查詢存儲在關系數據庫中的本體時能夠達到更高的效率。d)查詢模型e)基于規(guī)則的推理Jena2支持基于規(guī)則的簡單推理,其推理機制支持將推理器(inferencereasoners)導入Jena,創(chuàng)建模型時將推理器與模型關聯(lián)以實現推理。Protégé是一個開源的本體編輯器(目前的版本是Protégé3.2),用戶可以在GUI環(huán)境下創(chuàng)建本體或者知識庫。有一種說法是:Jena對應用程序就像Protégé對我們——我們使用Protégé操作本體,應用程序則是使用Jena來做同樣的工作。當然這些應用程序還是得由我們來編寫。二、運彳亍Jena可以在Jena的主頁(/downloads.html)下載Jena的最新版本,目前是Jena2.4版本。Jena是JavaAPI,所以需要Java運行環(huán)境。本文使用的是jdk1.5.0_04和Eclipse3.2。將下載的Jena-2.4.zip解壓到任意路徑,解壓之后生成Jena2.4文件夾,將Jena2.4lib下的jar文件全部加入CLASSPATH這樣就可以在任意的Java編輯器中調用JenaAPI了。在解壓目錄下有一個test.bat文件,用于配置的測試。在控制臺運行此程序,如果你的配置正確,測試將順利完成。如果使用Eclipse,則可以通過修改工程的Java創(chuàng)建路徑的方法導入Jenajar文件。在Eclipse下創(chuàng)建Java工程,右健單擊工程名字,選擇“屬性/Properties”,在打開的對話框中選擇“Java創(chuàng)建路徑/JavaBuildPath”,在右邊標簽中選擇“庫/Libraries”,之后選擇“添加外部文件/AddExtenalJARs”,找到Jena2.4lib目錄下的所有jar文件并將其添加到工程。這樣就可以運行Jean文檔中的例子了。三、JenaOntologyAPIJena2.4的OntologyAPI包含在ontology包(com.hp.hpl.jena.ontology)中,可以在目錄Jena-2.4srccomhphpljenaontology下查看所有程序的代碼,Jena本體部分的說明網頁是Jena-2.4docontologyindex.html,本部分內容以及程序的編寫主要參考這兩個文檔。在語義網上有很多表示本體信息的本體語言,其中表達能力最強的是OWL,OWL按復雜程度分為OWLFull、OWLDL和OWLLite三個版本。其他的本體語言還有RDFS、DAML+OILoJenaOntologyAPI為語義網應用程序開發(fā)者提供了一組獨立于具體語言的一致編程接口。Jena提供的接口本質上都是Java程序,也就是.java文件經過javac之后生成的.class文件。顯然,class文件并不能提示本體創(chuàng)建使用的語言。為了區(qū)別于其他的表示方法,每種本體語言都有一個自己的框架(profile),它列出了這種語言使用的類(概念)和屬性的構建方式和URIo因此,在DAML框架里,對象屬性()的URI是daml:ObjectProperty,而在OWL框架里卻是owl:ObjectProperty°RDFS并沒有定義對象屬性,所以在RDFS框架里,對象屬性的URI是nullo在Jena中,這種框架通過參數的設置在創(chuàng)建時與本體模型(OntologyModel)綁定在一起。本體模型繼承自Jena中的Model類。Model允許訪問RDF數據集合中的陳述(Statements),OntModel對此進行了擴展,以便支持本體中的各種數據對象:類(classes)>屬性(properties)、實例(個體individuals)。本部分簡單介紹要用到的幾個java類或者接口。,本體模型OntModel本體模型(OntModel)是對JenaRDF模型的擴展(繼承自RDF模型),提供了處理本體數據的功能。使用Jena處理本體首先就是要建立一個本體模型,之后就能夠通過本體模型中所定義的方法操作模型,比如導入子模型()、獲取模型中本體的信息、操作本體屬性以及將本體的表示輸出到磁盤文件等等。Jena通過model包中的ModelFactory創(chuàng)建本體模型,ModelFactory是Jena提供用來創(chuàng)建各種模型的類,在類中定義了具體實現模型的成員數據以及創(chuàng)建模型的二十多種方法。一個最簡單的創(chuàng)建本體模型的語句如下:OntModelontModel=ModelFactory.createOntologyModel();該語句不含參數,應用默認設置創(chuàng)建一個本體模型ontModel,也就是說:它使用OWL語言、基于內存,支持RDFS推理??梢酝ㄟ^創(chuàng)建時應用模型類別(OntModelSpec)參數創(chuàng)建不同的模型,以實現不同語言不同類型不同推理層次的本體操作。例如,下面的語句創(chuàng)建了一個使用DAML語言內存本體模型。直觀地講,內存模型就是只在程序運行時存在的模型,它沒有將數據寫回磁盤文件或者數據庫表。OntModelontModel=ModelFactory.createOntologyModel(OntModelSpec.DAML_MEM);更多類型設置可以參照OntModelSpec類中的數據成員的說明。我們所使用的本體是從OWL文件獲得的,也就是說,是從磁盤讀取的。讀取的方法是調用JenaOntoModel提供的Read方法。例如ontModel.read("file:D:/temp/Creatrue/Creature.owl");就是讀取位于D盤相應目錄下的Creature.owl文件以建立本體模型。Read方法也有很多重載,上面調用的方法以文件的絕對路徑作為參數。其他的方法聲明如下read(Stringurl);read(Readerreader,Stringbase);read(InputStreamreader,Stringbase);read(Stringurl,Stringlang);read(Readerreader,Stringbase,StringLang);read(InputStreamreader,Stringbase,StringLang);.文檔管理器Documentmanager本體文檔管理器(OntDocumentManager)是用來幫助管理本體文檔的類,它包含了導入本體文檔創(chuàng)建本體模型、幫助緩存下載網絡上的本體等功能。每個本體模型都有一個相關聯(lián)的文檔管理器。在創(chuàng)建本體模型時,可以創(chuàng)建獨立的文檔管理器并作為參數傳遞給模型工廠(ModelFactory)。文檔管理器有非常多的配置選項,基本可以滿足應用的需求。首先,每個文檔管理器的參數都可以通過Java代碼來設置(注:OntDocumentManager有五種重載的構造函數)。另外,文檔管理器也可以在創(chuàng)建的時候從一個RDF格式的策略文件讀取相應設定值。下面的例子創(chuàng)建一個文檔管理器并將它與以創(chuàng)建的本體模型關聯(lián)。OntModelm=ModelFactory.createOntologyModel();OntDocumentManagerdm=m.getDocumentManager();,接口OntClass這個接口中定義了本體種與概念(也就是類Class)相關的操作,通過OntModel中的listClasses()便可以返回模型中的所有概念組成的迭代器(Iterator),然后調用OntClass的各種方法具體進行具體操作。OntoClass對概念之間的各種關系都有相應的定義方法,典型的有添加子類、添加約束、創(chuàng)建互斥概念、迭代返回某種類型的概念以及相關的邏輯判斷等等。第四部分的例子主要是應用這個類的方法。4.基本本體類型OntResource所有本體API中用于表示本體的類繼承自OntResource,這樣就可以在OntResource中放置所有類公用的功能,并可以為一般的方法設置通用的返回值。Java接口OntResource擴展了Jena的RDF資源接口,所以任何可以接受資源或者RDFNode的方法都可以接受OntResource,并且也就可以接受任何其他本體值。雖然這個類涵蓋了涉及本體的所有類,在例子中并沒有使用它。從JenaJavaDoc可以獲得它的詳細信息。四、例子本文實現了一個簡單的例子。通過Protégé3.1創(chuàng)建一個Creature本體,并將其存儲到OWL文件Creature.owl,然后使用和Jena通過讀取該文件創(chuàng)建本體模型,實踐Jena中的一些OntologyAPI。本文不涉及如何使用Protégé3.1創(chuàng)建本體,您可以到Protégé的主頁或者是/modules/wordpress/尋找詳細的資料,后者雖然只是一個博客,但確實提供了很多我們需要的資源,比如一個完整的Protégé使用教程。本文例子中對Jena的使用主要參照Jena文檔中Jena-2.4src-examplesjenaexamplesontology下面的describeClass。它讀取food.owl和wine.owl兩個文件建立本體模型,并顯示模型中概念以及相關關系的詳細信息。DescribeClass.java主要負責查詢詳細信息并顯示出來,Main.java只是創(chuàng)建本體模型并調用DescribeClass.java的功能。例子的主要代碼如下列出。//創(chuàng)建使用OWL語言的內存模型OntModelontModel=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);ontModel.read("file:./Creature.owl");//讀取當前路徑下的文件,加載模型//定義一個類作為模型中Animal類的等等價類,并添加注釋OntClasscls=ontModel.createClass(":DongwuClass");cls.addComment("theEquivalentClassofAnimal...”,"EN");//通過完整的URI取得模型中的Animal類OntClassoc=ontModel.getOntClass("/marine.owl#Animal");oc.addEquivalentClass(cls);//將先前定義的類添加為Animal的等價類//迭代顯示模型中的類,在迭代過程中完成各種操作for(Iteratori=ontModel.listClasses();i.hasNext();){OntClassc=(OntClass)i.next();//返回類型強制轉換if(!c.isAnon()){//如果不是匿名類,則打印類的名字System.out.print("Class");//獲取類的URI并輸出,在輸出時對URI做了簡化(將命名空間前綴省略)System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()));//處理Animal類if(c.getLocalName().equals("Animal")){//如果當前類是AnimalSystem.out.println("URI@"+c.getURI());//輸出它的完整URI//取得它的的等價類并打印System.out.print("Animal'sEquivalentClassis"+c.getEquivalentClass());//輸出等價類的注釋System.out.println("[comments:"+c.getEquivalentClass().getComment("EN")+"]”);}//處理Animal結束//迭代顯示當前類的直接父類for(Iteratorit=c.listSuperClasses();it.hasNext();){OntClasssp=(OntClass)it.next();Stringstr=c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI())//獲取URI+"'ssuperClassis";StringstrSP=sp.getURI();try{//另一種簡化處理URI的方法str=str+":"+strSP.substring(strSP.indexOf('#')+1);System.out.println("Class"+str);}catch(Exceptione){}}//superclassends//迭代顯示當前類的直接子類for(Iteratorit=c.listSubClasses();it.hasNext();){System.out.print("Class");OntClasssb=(OntClass)it.next();System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI())+"'ssuberClassissb.getModel().getGraph().getPrefixMapping().shortForm(sb.getURI()));}//suberclassends//迭代顯示與當前類相關的所有屬性for(Iteratoripp=c.listDeclaredProperties();ipp.hasNext();){OntPropertyp=(OntProperty)ipp.next();System.out.println("associatedproperty:"+p.getLoca

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論