[英]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
然后推理器将能够推断A
是C
的子类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.