aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala')
-rw-r--r--src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala99
1 files changed, 71 insertions, 28 deletions
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 3070ce3..0d07923 100644
--- a/src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala
+++ b/src/test/scala/uk/ac/ox/cs/rsacomb/CanonicalModelSpec.scala
@@ -15,6 +15,8 @@ import tech.oxfordsemantic.jrdfox.logic.expression.Variable
15import scala.collection.JavaConverters._ 15import scala.collection.JavaConverters._
16 16
17import uk.ac.ox.cs.rsacomb.RSAOntology 17import uk.ac.ox.cs.rsacomb.RSAOntology
18import uk.ac.ox.cs.rsacomb.converter.SkolemStrategy
19import uk.ac.ox.cs.rsacomb.suffix.Empty
18import uk.ac.ox.cs.rsacomb.util.{RDFoxUtil, RSA} 20import uk.ac.ox.cs.rsacomb.util.{RDFoxUtil, RSA}
19 21
20object Ontology1_CanonicalModelSpec { 22object Ontology1_CanonicalModelSpec {
@@ -28,6 +30,7 @@ object Ontology1_CanonicalModelSpec {
28 val ontology_path: File = new File("examples/example1.ttl") 30 val ontology_path: File = new File("examples/example1.ttl")
29 val ontology = RSAOntology(ontology_path) 31 val ontology = RSAOntology(ontology_path)
30 val program = ontology.canonicalModel 32 val program = ontology.canonicalModel
33 val converter = program.CanonicalModelConverter
31 34
32 val roleR = new OWLObjectPropertyImpl(base("R")) 35 val roleR = new OWLObjectPropertyImpl(base("R"))
33 val roleS = new OWLObjectPropertyImpl(base("S")) 36 val roleS = new OWLObjectPropertyImpl(base("S"))
@@ -89,9 +92,13 @@ class Ontology1_CanonicalModelSpec
89 } 92 }
90 93
91 renderer.render(AsubClassOfD) should "be converted into a single Rule" in { 94 renderer.render(AsubClassOfD) should "be converted into a single Rule" in {
92 val varX = Variable.create("X") 95 val term = Variable.create("X")
93 val visitor = program.RuleGenerator 96 val unsafe = ontology.unsafeRoles
94 val rules = AsubClassOfD.accept(visitor) 97 val skolem = SkolemStrategy.None
98 val suffix = Empty
99 val (facts, rules) =
100 converter.convert(AsubClassOfD, term, unsafe, skolem, suffix)
101 facts shouldBe empty
95 rules.loneElement shouldBe a[Rule] 102 rules.loneElement shouldBe a[Rule]
96 } 103 }
97 104
@@ -154,10 +161,14 @@ class Ontology1_CanonicalModelSpec
154 renderer.render( 161 renderer.render(
155 AsomeValuesFromSiC 162 AsomeValuesFromSiC
156 ) should "produce 1 rule" in { 163 ) should "produce 1 rule" in {
157 val varX = Variable.create("X") 164 val term = Variable.create("X")
158 val visitor = program.RuleGenerator 165 val unsafe = ontology.unsafeRoles
159 val rules = AsomeValuesFromSiC.accept(visitor) 166 val skolem = SkolemStrategy.None
160 rules should have length 1 167 val suffix = Empty
168 val (facts, rules) =
169 converter.convert(AsomeValuesFromSiC, term, unsafe, skolem, suffix)
170 facts shouldBe empty
171 rules.loneElement shouldBe a[Rule]
161 } 172 }
162 173
163 renderer.render( 174 renderer.render(
@@ -172,15 +183,18 @@ class Ontology1_CanonicalModelSpec
172 ontology.cycle(DsomeValuesFromRB) should have size 48 183 ontology.cycle(DsomeValuesFromRB) should have size 48
173 } 184 }
174 185
175 it should "produce 5 rules" in { 186 it should "produce 48 facts and 98 rules" in {
176 // Rule 1 provides 1 rule (split in 2) + 48 fact 187 // Rule 1 provides 1 rule (split in 2) + 48 fact
177 // Rule 2 provides 0 rules 188 // Rule 2 provides 0 rules
178 // Rule 3 provides 48 rule (split in 2) 189 // Rule 3 provides 48 rule (split in 2)
179 // Then (1*2 + 48) + (0) + (48*2) = 146 190 val term = Variable.create("X")
180 val varX = Variable.create("X") 191 val unsafe = ontology.unsafeRoles
181 val visitor = program.RuleGenerator 192 val skolem = SkolemStrategy.None
182 val rules = DsomeValuesFromRB.accept(visitor) 193 val suffix = Empty
183 rules should have length 146 194 val (facts, rules) =
195 converter.convert(DsomeValuesFromRB, term, unsafe, skolem, suffix)
196 facts should have length 48
197 rules should have length 98
184 } 198 }
185 199
186 renderer.render( 200 renderer.render(
@@ -200,18 +214,26 @@ class Ontology1_CanonicalModelSpec
200 // Rule 2 provides 0 rules 214 // Rule 2 provides 0 rules
201 // Rule 3 provides 32 rule (split in 2) 215 // Rule 3 provides 32 rule (split in 2)
202 // Then (1*2 + 32) + (0) + (32*2) = 98 216 // Then (1*2 + 32) + (0) + (32*2) = 98
203 val varX = Variable.create("X") 217 val term = Variable.create("X")
204 val visitor = program.RuleGenerator 218 val unsafe = ontology.unsafeRoles
205 val rules = DsomeValuesFromRB.accept(visitor) 219 val skolem = SkolemStrategy.None
206 rules should have length 146 220 val suffix = Empty
221 val (facts, rules) =
222 converter.convert(BsomeValuesFromSD, term, unsafe, skolem, suffix)
223 facts should have length 32
224 rules should have length 66
207 } 225 }
208 226
209 renderer.render( 227 renderer.render(
210 SsubPropertyOfT 228 SsubPropertyOfT
211 ) should "produce 2 rules" in { 229 ) should "produce 2 rules" in {
212 val varX = Variable.create("X") 230 val term = Variable.create("X")
213 val visitor = program.RuleGenerator 231 val unsafe = ontology.unsafeRoles
214 val rules = SsubPropertyOfT.accept(visitor) 232 val skolem = SkolemStrategy.None
233 val suffix = Empty
234 val (facts, rules) =
235 converter.convert(SsubPropertyOfT, term, unsafe, skolem, suffix)
236 facts shouldBe empty
215 rules should have length 2 237 rules should have length 2
216 } 238 }
217 239
@@ -228,6 +250,7 @@ object Ontology2_CanonicalModelSpec {
228 val ontology_path: File = new File("examples/example2.owl") 250 val ontology_path: File = new File("examples/example2.owl")
229 val ontology = RSAOntology(ontology_path) 251 val ontology = RSAOntology(ontology_path)
230 val program = ontology.canonicalModel 252 val program = ontology.canonicalModel
253 val converter = program.CanonicalModelConverter
231 254
232 val roleR = new OWLObjectPropertyImpl(base("R")) 255 val roleR = new OWLObjectPropertyImpl(base("R"))
233 val roleS = new OWLObjectPropertyImpl(base("S")) 256 val roleS = new OWLObjectPropertyImpl(base("S"))
@@ -332,8 +355,13 @@ class Ontology2_CanonicalModelSpec
332 renderer.render( 355 renderer.render(
333 AsomeValuesFromRB 356 AsomeValuesFromRB
334 ) should "produce 1 rule" in { 357 ) should "produce 1 rule" in {
335 val visitor = program.RuleGenerator 358 val term = Variable.create("X")
336 val rules = AsomeValuesFromRB.accept(visitor) 359 val unsafe = ontology.unsafeRoles
360 val skolem = SkolemStrategy.None
361 val suffix = Empty
362 val (facts, rules) =
363 converter.convert(AsomeValuesFromRB, term, unsafe, skolem, suffix)
364 facts shouldBe empty
337 rules should have length 1 365 rules should have length 1
338 } 366 }
339 367
@@ -342,8 +370,13 @@ class Ontology2_CanonicalModelSpec
342 renderer.render( 370 renderer.render(
343 BsomeValuesFromSC 371 BsomeValuesFromSC
344 ) should "produce 1 rule" in { 372 ) should "produce 1 rule" in {
345 val visitor = program.RuleGenerator 373 val term = Variable.create("X")
346 val rules = BsomeValuesFromSC.accept(visitor) 374 val unsafe = ontology.unsafeRoles
375 val skolem = SkolemStrategy.None
376 val suffix = Empty
377 val (facts, rules) =
378 converter.convert(BsomeValuesFromSC, term, unsafe, skolem, suffix)
379 facts shouldBe empty
347 rules should have length 1 380 rules should have length 1
348 } 381 }
349 382
@@ -352,8 +385,13 @@ class Ontology2_CanonicalModelSpec
352 renderer.render( 385 renderer.render(
353 CsomeValuesFromTD 386 CsomeValuesFromTD
354 ) should "produce 1 rule" in { 387 ) should "produce 1 rule" in {
355 val visitor = program.RuleGenerator 388 val term = Variable.create("X")
356 val rules = CsomeValuesFromTD.accept(visitor) 389 val unsafe = ontology.unsafeRoles
390 val skolem = SkolemStrategy.None
391 val suffix = Empty
392 val (facts, rules) =
393 converter.convert(CsomeValuesFromTD, term, unsafe, skolem, suffix)
394 facts shouldBe empty
357 rules should have length 1 395 rules should have length 1
358 } 396 }
359 397
@@ -362,8 +400,13 @@ class Ontology2_CanonicalModelSpec
362 renderer.render( 400 renderer.render(
363 DsomeValuesFromPA 401 DsomeValuesFromPA
364 ) should "produce 1 rule" in { 402 ) should "produce 1 rule" in {
365 val visitor = program.RuleGenerator 403 val term = Variable.create("X")
366 val rules = DsomeValuesFromPA.accept(visitor) 404 val unsafe = ontology.unsafeRoles
405 val skolem = SkolemStrategy.None
406 val suffix = Empty
407 val (facts, rules) =
408 converter.convert(DsomeValuesFromPA, term, unsafe, skolem, suffix)
409 facts shouldBe empty
367 rules should have length 1 410 rules should have length 1
368 } 411 }
369 412