我正在使用OWL API 3 / Pellet / SPARQL-DL堆栈,并希望从本体中读取某个类的断言的TBox公理。
我可以使用OWL API轻松访问公理。但是,OWLClassAxiom只提供了在没有连接的情况下访问签名的功能。即我想知道ObjectProperty分配给哪个Class。我可以检索的只是签名中所有元素的集合,没有它们的连接。
似乎OWL API并不真正支持在类级别上使用给定的公理(阅读,而不是添加。)或者我错过了什么?任何其他想法如何实现? (使用任何工具。)
具体示例:Pizza hasBase some PizzaTopping。我想通过指定Pizza和hasBase来检索值“PizzaTopping”。
答案 0 :(得分:4)
如果比萨是一个班级,那么
Pizza hasBase some PizzaTopping
不是法律公理。你可能实际拥有的是
Pizza subClassof hasBase some PizzaTopping
这意味着Pizza的每个实例都与hasBase属性的PizzaTopping的实例相关。公理是一个子类公理,所以你想要检索OWLSubClassOfAxiom的实例(它是OWLClassAxiom的子类)。
在这种情况下,如果您对Pizza的OWLClass有引用,那么您可以使用OWLClass#getSuperclasses()来获取超类表达式的列表。其中一个是{strong>(hasBase some PizzaTopping)的OWLObjectSomeValuesFrom表达式。您必须查找该类型的那些,然后检查它是一个限制的属性。
那就是你说的目标
知道将ObjectProperty分配给哪个类
与OWL模型不完全匹配。对象属性(和数据属性)不属于OWL中的类。您可以使用子类公理和属性限制(如上所述)来表示类的成员必须具有特定属性的值,