/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jena; import static org.apache.jena.atlas.logging.LogCtl.setCmdLogging; import org.apache.jena.rdf.model.Model ; import org.apache.jena.rdf.model.ModelFactory ; import org.apache.jena.riot.Lang ; import org.apache.jena.riot.RDFDataMgr ; import org.apache.jena.riot.RDFLanguages ; import org.apache.jena.system.JenaSystem ; /** A program which read two RDF models and determines if they are the same. * * <p>This program will read two RDF models, in a variety of languages, * and compare them. Input can be read either from a URL or from a file. * The program writes its results to the standard output stream and sets * its exit code to 0 if the models are equal, to 1 if they are not and * to -1 if it encounters an error.</p> * * <p></p> * * <pre>java jena.rdfcompare model1 model2 [lang1 [lang2]] * * model1 and model2 can be file names or URL's * lang1 and lang2 specify the language of the input and can be: * RDF/XML * N-TRIPLE * TURTLE * JSON-LD * The language defaults to what can be inferred from the file name or URL. * </pre> */ public class rdfcompare extends java.lang.Object { static { JenaSystem.init(); setCmdLogging(); } /** * @param args the command line arguments */ public static void main (String ... args) { if (args.length < 2 || args.length > 6) { usage(); System.exit(-1); } String in1 = args[0]; String in2 = args[1]; String lang1 = null ; if (args.length >= 3) lang1 = args[2]; String lang2 = null ; if (args.length >= 4) lang2 = args[3]; String base1 = null; if (args.length >= 5) base1 = args[4]; String base2 = base1; if (args.length >= 6) base2 = args[5]; //System.out.println(in1 + " " + in2 + " " + lang1 + " " + lang2 + " " + base1 + " " + base2); try { Model m1 = ModelFactory.createDefaultModel(); Model m2 = ModelFactory.createDefaultModel(); read(m1, in1, lang1, base1); read(m2, in2, lang2, base2); if (m1.isIsomorphicWith(m2)) { System.out.println("models are equal"); System.out.println(); System.exit(0); } else { System.out.println("models are unequal"); System.out.println(); System.exit(1); } } catch (Exception e) { System.err.println("Unhandled exception:"); System.err.println(" " + e.toString()); System.exit(-1); } } protected static void usage() { System.err.println("usage:"); System.err.println( " java jena.rdfcompare source1 source2 [lang1 [lang2 [base1 [base2]]]]"); System.err.println(); System.err.println(" source1 and source2 can be URL's or filenames"); System.err.println(" lang1 and lang2 can take values:"); System.err.println(" RDF/XML, N-TRIPLE, TURTLE, JSON-LD"); System.err.println(" base1 and base2 are URIs"); System.err.println(" base1 defaults to null"); System.err.println(" base2 defaults to base1"); System.err.println("If no base URIs are specified Jena determines the base URI based on the input source"); System.err.println(); } protected static void read(Model model, String in, String langStr, String base) { Lang lang = null ; if ( langStr != null ) lang = RDFLanguages.nameToLang(langStr) ; RDFDataMgr.read(model, in, base, lang) ; } }