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);
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,
// 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;
}
{
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;
+ }
}
}