摘 要: 對Jean推理機的結構及推理規(guī)則的構造語法進行系統(tǒng)介紹,通過實例說明Jena在基于本體的信息檢索中的應用。
關鍵詞: 本體 Jena OWL RDF
隨著因特網技術迅速發(fā)展,網上信息與知識急劇增長。所以,對信息檢索技術的研究日顯重要,信息檢索已成為信息社會中不可或缺的一種重要工具。
當前的信息檢索技術可分為三類:全文檢索(Text Retrieval)、數據檢索(Data Retrieval)和知識檢索(Knowledge Retrieval)。全文檢索和數據檢索的本質都是直接基于關鍵字的檢索技術,不能滿足用戶在語義和知識上的需求。知識檢索強調的是基于知識的、語義上的匹配,因此在查全率和查準率上有更好的保證。
本體(Ontology)原本是一個哲學中的概念,被哲學家用來描述事物的本質。在計算機界,明確本體的定義經歷了一個過程,最后Gruber關于本體的定義得到了業(yè)內同行的一致認同,即“本體是概念模型的明確的規(guī)范說明”。本體作為一種能在語義和知識層次上描述信息的概念模型建模工具,在信息檢索,特別是在基于知識的信息檢索中得到了廣泛的應用。
OWL(Web Ontology Language)是W3C組織于2004年2月正式推出的一個專門用來描述本體的語言。它既有強大的語義表達能力,又可以實現描述邏輯的可判定推理。OWL可以用來存儲本體中的概念和關系。
RDF(Resource Description Framework)是資源描述框架語言,用來描述元數據以及元數據與元數據之間的關系。其中元數據是“關于數據的數據”,是描述網絡資源的數據。RDF可以用來存儲本體中的實例。
1 Jena推理機簡介
Jena是專門用來構建語義網的應用軟件,它為RDF、RDFS和OWL提供了一個可編程實現的環(huán)境。推理功能是Jena中的一個子系統(tǒng),它的目的就是把推理機制和推理器引入到Jena中。Jena推理機結構如圖1所示。
所有應用都是通過使用ModelFactory訪問圖1的推理機制,并為相關聯的Reasoner建立一個新的Model。查詢這個新的Model不但會返回對原來數據的描述信息,還會返回通過Reasoner中的規(guī)則執(zhí)行后的附加描述信息。整個推理機制的核心部分是InfGraph,因為所有應用的執(zhí)行都是在Graph SPI層進行。Ont/Model API為用戶構建的本體提供了一種便利的方式與合適的推理器連接。推理結構中的Graph-base assertions指的是和Reasoner一起綁定的數據(XML數據-實例),而Graph-ontology definitions指的是和Reasoner一起綁定的數據結構的限制(也就是XML模式-概念和關系)。Reasoner Registry是一個靜態(tài)類,它包含了當前用到的所有Reasoner。
2 Jena推理規(guī)則的構造語法
用戶一方面可以利用上面的結構實現本體中的推理,另一方面,如果用戶對Java很熟悉,則可以自己開發(fā)推理規(guī)則。規(guī)則的語法格式如下:
Rule := bare-rule
or [bare-rule]
or [ruleName:bare-rule]
bare-rule:= term,...term->hterm,...hterm//向前推理
or term,...term<-term,...term//向后推理
hterm := term
or [bare-rule]
term := (node,node,node)//三元組模式
or (node,node,functor)//擴展三元組模式
or builtin(node,...node)//調用處理元語
functor := functorName(node,...node)
//結構化的文字表述
node := uri-ref//例如 http://foo.com/eg
or prefix:localname//例如rdf:type
or ?varname//變量名
or ′a literal′//字符串
or number//例如42或25.5
用戶根據上述語法格式寫出針對特定問題的規(guī)則,就可以更加方便、快捷地查詢各種信息了。
3 Jena推理機的應用
下面通過一個具體的實例討論Jena推理機是如何在本體中進行推理的。
在現代企業(yè)管理中,人們越來越清楚地認識到知識、尤其是雇員的知識是企業(yè)非常重要的財富。如何組織、管理好這些知識財富已成為現代管理重要的研究課題。傳統(tǒng)的做法是建立一個數據庫系統(tǒng)對企業(yè)雇員進行管理。然而,基于關鍵詞的查詢有時是不能滿足要求的。對于這個問題,文獻[9]進行了研究并給出了示例。示例如下:查找一個懂得“數據庫”的雇員來從事一個項目的開發(fā)工作,假設在建立的查詢系統(tǒng)中找不到一個人懂得“數據庫”,系統(tǒng)只能返回空記錄給用戶。而事實上存在某些人懂得“演繹數據庫”或“面向對象數據庫”,按常識,這些人應該懂得數據庫的知識,他們可以作為候選人提交給用戶。但傳統(tǒng)的數據庫做不到這一點。雖然可以通過進一步輸入這些關鍵詞達到查詢目的,但是不能保證用戶了解“數據庫”所有的子領域。文獻[9]借助于本體,可以實現這一目的。文中假設為企業(yè)建立了一個本體,其中一個部分如圖2所示。
由圖2可以看到,李四具有“面向對象數據庫”的能力。一般認為,具有某領域的子領域能力的雇員,同樣具備該領域的知識。進一步把問題推廣到項目因素。現在要查詢具備“演繹面向對象數據庫”能力的雇員,同樣沒有結果。然而從圖2中可以看到張三在做項目1,而項目1應用了“演繹面向對象數據庫”技術。因此張三可以作為候選人輸出。
文獻[9]是根據本體的啟發(fā)式算法實現查詢功能的。啟發(fā)式算法是先定義幾個基本函數,然后利用函數的組合及函數之間的映射實現概念之間的聯系。針對這個問題,在Jena推理機的基礎上,加入自己設計的規(guī)則,只要輸入限定條件,就可以輸出滿足該條件的雇員。由于可以根據實際環(huán)境加入相應的規(guī)則,從而使算法具有更好的靈活性和適應性。
使用Jena推理機制實現這種查詢功能,必須做好兩方面的工作。第一,把圖2中所有與數據庫相關的概念、關系和實例用OWL和RDF表示出來,存儲成XML文檔。這又分兩個步驟:(1)把圖2中本體的概念用OWL表示出來,存儲成CONCEPT.owl文件。這里的概念有計算機科學(CS)、數據庫(DB)、演繹數據庫(DDB)、面向對象數據庫(OODB)、演繹面向對象數據庫(DOODB)和項目(P);(2)把圖1中本體的實例用RDF存儲成INSTANCE.rdf 文件。一共有兩個項目,分別是項目1和項目2,有三個雇員:張三、李四和王五。其中張三工作于項目1,王五工作于項目2,李四有“面向對象數據庫”的能力。第二,根據查詢條件構造兩條規(guī)則實現查詢功能:
Rule1:(?x has competence ?y),(?y subclass of ?z)->(?x has competence ?z)
Rule2:(?x work in ?y),(?y use tech ?z)->(?x has competence ?z)
Rule1說明如果某個雇員x有能力y,而y屬于z,則x擁有能力z。
Rule2說明如果某個雇員x工作于項目y,而y使用了z技術,則x擁有能力z。
把這兩條規(guī)則放入Jena推理機中,然后基于上面兩個相關聯的XML文檔進行推理。代碼如下:
Model schema=
ModelLoader.loadModel(″file:data/CONCEPT.owl″);
//把本體中的概念文件CONCEPT.owl讀入推理機
Model data=
ModelLoader.loadModel(″file:data/INSTANCE.rdf″);
//把本體中的實例文件INSTANCE.rdf讀入推理機
String rules=
″[Rule1:(?x has competence ?y)(?y subclass of ?z)
->(?x has competence ?z)]″+″[Rule 2:(?x work in ?y)
(?y use tech ?z)->(?x has competence ?z)]″;
Reasoner reasoner=new GenericRuleReasoner
(Rule.parseRules(rules));
//把編寫的規(guī)則加入到已有的推理規(guī)則中
reasoner=reasoner.bindSchema(schema);
InfModel infmodel=ModelFactory.createInfModel(reasoner,data);
Resource DB=infmodel.getResource(″urn:x-hp:eg/DB″);
System.out.println(″DB*:″);
printStatements(infmodel,null,null,DB);
//利用printStatements函數輸出所有
//與數據庫有關的推理結果
printStatements定義如下:
public void printStatements(Model m,
Resource s,Property p, Resource o)
{
for (StmtIterator i=
m.listStatements(s,p,o);i.hasnext( );)
{
Statement stmt=i.nextStatement( );
System.out.println(″-″ +
PrintUtil.print(stmt));
}
}
上面操作的輸出結果是:
DB*:
-(eg:DOODB owl:subclassof eg:DB) //演繹面向對象數據庫是數據庫的子集
-(eg:DDB owl:subclassof eg:DB) //演繹數據庫是數據庫的子集
-(eg:OODB owl:subclassof eg:DB) //面向對象數據庫是數據庫的子集
-(eg:李四 eg:hascompetence eg:DB) //李四具有數據庫的能力
-(eg:張三 eg:hascompetence eg:DB) //張三具有數據庫的能力
-(eg:project1 eg:usetech eg:DB) //項目1使用了數據庫的技術
因為RDF是用三元組表示的,所以在結果中張三、李四都以這樣的形式作為候選人輸出了。最后使用針對RDF格式的數據庫查詢技術RDQL把雇員的姓名選擇出來,此工作便完成了。
4 結 論
隨著科學技術的發(fā)展,信息檢索技術也在發(fā)展,本體的引入提高了信息檢索的效率。Jena作為一種支持本體的工具,在今后本體的研究過程中,必將會有重要的作用。
參考文獻
1 鄧志鴻,唐世渭,張銘等.Ontology研究綜述.北京大學學報, 2002;38(5)
2 Gruber T.Ontolingua:A translation approach to portable ontology specifications.Knowledge Acquisition,1993;5(2)
3 McGuinness D L,Harmelen F V.OWL Web Ontology Language Overview.W3C Recommendation,2004,2.http:// www.w3.org/TR/owl-features
4 Manola F,Miller E.RDF Primer.W3C Recommendation, 2004,2.http://www.w3.org/TR/rdf-primer
5 Verzulli J.Using the Jena API to Process RDF.O′Reilly Xml.com,2001;(5).http://www.w3.org/TR/rdf-Primer
6 Reynolds D.Jena 2 Inference support.HP United States, 2004;(2).http://www.hpl.hp.co.uk/people/bwm/rdf/jena
7 宋煒,張銘.語義網簡明教程.北京:高等教育出版社,2004
8 廖明宏.本體論與信息檢索.計算機工程,2000;(2)
9 Dauiel E.Knowledge management System:Converting and Connecting.IEEE Intellsyst,1998;(5)~(6)