2006-04-18 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Nvdl / NvdlXsdSupport.cs
index 579136d2fd7ee65aeec99105d2812c1e7bb3f49a..f964f5cda6ae3fe6380938de85d9f76e751c26d8 100644 (file)
@@ -41,18 +41,35 @@ namespace Commons.Xml.Nvdl
                public override XmlReader CreateValidator (XmlReader reader,
                        XmlResolver resolver)
                {
+#if NET_2_0
+                       XmlReaderSettings s = new XmlReaderSettings ();
+                       s.ValidationType = ValidationType.Schema;
+                       // do not allow inline schema and schemaLocation.
+                       s.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints;
+                       s.XmlResolver = resolver;
+                       foreach (XmlSchema schema in schemas)
+                               s.Schemas.Add (schema);
+                       return XmlReader.Create (reader, s);
+#else
                        XmlValidatingReader xvr =
                                new XmlValidatingReader (reader);
                        xvr.XmlResolver = resolver;
                        foreach (XmlSchema schema in schemas)
                                xvr.Schemas.Add (schema);
-
                        return xvr;
+#endif
                }
 
                public override bool AddOption (string name, string arg)
                {
                        return false;
                }
+
+               public override bool HandleError (Exception ex, XmlReader reader, string nvdlLocation)
+               {
+                       if (ex is XmlSchemaException)
+                               throw new NvdlInstanceValidationException (String.Format ("XML schema validation error occured as a part of NVDL validation."), ex, this, nvdlLocation);
+                       return false;
+               }
        }
 }