2016-07-06 81 views
5

我有一个在Protege 4.3.0中创建并存储在OWL文件中的本体。为了使用OWL API加载这个本体,我使用下面的代码示例。UnloadableImportException:无法加载导入的本体

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); 
    } 
} 

但是,如果我尝试加载包含一个或多个进口,如果这些进口不可本体,一个UnloadableImportException被抛出,如下面的例子:

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

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

+0

请注意,结构推理不是一个完整的推理。如果您需要正确的推理,请使用HermiT或Pellet等推理器。 – Ignazio

回答

3

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

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

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

+0

对于owlapi v5库,请使用以下命令: manager.getIRIMappers()。add(mapper); – tremendows