/*
* 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 java.net.*;
import java.io.*;
import org.apache.jena.rdf.model.* ;
import org.apache.jena.shared.JenaException ;
/** A program which read an RDF model and copy it to the standard output stream.
*
* <p>This program will read an RDF model, in a variety of languages,
* and copy it to the output stream in a possibly different language.
* 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 program terminate normally, and
* to -1 if it encounters an error.</p>
*
* <p></p>
*
* <pre>java jena.rdfcopy model [inlang [outlang]]
*
* model1 and model2 can be file names or URL's
* inlang and outlang specify the language of the input and output
* respectively and can be:
* RDF/XML
* N-TRIPLE
* TURTLE
* N3
* The input language defaults to RDF/XML and the output language
* defaults to N-TRIPLE.
* </pre>
*/
public class rdfcopy extends java.lang.Object {
static { setCmdLogging(); }
/**
* @param args the command line arguments
*/
public static void main(String ... args) {
if ( ( args.length < 1 ) || ( "-h".equals(args[0]) ) ) {
usage();
System.exit(-1);
}
String in = args[0];
String inlang = "RDF/XML";
int j;
for (j = 1; j < args.length && args[j].contains( "=" ); j++)
{}
int lastInProp = j;
if (j < args.length) {
inlang = args[j];
}
j++;
String outlang = "N-TRIPLE";
for (; j < args.length && args[j].contains( "=" ); j++)
{}
int lastOutProp = j;
if (j < args.length) {
outlang = args[j];
}
if (j + 1 < args.length) {
// System.err.println(j+"<<"+args.length);
usage();
System.exit(-1);
}
try {
Model m = ModelFactory.createDefaultModel();
String base = in ;
RDFReader rdr = m.getReader(inlang);
for (j = 1; j < lastInProp; j++) {
int eq = args[j].indexOf("=");
rdr.setProperty(
args[j].substring(0, eq),
args[j].substring(eq + 1));
}
try {
rdr.read(m, in);
} catch (JenaException ex)
{
if ( ! ( ex.getCause() instanceof MalformedURLException ) )
throw ex ;
// Tried as a URL. Try as a file name.
// Make absolute
File f = new File(in) ;
base = "file:///"+f.getCanonicalPath().replace('\\','/') ;
rdr.read(m, new FileInputStream(in), base) ;
}
RDFWriter w = m.getWriter(outlang);
j++;
for (; j < lastOutProp; j++) {
int eq = args[j].indexOf("=");
w.setProperty(
args[j].substring(0, eq),
args[j].substring(eq + 1));
}
w.write(m, System.out, null) ;
System.exit(0);
} 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.rdfcopy in {inprop=inval}* [ inlang {outprop=outval}* outlang]]");
System.err.println();
System.err.println(" in can be a URL or a filename");
System.err.println(" inlang and outlang can take values:");
System.err.println(" RDF/XML");
System.err.println(" RDF/XML-ABBREV");
System.err.println(" N-TRIPLE");
System.err.println(" TURTLE");
System.err.println(" N3");
System.err.println(
" inlang defaults to RDF/XML, outlang to N-TRIPLE");
System.err.println(" The legal values for inprop and outprop depend on inlang and outlang.");
System.err.println(" The legal values for inval and outval depend on inprop and outprop.");
System.err.println();
}
protected static void read(Model model, String in, String lang)
throws java.io.FileNotFoundException {
try {
URL url = new URL(in);
model.read(in, lang);
} catch (java.net.MalformedURLException e) {
model.read(new FileInputStream(in), "", lang);
}
}
}