/** * Translate the negative axioms of the ontology that this ontology refers with a given {@link * QLAxiomsTranslator}. * * @return the translation of the negative axioms. */ private Set<Rule> disjunctionsTranslation() { final Set<Rule> result = new HashSet<Rule>(); for (final OWLDisjointClassesAxiom disjunction : ontologyNormalization.conceptDisjunctions()) { final List<OWLClassExpression> concepts = disjunction.getClassExpressionsAsList(); assert concepts.size() <= 2; result.addAll( doubleAxiomsTranslator.disjunctionTranslation(concepts.get(0), concepts.get(1))); } for (final OWLDisjointObjectPropertiesAxiom disjunction : ontologyNormalization.roleDisjunctions()) { final List<OWLObjectPropertyExpression> roles = new LinkedList<OWLObjectPropertyExpression>(disjunction.getProperties()); assert roles.size() <= 2; result.addAll(doubleAxiomsTranslator.disjunctionTranslation(roles.get(0), roles.get(1))); } for (final OWLDisjointDataPropertiesAxiom disjunction : ontologyNormalization.dataDisjunctions()) { final List<OWLDataPropertyExpression> roles = new LinkedList<OWLDataPropertyExpression>(disjunction.getProperties()); assert roles.size() <= 2; result.addAll(doubleAxiomsTranslator.disjunctionTranslation(roles.get(0), roles.get(1))); } return result; }
@Override public void updateTranslation() throws UnsupportedAxiomsException { prepareUpdate(); translation.clear(); final boolean hasDisjunctions = ontologyNormalization.hasDisjunctions(); RuntimesLogger.start("ontology translation"); translation.addAll(translation(originalAxiomsTranslator)); if (hasDisjunctions) { translation.addAll(translation(doubleAxiomsTranslator)); translation.addAll(disjunctionsTranslation()); RuntimesLogger.stop("ontology translation", "loading"); RuntimesLogger.start("ontology classification"); for (final OWLEntity e : graph.getUnsatisfiableEntities()) if (e instanceof OWLClass) translation.addAll(doubleAxiomsTranslator.unsatisfiabilityTranslation((OWLClass) e)); else if (e instanceof OWLProperty) translation.addAll(doubleAxiomsTranslator.unsatisfiabilityTranslation((OWLProperty) e)); for (final OWLObjectProperty p : graph.getIrreflexiveRoles()) translation.add(doubleAxiomsTranslator.unreflexivityTranslation(p)); RuntimesLogger.stop("ontology classification", "loading"); } RuntimesLogger.stop("ontology translation", "loading"); }
// TODO optimize translatin: (e) can be discarded for roles for which there // aren't assertions private Set<Rule> translation(QLAxiomsTranslator axiomsTranslator) { final Set<Rule> result = new HashSet<Rule>(); for (final OWLClassAssertionAxiom assertion : ontologyNormalization.conceptAssertions()) result.addAll(axiomsTranslator.assertionTranslation(assertion)); for (final OWLObjectPropertyAssertionAxiom assertion : ontologyNormalization.roleAssertions()) result.addAll(axiomsTranslator.assertionTranslation(assertion)); for (final OWLDataPropertyAssertionAxiom assertion : ontologyNormalization.dataAssertions()) result.addAll(axiomsTranslator.assertionTranslation(assertion)); for (final OWLSubClassOfAxiom subsumption : ontologyNormalization.conceptSubsumptions()) result.addAll( axiomsTranslator.subsumptionTranslation( subsumption.getSubClass(), subsumption.getSuperClass())); for (final OWLSubPropertyAxiom<?> subsumption : ontologyNormalization.roleSubsumptions()) if (subsumption instanceof OWLSubObjectPropertyOfAxiom) { result.addAll( axiomsTranslator.subsumptionTranslation( subsumption.getSubProperty(), subsumption.getSuperProperty())); final OWLSubObjectPropertyOfAxiom axiom = (OWLSubObjectPropertyOfAxiom) subsumption; final OWLObjectPropertyExpression ope1 = axiom.getSubProperty(); final OWLObjectPropertyExpression ope2 = axiom.getSuperProperty(); final OWLObjectPropertyExpression invOpe1 = ope1.getInverseProperty().getSimplified(); final OWLObjectPropertyExpression invOpe2 = ope2.getInverseProperty().getSimplified(); if ((ontologyNormalization.isSuper(some(ope1)) || ontologyNormalization.isSuper(ope1)) && (ontologyNormalization.isSub(some(ope2)) || ontologyNormalization.isSub(ope2))) result.add( axiomsTranslator.domainSubsumptionTranslation( axiom.getSubProperty(), axiom.getSuperProperty())); if ((ontologyNormalization.isSuper(some(invOpe1)) || ontologyNormalization.isSuper(invOpe1)) && (ontologyNormalization.isSub(some(invOpe2)) || ontologyNormalization.isSub(invOpe2))) result.add(axiomsTranslator.rangeSubsumptionTranslation(invOpe1, invOpe2)); } else if (subsumption instanceof OWLSubDataPropertyOfAxiom) result.addAll( axiomsTranslator.subsumptionTranslation( subsumption.getSubProperty(), subsumption.getSuperProperty())); for (final OWLPropertyExpression ope : ontologyNormalization.getRoles()) if (ope instanceof OWLObjectPropertyExpression) { final OWLObjectProperty p = ((OWLObjectPropertyExpression) ope).getNamedProperty(); final OWLObjectPropertyExpression invP = p.getInverseProperty(); if (ontologyNormalization.isSub(some(p)) || ontologyNormalization.isSub(p)) result.add(axiomsTranslator.domainTranslation(p)); if (ontologyNormalization.isSub(some(invP)) || ontologyNormalization.isSub(invP)) result.add(axiomsTranslator.rangeTranslation(p)); } return result; }
@Override public boolean hasDisjunctions() { return ontologyNormalization.hasDisjunctions(); }