aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/rsacomb/RSA.scala
blob: 3a37a8700ca64da1bab369b6bec50c26df62132f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package rsacomb.util

/* Java imports */
import java.util.Map

import tech.oxfordsemantic.jrdfox.formats.SPARQLParser
import tech.oxfordsemantic.jrdfox.Prefixes
import tech.oxfordsemantic.jrdfox.logic.datalog.{
  TupleTableAtom,
  TupleTableName,
  Negation
}
import tech.oxfordsemantic.jrdfox.logic.expression.{Term, Variable, IRI}
import org.semanticweb.owlapi.model.OWLOntology
import org.semanticweb.owlapi.model.{
  OWLAxiom,
  OWLClass,
  OWLObjectPropertyExpression
}

import rsacomb.suffix.RSASuffix

// Debug only
import scala.collection.JavaConverters._

object RSA {

  val Prefixes: Prefixes = new Prefixes()
  Prefixes.declarePrefix("rsa:", "http://www.cs.ox.ac.uk/isg/rsa/")

  private def atom(name: IRI, vars: List[Term]) =
    TupleTableAtom.create(TupleTableName.create(name.getIRI), vars: _*)

  def PE(t1: Term, t2: Term) =
    TupleTableAtom.rdf(t1, RSA("PE"), t2)

  def U(t: Term) =
    TupleTableAtom.rdf(t, IRI.RDF_TYPE, RSA("U"))

  def In(t: Term)(implicit set: Term) =
    TupleTableAtom.rdf(t, RSA("In"), set)

  def notIn(t: Term)(implicit set: Term) = Negation.create(In(t)(set))

  def EquivTo(t1: Term, t2: Term) =
    TupleTableAtom.rdf(t1, RSA("EquivTo"), t2)

  def QM(implicit variables: (List[Term], List[Term])) = {
    val (answer, bounded) = variables
    atom(RSA("QM"), answer ::: bounded)
  }

  def ID(t1: Term, t2: Term)(implicit variables: (List[Term], List[Term])) = {
    val (answer, bounded) = variables
    atom(RSA("ID"), (answer ::: bounded) :+ t1 :+ t2)
  }

  def Named(t: Term) =
    TupleTableAtom.rdf(t, IRI.RDF_TYPE, RSA("Named"))

  def Thing(t: Term) =
    TupleTableAtom.rdf(t, IRI.RDF_TYPE, IRI.THING)

  def NI(t: Term) =
    TupleTableAtom.rdf(t, IRI.RDF_TYPE, RSA("NI"))

  def TQ(t1: Term, t2: Term, sx: RSASuffix)(implicit
      variables: (List[Term], List[Term])
  ) = {
    val (answer, bounded) = variables
    atom(RSA("TQ" :: sx), (answer ::: bounded) :+ t1 :+ t2)
  }

  def AQ(t1: Term, t2: Term, sx: RSASuffix)(implicit
      variables: (List[Term], List[Term])
  ) = {
    val (answer, bounded) = variables
    atom(RSA("AQ" :: sx), (answer ::: bounded) :+ t1 :+ t2)
  }

  def FK(implicit variables: (List[Term], List[Term])) = {
    val (answer, bounded) = variables
    atom(RSA("FK"), answer ::: bounded)
  }

  def SP(implicit variables: (List[Term], List[Term])) = {
    val (answer, bounded) = variables
    atom(RSA("SP"), answer ::: bounded)
  }

  def Ans(implicit variables: (List[Term], List[Term])) = {
    val (answer, _) = variables
    atom(RSA("Ans"), answer)
  }

  def apply(name: Any): IRI =
    IRI.create(
      Prefixes.getPrefixIRIsByPrefixName.get("rsa:").getIRI + name.toString
    )
}