aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/rsacomb
diff options
context:
space:
mode:
authorFederico Igne <federico.igne@cs.ox.ac.uk>2020-09-24 20:02:11 +0200
committerFederico Igne <federico.igne@cs.ox.ac.uk>2020-09-24 20:02:11 +0200
commit559740e8503b750ad79d6230ebe5271f10c039c1 (patch)
treefdab65adcc512ce803753ce3e26dad9297d24f10 /src/main/scala/rsacomb
parent099cad0129edb9822cc6ccb044b2109834715bb9 (diff)
downloadRSAComb-559740e8503b750ad79d6230ebe5271f10c039c1.tar.gz
RSAComb-559740e8503b750ad79d6230ebe5271f10c039c1.zip
Add skeleton for canonical model generation
Diffstat (limited to 'src/main/scala/rsacomb')
-rw-r--r--src/main/scala/rsacomb/CanonicalModel.scala57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/main/scala/rsacomb/CanonicalModel.scala b/src/main/scala/rsacomb/CanonicalModel.scala
new file mode 100644
index 0000000..a3b0442
--- /dev/null
+++ b/src/main/scala/rsacomb/CanonicalModel.scala
@@ -0,0 +1,57 @@
1package rsacomb
2
3import org.semanticweb.owlapi.model.{
4 OWLSubObjectPropertyOfAxiom,
5 OWLSubClassOfAxiom,
6 OWLObjectPropertyExpression
7}
8import tech.oxfordsemantic.jrdfox.logic.{Rule, Term}
9
10object ProgramGenerator {
11
12 def apply(
13 term: Term,
14 unsafe: List[OWLObjectPropertyExpression] = List()
15 ): RDFoxAxiomConverter =
16 new ProgramGenerator(term, unsafe)
17
18 def generateRoleRules(
19 roles: List[OWLObjectPropertyExpression]
20 ): List[Rule] = {
21 // TODO: Generate additional rules for each role
22 val additional = List()
23 additional
24 }
25}
26
27class ProgramGenerator(
28 term: Term,
29 unsafe: List[OWLObjectPropertyExpression]
30) extends RDFoxAxiomConverter(term, SkolemStrategy.None, unsafe)
31 with RSAAxiom {
32
33 override def visit(axiom: OWLSubClassOfAxiom): List[Rule] = {
34 if (axiom.isT5) {
35 // TODO: get role in T5 axiom
36 // Assuming one role here
37 val role = axiom.objectPropertyExpressionsInSignature(0)
38 if (unsafe.contains(role)) {
39 val visitor =
40 new RDFoxAxiomConverter(term, SkolemStrategy.Standard("TODO"), unsafe)
41 axiom.accept(visitor)
42 } else {
43 // TODO; Handle forks
44 }
45 } else {
46 super.visit(axiom)
47 }
48 List()
49 }
50
51 override def visit(axiom: OWLSubObjectPropertyOfAxiom): List[Rule] = {
52 // TODO: Generate additional rules for role inclusion
53 val additional = List()
54 super.visit(axiom) ++ additional
55 }
56
57}