diff options
Diffstat (limited to 'src/main/scala/rsacomb/RDFTriple.scala')
| -rw-r--r-- | src/main/scala/rsacomb/RDFTriple.scala | 60 |
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 @@ | |||
| 1 | package rsacomb | ||
| 2 | |||
| 3 | import tech.oxfordsemantic.jrdfox.logic.{Atom, IRI, TupleTableName} | ||
| 4 | |||
| 5 | trait 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 | } | ||
