aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/rsacomb
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/rsacomb')
-rw-r--r--src/main/scala/rsacomb/RDFoxAxiomConverter.scala4
-rw-r--r--src/main/scala/rsacomb/RDFoxClassExprConverter.scala4
-rw-r--r--src/main/scala/rsacomb/RDFoxPropertyExprConverter.scala10
-rw-r--r--src/main/scala/rsacomb/RSA.scala1
-rw-r--r--src/main/scala/rsacomb/RSAOntology.scala42
-rw-r--r--src/main/scala/rsacomb/RSASuffix.scala34
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
29import org.semanticweb.owlapi.model.OWLObjectProperty 29import org.semanticweb.owlapi.model.OWLObjectProperty
30import org.semanticweb.owlapi.model.OWLClassAssertionAxiom 30import org.semanticweb.owlapi.model.OWLClassAssertionAxiom
31 31
32import suffix.{RSASuffix, Empty}
33
32object RDFoxAxiomConverter { 34object 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
31import org.semanticweb.owlapi.model.OWLObjectPropertyExpression 31import org.semanticweb.owlapi.model.OWLObjectPropertyExpression
32import org.semanticweb.owlapi.model.OWLObjectProperty 32import org.semanticweb.owlapi.model.OWLObjectProperty
33 33
34import suffix.{RSASuffix, Empty}
35
34object RDFoxClassExprConverter { 36object 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
9import org.semanticweb.owlapi.model.OWLObjectInverseOf 9import org.semanticweb.owlapi.model.OWLObjectInverseOf
10 10
11import suffix.{RSASuffix, Inverse}
12
11class RDFoxPropertyExprConverter( 13class 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}
17import rsacomb.RSAOntology
18 17
19// Debug only 18// Debug only
20import scala.collection.JavaConverters._ 19import 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
44import tech.oxfordsemantic.jrdfox.logic._ 44import tech.oxfordsemantic.jrdfox.logic._
45import org.semanticweb.owlapi.model.OWLObjectInverseOf 45import org.semanticweb.owlapi.model.OWLObjectInverseOf
46 46
47import suffix.{Empty, Forward, Backward, Inverse}
48
47object RSAOntology {} 49object 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 @@
1package rsacomb 1package rsacomb.suffix
2 2
3sealed trait RSASuffix { 3import org.semanticweb.owlapi.model.{
4 def getSuffix: String; 4 OWLPropertyExpression,
5 OWLObjectInverseOf,
6 OWLObjectProperty
5} 7}
6 8
7object RSASuffix { 9class 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
24case object Empty extends RSASuffix((x) => x)
25case object Forward extends RSASuffix((s) => s"${s}_f")
26case object Backward extends RSASuffix((s) => s"${s}_b")
27case object Inverse extends RSASuffix((s) => s"${s}_inv")
28case class Nth(n: Int) extends RSASuffix((s) => s"${s}_$n")