diff options
Diffstat (limited to 'src/main/scala/rsacomb/CanonicalModel.scala')
| -rw-r--r-- | src/main/scala/rsacomb/CanonicalModel.scala | 73 |
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 | } |
| 12 | import tech.oxfordsemantic.jrdfox.logic.{ | 12 | import tech.oxfordsemantic.jrdfox.logic.Datatype |
| 13 | IRI, | 13 | import tech.oxfordsemantic.jrdfox.logic.expression.{IRI, Term, Variable} |
| 14 | import tech.oxfordsemantic.jrdfox.logic.datalog.{ | ||
| 14 | BodyFormula, | 15 | BodyFormula, |
| 15 | Atom, | 16 | TupleTableAtom, |
| 16 | Rule, | 17 | Rule |
| 17 | Term, | ||
| 18 | Variable | ||
| 19 | } | 18 | } |
| 19 | |||
| 20 | import scala.collection.JavaConverters._ | 20 | import scala.collection.JavaConverters._ |
| 21 | import rsacomb.RSA._ | 21 | import 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( |
