5 using System.Xml.Schema;
7 using System.Xml.XPath;
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 on the behavior:
50 MONO_XMLTOOL_ERROR_DETAILS = yes : to get exception details.
54 static void Run (string [] args)
56 if (args.Length == 0) {
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":
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);
166 for (int i = 2; i < args.Length; i++) {
167 XmlTextReader xtr = new XmlTextReader (args [i]);
168 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
169 xvr.Schemas.Add (xsd);
176 static void ValidateDtd (string [] args)
178 for (int i = 1; i < args.Length; i++) {
179 XmlValidatingReader xvr = new XmlValidatingReader (
180 new XmlTextReader (args [i]));
181 xvr.ValidationType = ValidationType.DTD;
182 xvr.EntityHandling = EntityHandling.ExpandEntities;
189 static void Transform (string [] args)
191 XslTransform t = new XslTransform ();
193 TextWriter output = args.Length > 3 ?
194 File.CreateText (args [3]) : Console.Out;
195 t.Transform (new XPathDocument (args [2], XmlSpace.Preserve), null, output, null);
199 static void PrettyPrint (string [] args)
201 XmlTextReader r = null;
203 r = new XmlTextReader (args [1]);
205 r = new XmlTextReader (Console.In);
206 r.WhitespaceHandling = WhitespaceHandling.Significant;
207 XmlTextWriter w = null;
209 w = new XmlTextWriter (args [1], Encoding.UTF8);
211 w = new XmlTextWriter (Console.Out);
212 w.Formatting = Formatting.Indented;
216 w.WriteNode (r, false);