2 using System.Collections;
3 using System.Collections.Specialized;
6 using Commons.Xml.Relaxng;
7 using Commons.Xml.Relaxng.Rnc;
9 namespace Commons.Xml.Nvdl
11 public class NvdlRelaxngValidatorProvider : NvdlValidationProvider
13 public const string RncMimeType = "application/vnd.oasis-open.relax-ng.rnc";
15 public override NvdlValidatorGenerator CreateGenerator (
16 NvdlValidate validate, string schemaType, NvdlConfig config)
18 if (schemaType == RncMimeType)
19 return CreateRncGenerator (validate, config);
20 return base.CreateGenerator (validate, schemaType, config);
23 private NvdlValidatorGenerator CreateRncGenerator (NvdlValidate validate, NvdlConfig config)
25 XmlResolver resolver = config.XmlResolverInternal;
26 string schemaUri = GetSchemaUri (validate);
27 if (schemaUri == null)
29 RelaxngPattern p = RncParser.ParseRnc (
30 new StreamReader ((Stream) resolver.GetEntity (
31 resolver.ResolveUri (null, schemaUri),
34 return new NvdlRelaxngValidatorGenerator (p, config);
37 public override NvdlValidatorGenerator CreateGenerator (
38 XmlReader reader, NvdlConfig config)
40 if (reader.NamespaceURI != RelaxngGrammar.NamespaceURI)
43 return new NvdlRelaxngValidatorGenerator (RelaxngPattern.Read (reader), config);
47 internal class NvdlRelaxngValidatorGenerator : NvdlValidatorGenerator
49 RelaxngPattern pattern;
50 RelaxngPattern attributePattern;
52 public NvdlRelaxngValidatorGenerator (RelaxngPattern p,
55 // FIXME: use XmlResolver
59 public override XmlReader CreateValidator (XmlReader reader,
62 // XmlResolver is never used.
63 RelaxngValidatingReader rvr =
64 new RelaxngValidatingReader (
66 rvr.ReportDetails = true;
70 public override XmlReader CreateAttributeValidator (
74 if (attributePattern == null) {
75 RelaxngElement el = new RelaxngElement ();
76 el.NameClass = new RelaxngAnyName ();
77 el.Patterns.Add (pattern);
79 // XmlResolver is never used.
80 RelaxngValidatingReader rvr =
81 new RelaxngValidatingReader (
82 reader, attributePattern);
83 rvr.ReportDetails = true;
87 public override bool AddOption (string name, string arg)