UnloadableImportException: не удалось загрузить импортированную онтологию

У меня есть онтология, созданная в 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);
    }
}

Однако если я попытаюсь загрузить онтологию, включающую один или несколько импортов, если эти импорты недоступны, будет выдано исключение UnloadableImportException, как в следующем примере:

org.semanticweb.owlapi.model.UnloadableImportException: не удалось загрузить импортированную онтологию: http://www.w3.org/2004/02/skos/core Причина: время ожидания подключения истекло.

Как решить эту проблему? Если импортированная онтология доступна в автономном режиме, как импортировать эту онтологию во время загрузки моей онтологии?


person enzom83    schedule 06.07.2016    source источник
comment
Обратите внимание, что структурный рассудок не является полным рассудком. Если вам нужны правильные рассуждения, используйте такие инструменты, как HermiT или Pellet.   -  person Ignazio    schedule 07.07.2016


Ответы (1)


Вы можете использовать AutoIRIMapper, чтобы указать на локальную папку, содержащую локальные копии онтологий.

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

Сделайте это перед началом загрузки онтологий.

person Ignazio    schedule 07.07.2016
comment
Для библиотеки owlapi v5 используйте это: manager.getIRIMappers().add(mapper); - person tremendows; 10.11.2017