为什么 OWLReasoner.getSubclasses(...) returns http://www.w3.org/2002/07/owl#Nothing?

Why OWLReasoner.getSubclasses(...) returns http://www.w3.org/2002/07/owl#Nothing?

这是我的 ontology subclasses 请求的一部分,使用 JAVA-7 和 owlapi 库:

import org.semanticweb.owlapi.reasoner.OWLReasoner;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import org.semanticweb.owlapi.reasoner.ConsoleProgressMonitor;
import org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration;
...
...
OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
ConsoleProgressMonitor progressMonitor = new ConsoleProgressMonitor();
OWLReasonerConfiguration config = new SimpleConfiguration(myconfiguration);
OWLReasoner reasoner = reasonerFactory.createReasoner(myontology, config);
Set<OWLClass> subclasses = reasoner.getSubClasses(myClazz, true).getFlattened();

这是我的问题:

为什么 subclasses,什么 OWLReasoner.getSubClasses(...) 方法 returns,包含 myClazz 的所有 subclasses,但总是添加带有 URI http://www.w3.org/2002/07/owl#Nothing 的 OWLClass?我没有定义这个 class.

提前致谢。

owl:Nothing 是 class 定义为 OWL 中所有 class 的 subclass,因此它包含为 subclass 所有可满足的 classes(相当于所有不可满足的 classes)。

要在迭代期间跳过它,Node 有一个 getEntitiesMinusBottom() 方法可以跳过 owl:Nothing

在 w3.org owl 语义中,您可以找到有关 owl:Nothing class 的更多信息:https://www.w3.org/TR/2004/REC-owl-semantics-20040210/#owl_Nothing