From 559740e8503b750ad79d6230ebe5271f10c039c1 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Thu, 24 Sep 2020 20:02:11 +0200 Subject: Add skeleton for canonical model generation --- src/main/scala/rsacomb/CanonicalModel.scala | 57 +++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/scala/rsacomb/CanonicalModel.scala (limited to 'src/main/scala/rsacomb') 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 @@ +package rsacomb + +import org.semanticweb.owlapi.model.{ + OWLSubObjectPropertyOfAxiom, + OWLSubClassOfAxiom, + OWLObjectPropertyExpression +} +import tech.oxfordsemantic.jrdfox.logic.{Rule, Term} + +object ProgramGenerator { + + def apply( + term: Term, + unsafe: List[OWLObjectPropertyExpression] = List() + ): RDFoxAxiomConverter = + new ProgramGenerator(term, unsafe) + + def generateRoleRules( + roles: List[OWLObjectPropertyExpression] + ): List[Rule] = { + // TODO: Generate additional rules for each role + val additional = List() + additional + } +} + +class ProgramGenerator( + term: Term, + unsafe: List[OWLObjectPropertyExpression] +) extends RDFoxAxiomConverter(term, SkolemStrategy.None, unsafe) + with RSAAxiom { + + override def visit(axiom: OWLSubClassOfAxiom): List[Rule] = { + if (axiom.isT5) { + // TODO: get role in T5 axiom + // Assuming one role here + val role = axiom.objectPropertyExpressionsInSignature(0) + if (unsafe.contains(role)) { + val visitor = + new RDFoxAxiomConverter(term, SkolemStrategy.Standard("TODO"), unsafe) + axiom.accept(visitor) + } else { + // TODO; Handle forks + } + } else { + super.visit(axiom) + } + List() + } + + override def visit(axiom: OWLSubObjectPropertyOfAxiom): List[Rule] = { + // TODO: Generate additional rules for role inclusion + val additional = List() + super.visit(axiom) ++ additional + } + +} -- cgit v1.2.3