diff options
| author | Federico Igne <federico.igne@cs.ox.ac.uk> | 2021-06-01 11:20:39 +0100 |
|---|---|---|
| committer | Federico Igne <federico.igne@cs.ox.ac.uk> | 2021-06-01 11:20:39 +0100 |
| commit | 6b4226c41ec2a2439fb44a312ccaff01769e8212 (patch) | |
| tree | 3028a3b248056baac5b50d6c41a35524eacb67fb | |
| parent | 5f9815c3f67114645593840a8648bffb1207b8d0 (diff) | |
| download | RSAComb-6b4226c41ec2a2439fb44a312ccaff01769e8212.tar.gz RSAComb-6b4226c41ec2a2439fb44a312ccaff01769e8212.zip | |
Fix minor compilation errors
4 files changed, 106 insertions, 83 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 a807f75..f2d1a5d 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala | |||
| @@ -106,12 +106,11 @@ object RSAComb extends App { | |||
| 106 | /* Command-line options */ | 106 | /* Command-line options */ |
| 107 | val config = RSAConfig.parse(args.toList) | 107 | val config = RSAConfig.parse(args.toList) |
| 108 | 108 | ||
| 109 | val ontology = RSAOntology( | 109 | val rsa = RSAOntology( |
| 110 | config('ontology).get[File], | 110 | config('ontology).get[File], |
| 111 | config('data).get[List[File]], | 111 | config('data).get[List[File]], |
| 112 | None | 112 | None |
| 113 | ) | 113 | ) |
| 114 | val rsa = ontology.toRSA() | ||
| 115 | 114 | ||
| 116 | if (config contains 'query) { | 115 | if (config contains 'query) { |
| 117 | val query = | 116 | val query = |
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala index 4d0f13d..247b5d5 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala | |||
| @@ -80,7 +80,7 @@ object RSAUtil { | |||
| 80 | * construction of the dependency graph is computed regardless. The | 80 | * construction of the dependency graph is computed regardless. The |
| 81 | * input axioms are assumed to be normalized. | 81 | * input axioms are assumed to be normalized. |
| 82 | */ | 82 | */ |
| 83 | private def dependencyGraph( | 83 | def dependencyGraph( |
| 84 | axioms: List[OWLLogicalAxiom], | 84 | axioms: List[OWLLogicalAxiom], |
| 85 | datafiles: List[File] | 85 | datafiles: List[File] |
| 86 | ): (Graph[Resource, DiEdge], Map[String, OWLAxiom]) = { | 86 | ): (Graph[Resource, DiEdge], Map[String, OWLAxiom]) = { |
| @@ -166,18 +166,23 @@ object RSAOntology { | |||
| 166 | 166 | ||
| 167 | import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ | 167 | import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ |
| 168 | 168 | ||
| 169 | /** Manager instance to interface with OWLAPI */ | ||
| 170 | val manager = OWLManager.createOWLOntologyManager() | ||
| 171 | val factory = manager.getOWLDataFactory() | ||
| 172 | |||
| 169 | /** Name of the RDFox data store used for CQ answering */ | 173 | /** Name of the RDFox data store used for CQ answering */ |
| 170 | private val DataStore = "answer_computation" | 174 | private val DataStore = "answer_computation" |
| 171 | 175 | ||
| 172 | /** Simple fresh variable generator */ | 176 | /** Simple fresh variable/class generator */ |
| 173 | private var counter = -1; | 177 | private var counter = -1; |
| 174 | def genFreshVariable(): Variable = { | 178 | def genFreshVariable(): Variable = { |
| 175 | counter += 1 | 179 | counter += 1 |
| 176 | Variable.create(f"I$counter%05d") | 180 | Variable.create(f"I$counter%05d") |
| 177 | } | 181 | } |
| 178 | 182 | def getFreshOWLClass(): OWLClass = { | |
| 179 | /** Manager instance to interface with OWLAPI */ | 183 | counter += 1 |
| 180 | val manager = OWLManager.createOWLOntologyManager() | 184 | factory.getOWLClass(s"X$counter") |
| 185 | } | ||
| 181 | 186 | ||
| 182 | def apply( | 187 | def apply( |
| 183 | axioms: List[OWLLogicalAxiom], | 188 | axioms: List[OWLLogicalAxiom], |
| @@ -254,13 +259,16 @@ class RSAOntology(val axioms: List[OWLLogicalAxiom], val datafiles: File*) { | |||
| 254 | /** Simplify conversion between OWLAPI and RDFox concepts */ | 259 | /** Simplify conversion between OWLAPI and RDFox concepts */ |
| 255 | import implicits.RDFox._ | 260 | import implicits.RDFox._ |
| 256 | import uk.ac.ox.cs.rsacomb.implicits.RSAAxiom._ | 261 | import uk.ac.ox.cs.rsacomb.implicits.RSAAxiom._ |
| 262 | |||
| 263 | /** Simplify conversion between Java and Scala collections */ | ||
| 257 | import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ | 264 | import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ |
| 258 | 265 | ||
| 259 | /** Set of axioms removed during the approximation to RSA */ | 266 | /** Set of axioms removed during the approximation to RSA */ |
| 260 | private var removed: Seq[OWLAxiom] = Seq.empty | 267 | private var removed: Seq[OWLAxiom] = Seq.empty |
| 261 | 268 | ||
| 262 | /** Normalized Horn-ALCHOIQ ontology */ | 269 | /** Normalized Horn-ALCHOIQ ontology */ |
| 263 | val ontology = RSAOntology.manager.createOntology(axioms.asJava) | 270 | val ontology = |
| 271 | RSAOntology.manager.createOntology((axioms: List[OWLAxiom]).asJava) | ||
| 264 | 272 | ||
| 265 | /** OWLAPI internal reasoner instantiated over the approximated ontology */ | 273 | /** OWLAPI internal reasoner instantiated over the approximated ontology */ |
| 266 | private val reasoner = | 274 | private val reasoner = |
| @@ -340,61 +348,61 @@ class RSAOntology(val axioms: List[OWLLogicalAxiom], val datafiles: File*) { | |||
| 340 | * @param graph the graph used to compute the axioms to remove. | 348 | * @param graph the graph used to compute the axioms to remove. |
| 341 | * @param nodemap map from graph nodes to ontology axioms. | 349 | * @param nodemap map from graph nodes to ontology axioms. |
| 342 | */ | 350 | */ |
| 343 | def toRSA(): RSAOntology = Logger.timed( | 351 | // def toRSA(): RSAOntology = Logger.timed( |
| 344 | { | 352 | // { |
| 345 | 353 | ||
| 346 | /* Compute the dependency graph for the ontology */ | 354 | // /* Compute the dependency graph for the ontology */ |
| 347 | val (graph, nodemap) = this.dependencyGraph() | 355 | // val (graph, nodemap) = this.dependencyGraph() |
| 348 | 356 | ||
| 349 | /* Define node colors for the graph visit */ | 357 | // /* Define node colors for the graph visit */ |
| 350 | sealed trait NodeColor | 358 | // sealed trait NodeColor |
| 351 | case object Unvisited extends NodeColor | 359 | // case object Unvisited extends NodeColor |
| 352 | case object Visited extends NodeColor | 360 | // case object Visited extends NodeColor |
| 353 | case object ToDelete extends NodeColor | 361 | // case object ToDelete extends NodeColor |
| 354 | 362 | ||
| 355 | /* Keep track of node colors during graph visit */ | 363 | // /* Keep track of node colors during graph visit */ |
| 356 | var color = Map.from[Resource, NodeColor]( | 364 | // var color = Map.from[Resource, NodeColor]( |
| 357 | graph.nodes.toOuter.map(k => (k, Unvisited)) | 365 | // graph.nodes.toOuter.map(k => (k, Unvisited)) |
| 358 | ) | 366 | // ) |
| 359 | 367 | ||
| 360 | for { | 368 | // for { |
| 361 | component <- graph.componentTraverser().map(_ to Graph) | 369 | // component <- graph.componentTraverser().map(_ to Graph) |
| 362 | edge <- component | 370 | // edge <- component |
| 363 | .outerEdgeTraverser(component.nodes.head) | 371 | // .outerEdgeTraverser(component.nodes.head) |
| 364 | .withKind(BreadthFirst) | 372 | // .withKind(BreadthFirst) |
| 365 | } yield { | 373 | // } yield { |
| 366 | val source = edge._1 | 374 | // val source = edge._1 |
| 367 | val target = edge._2 | 375 | // val target = edge._2 |
| 368 | color(source) match { | 376 | // color(source) match { |
| 369 | case Unvisited | Visited => { | 377 | // case Unvisited | Visited => { |
| 370 | color(target) match { | 378 | // color(target) match { |
| 371 | case Unvisited => | 379 | // case Unvisited => |
| 372 | color(source) = Visited; | 380 | // color(source) = Visited; |
| 373 | color(target) = Visited | 381 | // color(target) = Visited |
| 374 | case Visited => | 382 | // case Visited => |
| 375 | color(source) = ToDelete | 383 | // color(source) = ToDelete |
| 376 | case ToDelete => | 384 | // case ToDelete => |
| 377 | color(source) = Visited | 385 | // color(source) = Visited |
| 378 | } | 386 | // } |
| 379 | } | 387 | // } |
| 380 | case ToDelete => | 388 | // case ToDelete => |
| 381 | } | 389 | // } |
| 382 | } | 390 | // } |
| 383 | 391 | ||
| 384 | val toDelete = color.iterator.collect { case (resource: IRI, ToDelete) => | 392 | // val toDelete = color.iterator.collect { case (resource: IRI, ToDelete) => |
| 385 | nodemap(resource.getIRI) | 393 | // nodemap(resource.getIRI) |
| 386 | }.toSeq | 394 | // }.toSeq |
| 387 | 395 | ||
| 388 | /* Remove axioms from approximated ontology */ | 396 | // /* Remove axioms from approximated ontology */ |
| 389 | ontology.removeAxioms(toDelete: _*) | 397 | // ontology.removeAxioms(toDelete: _*) |
| 390 | this.removed = toDelete | 398 | // this.removed = toDelete |
| 391 | 399 | ||
| 392 | /* Return RSA ontology */ | 400 | // /* Return RSA ontology */ |
| 393 | RSAOntology(ontology, datafiles: _*) | 401 | // RSAOntology(ontology, datafiles: _*) |
| 394 | }, | 402 | // }, |
| 395 | "Horn-ALCHOIQ to RSA approximation:", | 403 | // "Horn-ALCHOIQ to RSA approximation:", |
| 396 | Logger.DEBUG | 404 | // Logger.DEBUG |
| 397 | ) | 405 | // ) |
| 398 | // val edges1 = Seq('A ~> 'B, 'B ~> 'C, 'C ~> 'D, 'D ~> 'H, 'H ~> | 406 | // val edges1 = Seq('A ~> 'B, 'B ~> 'C, 'C ~> 'D, 'D ~> 'H, 'H ~> |
| 399 | // 'G, 'G ~> 'F, 'E ~> 'A, 'E ~> 'F, 'B ~> 'E, 'F ~> 'G, 'B ~> 'F, | 407 | // 'G, 'G ~> 'F, 'E ~> 'A, 'E ~> 'F, 'B ~> 'E, 'F ~> 'G, 'B ~> 'F, |
| 400 | // 'C ~> 'G, 'D ~> 'C, 'H ~> 'D) | 408 | // 'C ~> 'G, 'D ~> 'C, 'H ~> 'D) |
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 3437bcd..8a86d19 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 | |||
| @@ -2,13 +2,18 @@ package uk.ac.ox.cs.rsacomb.approximation | |||
| 2 | 2 | ||
| 3 | import java.io.File | 3 | import java.io.File |
| 4 | 4 | ||
| 5 | import org.semanticweb.owlapi.model._ | 5 | import org.semanticweb.owlapi.apibinding.OWLManager |
| 6 | import org.semanticweb.owlapi.model.{IRI => _, _} | ||
| 7 | |||
| 8 | import tech.oxfordsemantic.jrdfox.logic.expression.{Resource, IRI} | ||
| 6 | 9 | ||
| 7 | import scala.collection.mutable.{Set, Map} | 10 | import scala.collection.mutable.{Set, Map} |
| 8 | import scalax.collection.Graph | 11 | import scalax.collection.Graph |
| 9 | import scalax.collection.GraphPredef._, scalax.collection.GraphEdge._ | 12 | import scalax.collection.GraphPredef._, scalax.collection.GraphEdge._ |
| 10 | import scalax.collection.GraphTraversal._ | 13 | import scalax.collection.GraphTraversal._ |
| 11 | 14 | ||
| 15 | import uk.ac.ox.cs.rsacomb.RSAOntology | ||
| 16 | import uk.ac.ox.cs.rsacomb.RSAUtil | ||
| 12 | import uk.ac.ox.cs.rsacomb.converter.Normalizer | 17 | import uk.ac.ox.cs.rsacomb.converter.Normalizer |
| 13 | 18 | ||
| 14 | /** Approximation algorithm that mantains soundness for CQ answering. | 19 | /** Approximation algorithm that mantains soundness for CQ answering. |
| @@ -28,6 +33,16 @@ import uk.ac.ox.cs.rsacomb.converter.Normalizer | |||
| 28 | */ | 33 | */ |
| 29 | class LowerBound extends Approximation { | 34 | class LowerBound extends Approximation { |
| 30 | 35 | ||
| 36 | /** Simplify conversion between Java and Scala collections */ | ||
| 37 | import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ | ||
| 38 | |||
| 39 | /** Simplify conversion between OWLAPI and RDFox concepts */ | ||
| 40 | import uk.ac.ox.cs.rsacomb.implicits.RDFox._ | ||
| 41 | |||
| 42 | /** Manager instance to interface with OWLAPI */ | ||
| 43 | val manager = OWLManager.createOWLOntologyManager() | ||
| 44 | val factory = manager.getOWLDataFactory() | ||
| 45 | |||
| 31 | val normalizer = new Normalizer() | 46 | val normalizer = new Normalizer() |
| 32 | 47 | ||
| 33 | /** Main entry point for the approximation algorithm */ | 48 | /** Main entry point for the approximation algorithm */ |
| @@ -36,14 +51,14 @@ class LowerBound extends Approximation { | |||
| 36 | datafiles: List[File] | 51 | datafiles: List[File] |
| 37 | ): List[OWLLogicalAxiom] = { | 52 | ): List[OWLLogicalAxiom] = { |
| 38 | /* Normalize axioms */ | 53 | /* Normalize axioms */ |
| 39 | val axioms1 = axioms flatMap normalizer.normalize(_) | 54 | val axioms1 = ontology flatMap normalizer.normalize |
| 40 | /* Delete any axiom outside of ALCHOIQ */ | 55 | /* Delete any axiom outside of ALCHOIQ */ |
| 41 | val axioms2 = axioms1 filterNot inHornLACHOIQ | 56 | val axioms2 = axioms1 filterNot inALCHOIQ |
| 42 | /* Shift any axiom with disjunction on the rhs */ | 57 | /* Shift any axiom with disjunction on the rhs */ |
| 43 | val axioms3 = for { | 58 | val axioms3 = for { |
| 44 | a1 <- axioms1 | 59 | a1 <- axioms1 |
| 45 | a2 <- shift(a1) | 60 | a2 <- shift(a1) |
| 46 | a3 <- normalize(a2) | 61 | a3 <- normalizer.normalize(a2) |
| 47 | } yield a3 | 62 | } yield a3 |
| 48 | /* Approximate to RSA */ | 63 | /* Approximate to RSA */ |
| 49 | toRSA(axioms3, datafiles) | 64 | toRSA(axioms3, datafiles) |
| @@ -113,8 +128,12 @@ class LowerBound extends Approximation { | |||
| 113 | val sup = a.getSuperClass.getNNF | 128 | val sup = a.getSuperClass.getNNF |
| 114 | sup match { | 129 | sup match { |
| 115 | case sup: OWLObjectUnionOf => { | 130 | case sup: OWLObjectUnionOf => { |
| 116 | val body = sub.asConjunctSet.map((atom) => (atom, freshOWLClass())) | 131 | val body = sub.asConjunctSet.map((atom) => |
| 117 | val head = sup.asDisjunctSet.map((atom) => (atom, freshOWLClass())) | 132 | (atom, RSAOntology.getFreshOWLClass()) |
| 133 | ) | ||
| 134 | val head = sup.asDisjunctSet.map((atom) => | ||
| 135 | (atom, RSAOntology.getFreshOWLClass()) | ||
| 136 | ) | ||
| 118 | 137 | ||
| 119 | val r1 = | 138 | val r1 = |
| 120 | factory.getOWLSubClassOfAxiom( | 139 | factory.getOWLSubClassOfAxiom( |
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/Normalizer.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/Normalizer.scala index 5329f26..4b298f4 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/Normalizer.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/Normalizer.scala | |||
| @@ -4,6 +4,7 @@ import org.semanticweb.owlapi.apibinding.OWLManager | |||
| 4 | import org.semanticweb.owlapi.model._ | 4 | import org.semanticweb.owlapi.model._ |
| 5 | 5 | ||
| 6 | import uk.ac.ox.cs.rsacomb.util.Logger | 6 | import uk.ac.ox.cs.rsacomb.util.Logger |
| 7 | import uk.ac.ox.cs.rsacomb.RSAOntology | ||
| 7 | 8 | ||
| 8 | object Normalizer { | 9 | object Normalizer { |
| 9 | 10 | ||
| @@ -25,12 +26,6 @@ class Normalizer() { | |||
| 25 | /** Simplify conversion between Java and Scala collections */ | 26 | /** Simplify conversion between Java and Scala collections */ |
| 26 | import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ | 27 | import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ |
| 27 | 28 | ||
| 28 | private var counter = -1 | ||
| 29 | def freshOWLClass(): OWLClass = { | ||
| 30 | counter += 1 | ||
| 31 | factory.getOWLClass(s"X$counter") | ||
| 32 | } | ||
| 33 | |||
| 34 | /** Statistics */ | 29 | /** Statistics */ |
| 35 | var discarded = 0 | 30 | var discarded = 0 |
| 36 | var shifted = 0 | 31 | var shifted = 0 |
| @@ -58,7 +53,7 @@ class Normalizer() { | |||
| 58 | * C c D -> { C c X, X c D } | 53 | * C c D -> { C c X, X c D } |
| 59 | */ | 54 | */ |
| 60 | case _ if !sub.isOWLClass && !sup.isOWLClass => { | 55 | case _ if !sub.isOWLClass && !sup.isOWLClass => { |
| 61 | val cls = freshOWLClass() | 56 | val cls = RSAOntology.getFreshOWLClass() |
| 62 | Seq( | 57 | Seq( |
| 63 | factory.getOWLSubClassOfAxiom(sub, cls), | 58 | factory.getOWLSubClassOfAxiom(sub, cls), |
| 64 | factory.getOWLSubClassOfAxiom(cls, sup) | 59 | factory.getOWLSubClassOfAxiom(cls, sup) |
| @@ -79,7 +74,7 @@ class Normalizer() { | |||
| 79 | if (conj.isOWLClass) | 74 | if (conj.isOWLClass) |
| 80 | (acc1 :+ conj, acc2) | 75 | (acc1 :+ conj, acc2) |
| 81 | else { | 76 | else { |
| 82 | val cls = freshOWLClass() | 77 | val cls = RSAOntology.getFreshOWLClass() |
| 83 | ( | 78 | ( |
| 84 | acc1 :+ cls, | 79 | acc1 :+ cls, |
| 85 | acc2 :+ factory.getOWLSubClassOfAxiom(conj, cls) | 80 | acc2 :+ factory.getOWLSubClassOfAxiom(conj, cls) |
| @@ -138,7 +133,7 @@ class Normalizer() { | |||
| 138 | */ | 133 | */ |
| 139 | case (sub: OWLObjectSomeValuesFrom, _) | 134 | case (sub: OWLObjectSomeValuesFrom, _) |
| 140 | if !sub.getFiller.isOWLClass => { | 135 | if !sub.getFiller.isOWLClass => { |
| 141 | val cls = freshOWLClass() | 136 | val cls = RSAOntology.getFreshOWLClass() |
| 142 | Seq( | 137 | Seq( |
| 143 | factory.getOWLSubClassOfAxiom(sub.getFiller, cls), | 138 | factory.getOWLSubClassOfAxiom(sub.getFiller, cls), |
| 144 | factory.getOWLSubClassOfAxiom( | 139 | factory.getOWLSubClassOfAxiom( |
| @@ -153,7 +148,7 @@ class Normalizer() { | |||
| 153 | */ | 148 | */ |
| 154 | case (_, sup: OWLObjectSomeValuesFrom) | 149 | case (_, sup: OWLObjectSomeValuesFrom) |
| 155 | if !sup.getFiller.isOWLClass => { | 150 | if !sup.getFiller.isOWLClass => { |
| 156 | val cls = freshOWLClass() | 151 | val cls = RSAOntology.getFreshOWLClass() |
| 157 | Seq( | 152 | Seq( |
| 158 | factory.getOWLSubClassOfAxiom(cls, sup.getFiller), | 153 | factory.getOWLSubClassOfAxiom(cls, sup.getFiller), |
| 159 | factory.getOWLSubClassOfAxiom( | 154 | factory.getOWLSubClassOfAxiom( |
| @@ -298,7 +293,7 @@ class Normalizer() { | |||
| 298 | ) | 293 | ) |
| 299 | case (_, sup: OWLObjectMaxCardinality) | 294 | case (_, sup: OWLObjectMaxCardinality) |
| 300 | if sup.getCardinality == 1 && !sup.getFiller.isOWLClass => { | 295 | if sup.getCardinality == 1 && !sup.getFiller.isOWLClass => { |
| 301 | val cls = freshOWLClass() | 296 | val cls = RSAOntology.getFreshOWLClass() |
| 302 | Seq( | 297 | Seq( |
| 303 | factory.getOWLSubClassOfAxiom(cls, sup.getFiller), | 298 | factory.getOWLSubClassOfAxiom(cls, sup.getFiller), |
| 304 | factory.getOWLSubClassOfAxiom( | 299 | factory.getOWLSubClassOfAxiom( |
| @@ -488,7 +483,7 @@ class Normalizer() { | |||
| 488 | * C(a) -> { X(a), X c C } | 483 | * C(a) -> { X(a), X c C } |
| 489 | */ | 484 | */ |
| 490 | case a: OWLClassAssertionAxiom if !a.getClassExpression.isOWLClass => { | 485 | case a: OWLClassAssertionAxiom if !a.getClassExpression.isOWLClass => { |
| 491 | val cls = freshOWLClass() | 486 | val cls = RSAOntology.getFreshOWLClass() |
| 492 | Seq( | 487 | Seq( |
| 493 | factory.getOWLClassAssertionAxiom(cls, a.getIndividual), | 488 | factory.getOWLClassAssertionAxiom(cls, a.getIndividual), |
| 494 | factory.getOWLSubClassOfAxiom(cls, a.getClassExpression) | 489 | factory.getOWLSubClassOfAxiom(cls, a.getClassExpression) |
| @@ -532,8 +527,10 @@ class Normalizer() { | |||
| 532 | sub: OWLClassExpression, | 527 | sub: OWLClassExpression, |
| 533 | sup: OWLObjectUnionOf | 528 | sup: OWLObjectUnionOf |
| 534 | ): Seq[OWLLogicalAxiom] = { | 529 | ): Seq[OWLLogicalAxiom] = { |
| 535 | val body = sub.asConjunctSet.map((atom) => (atom, freshOWLClass())) | 530 | val body = |
| 536 | val head = sup.asDisjunctSet.map((atom) => (atom, freshOWLClass())) | 531 | sub.asConjunctSet.map((atom) => (atom, RSAOntology.getFreshOWLClass())) |
| 532 | val head = | ||
| 533 | sup.asDisjunctSet.map((atom) => (atom, RSAOntology.getFreshOWLClass())) | ||
| 537 | 534 | ||
| 538 | /* Update statistics */ | 535 | /* Update statistics */ |
| 539 | shifted += 1 | 536 | shifted += 1 |
