aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorFederico Igne <federico.igne@cs.ox.ac.uk>2020-12-01 22:53:43 +0000
committerFederico Igne <federico.igne@cs.ox.ac.uk>2020-12-01 22:53:43 +0000
commit30f1449365f51d3e138a3fcfd46aca2a4a4c55b9 (patch)
tree3aa0b1abb667356602cfeac3086b2818810aa419 /src/test
parent6462d8566cc10b47473803e3e9e9547cec6524be (diff)
downloadRSAComb-30f1449365f51d3e138a3fcfd46aca2a4a4c55b9.tar.gz
RSAComb-30f1449365f51d3e138a3fcfd46aca2a4a4c55b9.zip
Add alternative conversion of axioms using switch-cases
This is part of an effort to move away from the Java-style visitor pattern pushed by the OWLAPI and RDFox. Using a Scala approach will allow us to be more flexible in the long run.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/uk/ac/ox/cs/rsacomb/RDFoxConverterSpec.scala104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/test/scala/uk/ac/ox/cs/rsacomb/RDFoxConverterSpec.scala b/src/test/scala/uk/ac/ox/cs/rsacomb/RDFoxConverterSpec.scala
new file mode 100644
index 0000000..35af464
--- /dev/null
+++ b/src/test/scala/uk/ac/ox/cs/rsacomb/RDFoxConverterSpec.scala
@@ -0,0 +1,104 @@
1package rsacomb
2
3import org.scalatest.LoneElement
4import org.scalatest.flatspec.AnyFlatSpec
5import org.scalatest.matchers.should.Matchers
6import org.semanticweb.owlapi.apibinding.OWLManager
7import org.semanticweb.owlapi.model.OWLOntologyManager
8
9import tech.oxfordsemantic.jrdfox.logic.datalog.TupleTableAtom
10import tech.oxfordsemantic.jrdfox.logic.expression.{Variable, IRI}
11import uk.ac.ox.cs.rsacomb.converter.RDFoxConverter
12import uk.ac.ox.cs.rsacomb.suffix.{Empty, Forward, Backward, Inverse}
13import uk.ac.ox.cs.rsacomb.converter.SkolemStrategy
14
15object RDFoxConverterSpec {
16
17 val manager = OWLManager.createOWLOntologyManager()
18 val factory = manager.getOWLDataFactory
19
20 val term0 = Variable.create("X")
21 val term1 = Variable.create("Y")
22 val iriString0 = "http://example.com/rsacomb/iri0"
23 val iriString1 = "http://example.com/rsacomb/iri1"
24 val iriString2 = "http://example.com/rsacomb/iri2"
25 val suffixes = Seq(
26 Empty,
27 Forward,
28 Backward,
29 Inverse,
30 Forward + Inverse,
31 Backward + Inverse
32 )
33}
34
35class RDFoxConverterSpec extends AnyFlatSpec with Matchers with LoneElement {
36
37 import RDFoxConverterSpec._
38
39 "A class name" should "be converted into a single atom" in {
40 val cls = factory.getOWLClass(iriString0)
41 val atom = TupleTableAtom.rdf(term0, IRI.RDF_TYPE, IRI.create(iriString0))
42 val (res, ext) =
43 RDFoxConverter.convert(cls, term0, List(), SkolemStrategy.None, Empty)
44 res.loneElement shouldEqual atom
45 ext shouldBe empty
46 }
47
48 "A intersection of classes" should "be converted into the union of the conversion of the classes" in {
49 val cls0 = factory.getOWLClass(iriString0)
50 val cls1 = factory.getOWLClass(iriString1)
51 val cls2 = factory.getOWLClass(iriString2)
52 val conj = factory.getOWLObjectIntersectionOf(cls0, cls1, cls2)
53 val (res0, ext0) =
54 RDFoxConverter.convert(cls0, term0, List(), SkolemStrategy.None, Empty)
55 val (res1, ext1) =
56 RDFoxConverter.convert(cls1, term0, List(), SkolemStrategy.None, Empty)
57 val (res2, ext2) =
58 RDFoxConverter.convert(cls2, term0, List(), SkolemStrategy.None, Empty)
59 val (res, ext) =
60 RDFoxConverter.convert(conj, term0, List(), SkolemStrategy.None, Empty)
61 res should contain theSameElementsAs (res0 ::: res1 ::: res2)
62 ext should contain theSameElementsAs (ext0 ::: ext1 ::: ext2)
63 }
64
65 "A singleton intersection" should "correspond to the conversion of the internal class" in {
66 val cls0 = factory.getOWLClass(iriString0)
67 val conj = factory.getOWLObjectIntersectionOf(cls0)
68 val (res0, ext0) =
69 RDFoxConverter.convert(cls0, term0, List(), SkolemStrategy.None, Empty)
70 val (res, ext) =
71 RDFoxConverter.convert(conj, term0, List(), SkolemStrategy.None, Empty)
72 res should contain theSameElementsAs res0
73 ext should contain theSameElementsAs ext0
74 }
75
76 "An object property" should "be converted into an atom with matching predicate" in {
77 val prop = factory.getOWLObjectProperty(iriString0)
78 for (sx <- suffixes) {
79 val atom =
80 TupleTableAtom.rdf(term0, IRI.create(iriString0 :: sx), term1)
81 RDFoxConverter.convert(prop, term0, term1, sx) shouldEqual atom
82 }
83 }
84
85 "The inverse of an object property" should "be converted into an atom with matching negated predicate" in {
86 val prop = factory.getOWLObjectProperty(iriString0)
87 val inv = factory.getOWLObjectInverseOf(prop)
88 for (sx <- Seq(Empty, Forward, Backward)) {
89 val atom =
90 TupleTableAtom.rdf(term0, IRI.create(iriString0 :: sx + Inverse), term1)
91 RDFoxConverter.convert(inv, term0, term1, sx) shouldEqual atom
92 }
93 }
94
95 "A data property" should "be converted into an atom with matching predicate" in {
96 val prop = factory.getOWLDataProperty(iriString0)
97 for (suffix <- suffixes) {
98 val atom =
99 TupleTableAtom.rdf(term0, IRI.create(iriString0 :: suffix), term1)
100 RDFoxConverter.convert(prop, term0, term1, suffix) shouldEqual atom
101 }
102 }
103
104}