UnloadableImportException:无法加载导入的本体

enz*_*m83 6 java rdf owl protege owl-api

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

org.semanticweb.owlapi.model.UnloadableImportException:无法加载导入的本体:http://www.w3.org/2004/02/skos/core原因:连接超时

如何解决这个问题呢?如果导入的本体可以脱机使用,如何在加载本体时导入此本体?

Ign*_*zio 6

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

AutoIRIMapper mapper=new AutoIRIMapper(folder, true);
manager.addIRIMapper(mapper);
Run Code Online (Sandbox Code Playgroud)

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