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-dtd instances
44 --transform stylesheet instance-xml [output-xml]
45 --prettyprint [source] [result]
47 environment variable that affects behavior:
49 MONO_XMLTOOL_ERROR_DETAILS = yes : to get exception details.
53 static void Run (string [] args)
55 if (args.Length == 0) {
65 #if !TARGET_JVM && !MSNET
69 case "--validate-rnc":
70 ValidateRelaxngCompact (args);
72 case "--validate-rng":
73 ValidateRelaxngXml (args);
75 case "--validate-nvdl":
79 case "--validate-xsd":
82 case "--validate-dtd":
94 #if !TARGET_JVM && !MSNET
95 static void ValidateAuto (string [] args)
97 if (args.Length < 1) {
102 if (args [1].EndsWith ("rng"))
103 ValidateRelaxngXml (args);
104 else if (args [1].EndsWith ("rnc"))
105 ValidateRelaxngCompact (args);
106 else if (args [1].EndsWith ("nvdl"))
108 else if (args [1].EndsWith ("xsd"))
112 static void ValidateRelaxngXml (string [] args)
114 XmlReader xr = new XmlTextReader (args [1]);
115 RelaxngPattern p = RelaxngPattern.Read (xr);
117 ValidateRelaxng (p, args);
120 static void ValidateRelaxngCompact (string [] args)
122 StreamReader sr = new StreamReader (args [1]);
123 RelaxngPattern p = RncParser.ParseRnc (sr, null, Path.GetFullPath (args [1]));
125 ValidateRelaxng (p, args);
128 static void ValidateRelaxng (RelaxngPattern p, string [] args)
135 for (int i = 2; i < args.Length; i++) {
136 XmlTextReader xtr = new XmlTextReader (args [i]);
137 RelaxngValidatingReader vr =
138 new RelaxngValidatingReader (xtr, p);
139 if (Environment.GetEnvironmentVariable ("MONO_XMLTOOL_ERROR_DETAILS") == "yes")
140 vr.ReportDetails = true;
142 vr.InvalidNodeFound += delegate (XmlReader source, string message) {
143 IXmlLineInfo li = source as IXmlLineInfo;
144 Console.WriteLine ("ERROR: {0} (at {1} line {2} column {3})",
147 li != null && li.HasLineInfo () ? li.LineNumber : 0,
148 li != null && li.HasLineInfo () ? li.LinePosition : 0);
157 static void ValidateNvdl (string [] args)
159 XmlTextReader nvdlxtr = new XmlTextReader (args [1]);
160 NvdlRules nvdl = NvdlReader.Read (nvdlxtr);
162 for (int i = 2; i < args.Length; i++) {
163 XmlTextReader xtr = new XmlTextReader (args [i]);
164 NvdlValidatingReader nvr = new NvdlValidatingReader (xtr, nvdl);
172 static void ValidateXsd (string [] args)
174 XmlTextReader schemaxml = new XmlTextReader (args [1]);
175 XSchema xsd = XSchema.Read (schemaxml, null);
178 for (int i = 2; i < args.Length; i++) {
179 XmlTextReader xtr = new XmlTextReader (args [i]);
180 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
181 xvr.Schemas.Add (xsd);
188 static void ValidateDtd (string [] args)
190 for (int i = 1; i < args.Length; i++) {
191 XmlValidatingReader xvr = new XmlValidatingReader (
192 new XmlTextReader (args [i]));
193 xvr.ValidationType = ValidationType.DTD;
194 xvr.EntityHandling = EntityHandling.ExpandEntities;
201 static void Transform (string [] args)
203 XslTransform t = new XslTransform ();
205 TextWriter output = args.Length > 3 ?
206 File.CreateText (args [3]) : Console.Out;
207 t.Transform (new XPathDocument (args [2], XmlSpace.Preserve), null, output, null);
211 static void PrettyPrint (string [] args)
213 XmlTextReader r = null;
215 r = new XmlTextReader (args [1]);
217 r = new XmlTextReader (Console.In);
218 r.WhitespaceHandling = WhitespaceHandling.Significant;
219 XmlTextWriter w = null;
221 w = new XmlTextWriter (args [1], Encoding.UTF8);
223 w = new XmlTextWriter (Console.Out);
224 w.Formatting = Formatting.Indented;
228 w.WriteNode (r, false);