1

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

4

1 回答 1

0

从本体得出的推论是无限的。例如见这篇论文

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

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

C \equiv \exists R

然后推理器将能够推断A是 的子类C

于 2021-12-29T19:29:19.540 回答