From d9043e15a4bd764c4c3eccd682a18445a598d923 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Fri, 27 Nov 2020 12:52:35 +0000 Subject: Add ability to pass multiple ontology files on the commandline --- src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala | 17 +++++++++-------- src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala | 16 +++++++++------- 2 files changed, 18 insertions(+), 15 deletions(-) (limited to 'src/main/scala/uk/ac/ox/cs') 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 016bb86..40fee79 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/Main.scala @@ -19,11 +19,11 @@ object RSAComb extends App { rsacomb - combined approach for CQ answering for RSA ontologies. USAGE - rsacomb + rsacomb ... where - the ontology is expected to be an OWL file and the (single) - query a SPARQL query file. + - query: a (single) SPARQL query file. + - ontology: one or more ontologies. """ @@ -32,15 +32,15 @@ object RSAComb extends App { * TODO: use something better later on */ - if (args.length < 2) { + if (args.length < 3) { println(help) sys.exit; } - val ontoPath = new File(args(0)) - val queryPath = new File(args(1)) + val queryPath = new File(args(0)) + val ontoPaths = args.drop(1).map(new File(_)) - if (!ontoPath.isFile || !queryPath.isFile) { + if (!queryPath.isFile || !ontoPaths.forall(_.isFile)) { println("The provided arguments are not regular files.\n\n") println(help) sys.exit; @@ -51,8 +51,9 @@ object RSAComb extends App { * case. */ - val ontology = RSAOntology(ontoPath) + val ontology = RSAOntology(ontoPaths: _*) if (ontology.isRSA) { + //println("ONTOLOGY IS RSA") /** Read SPARQL query from file */ val source = io.Source.fromFile(queryPath.getAbsoluteFile) diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala index ceb24de..4dd554a 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/RSAOntology.scala @@ -6,7 +6,7 @@ import java.util.HashMap import java.util.stream.{Collectors, Stream} import java.io.File import org.semanticweb.owlapi.apibinding.OWLManager - +import org.semanticweb.owlapi.util.OWLOntologyMerger import org.semanticweb.owlapi.model.{OWLOntology, OWLAxiom} import org.semanticweb.owlapi.model.{ OWLClass, @@ -63,17 +63,19 @@ object RSAOntology { def apply(ontology: OWLOntology): RSAOntology = new RSAOntology(ontology) - def apply(ontology: File): RSAOntology = - new RSAOntology(loadOntology(ontology)) + def apply(ontologies: File*): RSAOntology = + new RSAOntology(loadOntology(ontologies: _*)) def genFreshVariable(): Variable = { counter += 1 Variable.create(f"I$counter%03d") } - private def loadOntology(onto: File): OWLOntology = { + private def loadOntology(ontologies: File*): OWLOntology = { val manager = OWLManager.createOWLOntologyManager() - manager.loadOntologyFromOntologyDocument(onto) + ontologies.foreach { manager.loadOntologyFromOntologyDocument(_) } + val merger = new OWLOntologyMerger(manager) + merger.createMergedOntology(manager, OWLIRI.create("_:merged")) } } @@ -163,8 +165,8 @@ class RSAOntology(val ontology: OWLOntology) { } yield rule /* DEBUG: print datalog rules */ - //println("\nDatalog roles:") - //datalog.foreach(println) + println("\nDatalog roles:") + datalog.foreach(println) // Open connection with RDFox val (server, data) = RDFoxUtil.openConnection("RSACheck") -- cgit v1.2.3