From c804109db7bb08cce1246acbca2030c3b979f242 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Thu, 19 Nov 2020 23:21:15 +0000 Subject: Integrate new ConjunctiveQuery in filtering program computation --- .../uk/ac/ox/cs/rsacomb/FilteringProgram.scala | 37 ++++++---------------- src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala | 9 +++--- .../scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala | 3 +- 3 files changed, 15 insertions(+), 34 deletions(-) (limited to 'src/main/scala') diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/FilteringProgram.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/FilteringProgram.scala index adc6f56..6df30fd 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/FilteringProgram.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/FilteringProgram.scala @@ -30,44 +30,24 @@ import scala.collection.JavaConverters._ import uk.ac.ox.cs.rsacomb.implicits.RSAAtom import uk.ac.ox.cs.rsacomb.suffix.{RSASuffix, Forward, Backward} import uk.ac.ox.cs.rsacomb.util.RSA +import uk.ac.ox.cs.rsacomb.sparql.ConjunctiveQuery object FilteringProgram { - def apply(query: SelectQuery, constants: List[Term]): FilteringProgram = + def apply(query: ConjunctiveQuery, constants: List[Term]): FilteringProgram = new FilteringProgram(query, constants) } // object FilteringProgram -class FilteringProgram(query: SelectQuery, constants: List[Term]) +class FilteringProgram(query: ConjunctiveQuery, constants: List[Term]) extends RSAAtom { /* Makes mplicit conversion OWLAPI IRI <-> RDFox IRI available */ // import implicits.RDFox._ - implicit val variables: (List[Term], List[Term]) = { - val all: Set[Variable] = query.getQueryBody.getWherePattern match { - case b: ConjunctionPattern => { - b.getConjuncts.asScala.toSet.flatMap { conj: QueryPattern => - conj match { - case c: TriplePattern => - Set(c.getSubject, c.getPredicate, c.getObject).collect { - case v: Variable => v - } - case _ => Set() - } - } - } - case _ => Set() - } - if (query.getAllPossibleVariables) { - (all.toList, List()) - } else { - val answer = query.getSelection.asScala.map(_.getVariable).toSet - (answer.toList, (all &~ answer).toList) - } - } - - val (answer, bounded) = variables + val answer: List[Term] = query.answer.toList + val bounded: List[Term] = query.bounded.toList + implicit val variables = (answer, bounded) val named: List[Rule] = constants.map(a => Rule.create(RSA.Named(a))) @@ -108,7 +88,7 @@ class FilteringProgram(query: SelectQuery, constants: List[Term]) val varV = Variable.create("V") val varW = Variable.create("W") // Query formula as a rule body - val body = queryToBody(query.getQueryBody.getWherePattern) + val body = queryToBody(query.where) // Auxiliar predicates/helpers def not(atom: TupleTableAtom): BodyFormula = Negation.create(atom) // val predQM = @@ -320,7 +300,8 @@ class FilteringProgram(query: SelectQuery, constants: List[Term]) /* Rules 8x */ val r8a = - for (v <- answer) yield Rule.create(RSA.SP, RSA.QM, not(RSA.Named(v))) + for (v <- answer) + yield Rule.create(RSA.SP, RSA.QM, not(RSA.Named(v))) val r8b = Rule.create(RSA.SP, RSA.FK) val r8c = diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala index 28196be..db52793 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala @@ -11,6 +11,7 @@ import tech.oxfordsemantic.jrdfox.logic.expression.{IRI, Term} /* Local imports */ import util.{RDFoxHelpers, RSA} +import sparql.ConjunctiveQuery object RSAComb extends App { @@ -56,8 +57,7 @@ object RSAComb extends App { if (ontology.isRSA) { /* Load query */ - val query = RDFoxHelpers.parseSelectQuery( - """ + val query = """ PREFIX : SELECT ?X @@ -67,11 +67,10 @@ object RSAComb extends App { ?Y :S ?Z . ?Z a :D . } - """ - ) + """ /* Compute answers to query */ - query match { + ConjunctiveQuery(query) match { case Some(query) => { import implicits.JavaCollections._ diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala index c4d4184..9640ccc 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala @@ -49,6 +49,7 @@ import org.semanticweb.owlapi.model.OWLObjectInverseOf import uk.ac.ox.cs.rsacomb.converter.{RDFoxAxiomConverter, SkolemStrategy} import uk.ac.ox.cs.rsacomb.implicits.RSAAxiom import uk.ac.ox.cs.rsacomb.suffix.{Empty, Forward, Backward, Inverse} +import uk.ac.ox.cs.rsacomb.sparql.ConjunctiveQuery import uk.ac.ox.cs.rsacomb.util.{RDFoxHelpers, RSA} object RSAOntology { @@ -261,7 +262,7 @@ class RSAOntology(val ontology: OWLOntology) extends RSAAxiom { Graph(edges: _*) } - def filteringProgram(query: SelectQuery): FilteringProgram = + def filteringProgram(query: ConjunctiveQuery): FilteringProgram = new FilteringProgram(query, individuals) lazy val canonicalModel = new CanonicalModel(this) -- cgit v1.2.3