diff options
| author | Federico Igne <git@federicoigne.com> | 2021-10-03 11:16:33 +0100 |
|---|---|---|
| committer | Federico Igne <git@federicoigne.com> | 2021-10-03 11:16:33 +0100 |
| commit | 0cd63c26fdfafaf09734950add28f63d500ac330 (patch) | |
| tree | 244a4d11478e563feb6e29544b6ce4da882a5d96 /src/main/scala/uk | |
| parent | 297c88902b27030cb9f6004c51ccae18eb453933 (diff) | |
| download | RSAComb-0cd63c26fdfafaf09734950add28f63d500ac330.tar.gz RSAComb-0cd63c26fdfafaf09734950add28f63d500ac330.zip | |
Assign queries integer identifier
The ID needs to be specified at creation time or in a query file
preceeding the query with the syntax
```
^[Query<id>]
```
where `<id>` is the id of the query.
Diffstat (limited to 'src/main/scala/uk')
| -rw-r--r-- | src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQuery.scala | 9 | ||||
| -rw-r--r-- | src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala | 17 |
2 files changed, 14 insertions, 12 deletions
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQuery.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQuery.scala index 105f425..693a9af 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQuery.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQuery.scala | |||
| @@ -32,14 +32,12 @@ import uk.ac.ox.cs.rsacomb.util.RDFoxUtil | |||
| 32 | /** Factory for [[uk.ac.ox.cs.rsacomb.sparql.ConjunctiveQuery]]. */ | 32 | /** Factory for [[uk.ac.ox.cs.rsacomb.sparql.ConjunctiveQuery]]. */ |
| 33 | object ConjunctiveQuery { | 33 | object ConjunctiveQuery { |
| 34 | 34 | ||
| 35 | private var idCounter: Int = 0; | ||
| 36 | |||
| 37 | /** Creates a new ConjunctiveQuery instance. | 35 | /** Creates a new ConjunctiveQuery instance. |
| 38 | * | 36 | * |
| 39 | * @param query `SelectQuery` instance representing the actual query | 37 | * @param query `SelectQuery` instance representing the actual query |
| 40 | */ | 38 | */ |
| 41 | def apply(query: SelectQuery): ConjunctiveQuery = | 39 | def apply(id: Int, query: SelectQuery): ConjunctiveQuery = |
| 42 | new ConjunctiveQuery({ idCounter += 1; idCounter }, query) | 40 | new ConjunctiveQuery(id, query) |
| 43 | 41 | ||
| 44 | /** Creates a new ConjunctiveQuery from a query string | 42 | /** Creates a new ConjunctiveQuery from a query string |
| 45 | * | 43 | * |
| @@ -50,10 +48,11 @@ object ConjunctiveQuery { | |||
| 50 | * input query represents one, None is returned otherwise. | 48 | * input query represents one, None is returned otherwise. |
| 51 | */ | 49 | */ |
| 52 | def parse( | 50 | def parse( |
| 51 | id: Int, | ||
| 53 | query: String, | 52 | query: String, |
| 54 | prefixes: Prefixes = new Prefixes() | 53 | prefixes: Prefixes = new Prefixes() |
| 55 | ): Option[ConjunctiveQuery] = | 54 | ): Option[ConjunctiveQuery] = |
| 56 | RDFoxUtil.parseSelectQuery(query, prefixes).map(ConjunctiveQuery(_)) | 55 | RDFoxUtil.parseSelectQuery(query, prefixes).map(ConjunctiveQuery(id, _)) |
| 57 | 56 | ||
| 58 | } | 57 | } |
| 59 | 58 | ||
diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala index aa501cd..46f1160 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala | |||
| @@ -243,21 +243,24 @@ object RDFoxUtil { | |||
| 243 | path: os.Path, | 243 | path: os.Path, |
| 244 | prefixes: Prefixes = new Prefixes() | 244 | prefixes: Prefixes = new Prefixes() |
| 245 | ): List[ConjunctiveQuery] = { | 245 | ): List[ConjunctiveQuery] = { |
| 246 | val pattern = raw"\^\[Query(\d+)\]".r | ||
| 246 | val queries = os.read | 247 | val queries = os.read |
| 247 | .lines(path) | 248 | .lines(path) |
| 248 | .map(_.trim.filter(_ >= ' ')) | 249 | .map(_.trim.filter(_ >= ' ')) |
| 249 | .filterNot(_ == "") | 250 | .filterNot(_ == "") |
| 250 | .foldRight((List.empty[List[String]], List.empty[String])) { | 251 | .foldRight((List.empty[Option[ConjunctiveQuery]], List.empty[String])) { |
| 251 | case (line, (acc, query)) => { | 252 | case (line, (acc, query)) => { |
| 252 | if ("^#\\^\\[Query\\d+\\]$".r.matches(line)) | 253 | line match { |
| 253 | (query :: acc, List.empty) | 254 | case pattern(id) => { |
| 254 | else | 255 | val cq = |
| 255 | (acc, line :: query) | 256 | ConjunctiveQuery.parse(id.toInt, query.mkString(" "), prefixes) |
| 257 | (cq :: acc, List.empty) | ||
| 258 | } | ||
| 259 | case _ => (acc, line :: query) | ||
| 260 | } | ||
| 256 | } | 261 | } |
| 257 | } | 262 | } |
| 258 | ._1 | 263 | ._1 |
| 259 | .map(_.mkString(" ")) | ||
| 260 | .map(ConjunctiveQuery.parse(_, prefixes)) | ||
| 261 | .collect { case Some(q) => q } | 264 | .collect { case Some(q) => q } |
| 262 | Logger print s"Loaded ${queries.length} queries from $path" | 265 | Logger print s"Loaded ${queries.length} queries from $path" |
| 263 | queries | 266 | queries |
