2016-03-29 88 views
0

我正在使用OWL API 3/Pellet/SPARQL-DL堆棧,並且想從本體中讀取某個類的斷言的TBox公理。使用OWL API獲取TBox公理API

我可以通過OWL API輕鬆訪問公理。但是,OWLClassAxiom只是提供了在沒有連接的情況下訪問簽名的功能。即我想知道ObjectProperty分配給哪個類。我可以檢索的是簽名中的所有元素的集合,沒有它們的連接。

OWL API似乎並不真正支持在類級別上給定的公理(閱讀,不添加)。或者我錯過了什麼?任何其他想法如何實現? (使用任何工具)

具體示例:比薩hasBase一些PizzaTopping。我想通過指定Pizza和hasBase來檢索值「PizzaTopping」。

回答

4

如果比薩餅是一類,然後

               比薩hasBase一些PizzaTopping

不是一個法律公理。什麼你可能實際上已經是

               比薩subClassof hasBase一些PizzaTopping

這意味着,每一個例如比薩由hasBase財產有關PizzaTopping的一些實例。這個公理是一個子類公理,所以你想要檢索一個OWLSubClassOfAxiom的實例,(它是OWLClassAxiom的一個子類)。

在這種情況下,如果您參考了比薩的OWLClass,那麼您可以使用OWLClass#getSuperclasses()來獲取超類表達式的列表。其中一個是OWLObjectSomeValuesFrom表達式爲(hasBase some PizzaTopping)。你必須尋找那種類型,然後檢查它是一個限制的屬性。

這就是說,你的既定目標

知道哪個類一個OBJECTPROPERTY被分配到

並不完全與OWL型號相匹配。對象屬性(和數據屬性)不屬於OWL中的類。您可以使用子類公理和屬性限制(如上所述)來說某個類的成員必須具有某個特定屬性的值,

+2

對,您可以輕鬆做的唯一事情就是獲得您感興趣的所有公理在簽名中的屬性中,但取決於公理類型,這可能不是您想要的。一個'OWLAxiomVisitor'可能是要走的路... – AKSW

+0

感謝您指出我的邏輯中的缺陷,很好的答案。我得到了它的工作。但是,我仍然不喜歡公理部分的訪問。所有的都是「getXInSignature」,它只返回一個集合。這是沒用的,如果你有一個組合(例如兩個某些值的交集) - 我需要手動通過subaxioms。也許我的用例非常具體,或者我還沒有完全明白。但無論如何,它現在起作用!@AKSW是否有可能將訪問者僅用於某個類的公理,還是會貫穿整個本體論? – nick

+1

@nick OWL對象的一些值來自Axiom的'getProperty()'。您不必使用getXInSignature方法。也就是說,AKSW建議研究公理遊客可能會幫助很多。 –