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 /src/main/scala | |
| parent | 36955b4e8209162a10198b4914d3e9a2ad9e260a (diff) | |
| download | RSAComb-10a9d14545abcabae28eb344df4d28f17cceea7b.tar.gz RSAComb-10a9d14545abcabae28eb344df4d28f17cceea7b.zip | |
Add method to compute a query's bounded vars
Diffstat (limited to 'src/main/scala')
| -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 |
