svn path=/branches/mono-1-1-9/mcs/; revision=51216
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Nvdl / NvdlXsdSupport.cs
1 using System;
2 using System.Collections;
3 using System.Collections.Specialized;
4 using System.Xml;
5 using System.Xml.Schema;
6
7 namespace Commons.Xml.Nvdl
8 {
9         public class NvdlXsdValidatorProvider : NvdlValidationProvider
10         {
11                 public override NvdlValidatorGenerator CreateGenerator (
12                         XmlReader reader, NvdlConfig config)
13                 {
14                         if (reader.NamespaceURI != XmlSchema.Namespace)
15                                 return null;
16                         ArrayList al = new ArrayList ();
17                         while (!reader.EOF) {
18                                 XmlSchema xs = XmlSchema.Read (reader, null);
19                                 xs.Compile (null, config.XmlResolverInternal);
20                                 al.Add (xs);
21                         }
22                         return new NvdlXsdValidatorGenerator (al.ToArray (typeof (XmlSchema)) as XmlSchema []);
23                 }
24         }
25
26         internal class NvdlXsdValidatorGenerator : NvdlValidatorGenerator
27         {
28                 XmlSchema [] schemas;
29
30                 public NvdlXsdValidatorGenerator (XmlSchema [] schemas)
31                 {
32                         this.schemas = schemas;
33                 }
34
35                 public override XmlReader CreateValidator (XmlReader reader,
36                         XmlResolver resolver)
37                 {
38                         XmlValidatingReader xvr =
39                                 new XmlValidatingReader (reader);
40                         xvr.XmlResolver = resolver;
41                         foreach (XmlSchema schema in schemas)
42                                 xvr.Schemas.Add (schema);
43
44                         return xvr;
45                 }
46
47                 public override bool AddOption (string name, string arg)
48                 {
49                         return false;
50                 }
51         }
52 }