In corlib/System.Runtime.InteropServices:
[mono.git] / mcs / class / Commons.Xml.Relaxng / Commons.Xml.Nvdl / NvdlRelaxngSupport.cs
old mode 100755 (executable)
new mode 100644 (file)
index fa8dc3d..cda6af0
@@ -26,9 +26,10 @@ namespace Commons.Xml.Nvdl
                        string schemaUri = GetSchemaUri (validate);
                        if (schemaUri == null)
                                return null;
+                       Uri baseUri = resolver.ResolveUri (null, validate.SourceUri);
                        RelaxngPattern p = RncParser.ParseRnc (
                                new StreamReader ((Stream) resolver.GetEntity (
-                                       resolver.ResolveUri (null, schemaUri),
+                                       resolver.ResolveUri (baseUri, schemaUri),
                                        null,
                                        typeof (Stream))));
                        return new NvdlRelaxngValidatorGenerator (p, config);
@@ -47,7 +48,6 @@ namespace Commons.Xml.Nvdl
        internal class NvdlRelaxngValidatorGenerator : NvdlValidatorGenerator
        {
                RelaxngPattern pattern;
-               RelaxngPattern attributePattern;
 
                public NvdlRelaxngValidatorGenerator (RelaxngPattern p,
                        NvdlConfig config)
@@ -71,15 +71,10 @@ namespace Commons.Xml.Nvdl
                        XmlReader reader,
                        XmlResolver resolver)
                {
-                       if (attributePattern == null) {
-                               RelaxngElement el = new RelaxngElement ();
-                               el.NameClass = new RelaxngAnyName ();
-                               el.Patterns.Add (pattern);
-                       }
                        // XmlResolver is never used.
                        RelaxngValidatingReader rvr = 
                                new RelaxngValidatingReader (
-                                       reader, attributePattern);
+                                       reader, pattern);
                        rvr.ReportDetails = true;
                        return rvr;
                }
@@ -88,5 +83,12 @@ namespace Commons.Xml.Nvdl
                {
                        return false;
                }
+
+               public override bool HandleError (Exception ex, XmlReader reader, string nvdlLocation)
+               {
+                       if (ex is RelaxngException)
+                               throw new NvdlInstanceValidationException (String.Format ("RELAX NG validation error occured as a part of NVDL validation: " + ex.Message), ex, this, nvdlLocation);
+                       return false;
+               }
        }
 }