aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/rsacomb/CanonicalModelSpec.scala
blob: d783b125115e531825f31efbfe6f24851f5844b6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package rsacomb

import java.io.File
import org.scalatest.{FlatSpec, Matchers, LoneElement}

import org.semanticweb.owlapi.model._
import uk.ac.manchester.cs.owl.owlapi._
import org.semanticweb.owlapi.dlsyntax.renderer.DLSyntaxObjectRenderer

import tech.oxfordsemantic.jrdfox.logic.{Rule, Variable}

import scala.collection.JavaConverters._

import rsacomb.RSA._
import rsacomb.RDFoxUtil._

object Ontology1_CanonicalModelSpec {

  /* Renderer to display OWL Axioms with DL syntax*/
  val renderer = new DLSyntaxObjectRenderer()

  val ontology_path: File = new File("examples/example1.owl")
  val ontology = RSA.loadOntology(ontology_path)
  val program = ontology.canonicalModel

  val roleR = new OWLObjectPropertyImpl(RSA.base("R"))
  val roleS = new OWLObjectPropertyImpl(RSA.base("S"))
  val roleT = new OWLObjectPropertyImpl(RSA.base("T"))
  val roleR_inv = roleR.getInverseProperty()
  val roleS_inv = roleS.getInverseProperty()
  val roleT_inv = roleT.getInverseProperty()

  val AsubClassOfD = new OWLSubClassOfAxiomImpl(
    new OWLClassImpl(RSA.base("A")),
    new OWLClassImpl(RSA.base("D")),
    Seq().asJava
  )

  val DsomeValuesFromRB = new OWLSubClassOfAxiomImpl(
    new OWLClassImpl(RSA.base("D")),
    new OWLObjectSomeValuesFromImpl(
      roleR,
      new OWLClassImpl(RSA.base("B"))
    ),
    Seq().asJava
  )

} // object OWLAxiomSpec

class Ontology1_CanonicalModelSpec
    extends FlatSpec
    with Matchers
    with LoneElement {

  import Ontology1_CanonicalModelSpec._

  "The program generated from Example #1" should "not be empty" in {
    program should not be empty
  }

  renderer.render(AsubClassOfD) should "be converted into a single Rule" in {
    val varX = Variable.create("X")
    val visitor = ProgramGenerator(ontology, varX)
    val rules = AsubClassOfD.accept(visitor)
    rules.loneElement shouldBe a[Rule]
  }

  renderer.render(roleR) should "be safe" in {
    ontology.unsafeRoles should not contain roleR
  }

  it should "contain S in its conflict set" in {
    ontology.confl(roleR) should contain(roleS)
  }

  renderer.render(roleS) should "be safe" in {
    ontology.unsafeRoles should not contain roleS
  }

  it should "contain R in its conflict set" in {
    ontology.confl(roleS) should contain(roleR)
  }

  renderer.render(roleS_inv) should "be unsafe" in {
    ontology.unsafeRoles should contain(roleS_inv)
  }

  it should ("contain " + renderer.render(
    roleR_inv
  ) + " in its conflict set") in {
    ontology.confl(roleS_inv) should contain(roleR_inv)
  }

  renderer.render(
    DsomeValuesFromRB
  ) should "produce 5 rules" ignore {
    val varX = Variable.create("X")
    val visitor = ProgramGenerator(ontology, varX)
    val rules = DsomeValuesFromRB.accept(visitor)
    rules should have length 5
  }
} // class OWLAxiomSpec