aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/uk/ac/ox/cs/rsacomb/converter
diff options
context:
space:
mode:
authorFederico Igne <git@federicoigne.com>2021-07-27 10:34:57 +0100
committerFederico Igne <git@federicoigne.com>2021-07-27 10:34:57 +0100
commitd017662e2d65ec72e7decde3b76591c198da9819 (patch)
tree57193f145cb39223db0b0da6055556aca7d04622 /src/main/scala/uk/ac/ox/cs/rsacomb/converter
parentc597b5efbe9e351a4313ef8fc1215f9e188b1ffd (diff)
parent7d619706551117a485d93d0d6847a25afa6a359d (diff)
downloadRSAComb-0.2.0.tar.gz
RSAComb-0.2.0.zip
Merge branch 'approximation'v0.2.0
Diffstat (limited to 'src/main/scala/uk/ac/ox/cs/rsacomb/converter')
-rw-r--r--src/main/scala/uk/ac/ox/cs/rsacomb/converter/Normalizer.scala26
-rw-r--r--src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala13
2 files changed, 19 insertions, 20 deletions
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 254fd13..285040e 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
@@ -20,6 +20,8 @@ import org.semanticweb.owlapi.apibinding.OWLManager
20import org.semanticweb.owlapi.model._ 20import org.semanticweb.owlapi.model._
21 21
22import uk.ac.ox.cs.rsacomb.util.Logger 22import uk.ac.ox.cs.rsacomb.util.Logger
23import uk.ac.ox.cs.rsacomb.RSAOntology
24import uk.ac.ox.cs.rsacomb.RSAUtil
23 25
24object Normalizer { 26object Normalizer {
25 27
@@ -41,12 +43,6 @@ class Normalizer() {
41 /** Simplify conversion between Java and Scala collections */ 43 /** Simplify conversion between Java and Scala collections */
42 import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ 44 import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._
43 45
44 private var counter = -1
45 def freshOWLClass(): OWLClass = {
46 counter += 1
47 factory.getOWLClass(s"X$counter")
48 }
49
50 /** Statistics */ 46 /** Statistics */
51 var discarded = 0 47 var discarded = 0
52 var shifted = 0 48 var shifted = 0
@@ -74,7 +70,7 @@ class Normalizer() {
74 * C c D -> { C c X, X c D } 70 * C c D -> { C c X, X c D }
75 */ 71 */
76 case _ if !sub.isOWLClass && !sup.isOWLClass => { 72 case _ if !sub.isOWLClass && !sup.isOWLClass => {
77 val cls = freshOWLClass() 73 val cls = RSAUtil.getFreshOWLClass()
78 Seq( 74 Seq(
79 factory.getOWLSubClassOfAxiom(sub, cls), 75 factory.getOWLSubClassOfAxiom(sub, cls),
80 factory.getOWLSubClassOfAxiom(cls, sup) 76 factory.getOWLSubClassOfAxiom(cls, sup)
@@ -95,7 +91,7 @@ class Normalizer() {
95 if (conj.isOWLClass) 91 if (conj.isOWLClass)
96 (acc1 :+ conj, acc2) 92 (acc1 :+ conj, acc2)
97 else { 93 else {
98 val cls = freshOWLClass() 94 val cls = RSAUtil.getFreshOWLClass()
99 ( 95 (
100 acc1 :+ cls, 96 acc1 :+ cls,
101 acc2 :+ factory.getOWLSubClassOfAxiom(conj, cls) 97 acc2 :+ factory.getOWLSubClassOfAxiom(conj, cls)
@@ -154,7 +150,7 @@ class Normalizer() {
154 */ 150 */
155 case (sub: OWLObjectSomeValuesFrom, _) 151 case (sub: OWLObjectSomeValuesFrom, _)
156 if !sub.getFiller.isOWLClass => { 152 if !sub.getFiller.isOWLClass => {
157 val cls = freshOWLClass() 153 val cls = RSAUtil.getFreshOWLClass()
158 Seq( 154 Seq(
159 factory.getOWLSubClassOfAxiom(sub.getFiller, cls), 155 factory.getOWLSubClassOfAxiom(sub.getFiller, cls),
160 factory.getOWLSubClassOfAxiom( 156 factory.getOWLSubClassOfAxiom(
@@ -169,7 +165,7 @@ class Normalizer() {
169 */ 165 */
170 case (_, sup: OWLObjectSomeValuesFrom) 166 case (_, sup: OWLObjectSomeValuesFrom)
171 if !sup.getFiller.isOWLClass => { 167 if !sup.getFiller.isOWLClass => {
172 val cls = freshOWLClass() 168 val cls = RSAUtil.getFreshOWLClass()
173 Seq( 169 Seq(
174 factory.getOWLSubClassOfAxiom(cls, sup.getFiller), 170 factory.getOWLSubClassOfAxiom(cls, sup.getFiller),
175 factory.getOWLSubClassOfAxiom( 171 factory.getOWLSubClassOfAxiom(
@@ -314,7 +310,7 @@ class Normalizer() {
314 ) 310 )
315 case (_, sup: OWLObjectMaxCardinality) 311 case (_, sup: OWLObjectMaxCardinality)
316 if sup.getCardinality == 1 && !sup.getFiller.isOWLClass => { 312 if sup.getCardinality == 1 && !sup.getFiller.isOWLClass => {
317 val cls = freshOWLClass() 313 val cls = RSAUtil.getFreshOWLClass()
318 Seq( 314 Seq(
319 factory.getOWLSubClassOfAxiom(cls, sup.getFiller), 315 factory.getOWLSubClassOfAxiom(cls, sup.getFiller),
320 factory.getOWLSubClassOfAxiom( 316 factory.getOWLSubClassOfAxiom(
@@ -504,7 +500,7 @@ class Normalizer() {
504 * C(a) -> { X(a), X c C } 500 * C(a) -> { X(a), X c C }
505 */ 501 */
506 case a: OWLClassAssertionAxiom if !a.getClassExpression.isOWLClass => { 502 case a: OWLClassAssertionAxiom if !a.getClassExpression.isOWLClass => {
507 val cls = freshOWLClass() 503 val cls = RSAUtil.getFreshOWLClass()
508 Seq( 504 Seq(
509 factory.getOWLClassAssertionAxiom(cls, a.getIndividual), 505 factory.getOWLClassAssertionAxiom(cls, a.getIndividual),
510 factory.getOWLSubClassOfAxiom(cls, a.getClassExpression) 506 factory.getOWLSubClassOfAxiom(cls, a.getClassExpression)
@@ -548,8 +544,10 @@ class Normalizer() {
548 sub: OWLClassExpression, 544 sub: OWLClassExpression,
549 sup: OWLObjectUnionOf 545 sup: OWLObjectUnionOf
550 ): Seq[OWLLogicalAxiom] = { 546 ): Seq[OWLLogicalAxiom] = {
551 val body = sub.asConjunctSet.map((atom) => (atom, freshOWLClass())) 547 val body =
552 val head = sup.asDisjunctSet.map((atom) => (atom, freshOWLClass())) 548 sub.asConjunctSet.map((atom) => (atom, RSAUtil.getFreshOWLClass()))
549 val head =
550 sup.asDisjunctSet.map((atom) => (atom, RSAUtil.getFreshOWLClass()))
553 551
554 /* Update statistics */ 552 /* Update statistics */
555 shifted += 1 553 shifted += 1
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala
index b892ff5..3aa3c5f 100644
--- a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala
+++ b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala
@@ -27,6 +27,7 @@ import tech.oxfordsemantic.jrdfox.logic.datalog.{
27 TupleTableAtom 27 TupleTableAtom
28} 28}
29import tech.oxfordsemantic.jrdfox.logic.expression.{Term, IRI, FunctionCall} 29import tech.oxfordsemantic.jrdfox.logic.expression.{Term, IRI, FunctionCall}
30import uk.ac.ox.cs.rsacomb.RSAUtil
30import uk.ac.ox.cs.rsacomb.RSAOntology 31import uk.ac.ox.cs.rsacomb.RSAOntology
31import uk.ac.ox.cs.rsacomb.suffix.{Empty, Inverse, RSASuffix} 32import uk.ac.ox.cs.rsacomb.suffix.{Empty, Inverse, RSASuffix}
32import uk.ac.ox.cs.rsacomb.util.{RSA, RDFoxUtil} 33import uk.ac.ox.cs.rsacomb.util.{RSA, RDFoxUtil}
@@ -159,14 +160,14 @@ trait RDFoxConverter {
159 } 160 }
160 161
161 case a: OWLSubObjectPropertyOfAxiom => { 162 case a: OWLSubObjectPropertyOfAxiom => {
162 val term1 = RSAOntology.genFreshVariable() 163 val term1 = RSAUtil.genFreshVariable()
163 val body = convert(a.getSubProperty, term, term1, suffix) 164 val body = convert(a.getSubProperty, term, term1, suffix)
164 val head = convert(a.getSuperProperty, term, term1, suffix) 165 val head = convert(a.getSuperProperty, term, term1, suffix)
165 ResultR(List(Rule.create(head, body))) 166 ResultR(List(Rule.create(head, body)))
166 } 167 }
167 168
168 case a: OWLSubDataPropertyOfAxiom => { 169 case a: OWLSubDataPropertyOfAxiom => {
169 val term1 = RSAOntology.genFreshVariable() 170 val term1 = RSAUtil.genFreshVariable()
170 val body = convert(a.getSubProperty, term, term1, suffix) 171 val body = convert(a.getSubProperty, term, term1, suffix)
171 val head = convert(a.getSuperProperty, term, term1, suffix) 172 val head = convert(a.getSuperProperty, term, term1, suffix)
172 ResultR(List(Rule.create(head, body))) 173 ResultR(List(Rule.create(head, body)))
@@ -176,7 +177,7 @@ trait RDFoxConverter {
176 convert(a.asOWLSubClassOfAxiom, term, unsafe, skolem, suffix) 177 convert(a.asOWLSubClassOfAxiom, term, unsafe, skolem, suffix)
177 178
178 case a: OWLObjectPropertyRangeAxiom => { 179 case a: OWLObjectPropertyRangeAxiom => {
179 val term1 = RSAOntology.genFreshVariable() 180 val term1 = RSAUtil.genFreshVariable()
180 val (res, ext) = convert(a.getRange, term, unsafe, skolem, suffix) 181 val (res, ext) = convert(a.getRange, term, unsafe, skolem, suffix)
181 val prop = convert(a.getProperty, term1, term, suffix) 182 val prop = convert(a.getProperty, term1, term, suffix)
182 ResultR(List(Rule.create(res, prop :: ext))) 183 ResultR(List(Rule.create(res, prop :: ext)))
@@ -343,7 +344,7 @@ trait RDFoxConverter {
343 case e: OWLObjectSomeValuesFrom => { 344 case e: OWLObjectSomeValuesFrom => {
344 val cls = e.getFiller() 345 val cls = e.getFiller()
345 val role = e.getProperty() 346 val role = e.getProperty()
346 val varX = RSAOntology.genFreshVariable 347 val varX = RSAUtil.genFreshVariable
347 val (bind, term1) = skolem match { 348 val (bind, term1) = skolem match {
348 case NoSkolem => (None, varX) 349 case NoSkolem => (None, varX)
349 case c: Constant => (None, c.iri) 350 case c: Constant => (None, c.iri)
@@ -370,7 +371,7 @@ trait RDFoxConverter {
370 // Computes the result of rule skolemization. Depending on the used 371 // Computes the result of rule skolemization. Depending on the used
371 // technique it might involve the introduction of additional atoms, 372 // technique it might involve the introduction of additional atoms,
372 // and/or fresh constants and variables. 373 // and/or fresh constants and variables.
373 val varX = RSAOntology.genFreshVariable 374 val varX = RSAUtil.genFreshVariable
374 val (bind, term1) = skolem match { 375 val (bind, term1) = skolem match {
375 case NoSkolem => (None, varX) 376 case NoSkolem => (None, varX)
376 case c: Constant => (None, c.iri) 377 case c: Constant => (None, c.iri)
@@ -395,7 +396,7 @@ trait RDFoxConverter {
395 s"Class expression '$e' has cardinality restriction != 1." 396 s"Class expression '$e' has cardinality restriction != 1."
396 ) 397 )
397 val vars @ (y :: z :: _) = 398 val vars @ (y :: z :: _) =
398 Seq(RSAOntology.genFreshVariable(), RSAOntology.genFreshVariable()) 399 Seq(RSAUtil.genFreshVariable(), RSAUtil.genFreshVariable())
399 val cls = e.getFiller 400 val cls = e.getFiller
400 val role = e.getProperty 401 val role = e.getProperty
401 val (res, ext) = vars.map(convert(cls, _, unsafe, skolem, suffix)).unzip 402 val (res, ext) = vars.map(convert(cls, _, unsafe, skolem, suffix)).unzip