我想在 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)来推断它们。