All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.stanford.protege.webprotege.index.impl.NamedIndividualFrameAxiomsIndexImpl Maven / Gradle / Ivy

The newest version!
package edu.stanford.protege.webprotege.index.impl;

import com.google.common.collect.Streams;
import edu.stanford.protege.webprotege.index.*;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLClassAssertionAxiom;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLSameIndividualAxiom;

import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.Set;
import java.util.stream.Stream;

import static com.google.common.collect.ImmutableSet.toImmutableSet;

/**
 * Matthew Horridge
 * Stanford Center for Biomedical Informatics Research
 * 2020-07-06
 */
public class NamedIndividualFrameAxiomsIndexImpl implements NamedIndividualFrameAxiomIndex {

    @Nonnull
    private final ProjectOntologiesIndex projectOntologiesIndex;

    @Nonnull
    private final ClassAssertionAxiomsByIndividualIndex classAssertionsByIndividual;

    @Nonnull
    private final PropertyAssertionAxiomsBySubjectIndex assertionsBySubject;

    @Nonnull
    private final SameIndividualAxiomsIndex sameIndividualAxiomsIndex;

    @Inject
    public NamedIndividualFrameAxiomsIndexImpl(@Nonnull ProjectOntologiesIndex projectOntologiesIndex,
                                               @Nonnull ClassAssertionAxiomsByIndividualIndex classAssertionsByIndividual,
                                               @Nonnull PropertyAssertionAxiomsBySubjectIndex assertionsBySubject,
                                               @Nonnull SameIndividualAxiomsIndex sameIndividualAxiomsIndex) {
        this.projectOntologiesIndex = projectOntologiesIndex;
        this.classAssertionsByIndividual = classAssertionsByIndividual;
        this.assertionsBySubject = assertionsBySubject;
        this.sameIndividualAxiomsIndex = sameIndividualAxiomsIndex;
    }

    @Nonnull
    @Override
    public Set getNamedIndividualFrameAxioms(@Nonnull OWLNamedIndividual subject) {
        var classAssertions = getClassAssertionAxioms(subject);
        var propertyAssertions = getPropertyAssertionAxioms(subject);
        var sameIndividualAxioms = getSameIndividualAxioms(subject);
        return Streams.concat(classAssertions,
                              propertyAssertions,
                              sameIndividualAxioms)
                      .collect(toImmutableSet());
    }

    private Stream getPropertyAssertionAxioms(OWLNamedIndividual subject) {
        return projectOntologiesIndex
                .getOntologyIds()
                .flatMap(ontId -> assertionsBySubject.getPropertyAssertions(subject, ontId));
    }

    private Stream getClassAssertionAxioms(OWLNamedIndividual subjectIndividual) {
        return projectOntologiesIndex
                .getOntologyIds()
                .flatMap(ontId -> classAssertionsByIndividual.getClassAssertionAxioms(subjectIndividual, ontId));
    }

    private Stream getSameIndividualAxioms(OWLNamedIndividual subjectIndividual) {
        return projectOntologiesIndex
                .getOntologyIds()
                .flatMap(ontId -> sameIndividualAxiomsIndex.getSameIndividualAxioms(subjectIndividual, ontId));
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy