From f2ea699de24108f2ad1209e16a1ca35fc114f91a Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Wed, 1 Jun 2022 17:46:38 +0100 Subject: refactor(upperbound): improve choice function --- .../ac/ox/cs/rsacomb/approximation/Upperbound.scala | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Upperbound.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Upperbound.scala index 2c3bdc4..567691f 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Upperbound.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Upperbound.scala @@ -1,7 +1,5 @@ package uk.ac.ox.cs.rsacomb.approximation -// import java.io.File - import org.semanticweb.owlapi.apibinding.OWLManager import org.semanticweb.owlapi.model.{IRI => _, _} @@ -52,34 +50,28 @@ class Upperbound(implicit fresh: DataFactory) toRSA( new Ontology( ontology.origin, - ontology.axioms flatMap toConjuncts, + ontology.axioms map chooseDisjunct, ontology.datafiles ) ) - /** Turn disjuncts into conjuncts + /** Choose a single disjunct * * This is a very naïve way of getting rid of disjunction preserving * completeness of CQ answering. - * - * @todo implement a choice function that decides which disjunct to - * keep instead of keeping all of them. Note that PAGOdA is currently - * doing something similar. */ - private def toConjuncts(axiom: OWLLogicalAxiom): List[OWLLogicalAxiom] = + private def chooseDisjunct(axiom: OWLLogicalAxiom): OWLLogicalAxiom = axiom match { case a: OWLSubClassOfAxiom => { val sub = a.getSubClass.getNNF val sup = a.getSuperClass.getNNF sup match { case sup: OWLObjectUnionOf => - sup.asDisjunctSet.map( - Upperbound.factory.getOWLSubClassOfAxiom(sub, _) - ) - case _ => List(axiom) + Upperbound.factory.getOWLSubClassOfAxiom(sub, sup.asDisjunctSet.head) + case _ => axiom } } - case _ => List(axiom) + case _ => axiom } /** Approximate a Horn-ALCHOIQ ontology to RSA -- cgit v1.2.3