Protege中推理引擎的測試使用
Hermit簡介
(以下來自百度翻譯)
HermiT是使用Web本體語言(OWL)編寫本體的推理機。給定一個OWL文件,HermiT可以確定本體是否一致,識別類之間的包容關系,等等。
HermiT是第一個公開的OWL推理機,它基於一個新的“hypertableau”演算,提供了比任何已知算法更有效的推理。以前需要幾分鍾或幾小時來分類的本體通常可以在幾秒鍾內被HermiT分類,而HermiT是第一個能夠對許多本體進行分類的推理者,這些本體以前被證明過於復雜,任何可用的系統都無法處理。
HermiT使用直接語義,並通過了所有owl2對直接語義推理器的一致性測試。
HermiT是由牛津大學計算機科學數據與知識研究組開發的一款基於OWL的本體推理機。官網位於http://www.hermit-reasoner.com/。你可以通過Protege使用HermiT,這是最簡單的方式;也可以使用HermiT提供的Java API來開發你自己的程序。這里主要展示如何在Protege中簡單地使用HermiT進行推理。
安裝HermiT
在最新版本的Protege中,HermiT是隨Protege安裝的,不需要手動安裝。
創建一個本體
在測試集中,我建立了一個簡單的親屬關系本體來進行測試。這個本體描述了幾個人之間的親屬關系,以及年齡屬性。我希望HermiT能基於規則(Rule)做到:
- 推斷並填補關系(Object properties),例如B是A的弟弟,A是C的母親,則B是C的舅舅;
- 推斷並賦予屬性(Data properties),例如B的年齡是43(40-55),則B的年齡段是中年;
這個本體的視圖如下:
SWRL
SWRL(Semantic Web Rule Language)是由以語義的方式呈現規則的一種語言,SWRL的規則部分概念是由RuleML所演變而來,再結合OWL本體論形成。SWRL已經是W3C規范中的一員。SWRL相關的內容在中文網上比較難找到,最完善的學習資料是w3c自己在2004年發布的SWRL語言指導。一段SWRL語言通過簡單的“IF-THEN”語句來定義一串規則,其中IF和THEN都是通過Atom組成的,Atom描述了最為簡單的一種假設,例如“XX是XX”、“XX的YY是ZZ”等。SWRL提供了七種Atom,分別是:
- 描述,對應class;description '(' i-object ')'
- 數據,dataRange '(' d-object ')'
- 實體關系,對應Object properties;individualvaluedPropertyID '(' i-object i-object ')'
- 數據屬性,對應Data properties;datavaluedPropertyID '(' i-object d-object ')'
- 相同,sameAs '(' i-object i-object ')'
- 相異,differentFrom '(' i-object i-object ')'
- 其他內建功能,builtIn '(' builtinID { d-object } ')'
內建功能提供了一些針對數字、字符串、日期的基礎操作,在SWRL文檔的8.1節有詳細描述,這里不再贅述。(注意!HermiT不支持builtIn SWRL,所以雖然前面說了用HermiT,其實使用的是Drools一般推理引擎,前面懶得再修改了)
SWRL的格式遵從rule ::= 'Implies(' [ URIreference ] { annotation } antecedent consequent ')'
的格式,其中atom之間通過‘&’連接,antecedent和consequent之間用‘->’連接。一個例子如下:
hasParent(?x1,?x2) ∧ hasBrother(?x2,?x3) ⇒ hasUncle(?x1,?x3)
他描述了x1有x2作為家長,並且x2有x3作為兄弟,則x1有x3作為uncle(國外的uncle可以代表伯叔舅丈)。
SWRL在Protege中的使用
Protege內建了SWRLtab頁面,在window-tab-swrltab中打開即可。
選擇new新建一個規則(年齡在40-55之間的年齡段為中年):
依次點擊OWL+SRWL->Doorls,Run Doorls,Drools->OWL。分別執行了解析SRWL語言、推斷和將知識保存到原來的知識圖譜中。在知識圖譜中,可以看到成功推斷出王德法的年齡段是中年,作為男人也是人,龍傲天是小明的舅舅(同時也是親屬)等等。
在下一篇隨筆里,我會嘗試直接調用Java API做到這一點。