From f480a850161445bb3dd9ead500810db21dfa1451 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Wed, 1 Jun 2022 17:45:17 +0100 Subject: feat: implicitly propagate configs to approximations --- src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala | 2 +- src/main/scala/uk/ac/ox/cs/rsacomb/RSAConfig.scala | 2 +- .../ox/cs/rsacomb/approximation/Lowerbound.scala | 12 +++++------ src/main/scala/uk/ac/ox/cs/rsacomb/package.scala | 1 + .../uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala | 24 ++++++++++++++++------ 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala index 8784651..233e170 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala @@ -22,7 +22,7 @@ import ontology.{Ontology,RSAOntology} import util.{Logger, RDFoxUtil, RSA} object RSAComb extends App { - val config = RSAConfig.parse(args.toList) + implicit val config = RSAConfig parse args.toList RSAConfig describe config /* Configure logger */ diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAConfig.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAConfig.scala index 32460b4..2dcd850 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAConfig.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAConfig.scala @@ -74,7 +74,7 @@ object RSAConfig { """ /** Default config values */ - private val default: Config = Map( + val default: Config = Map( 'transitive -> false, 'data -> List.empty[os.Path], 'approximation -> 'lowerbound diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Lowerbound.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Lowerbound.scala index 1b72699..154cbd1 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Lowerbound.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/approximation/Lowerbound.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 => OWLIRI, _} @@ -15,6 +13,7 @@ import scalax.collection.GraphTraversal._ import uk.ac.ox.cs.rsacomb.ontology.RSAOntology import uk.ac.ox.cs.rsacomb.ontology.Ontology import uk.ac.ox.cs.rsacomb.util.{DataFactory, RDFoxUtil, RSA} +import uk.ac.ox.cs.rsacomb.RSAConfig object Lowerbound { @@ -38,8 +37,9 @@ object Lowerbound { * * @see [[uk.ac.ox.cs.rsacomb.converter.Normalizer]] */ -class Lowerbound(implicit fresh: DataFactory) - extends Approximation[RSAOntology] { +class Lowerbound( + implicit fresh: DataFactory, config: RSAConfig.Config +) extends Approximation[RSAOntology] { /** Simplify conversion between Java and Scala collections */ import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ @@ -84,9 +84,9 @@ class Lowerbound(implicit fresh: DataFactory) case _ => true } } - case a: OWLTransitiveObjectPropertyAxiom => false + case a: OWLTransitiveObjectPropertyAxiom => config('transitive).get[Boolean] case a: OWLReflexiveObjectPropertyAxiom => false - case a: OWLSubPropertyChainOfAxiom => true /*TODO: should we leave it? */ + case a: OWLSubPropertyChainOfAxiom => config('transitive).get[Boolean] case a: OWLAsymmetricObjectPropertyAxiom => false case a => true } diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/package.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/package.scala index 53fa095..b8144c4 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/package.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/package.scala @@ -18,4 +18,5 @@ package uk.ac.ox.cs package object rsacomb { implicit val seed: util.DataFactory = util.DataFactory(0) + } diff --git a/src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala b/src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala index 32f7d9b..933441b 100644 --- a/src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala +++ b/src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala @@ -31,7 +31,7 @@ import tech.oxfordsemantic.jrdfox.logic.expression.Variable import scala.collection.JavaConverters._ import uk.ac.ox.cs.rsacomb.ontology.RSAOntology -import uk.ac.ox.cs.rsacomb.approximation.Lowerbound +import uk.ac.ox.cs.rsacomb.approximation._ import uk.ac.ox.cs.rsacomb.ontology.Ontology import uk.ac.ox.cs.rsacomb.converter.{SkolemStrategy, NoSkolem} import uk.ac.ox.cs.rsacomb.suffix.Empty @@ -39,7 +39,19 @@ import uk.ac.ox.cs.rsacomb.util.{Logger, RDFoxUtil, RSA} object Ontology1_CanonicalModelSpec { - Logger.level = Logger.QUIET + implicit var config = RSAConfig parse List( + "--logger", "quiet", + "--approximation", "lowerbound", + "--ontology", "examples/example1.ttl", + ) + + if (config.contains('logger)) + Logger.level = config('logger).get[Logger.Level] + + val toRSA = config('approximation).get[Symbol] match { + case 'lowerbound => new Lowerbound + case 'upperbound => new Upperbound + } /* Renderer to display OWL Axioms with DL syntax*/ val renderer = new DLSyntaxObjectRenderer() @@ -47,8 +59,8 @@ object Ontology1_CanonicalModelSpec { def base(str: String): IRI = IRI.create("http://example.com/rsa_example.owl#" + str) - val ontology_path = os.pwd / "examples" / "example1.ttl" - val ontology = Ontology(ontology_path, List()).approximate(new Lowerbound) + val ontopath = config('ontology).get[os.Path] + val ontology = Ontology(ontopath, List.empty) approximate toRSA val program = ontology.canonicalModel val converter = program.CanonicalModelConverter @@ -257,8 +269,8 @@ class Ontology1_CanonicalModelSpec // def base(str: String): IRI = // IRI.create("http://example.com/rsa_example.owl#" + str) -// val ontology_path: File = new File("examples/example2.owl") -// val ontology = Ontology(ontology_path, List()).approximate(new Lowerbound) +// val ontopath: File = new File("examples/example2.owl") +// val ontology = Ontology(ontopath, List()).approximate(new Lowerbound) // val program = ontology.canonicalModel // val converter = program.CanonicalModelConverter -- cgit v1.2.3