在OWL本体中检索推断的对象属性填充

时间:2016-12-08 12:59:15

标签: owl protege owl-api fact++

如何在我的本体 O 所有(推断的)存在限制中检索每个类?

我目前的方法是迭代所有类和对象属性对,并检查是否满足限制:

  
      
  • 对于类(O)×类(O)中的每个子类(C,D):      
        
    • 对象属性(O)中定义的每个属性 P :      
          
      • 如果 C P 某些 D 可以满足:      
            
        • yield (C,P,D)
        •   
      •   
    •   
  •   

当我使用具有4557个类和107个对象属性的vaccine ontology时,这非常慢。即使是一次性计算,我也可以从看到更好的方法中学到一些东西。

使用JFact中的OWLKnowledgeExplorerReasoner建议here无法正常工作,因为它在检索邻居标签时崩溃了(请参阅我的test case

您能否使用OWLAPI,Protégé或任何其他工具建议任何改进的解决方案?此外,最好只检索最具体的填充类。

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,你的检查是错误的。对于一个空的本体C and P some D是可以满足的,这不是你想要的。您必须检查C and not (P some D)是否不可满足(或者,您只需检查isSubsumedBy(C, P some D))。

如果您使用某些用于分类的技术,则可以缩短探索时间,例如:

  • 如果CP some D的子类,那么C
  • 的所有子类也是如此
  • 如果C不是P some D的子类,那么C
  • 的所有超类都是如此
  • PD
  • 的子/超类/属性的类似规则
  • 您可以为所有P some Thing表达式指定名称。分类后,您可以将C的搜索限制为仅限于这些概念的子类。

如果您可以缩小问题范围,也会有所帮助。你真的需要检查所有对和所有属性吗?

  

如此处所建议的那样使用JFact的OWLKnowledgeExplorerReasoner不起作用,因为它在检索邻居标签时崩溃了(异常无法访问的情况!)。

你能提供一个测试用例和问题的完整堆栈跟踪,以便我们解决它吗?您是否尝试过使用FaCT ++?