package uk.org.floop import java.io.{File, StringWriter} import java.net.URI import org.apache.jena.riot.RDFDataMgr case class Config(uris: Seq[URI] = Seq.empty) object RdfDiff extends App { val packageVersion: String = getClass.getPackage.getImplementationVersion() val parser = new scopt.OptionParser[Config]("rdfdiff") { head("rdfdiff", packageVersion) arg[URI]("<URI>") minOccurs(1) maxOccurs(2) hidden() action { (x, c) => c.copy(uris = c.uris :+ x) } help("help") text("Parses each file/URL as RDF and shows the differences between the resulting set of statements.") } parser.parse(args, Config()) match { case Some(Config(Seq(uriA, uriB))) => val a = RDFDataMgr.loadModel(uriA.toString) val b = RDFDataMgr.loadModel(uriB.toString) if (a isIsomorphicWith b) { println("Graphs are isomorphic.") System.exit(0) } else { val sw = new StringWriter() sw.write("<<<<\n") a.difference(b).write(sw, "TURTLE") sw.write("\n----\n") b.difference(a).write(sw, "TURTLE") sw.write("\n>>>>\n") println(sw.toString) System.exit(1) } case _ => System.exit(2) } }