java 包含否定的HermiT蕴涵

sq1bmfud  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(88)

有没有办法从HermiTreasoner中得到包含否定(ObjectComplementOf)的推论?

OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
dataFactory = manager.getOWLDataFactory();
IRI iri = IRI.create("http://www.test.owl");
OWLOntology ontology = manager.createOntology(iri);

OWLClass clsA = dataFactory.getOWLClass(IRI.create(iri + "#A"));
OWLClass clsB = dataFactory.getOWLClass(IRI.create(iri + "#B"));
OWLAxiom axiom = dataFactory.getOWLSubClassOfAxiom(clsA, clsB.getComplementNNF());

OWLIndividual john = dataFactory.getOWLNamedIndividual(IRI.create(iri + "#JOHN"));
OWLClassAssertionAxiom assertionAxiom = dataFactory.getOWLClassAssertionAxiom(clsA, john);

ontology.add(axiom);
ontology.add(assertionAxiom);

OWLReasonerFactory reasoner_factory = new ReasonerFactory();
OWLReasoner reasoner = reasoner_factory.createReasoner(ontology);

OWLOntology inferred_ontology = manager.createOntology();

// Create an inferred axiom generator, and add the generators of choice.
List<InferredAxiomGenerator<? extends OWLAxiom>> gens = new ArrayList<>();
gens.add(new InferredSubClassAxiomGenerator());
gens.add(new InferredClassAssertionAxiomGenerator());
gens.add(new InferredDisjointClassesAxiomGenerator());
gens.add(new InferredEquivalentClassAxiomGenerator());

// Create the inferred ontology generator, and fill the empty ontology.
InferredOntologyGenerator iog = new InferredOntologyGenerator(reasoner, gens);
iog.fillOntology(dataFactory, inferred_ontology);

(清洁)结果:

//KB:   A SubClassOf not(B), A(JOHN)
ENTAILMENTS:{
    SubClassOf(A owl:Thing),
    SubClassOf(B owl:Thing),
    DisjointClasses(A owl:Nothing),
    DisjointClasses(B owl:Nothing),
    DisjointClasses(A B),
    ClassAssertion(owl:Thing JOHN),
    ClassAssertion(A JOHN)
}

**我的问题:**我如何也能得到这个Assert:ClassAssertion(ObjectComplementOf(B) JOHN)

nbysray5

nbysray51#

不可能生成所有使用类或属性表达式的推理 axios ,原因是类(和属性)表达式的列表是无限的,所以如果推理器试图生成所有这类 axios ,它将开始一项不可能完成的任务。
如果你有一个选择类表达式的有限子集的标准(例如,本体中每个命名类的补集列表),你可以实现一个 axios 生成器,询问推理器这些类是否有示例,并以这种方式创建 axios 。
推理者也可以做同样的事情,为一个有着无限答案的问题提供部分答案--但是,据我所知,没有推理者能做到这一点,厄米当然也没有。

相关问题