0

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

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

  • 对于Classes(O) × Classes(O)中的每个子类(C, D ) :
    • 对于Object properties(O)中定义的每个属性P
      • 如果CP some D是可满足的:
        • 产量(C、P、D)

这非常慢,因为我正在使用具有 4557 个类和 107 个对象属性的疫苗本体。即使它是一次性计算,我也可以从看到更好的方法中学到一些东西。

按照这里的建议使用OWLKnowledgeExplorerReasonerfrom JFact不起作用,因为它在检索邻居标签时崩溃(请参阅我的测试用例

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

谢谢!

4

1 回答 1

2

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

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

  • 如果C是 的子类P some D,那么 的所有子类也是C
  • 如果C不是 的子类P some D,那么所有的超类也是C
  • P和的子/超类/属性的类似规则D
  • 您可以为所有P some Thing表达式命名。分类后,您可以将搜索限制在C这些概念的子类中。

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

按照这里的建议使用 JFact 中的 OWLKnowledgeExplorerReasoner 不起作用,因为它在检索邻居标签时崩溃(异常无法到达的情况!)。

您能否提供一个测试用例和问题的完整堆栈跟踪,以便我们修复它?您是否尝试在 FaCT++ 中使用相同的功能?

于 2016-12-08T17:23:50.260 回答