5 using System.Xml.Schema;
7 using System.Xml.XPath;
8 #if !TARGET_JVM && !MSNET
9 using Commons.Xml.Nvdl;
10 using Commons.Xml.Relaxng;
11 using Commons.Xml.Relaxng.Rnc;
13 using XSchema = System.Xml.Schema.XmlSchema;
15 namespace Commons.Xml.Relaxng
19 public static void Main (string [] args)
23 Console.Error.WriteLine ("done.");
24 } catch (Exception ex) {
25 if (Environment.GetEnvironmentVariable ("MONO_XMLTOOL_ERROR_DETAILS") == "yes")
26 Console.Error.WriteLine (ex);
28 Console.Error.WriteLine (ex.Message);
34 Console.Error.WriteLine (@"
35 Usage: mono-xmltool [options]
39 --validate [*.rng | *.rnc | *.nvdl | *.xsd] [instances]
40 --validate-rng relax-ng-grammar-xml [instances]
41 --validate-rnc relax-ng-compact-grammar-file [instances]
42 --validate-nvdl nvdl-script-xml [instances]
43 --validate-xsd xml-schema [instances]
44 --validate-dtd instances
45 --transform stylesheet instance-xml [output-xml]
46 --prettyprint [source] [result]
48 environment variable that affects behavior:
50 MONO_XMLTOOL_ERROR_DETAILS = yes : to get exception details.
54 static void Run (string [] args)
56 if (args.Length == 0) {
66 #if !TARGET_JVM && !MSNET
70 case "--validate-rnc":
71 ValidateRelaxngCompact (args);
73 case "--validate-rng":
74 ValidateRelaxngXml (args);
76 case "--validate-nvdl":
80 case "--validate-xsd":
83 case "--validate-dtd":
95 #if !TARGET_JVM && !MSNET
96 static void ValidateAuto (string [] args)
98 if (args.Length < 1) {
103 if (args [1].EndsWith ("rng"))
104 ValidateRelaxngXml (args);
105 else if (args [1].EndsWith ("rnc"))
106 ValidateRelaxngCompact (args);
107 else if (args [1].EndsWith ("nvdl"))
109 else if (args [1].EndsWith ("xsd"))
113 static void ValidateRelaxngXml (string [] args)
115 XmlReader xr = new XmlTextReader (args [1]);
116 RelaxngPattern p = RelaxngPattern.Read (xr);
118 ValidateRelaxng (p, args);
121 static void ValidateRelaxngCompact (string [] args)
123 StreamReader sr = new StreamReader (args [1]);
124 RelaxngPattern p = RncParser.ParseRnc (sr);
126 ValidateRelaxng (p, args);
129 static void ValidateRelaxng (RelaxngPattern p, string [] args)
134 for (int i = 2; i < args.Length; i++) {
135 XmlTextReader xtr = new XmlTextReader (args [i]);
136 RelaxngValidatingReader vr =
137 new RelaxngValidatingReader (xtr, p);
138 if (Environment.GetEnvironmentVariable ("MONO_XMLTOOL_ERROR_DETAILS") == "yes")
139 vr.ReportDetails = true;
146 static void ValidateNvdl (string [] args)
148 XmlTextReader nvdlxtr = new XmlTextReader (args [1]);
149 NvdlRules nvdl = NvdlReader.Read (nvdlxtr);
151 for (int i = 2; i < args.Length; i++) {
152 XmlTextReader xtr = new XmlTextReader (args [i]);
153 NvdlValidatingReader nvr = new NvdlValidatingReader (xtr, nvdl);
161 static void ValidateXsd (string [] args)
163 XmlTextReader schemaxml = new XmlTextReader (args [1]);
164 XSchema xsd = XSchema.Read (schemaxml, null);
167 for (int i = 2; i < args.Length; i++) {
168 XmlTextReader xtr = new XmlTextReader (args [i]);
169 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
170 xvr.Schemas.Add (xsd);
177 static void ValidateDtd (string [] args)
179 for (int i = 1; i < args.Length; i++) {
180 XmlValidatingReader xvr = new XmlValidatingReader (
181 new XmlTextReader (args [i]));
182 xvr.ValidationType = ValidationType.DTD;
183 xvr.EntityHandling = EntityHandling.ExpandEntities;
190 static void Transform (string [] args)
192 XslTransform t = new XslTransform ();
194 TextWriter output = args.Length > 3 ?
195 File.CreateText (args [3]) : Console.Out;
196 t.Transform (new XPathDocument (args [2], XmlSpace.Preserve), null, output, null);
200 static void PrettyPrint (string [] args)
202 XmlTextReader r = null;
204 r = new XmlTextReader (args [1]);
206 r = new XmlTextReader (Console.In);
207 r.WhitespaceHandling = WhitespaceHandling.Significant;
208 XmlTextWriter w = null;
210 w = new XmlTextWriter (args [1], Encoding.UTF8);
212 w = new XmlTextWriter (Console.Out);
213 w.Formatting = Formatting.Indented;
217 w.WriteNode (r, false);