diff options
Diffstat (limited to 'src/main/scala/rsacomb/CanonicalModel.scala')
-rw-r--r-- | src/main/scala/rsacomb/CanonicalModel.scala | 57 |
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 @@ | |||
1 | package rsacomb | ||
2 | |||
3 | import org.semanticweb.owlapi.model.{ | ||
4 | OWLSubObjectPropertyOfAxiom, | ||
5 | OWLSubClassOfAxiom, | ||
6 | OWLObjectPropertyExpression | ||
7 | } | ||
8 | import tech.oxfordsemantic.jrdfox.logic.{Rule, Term} | ||
9 | |||
10 | object 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 | |||
27 | class 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 | } | ||