From c6ae617490ad7e2429207e1393415ec9bff7a501 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Mon, 16 Nov 2020 20:09:22 +0000 Subject: Rework suffixes This is a WIP implementation of a generalized way of handling IRI suffixes. It is not currently used everywhere. --- src/main/scala/rsacomb/RDFoxAxiomConverter.scala | 4 ++- .../scala/rsacomb/RDFoxClassExprConverter.scala | 4 ++- .../scala/rsacomb/RDFoxPropertyExprConverter.scala | 10 +++--- src/main/scala/rsacomb/RSA.scala | 1 - src/main/scala/rsacomb/RSAOntology.scala | 42 +++++++++++----------- src/main/scala/rsacomb/RSASuffix.scala | 34 +++++++++++------- 6 files changed, 55 insertions(+), 40 deletions(-) (limited to 'src') diff --git a/src/main/scala/rsacomb/RDFoxAxiomConverter.scala b/src/main/scala/rsacomb/RDFoxAxiomConverter.scala index 0848a0a..0368b7c 100644 --- a/src/main/scala/rsacomb/RDFoxAxiomConverter.scala +++ b/src/main/scala/rsacomb/RDFoxAxiomConverter.scala @@ -29,13 +29,15 @@ import org.semanticweb.owlapi.model.OWLSubObjectPropertyOfAxiom import org.semanticweb.owlapi.model.OWLObjectProperty import org.semanticweb.owlapi.model.OWLClassAssertionAxiom +import suffix.{RSASuffix, Empty} + object RDFoxAxiomConverter { def apply( term: Term, unsafe: List[OWLObjectPropertyExpression], skolem: SkolemStrategy = SkolemStrategy.None, - suffix: RSASuffix = RSASuffix.None + suffix: RSASuffix = Empty ): RDFoxAxiomConverter = new RDFoxAxiomConverter(term, unsafe, skolem, suffix) diff --git a/src/main/scala/rsacomb/RDFoxClassExprConverter.scala b/src/main/scala/rsacomb/RDFoxClassExprConverter.scala index 89a1a04..f3a0dfc 100644 --- a/src/main/scala/rsacomb/RDFoxClassExprConverter.scala +++ b/src/main/scala/rsacomb/RDFoxClassExprConverter.scala @@ -31,13 +31,15 @@ import rsacomb.RDFoxRuleShards import org.semanticweb.owlapi.model.OWLObjectPropertyExpression import org.semanticweb.owlapi.model.OWLObjectProperty +import suffix.{RSASuffix, Empty} + object RDFoxClassExprConverter { def apply( term: Term, unsafe: List[OWLObjectPropertyExpression] = List(), skolem: SkolemStrategy = SkolemStrategy.None, - suffix: RSASuffix = RSASuffix.None + suffix: RSASuffix = Empty ): RDFoxClassExprConverter = new RDFoxClassExprConverter(term, unsafe, skolem, suffix) diff --git a/src/main/scala/rsacomb/RDFoxPropertyExprConverter.scala b/src/main/scala/rsacomb/RDFoxPropertyExprConverter.scala index 11d6d86..ea1df2f 100644 --- a/src/main/scala/rsacomb/RDFoxPropertyExprConverter.scala +++ b/src/main/scala/rsacomb/RDFoxPropertyExprConverter.scala @@ -8,6 +8,8 @@ import tech.oxfordsemantic.jrdfox.logic.expression.{Term, IRI, Literal} import org.semanticweb.owlapi.model.OWLObjectInverseOf +import suffix.{RSASuffix, Inverse} + class RDFoxPropertyExprConverter( term1: Term, term2: Term, @@ -18,14 +20,14 @@ class RDFoxPropertyExprConverter( import RDFoxUtil.owlapi2rdfox; override def visit(expr: OWLObjectProperty): List[TupleTableAtom] = { - val pred = IRI.create(expr.getIRI.getIRIString ++ suffix.getSuffix) + //val pred = IRI.create(expr.getIRI.getIRIString ++ suffix.getSuffix) + val pred = IRI.create(expr :: suffix) List(TupleTableAtom.rdf(term1, pred, term2)) } override def visit(expr: OWLObjectInverseOf): List[TupleTableAtom] = { - val pred = IRI.create( - expr.getInverse.getNamedProperty.getIRI.getIRIString ++ suffix.getSuffix ++ "_inv" - ) + //expr.getInverse.getNamedProperty.getIRI.getIRIString ++ suffix.getSuffix ++ "_inv" + val pred = IRI.create(expr :: suffix + Inverse) List(TupleTableAtom.rdf(term1, pred, term2)) } diff --git a/src/main/scala/rsacomb/RSA.scala b/src/main/scala/rsacomb/RSA.scala index 98c7a4d..dd09899 100644 --- a/src/main/scala/rsacomb/RSA.scala +++ b/src/main/scala/rsacomb/RSA.scala @@ -14,7 +14,6 @@ import org.semanticweb.owlapi.model.{ OWLClass, OWLObjectPropertyExpression } -import rsacomb.RSAOntology // Debug only import scala.collection.JavaConverters._ diff --git a/src/main/scala/rsacomb/RSAOntology.scala b/src/main/scala/rsacomb/RSAOntology.scala index 78460ff..dd65116 100644 --- a/src/main/scala/rsacomb/RSAOntology.scala +++ b/src/main/scala/rsacomb/RSAOntology.scala @@ -44,6 +44,8 @@ import org.semanticweb.owlapi.dlsyntax.renderer.DLSyntaxObjectRenderer import tech.oxfordsemantic.jrdfox.logic._ import org.semanticweb.owlapi.model.OWLObjectInverseOf +import suffix.{Empty, Forward, Backward, Inverse} + object RSAOntology {} /* Wrapper trait for the implicit class `RSAOntology`. */ @@ -127,7 +129,7 @@ trait RSAOntology { RSA.getFreshVariable(), unsafe, SkolemStrategy.ConstantRSA(axiom.toString), - RSASuffix.None + Empty ) rule <- axiom.accept(visitor) } yield rule @@ -381,7 +383,7 @@ trait RSAOntology { TupleTableAtom .rdf( varX, - IRI.create(pred ++ RSASuffix.Forward.getSuffix), + IRI.create(pred :: Forward), varY ) ), @@ -390,7 +392,7 @@ trait RSAOntology { TupleTableAtom .rdf( varX, - IRI.create(pred ++ RSASuffix.Backward.getSuffix), + IRI.create(pred :: Backward), varY ) ), @@ -399,7 +401,7 @@ trait RSAOntology { TupleTableAtom .rdf( varX, - IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"), + IRI.create(pred :: Forward + Inverse), varY ) ), @@ -408,57 +410,57 @@ trait RSAOntology { TupleTableAtom .rdf( varX, - IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"), + IRI.create(pred :: Backward + Inverse), varY ) ), Rule.create( TupleTableAtom.rdf( varY, - IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"), + IRI.create(pred :: Backward + Inverse), varX ), TupleTableAtom .rdf( varX, - IRI.create(pred ++ RSASuffix.Forward.getSuffix), + IRI.create(pred :: Forward), varY ) ), Rule.create( TupleTableAtom.rdf( varY, - IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"), + IRI.create(pred :: Forward + Inverse), varX ), TupleTableAtom.rdf( varX, - IRI.create(pred ++ RSASuffix.Backward.getSuffix), + IRI.create(pred :: Backward), varY ) ), Rule.create( TupleTableAtom.rdf( varY, - IRI.create(pred ++ RSASuffix.Backward.getSuffix), + IRI.create(pred :: Backward), varX ), TupleTableAtom .rdf( varX, - IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"), + IRI.create(pred :: Forward + Inverse), varY ) ), Rule.create( TupleTableAtom.rdf( varY, - IRI.create(pred ++ RSASuffix.Forward.getSuffix), + IRI.create(pred :: Forward), varX ), TupleTableAtom.rdf( varX, - IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"), + IRI.create(pred :: Backward + Inverse), varY ) ) @@ -533,7 +535,7 @@ trait RSAOntology { Variable.create("X"), unsafeRoles, SkolemStrategy.None, - RSASuffix.None + Empty ) { private def rules1(axiom: OWLSubClassOfAxiom): List[Rule] = { @@ -556,7 +558,7 @@ trait RSAOntology { def notIn(t: Term): Negation = Negation.create(in(t)) val roleRf: TupleTableAtom = { val visitor = - new RDFoxPropertyExprConverter(varX, v0, RSASuffix.Forward) + new RDFoxPropertyExprConverter(varX, v0, Forward) axiom.getSuperClass .asInstanceOf[OWLObjectSomeValuesFrom] .getProperty @@ -600,7 +602,7 @@ trait RSAOntology { } def roleRf(t1: Term, t2: Term): TupleTableAtom = { val visitor = - new RDFoxPropertyExprConverter(t1, t2, RSASuffix.Forward) + new RDFoxPropertyExprConverter(t1, t2, Forward) roleR.accept(visitor).head } def atomB(t: Term): TupleTableAtom = { @@ -638,7 +640,7 @@ trait RSAOntology { } def roleRf(t: Term): TupleTableAtom = { val visitor = - new RDFoxPropertyExprConverter(t, v1, RSASuffix.Forward) + new RDFoxPropertyExprConverter(t, v1, Forward) roleR.accept(visitor).head } val atomB: TupleTableAtom = { @@ -668,7 +670,7 @@ trait RSAOntology { Variable.create("X"), ontology.unsafeRoles, SkolemStrategy.Standard(axiom.toString), - RSASuffix.Forward + Forward ) axiom.accept(visitor) } else { @@ -687,13 +689,13 @@ trait RSAOntology { Variable.create("X"), ontology.unsafeRoles, SkolemStrategy.None, - RSASuffix.Forward + Forward ) val visitorB = new RDFoxAxiomConverter( Variable.create("X"), ontology.unsafeRoles, SkolemStrategy.None, - RSASuffix.Backward + Backward ) axiom.accept(visitorB) ++ axiom.accept(visitorF) } diff --git a/src/main/scala/rsacomb/RSASuffix.scala b/src/main/scala/rsacomb/RSASuffix.scala index f15d01b..7650ae0 100644 --- a/src/main/scala/rsacomb/RSASuffix.scala +++ b/src/main/scala/rsacomb/RSASuffix.scala @@ -1,20 +1,28 @@ -package rsacomb +package rsacomb.suffix -sealed trait RSASuffix { - def getSuffix: String; +import org.semanticweb.owlapi.model.{ + OWLPropertyExpression, + OWLObjectInverseOf, + OWLObjectProperty } -object RSASuffix { +class RSASuffix(val suffix: String => String) { - case object None extends RSASuffix { - def getSuffix: String = "" - } + def +(other: RSASuffix): RSASuffix = + new RSASuffix((s: String) => other suffix (this suffix s)) - case object Forward extends RSASuffix { - def getSuffix: String = "_f" - } + def ::(str: String): String = this suffix str + + def ::(expr: OWLPropertyExpression): String = + expr match { + case e: OWLObjectProperty => e.getIRI.getIRIString :: this + case e: OWLObjectInverseOf => e.getInverse :: this + } - case object Backward extends RSASuffix { - def getSuffix: String = "_b" - } } + +case object Empty extends RSASuffix((x) => x) +case object Forward extends RSASuffix((s) => s"${s}_f") +case object Backward extends RSASuffix((s) => s"${s}_b") +case object Inverse extends RSASuffix((s) => s"${s}_inv") +case class Nth(n: Int) extends RSASuffix((s) => s"${s}_$n") -- cgit v1.2.3