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



我想在 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))的信息?

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

从本体论得出的推论是无限的。例如,请参阅本文。

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

要获得所需的推理,exists R您需要通过添加例如

C equiv exists R

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

最新更新