diff options
-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") | ||