From 95a2e9e85e1783e1bf2b50ae37bd9eab003a6ca8 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Wed, 29 Sep 2021 17:36:07 +0100 Subject: Write answers to output file --- src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala | 16 +++++++++++++++- .../ox/cs/rsacomb/sparql/ConjunctiveQueryAnswers.scala | 3 +-- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src/main/scala') 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 b1fd721..c030301 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala @@ -16,7 +16,8 @@ package uk.ac.ox.cs.rsacomb -import java.io.File +import java.io.{File, PrintWriter} +import java.nio.file.{Path, Paths, InvalidPathException} import java.util.HashMap import scala.collection.JavaConverters._ import tech.oxfordsemantic.jrdfox.client.UpdateType @@ -97,6 +98,14 @@ object RSAConfig { println(help) sys.exit(0) } + case flag @ ("-o" | "--output") :: _output :: tail => + try { + val output = Paths.get(_output) + parse(tail, config ++ Map('output -> output)) + } catch { + case e: InvalidPathException => + exit(s"'${_output}' is not a valid filename.") + } case flag @ ("-q" | "--queries") :: _query :: tail => { val query = new File(_query) if (!query.isFile) @@ -144,6 +153,11 @@ object RSAComb extends App { val answers = rsa ask queries + /* Write answers to output file */ + val output = new PrintWriter(config('output).get[Path].toFile) + output.write(ujson.write(ujson.Arr(answers.map(_.toJSON)), indent = 4)) + output.close() + // Logger.print(s"$answers", Logger.VERBOSE) // Logger print s"Number of answers: ${answers.length} (${answers.lengthWithMultiplicity})" // Retrieve unfiltered answers diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQueryAnswers.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQueryAnswers.scala index 3d16351..5b97679 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQueryAnswers.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/sparql/ConjunctiveQueryAnswers.scala @@ -46,7 +46,7 @@ class ConjunctiveQueryAnswers( val lengthWithMultiplicity: Long = answers.map(_._1).sum /** Serialise answers as JSON file */ - def toJSON(): ujson.Js.Value = { + def toJSON(): ujson.Js.Value = ujson.Obj( "queryID" -> query.id, "queryText" -> query.toString @@ -56,7 +56,6 @@ class ConjunctiveQueryAnswers( "answerVariables" -> ujson.Arr(query.answer.map(_.toString())), "answers" -> ujson.Arr(answers.map(_._2.mkString(" ")).sorted) ) - } override def toString(): String = if (query.bcq) { -- cgit v1.2.3