aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/rsacomb/RSAOntology.scala2
-rw-r--r--src/test/scala/rsacomb/CanonicalModelSpec.scala82
2 files changed, 70 insertions, 14 deletions
diff --git a/src/main/scala/rsacomb/RSAOntology.scala b/src/main/scala/rsacomb/RSAOntology.scala
index aa84308..c1d3ba9 100644
--- a/src/main/scala/rsacomb/RSAOntology.scala
+++ b/src/main/scala/rsacomb/RSAOntology.scala
@@ -270,7 +270,7 @@ trait RSAOntology {
270 .filterNot(_.isOWLBottomObjectProperty()) 270 .filterNot(_.isOWLBottomObjectProperty())
271 } 271 }
272 272
273 private def self(axiom: OWLSubClassOfAxiom): Set[Term] = { 273 def self(axiom: OWLSubClassOfAxiom): Set[Term] = {
274 // Assuming just one role in the signature of a T5 axiom 274 // Assuming just one role in the signature of a T5 axiom
275 val role = axiom.objectPropertyExpressionsInSignature(0) 275 val role = axiom.objectPropertyExpressionsInSignature(0)
276 if (this.confl(role).contains(role)) { 276 if (this.confl(role).contains(role)) {
diff --git a/src/test/scala/rsacomb/CanonicalModelSpec.scala b/src/test/scala/rsacomb/CanonicalModelSpec.scala
index 44c4441..d783b12 100644
--- a/src/test/scala/rsacomb/CanonicalModelSpec.scala
+++ b/src/test/scala/rsacomb/CanonicalModelSpec.scala
@@ -5,6 +5,7 @@ import org.scalatest.{FlatSpec, Matchers, LoneElement}
5 5
6import org.semanticweb.owlapi.model._ 6import org.semanticweb.owlapi.model._
7import uk.ac.manchester.cs.owl.owlapi._ 7import uk.ac.manchester.cs.owl.owlapi._
8import org.semanticweb.owlapi.dlsyntax.renderer.DLSyntaxObjectRenderer
8 9
9import tech.oxfordsemantic.jrdfox.logic.{Rule, Variable} 10import tech.oxfordsemantic.jrdfox.logic.{Rule, Variable}
10 11
@@ -13,34 +14,89 @@ import scala.collection.JavaConverters._
13import rsacomb.RSA._ 14import rsacomb.RSA._
14import rsacomb.RDFoxUtil._ 15import rsacomb.RDFoxUtil._
15 16
16object CanonicalModelSpec { 17object Ontology1_CanonicalModelSpec {
17 18
18 val ontology1_path: File = new File("examples/example1.owl") 19 /* Renderer to display OWL Axioms with DL syntax*/
19 val ontology1 = RSA.loadOntology(ontology1_path) 20 val renderer = new DLSyntaxObjectRenderer()
20 val program1 = ontology1.canonicalModel
21 21
22 val axiom1 = new OWLSubClassOfAxiomImpl( 22 val ontology_path: File = new File("examples/example1.owl")
23 val ontology = RSA.loadOntology(ontology_path)
24 val program = ontology.canonicalModel
25
26 val roleR = new OWLObjectPropertyImpl(RSA.base("R"))
27 val roleS = new OWLObjectPropertyImpl(RSA.base("S"))
28 val roleT = new OWLObjectPropertyImpl(RSA.base("T"))
29 val roleR_inv = roleR.getInverseProperty()
30 val roleS_inv = roleS.getInverseProperty()
31 val roleT_inv = roleT.getInverseProperty()
32
33 val AsubClassOfD = new OWLSubClassOfAxiomImpl(
23 new OWLClassImpl(RSA.base("A")), 34 new OWLClassImpl(RSA.base("A")),
24 new OWLClassImpl(RSA.base("D")), 35 new OWLClassImpl(RSA.base("D")),
25 Seq().asJava 36 Seq().asJava
26 ) 37 )
27 38
39 val DsomeValuesFromRB = new OWLSubClassOfAxiomImpl(
40 new OWLClassImpl(RSA.base("D")),
41 new OWLObjectSomeValuesFromImpl(
42 roleR,
43 new OWLClassImpl(RSA.base("B"))
44 ),
45 Seq().asJava
46 )
47
28} // object OWLAxiomSpec 48} // object OWLAxiomSpec
29 49
30class CanonicalModelSpec extends FlatSpec with Matchers with LoneElement { 50class Ontology1_CanonicalModelSpec
51 extends FlatSpec
52 with Matchers
53 with LoneElement {
31 54
32 import CanonicalModelSpec._ 55 import Ontology1_CanonicalModelSpec._
33 56
34 // Example 1 57 "The program generated from Example #1" should "not be empty" in {
35 "The program generated from Example1" should "not be empty" in { 58 program should not be empty
36 program1 should not be empty
37 } 59 }
38 60
39 axiom1.toString should "be converted into a single Rule" in { 61 renderer.render(AsubClassOfD) should "be converted into a single Rule" in {
40 val varX = Variable.create("X") 62 val varX = Variable.create("X")
41 val visitor = ProgramGenerator(ontology1, varX) 63 val visitor = ProgramGenerator(ontology, varX)
42 val rules = axiom1.accept(visitor) 64 val rules = AsubClassOfD.accept(visitor)
43 rules.loneElement shouldBe a[Rule] 65 rules.loneElement shouldBe a[Rule]
44 } 66 }
45 67
68 renderer.render(roleR) should "be safe" in {
69 ontology.unsafeRoles should not contain roleR
70 }
71
72 it should "contain S in its conflict set" in {
73 ontology.confl(roleR) should contain(roleS)
74 }
75
76 renderer.render(roleS) should "be safe" in {
77 ontology.unsafeRoles should not contain roleS
78 }
79
80 it should "contain R in its conflict set" in {
81 ontology.confl(roleS) should contain(roleR)
82 }
83
84 renderer.render(roleS_inv) should "be unsafe" in {
85 ontology.unsafeRoles should contain(roleS_inv)
86 }
87
88 it should ("contain " + renderer.render(
89 roleR_inv
90 ) + " in its conflict set") in {
91 ontology.confl(roleS_inv) should contain(roleR_inv)
92 }
93
94 renderer.render(
95 DsomeValuesFromRB
96 ) should "produce 5 rules" ignore {
97 val varX = Variable.create("X")
98 val visitor = ProgramGenerator(ontology, varX)
99 val rules = DsomeValuesFromRB.accept(visitor)
100 rules should have length 5
101 }
46} // class OWLAxiomSpec 102} // class OWLAxiomSpec