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 } catch (Exception ex) {
24 if (Environment.GetEnvironmentVariable ("MONO_XMLTOOL_ERROR_DETAILS") == "yes")
25 Console.Error.WriteLine (ex);
27 Console.Error.WriteLine (ex.Message);
33 Console.Error.WriteLine (@"
34 Usage: mono-xmltool [options]
38 --validate [*.rng | *.rnc | *.nvdl | *.xsd] [instances]
39 --validate-rng relax-ng-grammar-xml [instances]
40 --validate-rnc relax-ng-compact-grammar-file [instances]
41 --validate-nvdl nvdl-script-xml [instances]
42 --validate-xsd xml-schema [instances]
43 --validate-xsd2 xml-schema [instances] (in .NET 2.0 validator)
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-xsd2":
83 case "--validate-xsd":
86 case "--validate-dtd":
98 #if !TARGET_JVM && !MSNET
99 static void ValidateAuto (string [] args)
101 if (args.Length < 1) {
106 if (args [1].EndsWith ("rng"))
107 ValidateRelaxngXml (args);
108 else if (args [1].EndsWith ("rnc"))
109 ValidateRelaxngCompact (args);
110 else if (args [1].EndsWith ("nvdl"))
112 else if (args [1].EndsWith ("xsd"))
116 static void ValidateRelaxngXml (string [] args)
118 XmlReader xr = new XmlTextReader (args [1]);
119 RelaxngPattern p = RelaxngPattern.Read (xr);
121 ValidateRelaxng (p, args);
124 static void ValidateRelaxngCompact (string [] args)
126 StreamReader sr = new StreamReader (args [1]);
127 RelaxngPattern p = RncParser.ParseRnc (sr, null, Path.GetFullPath (args [1]));
129 ValidateRelaxng (p, args);
132 static void ValidateRelaxng (RelaxngPattern p, string [] args)
139 for (int i = 2; i < args.Length; i++) {
140 XmlTextReader xtr = new XmlTextReader (args [i]);
141 RelaxngValidatingReader vr =
142 new RelaxngValidatingReader (xtr, p);
143 if (Environment.GetEnvironmentVariable ("MONO_XMLTOOL_ERROR_DETAILS") == "yes")
144 vr.ReportDetails = true;
146 vr.InvalidNodeFound += delegate (XmlReader source, string message) {
147 IXmlLineInfo li = source as IXmlLineInfo;
148 Console.WriteLine ("ERROR: {0} (at {1} line {2} column {3})",
151 li != null && li.HasLineInfo () ? li.LineNumber : 0,
152 li != null && li.HasLineInfo () ? li.LinePosition : 0);
161 static void ValidateNvdl (string [] args)
163 XmlTextReader nvdlxtr = new XmlTextReader (args [1]);
164 NvdlRules nvdl = NvdlReader.Read (nvdlxtr);
166 for (int i = 2; i < args.Length; i++) {
167 XmlTextReader xtr = new XmlTextReader (args [i]);
168 NvdlValidatingReader nvr = new NvdlValidatingReader (xtr, nvdl);
176 static void ValidateXsd (string [] args)
178 XmlTextReader schemaxml = new XmlTextReader (args [1]);
179 XSchema xsd = XSchema.Read (schemaxml, null);
182 for (int i = 2; i < args.Length; i++) {
183 XmlTextReader xtr = new XmlTextReader (args [i]);
184 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
185 xvr.Schemas.Add (xsd);
192 static void ValidateXsd2 (string [] args)
194 XmlReaderSettings s = new XmlReaderSettings ();
195 s.ValidationType = ValidationType.Schema;
196 s.Schemas.Add (null, args [1]);
197 for (int i = 2; i < args.Length; i++) {
198 XmlReader xr = XmlReader.Create (args [i], s);
205 static void ValidateDtd (string [] args)
207 for (int i = 1; i < args.Length; i++) {
208 XmlValidatingReader xvr = new XmlValidatingReader (
209 new XmlTextReader (args [i]));
210 xvr.ValidationType = ValidationType.DTD;
211 xvr.EntityHandling = EntityHandling.ExpandEntities;
218 static void Transform (string [] args)
220 XslTransform t = new XslTransform ();
222 TextWriter output = args.Length > 3 ?
223 File.CreateText (args [3]) : Console.Out;
224 t.Transform (new XPathDocument (args [2], XmlSpace.Preserve), null, output, null);
228 static void PrettyPrint (string [] args)
230 XmlTextReader r = null;
232 r = new XmlTextReader (args [1]);
234 r = new XmlTextReader (Console.In);
235 r.WhitespaceHandling = WhitespaceHandling.Significant;
236 XmlTextWriter w = null;
238 w = new XmlTextWriter (args [2], Encoding.UTF8);
240 w = new XmlTextWriter (Console.Out);
241 w.Formatting = Formatting.Indented;
245 w.WriteNode (r, false);