package tk.eclipse.plugin.xmleditor.editors;
import java.io.File;
import com.thaiopensource.relaxng.edit.SchemaCollection;
import com.thaiopensource.relaxng.input.InputFormat;
import com.thaiopensource.relaxng.input.dtd.DtdInputFormat;
import com.thaiopensource.relaxng.input.xml.XmlInputFormat;
import com.thaiopensource.relaxng.output.LocalOutputDirectory;
import com.thaiopensource.relaxng.output.OutputDirectory;
import com.thaiopensource.relaxng.output.OutputFormat;
import com.thaiopensource.relaxng.output.dtd.DtdOutputFormat;
import com.thaiopensource.relaxng.output.xsd.XsdOutputFormat;
import com.thaiopensource.util.UriOrFile;
import com.thaiopensource.xml.sax.ErrorHandlerImpl;
/**
* Schema Generator using Trang.
* <p>
* It can generate DTD and XML Schema from XML files.
*
* @author Naoki Takezoe
*/
public class SchemaGenerator {
/**
* Generates XSD from a DTD file.
*
* @param input DTD file (input)
* @param output XSD file (output)
* @throws Exception
*/
public static void generateXSDFromDTD(File input, File output) throws Exception {
ErrorHandlerImpl eh = new ErrorHandlerImpl();
OutputFormat of = new XsdOutputFormat();
InputFormat inFormat = new DtdInputFormat();
SchemaCollection sc = inFormat.load(
UriOrFile.toUri(input.getAbsolutePath()), new String[0], "xsd", eh);
OutputDirectory od = new LocalOutputDirectory(
sc.getMainUri(),output,"xml","utf-8",80,4);
of.output(sc, od, new String[0], "xml", eh);
}
/**
* Generates DTD from a XML file.
*
* @param input XML file (input)
* @param output DTD file (output)
* @throws Exception
*/
public static void generateDTDFromXML(File input,File output) throws Exception {
ErrorHandlerImpl eh = new ErrorHandlerImpl();
OutputFormat of = new DtdOutputFormat();
InputFormat inFormat = new XmlInputFormat();
SchemaCollection sc = inFormat.load(
UriOrFile.toUri(input.getAbsolutePath()), new String[0], "dtd", eh);
OutputDirectory od = new LocalOutputDirectory(
sc.getMainUri(),output,"xml","utf-8",80,4);
of.output(sc, od, new String[0], "xml", eh);
}
/**
* Generats XML Schema from a XML file.
*
* @param input XML file (input)
* @param output XSD file (output)
* @throws Exception
*/
public static void generateXSDFromXML(File input,File output) throws Exception {
ErrorHandlerImpl eh = new ErrorHandlerImpl();
OutputFormat of = new XsdOutputFormat();
InputFormat inFormat = new XmlInputFormat();
SchemaCollection sc = inFormat.load(
UriOrFile.toUri(input.getAbsolutePath()), new String[0], "xsd", eh);
OutputDirectory od = new LocalOutputDirectory(
sc.getMainUri(),output,"xml","utf-8",80,4);
of.output(sc, od, new String[0], "xml", eh);
}
}