UnloadableImportException:无法加载导入的 ontology

UnloadableImportException: Could not load imported ontology

我有一个 ontology 在 Protege 4.3.0 中创建并存储在 OWL 文件中。为了使用 OWL API 加载此 ontology,我使用以下代码示例。

public class MySampleClass {
    private final OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
    private final OWLDataFactory df = manager.getOWLDataFactory();

    private final OWLReasonerFactory rf = new StructuralReasonerFactory();

    private final OWLOntology ontology;
    private final OWLOntologyID id;
    private final IRI iri;
    private final PrefixManager pm;

    private final OWLReasoner reasoner;

    /**
     * 
     * @param file
     */
    public MySampleClass(File file) {
        try {
            ontology = manager.loadOntologyFromOntologyDocument(file);
        } catch (OWLOntologyInputSourceException | OWLOntologyCreationException ex) {
            // throw custom exception
        }

        id = ontology.getOntologyID();
        iri = id.getOntologyIRI();

        pm = new DefaultPrefixManager(iri.toString().concat("#"));

        reasoner = rf.createReasoner(ontology);
        reasoner.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS);
    }
}

但是,如果我尝试加载包含一个或多个导入的 ontology,如果这些导入不可用,则会抛出 UnloadableImportException,如下例所示:

org.semanticweb.owlapi.model.UnloadableImportException: Could not load imported ontology: http://www.w3.org/2004/02/skos/core Cause: connection timed out

如何解决这个问题? 如果导入的ontology离线可用,如何在加载我的ontology时导入这个ontology?

您可以使用 AutoIRIMapper 指向包含本体本地副本的本地文件夹。

AutoIRIMapper mapper=new AutoIRIMapper(folder, true);
manager.addIRIMapper(mapper);

在开始加载本体之前执行此操作。