package de.unikiel.inf.comsys.neo4j.inference.rules.extractor; /* * #%L * neo4j-sparql-extension * %% * Copyright (C) 2014 Niclas Hoyer * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import de.unikiel.inf.comsys.neo4j.inference.rules.Rule; import de.unikiel.inf.comsys.neo4j.inference.rules.SubClassOf; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLSubClassOfAxiom; import org.semanticweb.owlapi.model.OWLSubClassOfAxiomSetShortCut; import org.semanticweb.owlapi.model.OWLSubClassOfAxiomShortCut; /** * {@link Extractor} implementation that extracts * {@link SubClassOf} rules. */ public class SubClassOfExtractor extends AbstractExtractor { private void addAxiom(List<Rule> list, OWLSubClassOfAxiom a) { if (!(a.getSubClass().isAnonymous() || a.getSuperClass().isAnonymous())) { String ce1 = getString(a.getSubClass()); String ce2 = getString(a.getSuperClass()); list.add(new SubClassOf(ce1, ce2)); } } private void addAxioms(ArrayList<Rule> list, Set<OWLSubClassOfAxiom> axs) { for (OWLSubClassOfAxiom a : axs) { addAxiom(list, a); } } /** * Extracts {@link SubClassOf} rules. * * @param ot ontology * @return extracted rules */ @Override public List<Rule> extract(OWLOntology ot) { ArrayList<Rule> list = new ArrayList<>(); // direct mapping of SubClassOf axioms addAxioms(list, ot.getAxioms(AxiomType.SUBCLASS_OF)); // indirect mapping of shortcut axioms for (OWLAxiom a : ot.getAxioms()) { if (a instanceof OWLSubClassOfAxiomSetShortCut) { OWLSubClassOfAxiomSetShortCut sc = (OWLSubClassOfAxiomSetShortCut) a; addAxioms(list, sc.asOWLSubClassOfAxioms()); } if (a instanceof OWLSubClassOfAxiomShortCut) { OWLSubClassOfAxiomShortCut sc = (OWLSubClassOfAxiomShortCut) a; addAxiom(list, sc.asOWLSubClassOfAxiom()); } } return list; } }