Search in sources :

Example 1 with Reasoner

use of org.semanticweb.HermiT.Reasoner in project goci by EBISPOT.

the class ReasonedOntologyLoader method indexOntology.

protected OWLOntology indexOntology(OWLOntology ontology) throws OWLOntologyCreationException {
    getLog().debug("Trying to create a reasoner over ontology '" + getOntologyURI() + "'");
    OWLReasonerFactory factory = new Reasoner.ReasonerFactory();
    ReasonerProgressMonitor progressMonitor = new LoggingReasonerProgressMonitor(getLog());
    OWLReasonerConfiguration config = new SimpleConfiguration(progressMonitor);
    this.reasoner = factory.createReasoner(ontology, config);
    getLog().debug("Precomputing inferences...");
    reasoner.precomputeInferences();
    getLog().debug("Checking ontology consistency...");
    reasoner.isConsistent();
    getLog().debug("Checking for unsatisfiable classes...");
    if (reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().size() > 0) {
        throw new OWLOntologyCreationException("Once classified, unsatisfiable classes were detected in '" + getOntologyIRI() + "'");
    } else {
        getLog().debug("Reasoning complete! ");
    }
    Set<OWLClass> allClasses = ontology.getClassesInSignature();
    removeExcludedClasses(ontology, allClasses, superclass -> reasoner.getSubClasses(superclass, false).getFlattened());
    int labelCount = 0;
    int labelledClassCount = 0;
    int synonymCount = 0;
    int synonymedClassCount = 0;
    getLog().debug("Loading " + allClasses.size() + " classes...");
    for (OWLClass ontologyClass : allClasses) {
        IRI clsIri = ontologyClass.getIRI();
        // get IRI fragment/path
        Optional<String> accession = evaluateAccessionValue(ontology, ontologyClass);
        if (accession.isPresent()) {
            addClassAccession(clsIri, accession.get());
        }
        // get label annotations
        Optional<String> label = evaluateLabelAnnotationValue(ontology, ontologyClass);
        if (label.isPresent()) {
            addClassLabel(clsIri, label.get());
            labelledClassCount++;
            labelCount++;
        }
        // get all synonym annotations
        getLog().trace("Loading synonyms of " + clsIri.toString() + "...");
        Set<String> synonyms = evaluateSynonymAnnotationValues(ontology, ontologyClass);
        if (!synonyms.isEmpty()) {
            addSynonyms(clsIri, synonyms);
            synonymCount += synonyms.size();
            synonymedClassCount++;
        }
        // get parent labels
        getLog().trace("Loading parents of " + clsIri.toString() + "...");
        Set<OWLClass> parents = reasoner.getSuperClasses(ontologyClass, false).getFlattened();
        // only add type if the parent isn't excluded
        Set<String> parentLabelSet = parents.stream().filter(allClasses::contains).peek(parent -> getLog().trace("Next parent of " + label + ": " + parent)).map(parent -> evaluateLabelAnnotationValue(ontology, parent)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toSet());
        // always also add current class to the parents
        label.ifPresent(parentLabelSet::add);
        addClassParentLabels(clsIri, parentLabelSet);
        // get child labels
        getLog().trace("Loading children of " + clsIri.toString() + "...");
        Set<OWLClass> children = reasoner.getSubClasses(ontologyClass, false).getFlattened();
        // only add type if the child isn't excluded
        Set<String> childLabelSet = children.stream().filter(allClasses::contains).peek(child -> getLog().trace("Next child of " + label + ": " + child)).map(child -> evaluateLabelAnnotationValue(ontology, child)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toSet());
        // always also add current class to the parents
        label.ifPresent(childLabelSet::add);
        addClassChildLabels(clsIri, childLabelSet);
    }
    getLog().debug("Successfully indexed " + labelCount + " labels on " + labelledClassCount + " classes and " + synonymCount + " synonyms on " + synonymedClassCount + " classes!");
    return ontology;
}
Also used : Logger(org.slf4j.Logger) SimpleConfiguration(org.semanticweb.owlapi.reasoner.SimpleConfiguration) OWLOntologyCreationException(org.semanticweb.owlapi.model.OWLOntologyCreationException) Reasoner(org.semanticweb.HermiT.Reasoner) OWLReasoner(org.semanticweb.owlapi.reasoner.OWLReasoner) Set(java.util.Set) Collectors(java.util.stream.Collectors) OWLReasonerConfiguration(org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration) ReasonerProgressMonitor(org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor) OWLOntology(org.semanticweb.owlapi.model.OWLOntology) Component(org.springframework.stereotype.Component) IRI(org.semanticweb.owlapi.model.IRI) OWLReasonerFactory(org.semanticweb.owlapi.reasoner.OWLReasonerFactory) Optional(java.util.Optional) OWLClass(org.semanticweb.owlapi.model.OWLClass) IRI(org.semanticweb.owlapi.model.IRI) OWLReasonerFactory(org.semanticweb.owlapi.reasoner.OWLReasonerFactory) Optional(java.util.Optional) ReasonerProgressMonitor(org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor) OWLReasonerConfiguration(org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration) OWLOntologyCreationException(org.semanticweb.owlapi.model.OWLOntologyCreationException) SimpleConfiguration(org.semanticweb.owlapi.reasoner.SimpleConfiguration) OWLClass(org.semanticweb.owlapi.model.OWLClass) OWLReasonerFactory(org.semanticweb.owlapi.reasoner.OWLReasonerFactory)

Aggregations

Optional (java.util.Optional)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 Reasoner (org.semanticweb.HermiT.Reasoner)1 IRI (org.semanticweb.owlapi.model.IRI)1 OWLClass (org.semanticweb.owlapi.model.OWLClass)1 OWLOntology (org.semanticweb.owlapi.model.OWLOntology)1 OWLOntologyCreationException (org.semanticweb.owlapi.model.OWLOntologyCreationException)1 OWLReasoner (org.semanticweb.owlapi.reasoner.OWLReasoner)1 OWLReasonerConfiguration (org.semanticweb.owlapi.reasoner.OWLReasonerConfiguration)1 OWLReasonerFactory (org.semanticweb.owlapi.reasoner.OWLReasonerFactory)1 ReasonerProgressMonitor (org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor)1 SimpleConfiguration (org.semanticweb.owlapi.reasoner.SimpleConfiguration)1 Logger (org.slf4j.Logger)1 Component (org.springframework.stereotype.Component)1