2 using System.Collections;
3 using System.Collections.Specialized;
5 using System.Xml.Schema;
7 namespace Commons.Xml.Nvdl
9 public class NvdlXsdValidatorProvider : NvdlValidationProvider
11 public override NvdlValidatorGenerator CreateGenerator (
12 XmlReader reader, NvdlConfig config)
14 if (reader.NamespaceURI != XmlSchema.Namespace)
16 ArrayList al = new ArrayList ();
18 if (reader.NodeType != XmlNodeType.Element) {
22 reader.MoveToContent ();
23 XmlSchema xs = XmlSchema.Read (reader, null);
24 xs.Compile (null, config.XmlResolverInternal);
28 return new NvdlXsdValidatorGenerator (al.ToArray (typeof (XmlSchema)) as XmlSchema []);
32 internal class NvdlXsdValidatorGenerator : NvdlValidatorGenerator
36 public NvdlXsdValidatorGenerator (XmlSchema [] schemas)
38 this.schemas = schemas;
41 public override XmlReader CreateValidator (XmlReader reader,
45 XmlReaderSettings s = new XmlReaderSettings ();
46 s.ValidationType = ValidationType.Schema;
47 // do not allow inline schema and schemaLocation.
48 s.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints;
49 s.XmlResolver = resolver;
50 foreach (XmlSchema schema in schemas)
51 s.Schemas.Add (schema);
52 return XmlReader.Create (reader, s);
54 XmlValidatingReader xvr =
55 new XmlValidatingReader (reader);
56 xvr.XmlResolver = resolver;
57 foreach (XmlSchema schema in schemas)
58 xvr.Schemas.Add (schema);
63 public override bool AddOption (string name, string arg)
68 public override bool HandleError (Exception ex, XmlReader reader, string nvdlLocation)
70 if (ex is XmlSchemaException)
71 throw new NvdlInstanceValidationException (String.Format ("XML schema validation error occured as a part of NVDL validation."), ex, this, nvdlLocation);