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 Uri baseUri = resolver.ResolveUri (null, validate.SourceUri);
30 RelaxngPattern p = RncParser.ParseRnc (
31 new StreamReader ((Stream) resolver.GetEntity (
32 resolver.ResolveUri (baseUri, schemaUri),
35 return new NvdlRelaxngValidatorGenerator (p, config);
38 public override NvdlValidatorGenerator CreateGenerator (
39 XmlReader reader, NvdlConfig config)
41 if (reader.NamespaceURI != RelaxngGrammar.NamespaceURI)
44 return new NvdlRelaxngValidatorGenerator (RelaxngPattern.Read (reader), config);
48 internal class NvdlRelaxngValidatorGenerator : NvdlValidatorGenerator
50 RelaxngPattern pattern;
51 RelaxngPattern attributePattern;
53 public NvdlRelaxngValidatorGenerator (RelaxngPattern p,
56 // FIXME: use XmlResolver
60 public override XmlReader CreateValidator (XmlReader reader,
63 // XmlResolver is never used.
64 RelaxngValidatingReader rvr =
65 new RelaxngValidatingReader (
67 rvr.ReportDetails = true;
71 public override XmlReader CreateAttributeValidator (
75 if (attributePattern == null) {
76 RelaxngElement el = new RelaxngElement ();
77 el.NameClass = new RelaxngAnyName ();
78 el.Patterns.Add (pattern);
80 // XmlResolver is never used.
81 RelaxngValidatingReader rvr =
82 new RelaxngValidatingReader (
83 reader, attributePattern);
84 rvr.ReportDetails = true;
88 public override bool AddOption (string name, string arg)