26 package org.nexusformat.nxvalidate;
28 import org.nexusformat.nxvalidate.resources.XSLTResolver;
30 import java.io.FileInputStream;
31 import java.io.FileOutputStream;
32 import java.io.IOException;
34 import java.io.InputStream;
35 import java.io.OutputStream;
36 import javax.xml.transform.Transformer;
37 import javax.xml.transform.TransformerException;
38 import javax.xml.transform.TransformerFactory;
39 import javax.xml.transform.stream.StreamResult;
40 import javax.xml.transform.stream.StreamSource;
44 private File reducedNeXusFile;
45 private File schematronFile;
46 private File inputNexusFile;
47 private boolean keepTemp;
48 private InputStream dsdlIncludeXSLTStream = null;
49 private InputStream abstractExpandXSLTStream = null;
50 private InputStream svrlForXslt2XSLTStream = null;
51 private InputStream nxdl2schXSLTStream = null;
55 public NXschematron(File inputNexusFile, File reducedNeXusFile, File schematronFile,
56 final boolean keepTemp) {
58 this.reducedNeXusFile = reducedNeXusFile;
59 this.schematronFile = schematronFile;
60 this.inputNexusFile = inputNexusFile;
61 this.keepTemp = keepTemp;
64 dsdlIncludeXSLTStream =
66 "resources/iso_dsdl_include.xsl");
67 abstractExpandXSLTStream =
69 "resources/iso_abstract_expand.xsl");
70 svrlForXslt2XSLTStream =
72 "resources/iso_svrl_for_xslt2.xsl");
76 "resources/xslt/nxdl2sch.xsl");
89 String xslFilename, String outputFilename)
90 throws TransformerException {
92 new File(outputFilename));
103 File outputFile)
throws TransformerException {
106 TransformerFactory myFactory = TransformerFactory.newInstance(
107 "net.sf.saxon.TransformerFactoryImpl", null);
110 Transformer transformer = myFactory.newTransformer(
new StreamSource(
112 transformer.setParameter(
"generate-paths",
"yes");
115 transformer.transform(
new StreamSource(inputFile),
new StreamResult(
121 InputStream xslFileStream, OutputStream outputFileStream)
122 throws TransformerException {
125 TransformerFactory myFactory = TransformerFactory.newInstance(
126 "net.sf.saxon.TransformerFactoryImpl", null);
130 Transformer transformer = myFactory.newTransformer(
new StreamSource(
133 transformer.setParameter(
"generate-paths",
"yes");
136 transformer.transform(
new StreamSource(inputFileStream),
137 new StreamResult(outputFileStream));
141 File validate() throws IOException, TransformerException {
142 return validate(reducedNeXusFile, schematronFile);
145 File validate(File reducedNeXusFile, File schematronFile)
throws
146 IOException, TransformerException {
149 File schematron0 = File.createTempFile(
"nxdlFile",
".step0");
150 if (!this.keepTemp) {
151 schematron0.deleteOnExit();
153 TransformoMatic(
new FileInputStream(schematronFile), nxdl2schXSLTStream,
154 new FileOutputStream(schematron0));
157 File schematron1 = File.createTempFile(
"schematron",
".step1");
158 if (!this.keepTemp) {
159 schematron1.deleteOnExit();
161 TransformoMatic(
new FileInputStream(schematron0), dsdlIncludeXSLTStream,
162 new FileOutputStream(schematron1));
165 File schematron2 = File.createTempFile(
"schematron",
".step2");
166 if (!this.keepTemp) {
167 schematron2.deleteOnExit();
170 abstractExpandXSLTStream,
171 new FileOutputStream(schematron2));
174 File schemaFile = File.createTempFile(
"schema",
".xslt");
175 if (!this.keepTemp) {
176 schemaFile.deleteOnExit();
178 TransformoMatic(
new FileInputStream(schematron2),svrlForXslt2XSLTStream,
179 new FileOutputStream(schemaFile));
186 File resultsFile =
new File(reducedNeXusFile.getName().replaceAll(
".reduced",
"") +
".result");
188 if (!this.keepTemp) {
189 resultsFile.deleteOnExit();
192 new FileInputStream(schemaFile),
193 new FileOutputStream(resultsFile));
199 public static void main(String[] args) {
200 if (args.length != 3) {
201 System.out.println(
"Must specify three input files");
206 new File(args[1]),
new File(args[2]),
false);
207 File results = sch.validate();
208 System.out.println(results.getAbsolutePath());
209 }
catch (Exception e) {