繁体   English   中英

使用 Java 推理器推断非平凡的 OWL 超类(或子类)断言

[英]Infer non-trivial OWL superclasses (or subclasses) assertions using a Java reasoner

我想在 OWL 中表达以下 DL 断言

A ⊑ B
A ⊑ ∃R

这意味着A是 B 的子概念,并且A的所有实例都必须与R有关系。

我用以下 OWL 本体来表达它:

Prefix(:=<http://example.org/my-ontology#>)

Ontology(<http://example.org/my-ontology>
    Declaration(Class(:A))
    Declaration(Class(:B))

    Declaration(ObjectProperty(:R))

    SubClassOf(:A :B)
    SubClassOf(:A ObjectSomeValuesFrom(:R owl:Thing))
)

我正在使用 HermiT 推理器来检索:A的所有超类,以这种方式:

OWLOntology ontology = TestUtils.ontology;
OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
ConsoleProgressMonitor progressMonitor = new ConsoleProgressMonitor();
OWLReasonerConfiguration config = new SimpleConfiguration(progressMonitor);
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, config);
reasoner.precomputeInferences();

for (OWLClass owlClass : ontology.getClassesInSignature()) {
    if (owlClass.toStringID().contains("#A")) {
        System.out.println("Class=>" + owlClass.toStringID() + "\nSuperClass[");
        System.out.println("\t" + reasoner.getSuperClasses(owlClass, false));
        System.out.println("]");
    }
}

但这只是打印:

Class=>http://example.org/my-ontology#A
SuperClass[
    Nodeset[Node( <http://example.org/my-ontology#B> ), Node( owl:Thing )]
]

如何获取有关SubClassOf(:A ObjectSomeValuesFrom(:R owl:Thing))的信息?

PS我不能只列出本体中的包含断言,但我必须使用推理器(不一定是 HermiT)来推断它们。

从本体得出的推论是无限的。 例如见这篇论文

出于这个原因,推理者通常将推理限制在命名类。 \exists R不是命名的 class,因此它不会作为推断返回。

要获得所需的推理,您需要通过添加例如给\exists R一个名称

C \equiv \exists R

然后推理器将能够推断AC的子类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM