Added another tool: runs SPARQL updates in place on a file.
1 parent e88018e commit 7d36c270d3d5ff8020bd6d8606ce227c13318dda
@Alex Tucker Alex Tucker authored on 2 Mar 2018
Showing 1 changed file
View
49
src/main/scala/uk/org/floop/updateInPlace/Run.scala 0 → 100644
package uk.org.floop.updateInPlace
 
import java.io.{File, FileOutputStream, FileWriter}
import java.nio.file.{Files, Path}
 
import org.apache.jena.query.{Dataset, DatasetFactory, QueryExecutionFactory, QueryFactory}
import org.apache.jena.rdf.model.{Model, ModelFactory}
import org.apache.jena.riot.{Lang, RDFDataMgr, RDFLanguages}
import org.apache.jena.update.UpdateAction
 
import scala.io.Source
 
case class Config(dir: File = new File("sparql"),
data: File = null)
 
object Run extends App {
 
val packageVersion: String = getClass.getPackage.getImplementationVersion()
val parser = new scopt.OptionParser[Config]("sparql-update-in-place") {
head("sparql-update-in-place", packageVersion)
opt[File]('q', "querydir") optional() valueName "<dir>" action { (x, c) =>
c.copy(dir = x)
} text "location of SPARQL update queries to run, defaults to sparql"
arg[File]("<file>") required() action { (x, c) =>
c.copy(data = x) } text "data to update in-place"
}
parser.parse(args, Config()) match {
case None =>
case Some(config) =>
val dataset = DatasetFactory.create
RDFDataMgr.read(dataset, config.data.toString)
runQueriesUnder(config.dir, dataset, config.data)
val out = new FileOutputStream(config.data)
RDFDataMgr.write(out, dataset.getDefaultModel, RDFLanguages.filenameToLang(config.data.toString))
out.close
}
 
def runQueriesUnder(dir: File, dataset: Dataset, out: File): Unit = {
Files.walk(dir.toPath()).
filter(Files.isRegularFile(_)).
sorted((p1, p2) => p1.compareTo((p2))).
forEach { p =>
UpdateAction.parseExecute(Source.fromFile(p.toFile).mkString, dataset)
}
}
 
 
}