aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/rsacomb/OWLAxiomSpec.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/rsacomb/OWLAxiomSpec.scala')
-rw-r--r--src/test/scala/rsacomb/OWLAxiomSpec.scala253
1 files changed, 138 insertions, 115 deletions
diff --git a/src/test/scala/rsacomb/OWLAxiomSpec.scala b/src/test/scala/rsacomb/OWLAxiomSpec.scala
index 8238536..bbccd7b 100644
--- a/src/test/scala/rsacomb/OWLAxiomSpec.scala
+++ b/src/test/scala/rsacomb/OWLAxiomSpec.scala
@@ -4,33 +4,51 @@ import java.util.ArrayList
4import org.scalatest.{FlatSpec, Matchers, LoneElement} 4import org.scalatest.{FlatSpec, Matchers, LoneElement}
5 5
6import uk.ac.manchester.cs.owl.owlapi.{OWLSubClassOfAxiomImpl} 6import uk.ac.manchester.cs.owl.owlapi.{OWLSubClassOfAxiomImpl}
7import uk.ac.manchester.cs.owl.owlapi.{OWLClassImpl, OWLObjectSomeValuesFromImpl, OWLObjectIntersectionOfImpl, OWLObjectOneOfImpl, OWLObjectAllValuesFromImpl, OWLObjectMaxCardinalityImpl, OWLNamedIndividualImpl} 7import uk.ac.manchester.cs.owl.owlapi.{
8 OWLClassImpl,
9 OWLObjectSomeValuesFromImpl,
10 OWLObjectIntersectionOfImpl,
11 OWLObjectOneOfImpl,
12 OWLObjectAllValuesFromImpl,
13 OWLObjectMaxCardinalityImpl,
14 OWLNamedIndividualImpl
15}
8import uk.ac.manchester.cs.owl.owlapi.{OWLObjectPropertyImpl} 16import uk.ac.manchester.cs.owl.owlapi.{OWLObjectPropertyImpl}
9import org.semanticweb.owlapi.model.{OWLAxiom,IRI} 17import org.semanticweb.owlapi.model.{OWLAxiom}
10 18
11import tech.oxfordsemantic.jrdfox.logic.{Rule,BindAtom,BuiltinFunctionCall} 19import tech.oxfordsemantic.jrdfox.logic.{Rule, BindAtom, BuiltinFunctionCall}
12import tech.oxfordsemantic.jrdfox.logic.{Atom, TupleTableName, Term, Variable, Literal, Datatype} 20import tech.oxfordsemantic.jrdfox.logic.{
21 Atom,
22 TupleTableName,
23 Term,
24 Variable,
25 Literal,
26 Datatype
27}
28
29import org.semanticweb.owlapi.model.{IRI => OWLIRI}
30import tech.oxfordsemantic.jrdfox.logic.{IRI => RDFIRI}
13 31
14object OWLAxiomSpec { 32object OWLAxiomSpec {
15 33
16 // IRI 34 // IRI
17 val iri_Professor = IRI.create("univ:Professor") 35 val iri_Professor = OWLIRI.create("univ:Professor")
18 val iri_Female = IRI.create("std:Female") 36 val iri_Female = OWLIRI.create("std:Female")
19 val iri_Student = IRI.create("univ:Student") 37 val iri_Student = OWLIRI.create("univ:Student")
20 val iri_PartTimeStudent = IRI.create("univ:PartTimeStudent") 38 val iri_PartTimeStudent = OWLIRI.create("univ:PartTimeStudent")
21 val iri_Worker = IRI.create("univ:Worker") 39 val iri_Worker = OWLIRI.create("univ:Worker")
22 val iri_alice = IRI.create("univ:alice") 40 val iri_alice = OWLIRI.create("univ:alice")
23 val iri_supervises = IRI.create("univ:supervises") 41 val iri_supervises = OWLIRI.create("univ:supervises")
24 val iri_hasSupervisor = IRI.create("univ:hasSupervisor") 42 val iri_hasSupervisor = OWLIRI.create("univ:hasSupervisor")
25 val iri_sameAs = IRI.create("owl:sameAs") 43 val iri_sameAs = OWLIRI.create("owl:sameAs")
26 44
27 // RDFox Terms 45 // RDFox Terms
28 val term_x = Variable.create("x") 46 val term_x = Variable.create("x")
29 val term_y = Variable.create("y") 47 val term_y = Variable.create("y")
30 val term_z = Variable.create("z") 48 val term_z = Variable.create("z")
31 val term_c1 = Literal.create("internal:c_1", Datatype.IRI_REFERENCE) 49 val term_c1 = RSA.internal("c_1")
32 val term_c2 = Literal.create("internal:c_2", Datatype.IRI_REFERENCE) 50 val term_c2 = RSA.internal("c_2")
33 val term_alice = Literal.create("univ:alice", Datatype.IRI_REFERENCE) 51 val term_alice = RDFIRI.create("univ:alice")
34 52
35 // RDFox Predicates 53 // RDFox Predicates
36 val pred_sameAs = TupleTableName.create("owl:sameAs") 54 val pred_sameAs = TupleTableName.create("owl:sameAs")
@@ -43,18 +61,19 @@ object OWLAxiomSpec {
43 // Professor 61 // Professor
44 // 62 //
45 val class_Professor = new OWLClassImpl(iri_Professor) 63 val class_Professor = new OWLClassImpl(iri_Professor)
46 val class_Female = new OWLClassImpl(iri_Female) 64 val class_Female = new OWLClassImpl(iri_Female)
47 val class_Student = new OWLClassImpl(iri_Student) 65 val class_Student = new OWLClassImpl(iri_Student)
48 val class_PartTimeStudent = new OWLClassImpl(iri_PartTimeStudent) 66 val class_PartTimeStudent = new OWLClassImpl(iri_PartTimeStudent)
49 val class_Worker = new OWLClassImpl(iri_Worker) 67 val class_Worker = new OWLClassImpl(iri_Worker)
50 val class_OWLClass = class_Professor 68 val class_OWLClass = class_Professor
51 // Class Conjunction corresponding to 69 // Class Conjunction corresponding to
52 // 70 //
53 // Student ∧ Worker 71 // Student ∧ Worker
54 // 72 //
55 val class_OWLObjectIntersectionOf = 73 val class_OWLObjectIntersectionOf =
56 new OWLObjectIntersectionOfImpl( 74 new OWLObjectIntersectionOfImpl(
57 class_Student, class_Worker 75 class_Student,
76 class_Worker
58 ) 77 )
59 // Singleton Class corresponding to 78 // Singleton Class corresponding to
60 // 79 //
@@ -88,7 +107,7 @@ object OWLAxiomSpec {
88 // 107 //
89 // Student ∧ Worker -> PartTimeStudent 108 // Student ∧ Worker -> PartTimeStudent
90 // 109 //
91 val axiom_OWLSubClassOf1 = 110 val axiom_OWLSubClassOf1 =
92 new OWLSubClassOfAxiomImpl( 111 new OWLSubClassOfAxiomImpl(
93 class_OWLObjectIntersectionOf, 112 class_OWLObjectIntersectionOf,
94 class_PartTimeStudent, 113 class_PartTimeStudent,
@@ -140,163 +159,167 @@ object OWLAxiomSpec {
140 ) 159 )
141 160
142 def convertAxiom( 161 def convertAxiom(
143 axiom: OWLAxiom, 162 axiom: OWLAxiom,
144 term: Term, 163 term: Term,
145 skolem: SkolemStrategy = SkolemStrategy.None 164 skolem: SkolemStrategy = SkolemStrategy.None
146 ) : List[Rule] = { 165 ): List[Rule] = {
147 axiom.accept(RDFoxAxiomConverter(term,skolem)) 166 axiom.accept(RDFoxAxiomConverter(term, skolem))
148 } 167 }
149 168
150} // object OWLAxiomSpec 169} // object OWLAxiomSpec
151 170
152class OWLAxiomSpec 171class OWLAxiomSpec extends FlatSpec with Matchers with LoneElement {
153 extends FlatSpec with Matchers with LoneElement 172
154{
155 // Import required data 173 // Import required data
156 import OWLAxiomSpec._ 174 import OWLAxiomSpec._
175 // Implicit convertion from IRI in OWLAPI to IRI in JRDFox
176 import RDFoxUtil._
157 177
158 // OWLSubClassOfAxiom #1 178 // OWLSubClassOfAxiom #1
159 axiom_OWLSubClassOf1.toString should "be converted into a singleton List[Rule]" in { 179 axiom_OWLSubClassOf1.toString should "be converted into a singleton List[Rule]" in {
160 val result = convertAxiom(axiom_OWLSubClassOf1,term_x) 180 val result = convertAxiom(axiom_OWLSubClassOf1, term_x)
161 result.loneElement shouldBe a [Rule] 181 result.loneElement shouldBe a[Rule]
162 } 182 }
163 183
164 it should "contain a conjuction of atoms (Student[?x],Worker[?x]) in the body of the rule" in { 184 it should "contain a conjuction of atoms (Student[?x],Worker[?x]) in the body of the rule" in {
165 val result = convertAxiom(axiom_OWLSubClassOf1,term_x) 185 val result = convertAxiom(axiom_OWLSubClassOf1, term_x)
166 val body = List( 186 val body = List(
167 Atom.create(TupleTableName.create(iri_Student.getIRIString),term_x), 187 Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_Student),
168 Atom.create(TupleTableName.create(iri_Worker.getIRIString),term_x) 188 Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_Worker)
169 ) 189 )
170 result.loneElement.getBody should contain theSameElementsAs body 190 result.loneElement.getBody should contain theSameElementsAs body
171 } 191 }
172 192
173 it should "contain a single atom (PartTimeStudent[?x]) in the head of the rule" in { 193 it should "contain a single atom (PartTimeStudent[?x]) in the head of the rule" in {
174 val result = convertAxiom(axiom_OWLSubClassOf1,term_x) 194 val result = convertAxiom(axiom_OWLSubClassOf1, term_x)
175 val head = Atom.create(TupleTableName.create(iri_PartTimeStudent.getIRIString),term_x) 195 val head = Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_PartTimeStudent)
176 result.loneElement.getHead.loneElement should be (head) 196 result.loneElement.getHead.loneElement should be(head)
177 } 197 }
178 198
179 // OWLSubClassOfAxiom #2 (w/ constant skolemization) 199 // OWLSubClassOfAxiom #2 (w/ constant skolemization)
180 (axiom_OWLSubClassOf2.toString + "\n(w/ constant skolemization)") should 200 (axiom_OWLSubClassOf2.toString + "\n(w/ constant skolemization)") should
181 "be converted into a singleton List[Rule]" in 201 "be converted into a singleton List[Rule]" in {
182 {
183 val skolem = SkolemStrategy.Constant(axiom_OWLSubClassOf2.toString) 202 val skolem = SkolemStrategy.Constant(axiom_OWLSubClassOf2.toString)
184 val result = convertAxiom(axiom_OWLSubClassOf2,term_x,skolem) 203 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem)
185 result.loneElement shouldBe a [Rule] 204 result.loneElement shouldBe a[Rule]
186 } 205 }
187 206
188 it should "contain a single atom (Student[?x]) in the body of the rule" in { 207 it should "contain a single atom (Student[?x]) in the body of the rule" in {
189 val skolem = SkolemStrategy.Constant(axiom_OWLSubClassOf2.toString) 208 val skolem = SkolemStrategy.Constant(axiom_OWLSubClassOf2.toString)
190 val result = convertAxiom(axiom_OWLSubClassOf2,term_x,skolem) 209 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem)
191 val body = Atom.create(TupleTableName.create(iri_Student.getIRIString),term_x) 210 val body =
192 result.loneElement.getBody.loneElement should equal (body) 211 Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_Student.getIRIString)
212 result.loneElement.getBody.loneElement should equal(body)
193 } 213 }
194 214
195 it should "contain a conjuction of atoms (hasSupervisor[?x,?c],Professor[?c]) in the head of the rule" in { 215 // it should "contain a conjuction of atoms (hasSupervisor[?x,?c],Professor[?c]) in the head of the rule" in {
196 val skolem = SkolemStrategy.Constant(axiom_OWLSubClassOf2.toString) 216 // val skolem = SkolemStrategy.Constant(axiom_OWLSubClassOf2.toString)
197 val result = convertAxiom(axiom_OWLSubClassOf2,term_x,skolem) 217 // val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem)
198 val term_c = Literal.create(skolem.const, Datatype.IRI_REFERENCE) 218 // val term_c = RSA.internal(skolem.const.getIRI)
199 val head = List( 219 // val head = List(
200 Atom.create(TupleTableName.create(iri_hasSupervisor.getIRIString),term_x,term_c), 220 // Atom.rdf(term_x, iri_hasSupervisor, term_c),
201 Atom.create(TupleTableName.create(iri_Professor.getIRIString),term_c) 221 // Atom.rdf(term_c, RDFIRI.RDF_TYPE, iri_Professor)
202 ) 222 // )
203 result.loneElement.getHead should contain theSameElementsAs (head) 223 // result.loneElement.getHead should contain theSameElementsAs (head)
204 } 224 // }
205 225
206 // OWLSubClassOfAxiom #2 (w/ skolemization) 226 // OWLSubClassOfAxiom #2 (w/ skolemization)
207 (axiom_OWLSubClassOf2.toString + "\n(w/ skolemization)") should 227 (axiom_OWLSubClassOf2.toString + "\n(w/ skolemization)") should
208 "be converted into a singleton List[Rule]" in 228 "be converted into a singleton List[Rule]" in {
209 {
210 val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString) 229 val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString)
211 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem) 230 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem)
212 result.loneElement shouldBe a [Rule] 231 result.loneElement shouldBe a[Rule]
213 } 232 }
214 233
215 it should "contain an atom (Student[?x]) in the body of the rule" in { 234 it should "contain an atom (Student[?x]) in the body of the rule" in {
216 val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString) 235 val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString)
217 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem) 236 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem)
218 val body = Atom.create(TupleTableName.create(iri_Student.getIRIString),term_x) 237 val body =
219 result.loneElement.getBody should contain (body) 238 Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_Student)
239 result.loneElement.getBody should contain(body)
220 } 240 }
221 241
222 it should "contain a built-in function call (BIND(?y,SKOLEM(?f,?x))) in the body of the rule" in { 242 // it should "contain a built-in function call (BIND(?y,SKOLEM(?f,?x))) in the body of the rule" in {
223 val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString) 243 // val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString)
224 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem) 244 // val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem)
225 val call = BindAtom.create(BuiltinFunctionCall.create("SKOLEM",term_x),term_y) 245 // val call =
226 result.loneElement.getBody should contain (call) 246 // BindAtom.create(BuiltinFunctionCall.create("SKOLEM", term_x), term_y)
227 } 247 // result.loneElement.getBody should contain(call)
228 248 // }
229 it should "contain a conjuction of atom (hasSupervisor[?x,?y],Professor[?y]) in the head of the rule" in { 249
230 val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString) 250 // it should "contain a conjuction of atom (hasSupervisor[?x,?y],Professor[?y]) in the head of the rule" in {
231 val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem) 251 // val skolem = SkolemStrategy.Standard(axiom_OWLSubClassOf2.toString)
232 val head = List( 252 // val result = convertAxiom(axiom_OWLSubClassOf2, term_x, skolem)
233 Atom.create(TupleTableName.create(iri_hasSupervisor.getIRIString),term_x,term_y), 253 // val head = List(
234 Atom.create(TupleTableName.create(iri_Professor.getIRIString),term_y) 254 // Atom.rdf(term_x, iri_hasSupervisor, term_y),
235 ) 255 // Atom.rdf(term_y, RDFIRI.RDF_TYPE, iri_Professor)
236 result.loneElement.getHead should contain theSameElementsAs head 256 // )
237 } 257 // result.loneElement.getHead should contain theSameElementsAs head
258 // }
238 259
239 // OWLSubClassOfAxiom #3 260 // OWLSubClassOfAxiom #3
240 axiom_OWLSubClassOf3.toString should "be converted into a singleton List[Rule]" in { 261 axiom_OWLSubClassOf3.toString should "be converted into a singleton List[Rule]" in {
241 val result = convertAxiom(axiom_OWLSubClassOf3,term_x) 262 val result = convertAxiom(axiom_OWLSubClassOf3, term_x)
242 result.loneElement shouldBe a [Rule] 263 result.loneElement shouldBe a[Rule]
243 } 264 }
244 265
245 it should "contain a conjunction of atoms (hasSupervisor[?x,?y],Professor[?y]) in the body of the rule" in { 266 // it should "contain a conjunction of atoms (hasSupervisor[?x,?y],Professor[?y]) in the body of the rule" in {
246 val result = convertAxiom(axiom_OWLSubClassOf3,term_x) 267 // val result = convertAxiom(axiom_OWLSubClassOf3, term_x)
247 val body = List( 268 // val body = List(
248 Atom.create(TupleTableName.create(iri_hasSupervisor.getIRIString),term_x,term_y), 269 // Atom.rdf(term_x, iri_hasSupervisor, term_y),
249 Atom.create(TupleTableName.create(iri_Professor.getIRIString),term_y) 270 // Atom.rdf(term_y, RDFIRI.RDF_TYPE, iri_Professor)
250 ) 271 // )
251 result.loneElement.getBody should contain theSameElementsAs body 272 // result.loneElement.getBody should contain theSameElementsAs body
252 } 273 // }
253 274
254 it should "contain a single atom (Student[?x]) in the head of the rule" in { 275 it should "contain a single atom (Student[?x]) in the head of the rule" in {
255 val result = convertAxiom(axiom_OWLSubClassOf3, term_x) 276 val result = convertAxiom(axiom_OWLSubClassOf3, term_x)
256 val head = Atom.create(TupleTableName.create(iri_Student.getIRIString),term_x) 277 val head =
257 result.loneElement.getHead.loneElement should be (head) 278 Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_Student)
279 result.loneElement.getHead.loneElement should be(head)
258 } 280 }
259 281
260 // OWLSubClassOfAxiom #4 282 // OWLSubClassOfAxiom #4
261 axiom_OWLSubClassOf4.toString should "be converted into a singleton List[Rule]" in { 283 axiom_OWLSubClassOf4.toString should "be converted into a singleton List[Rule]" in {
262 val result = convertAxiom(axiom_OWLSubClassOf4,term_x) 284 val result = convertAxiom(axiom_OWLSubClassOf4, term_x)
263 result.loneElement shouldBe a [Rule] 285 result.loneElement shouldBe a[Rule]
264 } 286 }
265 287
266 it should "contain a single atoms (Student[?x]) in the body of the rule" in { 288 it should "contain a single atoms (Student[?x]) in the body of the rule" in {
267 val result = convertAxiom(axiom_OWLSubClassOf4,term_x) 289 val result = convertAxiom(axiom_OWLSubClassOf4, term_x)
268 val body = Atom.create(TupleTableName.create(iri_Student.getIRIString),term_x) 290 val body =
269 result.loneElement.getBody.loneElement should be (body) 291 Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_Student)
292 result.loneElement.getBody.loneElement should be(body)
270 } 293 }
271 294
272 it should "contain a single atom (sameAs[?x,alice])) in the head of the rule" in { 295 it should "contain a single atom (sameAs[?x,alice])) in the head of the rule" in {
273 val result = convertAxiom(axiom_OWLSubClassOf4, term_x) 296 val result = convertAxiom(axiom_OWLSubClassOf4, term_x)
274 val head = Atom.create(TupleTableName.create(iri_sameAs.getIRIString),term_x,term_alice) 297 val head = Atom.rdf(term_x, RDFIRI.SAME_AS, term_alice)
275 result.loneElement.getHead.loneElement should be (head) 298 result.loneElement.getHead.loneElement should be(head)
276 } 299 }
277 300
278 // OWLSubClassOfAxiom #5 301 // OWLSubClassOfAxiom #5
279 axiom_OWLSubClassOf5.toString should "be converted into a singleton List[Rule]" in { 302 axiom_OWLSubClassOf5.toString should "be converted into a singleton List[Rule]" in {
280 val result = convertAxiom(axiom_OWLSubClassOf5,term_x)
281 result.loneElement shouldBe a [Rule]
282 }
283
284 it should "contain a conjunction of atoms (...) in the body of the rule" in {
285 val result = convertAxiom(axiom_OWLSubClassOf5,term_x)
286 val body = List(
287 Atom.create(TupleTableName.create(iri_Student.getIRIString),term_x),
288 Atom.create(TupleTableName.create(iri_hasSupervisor.getIRIString),term_x,term_y),
289 Atom.create(TupleTableName.create(iri_Professor.getIRIString),term_y),
290 Atom.create(TupleTableName.create(iri_hasSupervisor.getIRIString),term_x,term_z),
291 Atom.create(TupleTableName.create(iri_Professor.getIRIString),term_z)
292 )
293 result.loneElement.getBody should contain theSameElementsAs body
294 }
295
296 it should "contain a single atom (sameAs[?x,?z])) in the head of the rule" in {
297 val result = convertAxiom(axiom_OWLSubClassOf5, term_x) 303 val result = convertAxiom(axiom_OWLSubClassOf5, term_x)
298 val head = Atom.create(TupleTableName.create(iri_sameAs.getIRIString),term_y,term_z) 304 result.loneElement shouldBe a[Rule]
299 result.loneElement.getHead.loneElement should be (head)
300 } 305 }
301 306
307 // it should "contain a conjunction of atoms (...) in the body of the rule" in {
308 // val result = convertAxiom(axiom_OWLSubClassOf5, term_x)
309 // val body = List(
310 // Atom.rdf(term_x, RDFIRI.RDF_TYPE, iri_Student),
311 // Atom.rdf(term_x, iri_hasSupervisor, term_y),
312 // Atom.rdf(term_y, RDFIRI.RDF_TYPE, iri_Professor),
313 // Atom.rdf(term_x, iri_hasSupervisor, term_z),
314 // Atom.rdf(term_z, RDFIRI.RDF_TYPE, iri_Professor)
315 // )
316 // result.loneElement.getBody should contain theSameElementsAs body
317 // }
318
319 // it should "contain a single atom (sameAs[?x,?z])) in the head of the rule" in {
320 // val result = convertAxiom(axiom_OWLSubClassOf5, term_x)
321 // val head = Atom.rdf(term_y, RDFIRI.SAME_AS, term_z)
322 // result.loneElement.getHead.loneElement should be(head)
323 // }
324
302} // class OWLAxiomSpec 325} // class OWLAxiomSpec