You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于OWL API推理器类型与物化冗余断言的技术问询

OWL API相关技术问题解答

1. 代码中调用的推理器类型

你代码里的new ReasonerFactory()实例化的是Hermit推理器的工厂类。结合你提供的版本信息(Hermit 1.3.8.510、OWLAPI 5.1.14),这个ReasonerFactory对应org.semanticweb.HermiT.ReasonerFactory,因此调用createReasoner(ontology)创建的是Hermit推理器实例。

OWL API本身仅作为本体操作框架,不自带推理器,需依赖第三方推理器实现(如Hermit、Pellet、FaCT++等),你引入了Hermit依赖,因此代码会使用Hermit作为推理后端。

2. 避免物化生成冗余owl:topObjectProperty断言的方法

方法一:自定义推理公理生成器,排除topObjectProperty相关逻辑

默认的InferredOntologyGenerator包含全类型的推理生成器,其中InferredObjectPropertyAssertionGenerator会生成包括owl:topObjectProperty在内的所有可推断对象属性断言。你可以手动指定需要的生成器,跳过会生成冗余断言的部分:

public static Ontology materialization(Ontology ontology, File inferredOntologyFile) throws OWLOntologyStorageException, IOException, OWLOntologyCreationException {
    OntologyManager manager = OntManagers.createManager(); 
    OutputStream outputStream = new FileOutputStream(inferredOntologyFile);

    OWLDataFactory data_factory = ontology.getOWLOntologyManager().getOWLDataFactory();
    OWLReasonerFactory reasoner_factory = new ReasonerFactory();
    OWLReasoner reasoner = reasoner_factory.createReasoner(ontology);

    if (!reasoner.isConsistent()) {
        System.out.println("INCONSISTENT ONTOLOGY!");
    }

    // 仅保留需要的推理生成器,跳过会生成topObjectProperty断言的模块
    List<InferredAxiomGenerator<? extends OWLAxiom>> generators = new ArrayList<>();
    generators.add(new InferredClassAssertionGenerator());
    generators.add(new InferredSubClassAxiomGenerator());
    generators.add(new InferredSubObjectPropertyAxiomGenerator());
    // 根据业务需求添加其他生成器,若需保留其他对象属性断言,可使用自定义过滤后的生成器

    InferredOntologyGenerator inference = new InferredOntologyGenerator(reasoner, generators);
    inference.fillOntology(data_factory, ontology);

    manager.saveOntology(ontology, new NTriplesDocumentFormat(), outputStream);
    outputStream.close();
    return ontology;
}

若仍需生成其他对象属性断言、仅排除owl:topObjectProperty,可自定义InferredObjectPropertyAssertionGenerator子类重写生成逻辑:

public class FilteredObjectPropertyAssertionGenerator extends InferredObjectPropertyAssertionGenerator {
    @Override
    protected void addAxioms(OWLNamedIndividual subject, OWLReasoner reasoner, OWLDataFactory dataFactory, Set<OWLObjectPropertyAssertionAxiom> result) {
        super.addAxioms(subject, reasoner, dataFactory, result);
        // 移除所有包含topObjectProperty的断言
        result.removeIf(axiom -> axiom.getProperty().isTopEntity());
    }
}

之后在生成器列表中用该自定义类替代默认的InferredObjectPropertyAssertionGenerator即可。

方法二:物化后直接过滤冗余断言

在保存本体前,遍历本体公理并移除所有包含owl:topObjectProperty的对象属性断言:

// 在inference.fillOntology之后、manager.saveOntology之前添加以下代码
OWLObjectProperty topObjectProperty = data_factory.getOWLTopObjectProperty();
Set<OWLObjectPropertyAssertionAxiom> topAssertions = ontology.getObjectPropertyAssertionAxioms(topObjectProperty);
manager.removeAxioms(ontology, topAssertions);

执行该逻辑后再保存本体,即可剔除所有冗余的owl:topObjectProperty(a,b)断言。


内容的提问来源于stack exchange,提问作者Eleni T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:27:33