diff options
author | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-09-22 19:07:18 +0200 |
---|---|---|
committer | Federico Igne <federico.igne@cs.ox.ac.uk> | 2020-09-22 19:46:48 +0200 |
commit | 10a9d14545abcabae28eb344df4d28f17cceea7b (patch) | |
tree | 2df3cde374a1abb78e1fcebe9409a87722640f74 | |
parent | 36955b4e8209162a10198b4914d3e9a2ad9e260a (diff) | |
download | RSAComb-10a9d14545abcabae28eb344df4d28f17cceea7b.tar.gz RSAComb-10a9d14545abcabae28eb344df4d28f17cceea7b.zip |
Add method to compute a query's bounded vars
-rw-r--r-- | src/main/scala/rsacomb/FilteringProgram.scala | 22 |
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 |