diff options
author | Federico Igne <git@federicoigne.com> | 2021-07-27 10:34:57 +0100 |
---|---|---|
committer | Federico Igne <git@federicoigne.com> | 2021-07-27 10:34:57 +0100 |
commit | d017662e2d65ec72e7decde3b76591c198da9819 (patch) | |
tree | 57193f145cb39223db0b0da6055556aca7d04622 /src/main/scala/uk/ac/ox/cs/rsacomb/converter | |
parent | c597b5efbe9e351a4313ef8fc1215f9e188b1ffd (diff) | |
parent | 7d619706551117a485d93d0d6847a25afa6a359d (diff) | |
download | RSAComb-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.scala | 26 | ||||
-rw-r--r-- | src/main/scala/uk/ac/ox/cs/rsacomb/converter/RDFoxConverter.scala | 13 |
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 | |||
20 | import org.semanticweb.owlapi.model._ | 20 | import org.semanticweb.owlapi.model._ |
21 | 21 | ||
22 | import uk.ac.ox.cs.rsacomb.util.Logger | 22 | import uk.ac.ox.cs.rsacomb.util.Logger |
23 | import uk.ac.ox.cs.rsacomb.RSAOntology | ||
24 | import uk.ac.ox.cs.rsacomb.RSAUtil | ||
23 | 25 | ||
24 | object Normalizer { | 26 | object 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 | } |
29 | import tech.oxfordsemantic.jrdfox.logic.expression.{Term, IRI, FunctionCall} | 29 | import tech.oxfordsemantic.jrdfox.logic.expression.{Term, IRI, FunctionCall} |
30 | import uk.ac.ox.cs.rsacomb.RSAUtil | ||
30 | import uk.ac.ox.cs.rsacomb.RSAOntology | 31 | import uk.ac.ox.cs.rsacomb.RSAOntology |
31 | import uk.ac.ox.cs.rsacomb.suffix.{Empty, Inverse, RSASuffix} | 32 | import uk.ac.ox.cs.rsacomb.suffix.{Empty, Inverse, RSASuffix} |
32 | import uk.ac.ox.cs.rsacomb.util.{RSA, RDFoxUtil} | 33 | import 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 |