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 } 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) {
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":
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);