【发布时间】:2021-12-29 16:51:16
【问题描述】:
我想在 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)来推断它们。
【问题讨论】:
-
你没有使用 HermiT。 StructuralReasonerFactory 类是一个 OWLAPI 类,它产生的推理器不进行推理。将其更改为 HermiT 的正确 ReasonerFactory。
-
@Ignazio 谢谢,但即使更改为
org.semanticweb.HermiT.Reasoner.ReasonerFactory输出也不会改变。
标签: java owl owl-api description-logic hermit