aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorFederico Igne <federico.igne@cs.ox.ac.uk>2020-09-22 19:07:18 +0200
committerFederico Igne <federico.igne@cs.ox.ac.uk>2020-09-22 19:46:48 +0200
commit10a9d14545abcabae28eb344df4d28f17cceea7b (patch)
tree2df3cde374a1abb78e1fcebe9409a87722640f74 /src/main
parent36955b4e8209162a10198b4914d3e9a2ad9e260a (diff)
downloadRSAComb-10a9d14545abcabae28eb344df4d28f17cceea7b.tar.gz
RSAComb-10a9d14545abcabae28eb344df4d28f17cceea7b.zip
Add method to compute a query's bounded vars
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/rsacomb/FilteringProgram.scala22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/main/scala/rsacomb/FilteringProgram.scala b/src/main/scala/rsacomb/FilteringProgram.scala
index afa3f1e..2be236b 100644
--- a/src/main/scala/rsacomb/FilteringProgram.scala
+++ b/src/main/scala/rsacomb/FilteringProgram.scala
@@ -8,8 +8,8 @@ class FilteringProgram(query: Query, constants: List[Term]) extends RDFTriple {
8 /* Makes mplicit conversion OWLAPI IRI <-> RDFox IRI available */ 8 /* Makes mplicit conversion OWLAPI IRI <-> RDFox IRI available */
9 import RDFoxUtil._ 9 import RDFoxUtil._
10 10
11 private val bounded: List[Term] = this.getBoundedVariables
12 private val answer: List[Term] = query.getAnswerVariables.asScala.toList 11 private val answer: List[Term] = query.getAnswerVariables.asScala.toList
12 private val bounded: List[Term] = this.getBoundedVariables
13 13
14 val facts: List[Atom] = constants.map(named) 14 val facts: List[Atom] = constants.map(named)
15 val rules: List[Rule] = this.generateFilteringProgram().map(reifyRule) 15 val rules: List[Rule] = this.generateFilteringProgram().map(reifyRule)
@@ -17,7 +17,25 @@ class FilteringProgram(query: Query, constants: List[Term]) extends RDFTriple {
17 private def named(t: Term): Atom = 17 private def named(t: Term): Atom =
18 Atom.rdf(t, IRI.RDF_TYPE, RSA.internal("NAMED")) 18 Atom.rdf(t, IRI.RDF_TYPE, RSA.internal("NAMED"))
19 19
20 private def getBoundedVariables: List[Variable] = List() 20 private def getBoundedVariables: List[Term] = {
21 def extract(f: Formula): Set[Term] = {
22 f match {
23 case b: BodyFormula =>
24 b.getArguments()
25 .asScala
26 .filter(_.isInstanceOf[Variable])
27 .filterNot(answer.contains(_))
28 .toSet
29 case c: Conjunction =>
30 c.getConjuncts().asScala.flatMap(extract).toSet
31 case d: Disjunction =>
32 d.getDisjuncts().asScala.flatMap(extract).toSet
33 /* Ignoring Minus, Optional, Query, Values cases for now */
34 case _ => Set()
35 }
36 }
37 extract(query.getQueryFormula()).toList
38 }
21 39
22 /* NOTE: we are restricting to queries that contain conjunctions of 40 /* NOTE: we are restricting to queries that contain conjunctions of
23 * atoms for the time being. This might need to be reviewed in the 41 * atoms for the time being. This might need to be reviewed in the