From ace698dedd486e64127aeb96af6675fa461377ed Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Thu, 19 May 2022 15:11:06 +0100 Subject: refactor: RSA utils --- .../ox/cs/rsacomb/converter/SkolemStrategy.scala | 4 +- src/main/scala/uk/ac/ox/cs/rsacomb/util/RSA.scala | 127 ++++++++++++++++++--- 2 files changed, 116 insertions(+), 15 deletions(-) (limited to 'src/main/scala') diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/SkolemStrategy.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/SkolemStrategy.scala index 92763d0..1a46e2e 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/converter/SkolemStrategy.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/converter/SkolemStrategy.scala @@ -20,6 +20,8 @@ import org.semanticweb.owlapi.model.OWLAxiom import tech.oxfordsemantic.jrdfox.logic.Datatype import tech.oxfordsemantic.jrdfox.logic.expression.{Literal, IRI} +import uk.ac.ox.cs.rsacomb.util.RSA + sealed trait SkolemStrategy { def dup(a: OWLAxiom): SkolemStrategy } @@ -91,5 +93,5 @@ case class Standard(axiom: OWLAxiom)(implicit toString: (OWLAxiom) => String) case class Constant(axiom: OWLAxiom)(implicit toString: (OWLAxiom) => String) extends SkolemStrategy { def dup(_axiom: OWLAxiom): Constant = copy(axiom = _axiom)(toString) - lazy val iri = IRI.create(s"c_${toString(axiom)}") + lazy val iri = RSA(s"c_${toString(axiom)}") } diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/util/RSA.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/util/RSA.scala index 6ea4dc6..5e76421 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/util/RSA.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/util/RSA.scala @@ -22,9 +22,10 @@ import java.util.Map import tech.oxfordsemantic.jrdfox.formats.SPARQLParser import tech.oxfordsemantic.jrdfox.Prefixes import tech.oxfordsemantic.jrdfox.logic.datalog.{ + Negation, + Rule, TupleTableAtom, TupleTableName, - Negation } import tech.oxfordsemantic.jrdfox.logic.expression.{Term, Variable, IRI} import org.semanticweb.owlapi.model.OWLOntology @@ -45,9 +46,13 @@ object RSA { /** Simplify conversion between Java and Scala `List`s */ import uk.ac.ox.cs.rsacomb.implicits.JavaCollections._ + /** Experimental DLS for RDFox */ + import RDFoxDSL._ + /** Set of default prefixes to be included in all datastore operations */ val Prefixes: Prefixes = new Prefixes() Prefixes.declarePrefix("xml:", "http://www.w3.org/XML/1998/namespace") + Prefixes.declarePrefix("xsd:", "http://www.w3.org/2001/XMLSchema#") Prefixes.declarePrefix("rdf:", "http://www.w3.org/1999/02/22-rdf-syntax-ns#") Prefixes.declarePrefix("rdfs:", "http://www.w3.org/2000/01/rdf-schema#") Prefixes.declarePrefix("owl:", "http://www.w3.org/2002/07/owl#") @@ -57,7 +62,6 @@ object RSA { /** Creates a `rsacomb:` IRI */ def apply(name: Any): IRI = IRI.create( - //Prefixes.decodeIRI("rsacomb:") + name.toString Prefixes.getPrefixIRIsByPrefixName.get("rsacomb:").getIRI + name.toString ) @@ -73,6 +77,8 @@ object RSA { val QM = RSA("QM") val SP = RSA("SP") val TQ = RSA("TQ") + val E = RSA("E") + val U = RSA("U") def Named(tt: TupleTableName)(x: Term): TupleTableAtom = TupleTableAtom.create(tt, x, IRI.RDF_TYPE, RSA.NAMED) @@ -80,24 +86,117 @@ object RSA { TupleTableAtom.create(tt, x, RSA.CONGRUENT, y) def Skolem(skolem: Term, terms: List[Term]): TupleTableAtom = TupleTableAtom.create(TupleTableName.SKOLEM, terms :+ skolem) + def E(tt: TupleTableName)(x: Term, y: Term): TupleTableAtom = + TupleTableAtom.create(tt, x, RSA.E, y) + def PE(tt: TupleTableName)(x: Term, y: Term) = + TupleTableAtom.create(tt, x, RSA("PE"), y) + def U(tt: TupleTableName)(x: Term): TupleTableAtom = + TupleTableAtom.create(tt, x, 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)) - - /* TODO: review after reworking the dependency graph construction */ - // private def atom(name: IRI, vars: List[Term]): TupleTableAtom = // TupleTableAtom.create(TupleTableName.create(name.getIRI), vars: _*) - def E(t1: Term, t2: Term) = - TupleTableAtom.rdf(t1, RSA("E"), t2) - - 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 RBoxReasoning(graph: IRI): List[Rule] = { + val tt = TupleTableName.create(graph.getIRI) + val subPropertyOf = IRI.create(Prefixes.getPrefixIRIsByPrefixName.get("rdfs:").getIRI + "subPropertyOf") + val subPropertyOfTrans = RSA("subPropertyOfTrans") + val inverseOf = IRI.create(Prefixes.getPrefixIRIsByPrefixName.get("owl:").getIRI + "inverseOf") + List( + Rule.create( + TupleTableAtom.create(tt, v"X", subPropertyOfTrans, v"Y"), + TupleTableAtom.create(tt, v"X", subPropertyOf, v"Y"), + ), + Rule.create( + TupleTableAtom.create(tt, v"X", subPropertyOfTrans, v"Z"), + TupleTableAtom.create(tt, v"X", subPropertyOfTrans, v"Y"), + TupleTableAtom.create(tt, v"Y", subPropertyOfTrans, v"Z") + ), + Rule.create( + TupleTableAtom.create(tt, v"Yi", subPropertyOf, v"Xi"), + TupleTableAtom.create(tt, v"X", subPropertyOf, v"Y"), + TupleTableAtom.create(tt, v"Xi", inverseOf, v"X"), + TupleTableAtom.create(tt, v"Yi", inverseOf, v"Y"), + ), + Rule.create( + TupleTableAtom.create(tt, v"X", inverseOf, v"Y"), + TupleTableAtom.create(tt, v"Y", inverseOf, v"X"), + ) + ) + } } + +/** Some common ontology prefixes: + * + * @prefix dc: . + * @prefix ex: . + * @prefix fn: . + * @prefix ms: . + * @prefix vb: . + * @prefix xs: . + * @prefix NBN: . + * @prefix XML: . + * @prefix bot: . + * @prefix cbx: . + * @prefix dct: . + * @prefix esv: . + * @prefix gss: . + * @prefix ioc: . + * @prefix j.0: . + * @prefix mlo: . + * @prefix ns1: . + * @prefix ns2: . + * @prefix ns3: . + * @prefix ns4: . + * @prefix obo: . + * @prefix owl: . + * @prefix rdf: . + * @prefix tmp: . + * @prefix www: . + * @prefix xml: . + * @prefix xsd: . + * @prefix xsp: . + * @prefix bibo: . + * @prefix daml: . + * @prefix foaf: . + * @prefix lego: . + * @prefix mlo1: . + * @prefix mlo2: . + * @prefix obda: . + * @prefix rdfs: . + * @prefix skos: . + * @prefix swrl: . + * @prefix vann: . + * @prefix void: . + * @prefix admin: . + * @prefix nlbdm: . + * @prefix pizza: . + * @prefix pstcn: . + * @prefix swrla: . + * @prefix swrlb: . + * @prefix terms: . + * @prefix vcard: . + * @prefix PLCore: . + * @prefix Server: . + * @prefix TypeQL: . + * @prefix schema: . + * @prefix travel: . + * @prefix current: . + * @prefix dcterms: . + * @prefix ebucore: . + * @prefix example: . + * @prefix ontokin: . + * @prefix opla-sd: . + * @prefix owl2xml: . + * @prefix protege: . + * @prefix mappings: . + * @prefix oboInOwl: . + * @prefix otherOnt: . + * @prefix EurosData: . + * @prefix geosparql: . + * @prefix restaurant: . + * @prefix ml-ontology: . + */ -- cgit v1.2.3