aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/rsacomb/RDFTriple.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/rsacomb/RDFTriple.scala')
-rw-r--r--src/main/scala/rsacomb/RDFTriple.scala60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/main/scala/rsacomb/RDFTriple.scala b/src/main/scala/rsacomb/RDFTriple.scala
new file mode 100644
index 0000000..11ad6d4
--- /dev/null
+++ b/src/main/scala/rsacomb/RDFTriple.scala
@@ -0,0 +1,60 @@
1package rsacomb
2
3import tech.oxfordsemantic.jrdfox.logic.{Atom, IRI, TupleTableName}
4
5trait RDFTriple {
6
7 implicit class RDFTriple(atom: Atom) {
8
9 /* Is this the best way to determine if an atom is an RDF triple?
10 * Note that we can't use `getNumberOfArguments()` because is not
11 * "consistent":
12 * - for an atom created with `rdf(<term1>, <term2>, <term3>)`,
13 * `getNumberOfArguments` returns 3
14 * - for an atom created with `Atom.create(<tupletablename>, <term1>,
15 * <term2>, <term3>)`, `getNumberOfArguments()` returns 3
16 *
17 * This is probably because `Atom.rdf(...) is implemented as:
18 * ```scala
19 * def rdf(term1: Term, term2: Term, term3: Term): Atom =
20 * Atom.create(TupleTableName.create("internal:triple"), term1, term2, term3)
21 * ```
22 */
23 def isRdfTriple: Boolean =
24 atom.getTupleTableName.getIRI.equals("internal:triple")
25
26 def isClassAssertion: Boolean =
27 atom.isRdfTriple && atom.getArgument(1).equals(IRI.RDF_TYPE)
28
29 def isRoleAssertion: Boolean =
30 atom.isRdfTriple && !atom.getArgument(1).equals(IRI.RDF_TYPE)
31
32 def suffix(sx: String): Atom =
33 if (this.isClassAssertion) {
34 val newclass = atom.getArgument(2) match {
35 case iri: IRI => IRI.create(iri.getIRI.appendedAll(sx))
36 case other => other
37 }
38 Atom.rdf(
39 atom getArgument 0,
40 atom getArgument 1,
41 newclass
42 )
43 } else if (this.isRoleAssertion) {
44 val newrole = atom.getArgument(1) match {
45 case iri: IRI => IRI.create(iri.getIRI.appendedAll(sx))
46 case other => other
47 }
48 Atom.rdf(
49 atom getArgument 0,
50 newrole,
51 atom getArgument 2
52 )
53 } else {
54 val newname =
55 TupleTableName.create(atom.getTupleTableName.getIRI.appendedAll(sx))
56 Atom.create(newname, atom.getArguments())
57 }
58 }
59
60}