【问题标题】:Get TBox Axioms with OWL API使用 OWL API 获取 TBox 公理
【发布时间】:2016-03-29 06:28:41
【问题描述】:

我正在使用 OWL API 3 / Pellet / SPARQL-DL 堆栈,并希望从本体中读取某个类的断言 TBox 公理。

我可以使用 OWL API 轻松访问公理。但是,OWLClassAxiom 只提供了在没有连接的情况下访问签名的功能。 IE。我想知道 ObjectProperty 分配给哪个类。我所能检索到的只是签名中所有元素的集合,没有它们的连接。

似乎 OWL API 并不真正支持在类级别上很好地使用给定的公理(阅读,而不是添加。)或者我错过了什么?还有其他想法如何实现吗? (使用任何工具。)

具体示例:Pizza hasBase 一些 PizzaTopping。我想通过指定 Pizza 和 hasBase 来检索值“PizzaTopping”。

【问题讨论】:

    标签: owl ontology owl-api


    【解决方案1】:

    如果 Pizza 是一个类,那么

            Pizza hasBase some PizzaTopping

    不是法律公理。你可能实际拥有的是

            Pizza subClassof hasBase some PizzaTopping

    这意味着 Pizza 的每个 instance 都通过 hasBase 属性与 PizzaTopping 的某个 instance 相关联。该公理是子类公理,因此您需要检索OWLSubClassOfAxiom 的实例(它是OWLClassAxiom 的子类)。

    在这种情况下,如果您对 Pizza 的 OWLClass 有引用,那么您可以使用 OWLClass#getSuperclasses() 来获取超类表达式的列表。其中之一是 (hasBase some PizzaTopping)OWLObjectSomeValuesFrom 表达式。您必须查找该类型的那些,然后检查它所限制的属性。

    也就是说,你的既定目标

    知道 ObjectProperty 分配给哪个类

    与 OWL 模型不太匹配。对象属性(和数据属性)不“属于”OWL 中的类。您可以像上面一样使用子类公理和属性限制来说明类的成员必须具有特定属性的值,

    【讨论】:

    • 对,您唯一可以轻松做的事情就是获取您对签名中的属性感兴趣的所有公理,但根据公理类型,这可能不是您想要的。 OWLAxiomVisitor 可能是要走的路...
    • 感谢您指出我的逻辑缺陷,很好的答案。我让它工作了。但是,我仍然不喜欢公理部分的访问。只有“getXInSignature”,它只返回一个集合。如果您有组合(例如,两个 somevaluesfrom 的交集),这将毫无用处 - 我需要手动完成子公理。也许我的用例非常具体,或者我仍然没有完全理解。但无论如何,它现在有效! @AKSW 是否可以仅将访问者用于某个类的公理,还是会遍历整个本体?
    • @nick 在 OWL 对象上有 getProperty() 来自 Axiom 的一些值。您不必使用 getXInSignature 方法。也就是说,AKSW 关于调查公理访问者的建议可能会有很大帮助。
    • @nick 要么您只为您的公理类型实现visit() 方法,要么您只应用您之前通过某些给定公理类型选择的公理的访问者。两者都应该工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多