aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/rsacomb/CanonicalModel.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/rsacomb/CanonicalModel.scala')
-rw-r--r--src/main/scala/rsacomb/CanonicalModel.scala73
1 files changed, 40 insertions, 33 deletions
diff --git a/src/main/scala/rsacomb/CanonicalModel.scala b/src/main/scala/rsacomb/CanonicalModel.scala
index cc89a85..fcc404a 100644
--- a/src/main/scala/rsacomb/CanonicalModel.scala
+++ b/src/main/scala/rsacomb/CanonicalModel.scala
@@ -9,14 +9,14 @@ import org.semanticweb.owlapi.model.{
9 OWLObjectPropertyExpression, 9 OWLObjectPropertyExpression,
10 OWLObjectSomeValuesFrom 10 OWLObjectSomeValuesFrom
11} 11}
12import tech.oxfordsemantic.jrdfox.logic.{ 12import tech.oxfordsemantic.jrdfox.logic.Datatype
13 IRI, 13import tech.oxfordsemantic.jrdfox.logic.expression.{IRI, Term, Variable}
14import tech.oxfordsemantic.jrdfox.logic.datalog.{
14 BodyFormula, 15 BodyFormula,
15 Atom, 16 TupleTableAtom,
16 Rule, 17 Rule
17 Term,
18 Variable
19} 18}
19
20import scala.collection.JavaConverters._ 20import scala.collection.JavaConverters._
21import rsacomb.RSA._ 21import rsacomb.RSA._
22 22
@@ -36,28 +36,35 @@ object ProgramGenerator {
36 val varY = Variable.create("Y") 36 val varY = Variable.create("Y")
37 List( 37 List(
38 Rule.create( 38 Rule.create(
39 Atom.rdf(varX, IRI.create(pred), varY), 39 TupleTableAtom.rdf(varX, IRI.create(pred), varY),
40 Atom.rdf(varX, IRI.create(pred ++ RSASuffix.Forward.getSuffix), varY) 40 TupleTableAtom
41 .rdf(varX, IRI.create(pred ++ RSASuffix.Forward.getSuffix), varY)
41 ), 42 ),
42 Rule.create( 43 Rule.create(
43 Atom.rdf(varX, IRI.create(pred), varY), 44 TupleTableAtom.rdf(varX, IRI.create(pred), varY),
44 Atom.rdf(varX, IRI.create(pred ++ RSASuffix.Backward.getSuffix), varY) 45 TupleTableAtom
46 .rdf(varX, IRI.create(pred ++ RSASuffix.Backward.getSuffix), varY)
45 ), 47 ),
46 Rule.create( 48 Rule.create(
47 Atom.rdf( 49 TupleTableAtom.rdf(
48 varY, 50 varY,
49 IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"), 51 IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"),
50 varX 52 varX
51 ), 53 ),
52 Atom.rdf(varX, IRI.create(pred ++ RSASuffix.Forward.getSuffix), varY) 54 TupleTableAtom
55 .rdf(varX, IRI.create(pred ++ RSASuffix.Forward.getSuffix), varY)
53 ), 56 ),
54 Rule.create( 57 Rule.create(
55 Atom.rdf( 58 TupleTableAtom.rdf(
56 varY, 59 varY,
57 IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"), 60 IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"),
58 varX 61 varX
59 ), 62 ),
60 Atom.rdf(varX, IRI.create(pred ++ RSASuffix.Backward.getSuffix), varY) 63 TupleTableAtom.rdf(
64 varX,
65 IRI.create(pred ++ RSASuffix.Backward.getSuffix),
66 varY
67 )
61 ) 68 )
62 ) 69 )
63 } 70 }
@@ -67,8 +74,8 @@ object ProgramGenerator {
67 .toList 74 .toList
68 } 75 }
69 76
70 def NIs(individuals: List[IRI]): List[Atom] = 77 def NIs(individuals: List[IRI]): List[TupleTableAtom] =
71 individuals.map(Atom.rdf(_, IRI.RDF_TYPE, RSA.internal("NI"))) 78 individuals.map(TupleTableAtom.rdf(_, IRI.RDF_TYPE, RSA.internal("NI")))
72 79
73} 80}
74 81
@@ -91,18 +98,18 @@ class ProgramGenerator(
91 val v0 = IRI.create("v0_" ++ axiom.hashCode.toString) 98 val v0 = IRI.create("v0_" ++ axiom.hashCode.toString)
92 val varX = Variable.create("X") 99 val varX = Variable.create("X")
93 // Predicates 100 // Predicates
94 val atomA: Atom = { 101 val atomA: TupleTableAtom = {
95 val cls = axiom.getSubClass.asInstanceOf[OWLClass].getIRI 102 val cls = axiom.getSubClass.asInstanceOf[OWLClass].getIRI
96 Atom.rdf(varX, IRI.RDF_TYPE, cls) 103 TupleTableAtom.rdf(varX, IRI.RDF_TYPE, cls)
97 } 104 }
98 def notIn(t: Term): Atom = { 105 def notIn(t: Term): TupleTableAtom = {
99 Atom.rdf( 106 TupleTableAtom.rdf(
100 t, 107 t,
101 RSA.internal("notIn"), 108 RSA.internal("notIn"),
102 RSA.internal(unfold.hashCode.toString) 109 RSA.internal(unfold.hashCode.toString)
103 ) 110 )
104 } 111 }
105 val roleRf: Atom = { 112 val roleRf: TupleTableAtom = {
106 val visitor = 113 val visitor =
107 new RDFoxPropertyExprConverter(varX, v0, RSASuffix.Forward) 114 new RDFoxPropertyExprConverter(varX, v0, RSASuffix.Forward)
108 axiom.getSuperClass 115 axiom.getSuperClass
@@ -111,13 +118,13 @@ class ProgramGenerator(
111 .accept(visitor) 118 .accept(visitor)
112 .head 119 .head
113 } 120 }
114 val atomB: Atom = { 121 val atomB: TupleTableAtom = {
115 val cls = axiom.getSuperClass 122 val cls = axiom.getSuperClass
116 .asInstanceOf[OWLObjectSomeValuesFrom] 123 .asInstanceOf[OWLObjectSomeValuesFrom]
117 .getFiller 124 .getFiller
118 .asInstanceOf[OWLClass] 125 .asInstanceOf[OWLClass]
119 .getIRI 126 .getIRI
120 Atom.rdf(v0, IRI.RDF_TYPE, cls) 127 TupleTableAtom.rdf(v0, IRI.RDF_TYPE, cls)
121 } 128 }
122 // TODO: To be consistent with the specifics of the visitor we are 129 // TODO: To be consistent with the specifics of the visitor we are
123 // returning facts as `Rule`s with true body. While this is correct 130 // returning facts as `Rule`s with true body. While this is correct
@@ -142,21 +149,21 @@ class ProgramGenerator(
142 val v1 = IRI.create("v1_" ++ axiom.hashCode.toString) 149 val v1 = IRI.create("v1_" ++ axiom.hashCode.toString)
143 val v2 = IRI.create("v2_" ++ axiom.hashCode.toString) 150 val v2 = IRI.create("v2_" ++ axiom.hashCode.toString)
144 // Predicates 151 // Predicates
145 def atomA(t: Term): Atom = { 152 def atomA(t: Term): TupleTableAtom = {
146 val cls = axiom.getSubClass.asInstanceOf[OWLClass].getIRI 153 val cls = axiom.getSubClass.asInstanceOf[OWLClass].getIRI
147 Atom.rdf(t, IRI.RDF_TYPE, cls) 154 TupleTableAtom.rdf(t, IRI.RDF_TYPE, cls)
148 } 155 }
149 def roleRf(t1: Term, t2: Term): Atom = { 156 def roleRf(t1: Term, t2: Term): TupleTableAtom = {
150 val visitor = new RDFoxPropertyExprConverter(t1, t2, RSASuffix.Forward) 157 val visitor = new RDFoxPropertyExprConverter(t1, t2, RSASuffix.Forward)
151 roleR.accept(visitor).head 158 roleR.accept(visitor).head
152 } 159 }
153 def atomB(t: Term): Atom = { 160 def atomB(t: Term): TupleTableAtom = {
154 val cls = axiom.getSuperClass 161 val cls = axiom.getSuperClass
155 .asInstanceOf[OWLObjectSomeValuesFrom] 162 .asInstanceOf[OWLObjectSomeValuesFrom]
156 .getFiller 163 .getFiller
157 .asInstanceOf[OWLClass] 164 .asInstanceOf[OWLClass]
158 .getIRI 165 .getIRI
159 Atom.rdf(t, IRI.RDF_TYPE, cls) 166 TupleTableAtom.rdf(t, IRI.RDF_TYPE, cls)
160 } 167 }
161 //Rules 168 //Rules
162 List( 169 List(
@@ -179,22 +186,22 @@ class ProgramGenerator(
179 // Fresh Variables 186 // Fresh Variables
180 val v1 = IRI.create("v1_" ++ axiom.hashCode.toString) 187 val v1 = IRI.create("v1_" ++ axiom.hashCode.toString)
181 // Predicates 188 // Predicates
182 def atomA(t: Term): Atom = { 189 def atomA(t: Term): TupleTableAtom = {
183 val cls = axiom.getSubClass.asInstanceOf[OWLClass].getIRI 190 val cls = axiom.getSubClass.asInstanceOf[OWLClass].getIRI
184 Atom.rdf(t, IRI.RDF_TYPE, cls) 191 TupleTableAtom.rdf(t, IRI.RDF_TYPE, cls)
185 } 192 }
186 def roleRf(t: Term): Atom = { 193 def roleRf(t: Term): TupleTableAtom = {
187 val visitor = 194 val visitor =
188 new RDFoxPropertyExprConverter(t, v1, RSASuffix.Forward) 195 new RDFoxPropertyExprConverter(t, v1, RSASuffix.Forward)
189 roleR.accept(visitor).head 196 roleR.accept(visitor).head
190 } 197 }
191 val atomB: Atom = { 198 val atomB: TupleTableAtom = {
192 val cls = axiom.getSuperClass 199 val cls = axiom.getSuperClass
193 .asInstanceOf[OWLObjectSomeValuesFrom] 200 .asInstanceOf[OWLObjectSomeValuesFrom]
194 .getFiller 201 .getFiller
195 .asInstanceOf[OWLClass] 202 .asInstanceOf[OWLClass]
196 .getIRI 203 .getIRI
197 Atom.rdf(v1, IRI.RDF_TYPE, cls) 204 TupleTableAtom.rdf(v1, IRI.RDF_TYPE, cls)
198 } 205 }
199 cycle.flatMap { x => 206 cycle.flatMap { x =>
200 List( 207 List(