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 f5bd646..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);
@@ -46,14 +47,13 @@ namespace Commons.Xml.Nvdl
 
        internal class NvdlRelaxngValidatorGenerator : NvdlValidatorGenerator
        {
-               RelaxngPattern compiledPattern;
+               RelaxngPattern pattern;
 
                public NvdlRelaxngValidatorGenerator (RelaxngPattern p,
                        NvdlConfig config)
                {
                        // FIXME: use XmlResolver
-                       p.Compile ();
-                       compiledPattern = p;
+                       pattern = p;
                }
 
                public override XmlReader CreateValidator (XmlReader reader,
@@ -62,7 +62,19 @@ namespace Commons.Xml.Nvdl
                        // XmlResolver is never used.
                        RelaxngValidatingReader rvr = 
                                new RelaxngValidatingReader (
-                                       reader, compiledPattern);
+                                       reader, pattern);
+                       rvr.ReportDetails = true;
+                       return rvr;
+               }
+
+               public override XmlReader CreateAttributeValidator (
+                       XmlReader reader,
+                       XmlResolver resolver)
+               {
+                       // XmlResolver is never used.
+                       RelaxngValidatingReader rvr = 
+                               new RelaxngValidatingReader (
+                                       reader, pattern);
                        rvr.ReportDetails = true;
                        return rvr;
                }
@@ -71,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;
+               }
        }
 }