diff options
| author | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-11-16 20:09:22 +0000 |
|---|---|---|
| committer | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-11-16 20:09:22 +0000 |
| commit | c6ae617490ad7e2429207e1393415ec9bff7a501 (patch) | |
| tree | 43ebdced920b5088cac7de1d16f5b4adebe03ee3 /src | |
| parent | 2d8afc3a50384d2aea6c97958a814fedc7b9bd40 (diff) | |
| download | RSAComb-c6ae617490ad7e2429207e1393415ec9bff7a501.tar.gz RSAComb-c6ae617490ad7e2429207e1393415ec9bff7a501.zip | |
Rework suffixes
This is a WIP implementation of a generalized way of handling IRI
suffixes. It is not currently used everywhere.
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/scala/rsacomb/RDFoxAxiomConverter.scala | 4 | ||||
| -rw-r--r-- | src/main/scala/rsacomb/RDFoxClassExprConverter.scala | 4 | ||||
| -rw-r--r-- | src/main/scala/rsacomb/RDFoxPropertyExprConverter.scala | 10 | ||||
| -rw-r--r-- | src/main/scala/rsacomb/RSA.scala | 1 | ||||
| -rw-r--r-- | src/main/scala/rsacomb/RSAOntology.scala | 42 | ||||
| -rw-r--r-- | src/main/scala/rsacomb/RSASuffix.scala | 34 |
6 files changed, 55 insertions, 40 deletions
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 | |||
| 29 | import org.semanticweb.owlapi.model.OWLObjectProperty | 29 | import org.semanticweb.owlapi.model.OWLObjectProperty |
| 30 | import org.semanticweb.owlapi.model.OWLClassAssertionAxiom | 30 | import org.semanticweb.owlapi.model.OWLClassAssertionAxiom |
| 31 | 31 | ||
| 32 | import suffix.{RSASuffix, Empty} | ||
| 33 | |||
| 32 | object RDFoxAxiomConverter { | 34 | object RDFoxAxiomConverter { |
| 33 | 35 | ||
| 34 | def apply( | 36 | def apply( |
| 35 | term: Term, | 37 | term: Term, |
| 36 | unsafe: List[OWLObjectPropertyExpression], | 38 | unsafe: List[OWLObjectPropertyExpression], |
| 37 | skolem: SkolemStrategy = SkolemStrategy.None, | 39 | skolem: SkolemStrategy = SkolemStrategy.None, |
| 38 | suffix: RSASuffix = RSASuffix.None | 40 | suffix: RSASuffix = Empty |
| 39 | ): RDFoxAxiomConverter = | 41 | ): RDFoxAxiomConverter = |
| 40 | new RDFoxAxiomConverter(term, unsafe, skolem, suffix) | 42 | new RDFoxAxiomConverter(term, unsafe, skolem, suffix) |
| 41 | 43 | ||
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 | |||
| 31 | import org.semanticweb.owlapi.model.OWLObjectPropertyExpression | 31 | import org.semanticweb.owlapi.model.OWLObjectPropertyExpression |
| 32 | import org.semanticweb.owlapi.model.OWLObjectProperty | 32 | import org.semanticweb.owlapi.model.OWLObjectProperty |
| 33 | 33 | ||
| 34 | import suffix.{RSASuffix, Empty} | ||
| 35 | |||
| 34 | object RDFoxClassExprConverter { | 36 | object RDFoxClassExprConverter { |
| 35 | 37 | ||
| 36 | def apply( | 38 | def apply( |
| 37 | term: Term, | 39 | term: Term, |
| 38 | unsafe: List[OWLObjectPropertyExpression] = List(), | 40 | unsafe: List[OWLObjectPropertyExpression] = List(), |
| 39 | skolem: SkolemStrategy = SkolemStrategy.None, | 41 | skolem: SkolemStrategy = SkolemStrategy.None, |
| 40 | suffix: RSASuffix = RSASuffix.None | 42 | suffix: RSASuffix = Empty |
| 41 | ): RDFoxClassExprConverter = | 43 | ): RDFoxClassExprConverter = |
| 42 | new RDFoxClassExprConverter(term, unsafe, skolem, suffix) | 44 | new RDFoxClassExprConverter(term, unsafe, skolem, suffix) |
| 43 | 45 | ||
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} | |||
| 8 | 8 | ||
| 9 | import org.semanticweb.owlapi.model.OWLObjectInverseOf | 9 | import org.semanticweb.owlapi.model.OWLObjectInverseOf |
| 10 | 10 | ||
| 11 | import suffix.{RSASuffix, Inverse} | ||
| 12 | |||
| 11 | class RDFoxPropertyExprConverter( | 13 | class RDFoxPropertyExprConverter( |
| 12 | term1: Term, | 14 | term1: Term, |
| 13 | term2: Term, | 15 | term2: Term, |
| @@ -18,14 +20,14 @@ class RDFoxPropertyExprConverter( | |||
| 18 | import RDFoxUtil.owlapi2rdfox; | 20 | import RDFoxUtil.owlapi2rdfox; |
| 19 | 21 | ||
| 20 | override def visit(expr: OWLObjectProperty): List[TupleTableAtom] = { | 22 | override def visit(expr: OWLObjectProperty): List[TupleTableAtom] = { |
| 21 | val pred = IRI.create(expr.getIRI.getIRIString ++ suffix.getSuffix) | 23 | //val pred = IRI.create(expr.getIRI.getIRIString ++ suffix.getSuffix) |
| 24 | val pred = IRI.create(expr :: suffix) | ||
| 22 | List(TupleTableAtom.rdf(term1, pred, term2)) | 25 | List(TupleTableAtom.rdf(term1, pred, term2)) |
| 23 | } | 26 | } |
| 24 | 27 | ||
| 25 | override def visit(expr: OWLObjectInverseOf): List[TupleTableAtom] = { | 28 | override def visit(expr: OWLObjectInverseOf): List[TupleTableAtom] = { |
| 26 | val pred = IRI.create( | 29 | //expr.getInverse.getNamedProperty.getIRI.getIRIString ++ suffix.getSuffix ++ "_inv" |
| 27 | expr.getInverse.getNamedProperty.getIRI.getIRIString ++ suffix.getSuffix ++ "_inv" | 30 | val pred = IRI.create(expr :: suffix + Inverse) |
| 28 | ) | ||
| 29 | List(TupleTableAtom.rdf(term1, pred, term2)) | 31 | List(TupleTableAtom.rdf(term1, pred, term2)) |
| 30 | } | 32 | } |
| 31 | 33 | ||
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.{ | |||
| 14 | OWLClass, | 14 | OWLClass, |
| 15 | OWLObjectPropertyExpression | 15 | OWLObjectPropertyExpression |
| 16 | } | 16 | } |
| 17 | import rsacomb.RSAOntology | ||
| 18 | 17 | ||
| 19 | // Debug only | 18 | // Debug only |
| 20 | import scala.collection.JavaConverters._ | 19 | 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 | |||
| 44 | import tech.oxfordsemantic.jrdfox.logic._ | 44 | import tech.oxfordsemantic.jrdfox.logic._ |
| 45 | import org.semanticweb.owlapi.model.OWLObjectInverseOf | 45 | import org.semanticweb.owlapi.model.OWLObjectInverseOf |
| 46 | 46 | ||
| 47 | import suffix.{Empty, Forward, Backward, Inverse} | ||
| 48 | |||
| 47 | object RSAOntology {} | 49 | object RSAOntology {} |
| 48 | /* Wrapper trait for the implicit class `RSAOntology`. | 50 | /* Wrapper trait for the implicit class `RSAOntology`. |
| 49 | */ | 51 | */ |
| @@ -127,7 +129,7 @@ trait RSAOntology { | |||
| 127 | RSA.getFreshVariable(), | 129 | RSA.getFreshVariable(), |
| 128 | unsafe, | 130 | unsafe, |
| 129 | SkolemStrategy.ConstantRSA(axiom.toString), | 131 | SkolemStrategy.ConstantRSA(axiom.toString), |
| 130 | RSASuffix.None | 132 | Empty |
| 131 | ) | 133 | ) |
| 132 | rule <- axiom.accept(visitor) | 134 | rule <- axiom.accept(visitor) |
| 133 | } yield rule | 135 | } yield rule |
| @@ -381,7 +383,7 @@ trait RSAOntology { | |||
| 381 | TupleTableAtom | 383 | TupleTableAtom |
| 382 | .rdf( | 384 | .rdf( |
| 383 | varX, | 385 | varX, |
| 384 | IRI.create(pred ++ RSASuffix.Forward.getSuffix), | 386 | IRI.create(pred :: Forward), |
| 385 | varY | 387 | varY |
| 386 | ) | 388 | ) |
| 387 | ), | 389 | ), |
| @@ -390,7 +392,7 @@ trait RSAOntology { | |||
| 390 | TupleTableAtom | 392 | TupleTableAtom |
| 391 | .rdf( | 393 | .rdf( |
| 392 | varX, | 394 | varX, |
| 393 | IRI.create(pred ++ RSASuffix.Backward.getSuffix), | 395 | IRI.create(pred :: Backward), |
| 394 | varY | 396 | varY |
| 395 | ) | 397 | ) |
| 396 | ), | 398 | ), |
| @@ -399,7 +401,7 @@ trait RSAOntology { | |||
| 399 | TupleTableAtom | 401 | TupleTableAtom |
| 400 | .rdf( | 402 | .rdf( |
| 401 | varX, | 403 | varX, |
| 402 | IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"), | 404 | IRI.create(pred :: Forward + Inverse), |
| 403 | varY | 405 | varY |
| 404 | ) | 406 | ) |
| 405 | ), | 407 | ), |
| @@ -408,57 +410,57 @@ trait RSAOntology { | |||
| 408 | TupleTableAtom | 410 | TupleTableAtom |
| 409 | .rdf( | 411 | .rdf( |
| 410 | varX, | 412 | varX, |
| 411 | IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"), | 413 | IRI.create(pred :: Backward + Inverse), |
| 412 | varY | 414 | varY |
| 413 | ) | 415 | ) |
| 414 | ), | 416 | ), |
| 415 | Rule.create( | 417 | Rule.create( |
| 416 | TupleTableAtom.rdf( | 418 | TupleTableAtom.rdf( |
| 417 | varY, | 419 | varY, |
| 418 | IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"), | 420 | IRI.create(pred :: Backward + Inverse), |
| 419 | varX | 421 | varX |
| 420 | ), | 422 | ), |
| 421 | TupleTableAtom | 423 | TupleTableAtom |
| 422 | .rdf( | 424 | .rdf( |
| 423 | varX, | 425 | varX, |
| 424 | IRI.create(pred ++ RSASuffix.Forward.getSuffix), | 426 | IRI.create(pred :: Forward), |
| 425 | varY | 427 | varY |
| 426 | ) | 428 | ) |
| 427 | ), | 429 | ), |
| 428 | Rule.create( | 430 | Rule.create( |
| 429 | TupleTableAtom.rdf( | 431 | TupleTableAtom.rdf( |
| 430 | varY, | 432 | varY, |
| 431 | IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"), | 433 | IRI.create(pred :: Forward + Inverse), |
| 432 | varX | 434 | varX |
| 433 | ), | 435 | ), |
| 434 | TupleTableAtom.rdf( | 436 | TupleTableAtom.rdf( |
| 435 | varX, | 437 | varX, |
| 436 | IRI.create(pred ++ RSASuffix.Backward.getSuffix), | 438 | IRI.create(pred :: Backward), |
| 437 | varY | 439 | varY |
| 438 | ) | 440 | ) |
| 439 | ), | 441 | ), |
| 440 | Rule.create( | 442 | Rule.create( |
| 441 | TupleTableAtom.rdf( | 443 | TupleTableAtom.rdf( |
| 442 | varY, | 444 | varY, |
| 443 | IRI.create(pred ++ RSASuffix.Backward.getSuffix), | 445 | IRI.create(pred :: Backward), |
| 444 | varX | 446 | varX |
| 445 | ), | 447 | ), |
| 446 | TupleTableAtom | 448 | TupleTableAtom |
| 447 | .rdf( | 449 | .rdf( |
| 448 | varX, | 450 | varX, |
| 449 | IRI.create(pred ++ RSASuffix.Forward.getSuffix ++ "_inv"), | 451 | IRI.create(pred :: Forward + Inverse), |
| 450 | varY | 452 | varY |
| 451 | ) | 453 | ) |
| 452 | ), | 454 | ), |
| 453 | Rule.create( | 455 | Rule.create( |
| 454 | TupleTableAtom.rdf( | 456 | TupleTableAtom.rdf( |
| 455 | varY, | 457 | varY, |
| 456 | IRI.create(pred ++ RSASuffix.Forward.getSuffix), | 458 | IRI.create(pred :: Forward), |
| 457 | varX | 459 | varX |
| 458 | ), | 460 | ), |
| 459 | TupleTableAtom.rdf( | 461 | TupleTableAtom.rdf( |
| 460 | varX, | 462 | varX, |
| 461 | IRI.create(pred ++ RSASuffix.Backward.getSuffix ++ "_inv"), | 463 | IRI.create(pred :: Backward + Inverse), |
| 462 | varY | 464 | varY |
| 463 | ) | 465 | ) |
| 464 | ) | 466 | ) |
| @@ -533,7 +535,7 @@ trait RSAOntology { | |||
| 533 | Variable.create("X"), | 535 | Variable.create("X"), |
| 534 | unsafeRoles, | 536 | unsafeRoles, |
| 535 | SkolemStrategy.None, | 537 | SkolemStrategy.None, |
| 536 | RSASuffix.None | 538 | Empty |
| 537 | ) { | 539 | ) { |
| 538 | 540 | ||
| 539 | private def rules1(axiom: OWLSubClassOfAxiom): List[Rule] = { | 541 | private def rules1(axiom: OWLSubClassOfAxiom): List[Rule] = { |
| @@ -556,7 +558,7 @@ trait RSAOntology { | |||
| 556 | def notIn(t: Term): Negation = Negation.create(in(t)) | 558 | def notIn(t: Term): Negation = Negation.create(in(t)) |
| 557 | val roleRf: TupleTableAtom = { | 559 | val roleRf: TupleTableAtom = { |
| 558 | val visitor = | 560 | val visitor = |
| 559 | new RDFoxPropertyExprConverter(varX, v0, RSASuffix.Forward) | 561 | new RDFoxPropertyExprConverter(varX, v0, Forward) |
| 560 | axiom.getSuperClass | 562 | axiom.getSuperClass |
| 561 | .asInstanceOf[OWLObjectSomeValuesFrom] | 563 | .asInstanceOf[OWLObjectSomeValuesFrom] |
| 562 | .getProperty | 564 | .getProperty |
| @@ -600,7 +602,7 @@ trait RSAOntology { | |||
| 600 | } | 602 | } |
| 601 | def roleRf(t1: Term, t2: Term): TupleTableAtom = { | 603 | def roleRf(t1: Term, t2: Term): TupleTableAtom = { |
| 602 | val visitor = | 604 | val visitor = |
| 603 | new RDFoxPropertyExprConverter(t1, t2, RSASuffix.Forward) | 605 | new RDFoxPropertyExprConverter(t1, t2, Forward) |
| 604 | roleR.accept(visitor).head | 606 | roleR.accept(visitor).head |
| 605 | } | 607 | } |
| 606 | def atomB(t: Term): TupleTableAtom = { | 608 | def atomB(t: Term): TupleTableAtom = { |
| @@ -638,7 +640,7 @@ trait RSAOntology { | |||
| 638 | } | 640 | } |
| 639 | def roleRf(t: Term): TupleTableAtom = { | 641 | def roleRf(t: Term): TupleTableAtom = { |
| 640 | val visitor = | 642 | val visitor = |
| 641 | new RDFoxPropertyExprConverter(t, v1, RSASuffix.Forward) | 643 | new RDFoxPropertyExprConverter(t, v1, Forward) |
| 642 | roleR.accept(visitor).head | 644 | roleR.accept(visitor).head |
| 643 | } | 645 | } |
| 644 | val atomB: TupleTableAtom = { | 646 | val atomB: TupleTableAtom = { |
| @@ -668,7 +670,7 @@ trait RSAOntology { | |||
| 668 | Variable.create("X"), | 670 | Variable.create("X"), |
| 669 | ontology.unsafeRoles, | 671 | ontology.unsafeRoles, |
| 670 | SkolemStrategy.Standard(axiom.toString), | 672 | SkolemStrategy.Standard(axiom.toString), |
| 671 | RSASuffix.Forward | 673 | Forward |
| 672 | ) | 674 | ) |
| 673 | axiom.accept(visitor) | 675 | axiom.accept(visitor) |
| 674 | } else { | 676 | } else { |
| @@ -687,13 +689,13 @@ trait RSAOntology { | |||
| 687 | Variable.create("X"), | 689 | Variable.create("X"), |
| 688 | ontology.unsafeRoles, | 690 | ontology.unsafeRoles, |
| 689 | SkolemStrategy.None, | 691 | SkolemStrategy.None, |
| 690 | RSASuffix.Forward | 692 | Forward |
| 691 | ) | 693 | ) |
| 692 | val visitorB = new RDFoxAxiomConverter( | 694 | val visitorB = new RDFoxAxiomConverter( |
| 693 | Variable.create("X"), | 695 | Variable.create("X"), |
| 694 | ontology.unsafeRoles, | 696 | ontology.unsafeRoles, |
| 695 | SkolemStrategy.None, | 697 | SkolemStrategy.None, |
| 696 | RSASuffix.Backward | 698 | Backward |
| 697 | ) | 699 | ) |
| 698 | axiom.accept(visitorB) ++ axiom.accept(visitorF) | 700 | axiom.accept(visitorB) ++ axiom.accept(visitorF) |
| 699 | } | 701 | } |
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 @@ | |||
| 1 | package rsacomb | 1 | package rsacomb.suffix |
| 2 | 2 | ||
| 3 | sealed trait RSASuffix { | 3 | import org.semanticweb.owlapi.model.{ |
| 4 | def getSuffix: String; | 4 | OWLPropertyExpression, |
| 5 | OWLObjectInverseOf, | ||
| 6 | OWLObjectProperty | ||
| 5 | } | 7 | } |
| 6 | 8 | ||
| 7 | object RSASuffix { | 9 | class RSASuffix(val suffix: String => String) { |
| 8 | 10 | ||
| 9 | case object None extends RSASuffix { | 11 | def +(other: RSASuffix): RSASuffix = |
| 10 | def getSuffix: String = "" | 12 | new RSASuffix((s: String) => other suffix (this suffix s)) |
| 11 | } | ||
| 12 | 13 | ||
| 13 | case object Forward extends RSASuffix { | 14 | def ::(str: String): String = this suffix str |
| 14 | def getSuffix: String = "_f" | 15 | |
| 15 | } | 16 | def ::(expr: OWLPropertyExpression): String = |
| 17 | expr match { | ||
| 18 | case e: OWLObjectProperty => e.getIRI.getIRIString :: this | ||
| 19 | case e: OWLObjectInverseOf => e.getInverse :: this | ||
| 20 | } | ||
| 16 | 21 | ||
| 17 | case object Backward extends RSASuffix { | ||
| 18 | def getSuffix: String = "_b" | ||
| 19 | } | ||
| 20 | } | 22 | } |
| 23 | |||
| 24 | case object Empty extends RSASuffix((x) => x) | ||
| 25 | case object Forward extends RSASuffix((s) => s"${s}_f") | ||
| 26 | case object Backward extends RSASuffix((s) => s"${s}_b") | ||
| 27 | case object Inverse extends RSASuffix((s) => s"${s}_inv") | ||
| 28 | case class Nth(n: Int) extends RSASuffix((s) => s"${s}_$n") | ||
