Author: atsushi
Date: 2005-03-07 00:31:56 -0500 (Mon, 07 Mar 2005)
New Revision: 41499
Modified:
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/ChangeLog
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlBuiltInValidationProvider.cs
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlConfig.cs
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlFilteredXmlReader.cs
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlSimplified.cs
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlValidationProvider.cs
Log:
2005-03-07 Atsushi Enomoto <[EMAIL PROTECTED]>
* README :
more description.
* NvdlBuiltInValidationProvider.cs :
When it is "allow", it should not always return false.
* NvdlFilteredXmlReader.cs :
Added support for PlanAtt validation.
* NvdlConfig.cs :
Removed unused code.
* NvdlSimplified.cs :
Attribute default rule is "attach", not "allow". Removed unused
code. Added attribute validation support.
* NvdlValidationProvider.cs :
Extended MIME type check to "*/*-xml" (not only text/xml).
Added CreateAttributeValidator() method for "schema rewriting for
attribute sections" support (FCD spec 8.7.3).
Modified: trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/ChangeLog
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/ChangeLog
2005-03-07 04:17:44 UTC (rev 41498)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/ChangeLog
2005-03-07 05:31:56 UTC (rev 41499)
@@ -1,3 +1,21 @@
+2005-03-07 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * README :
+ more description.
+ * NvdlBuiltInValidationProvider.cs :
+ When it is "allow", it should not always return false.
+ * NvdlFilteredXmlReader.cs :
+ Added support for PlanAtt validation.
+ * NvdlConfig.cs :
+ Removed unused code.
+ * NvdlSimplified.cs :
+ Attribute default rule is "attach", not "allow". Removed unused
+ code. Added attribute validation support.
+ * NvdlValidationProvider.cs :
+ Extended MIME type check to "*/*-xml" (not only text/xml).
+ Added CreateAttributeValidator() method for "schema rewriting for
+ attribute sections" support (FCD spec 8.7.3).
+
2005-03-06 Atsushi Enomoto <[EMAIL PROTECTED]>
* NvdlFilteredXmlReader.cs : code refactory.
Modified:
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlBuiltInValidationProvider.cs
===================================================================
---
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlBuiltInValidationProvider.cs
2005-03-07 04:17:44 UTC (rev 41498)
+++
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlBuiltInValidationProvider.cs
2005-03-07 05:31:56 UTC (rev 41499)
@@ -55,9 +55,11 @@
public override bool Read ()
{
- if (Reader.Read () && !allow)
+ if (!Reader.Read ())
+ return false;
+ if (!allow)
throw new NvdlValidationException
(String.Format ("The NVDL script does not allow an element whose namespace is
'{0}'", Reader.NamespaceURI), Reader as IXmlLineInfo);
- return false;
+ return true;
}
}
}
Modified: trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlConfig.cs
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlConfig.cs
2005-03-07 04:17:44 UTC (rev 41498)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlConfig.cs
2005-03-07 05:31:56 UTC (rev 41499)
@@ -48,72 +48,5 @@
throw new NvdlCompileException (String.Format ("Either
schema type '{0}' or the target schema document is not supported in this
configuration. Add custom provider that supports this schema type.",
schemaType), validate);
}
-
-/*
- public virtual NvdlValidatorGenerator GetGenerator (string
mimeType, string schemaAttribute, XmlElement schemaElement, NvdlValidate
validate)
- {
- XmlReader schemaReader = null;
- if (schemaType == "text/xml") {
- if (schemaAttribute != null) {
- if (schemaElement != null)
- throw new NvdlCompileException
("Both 'schema' attribute and 'schema' element are specified in a 'validate'
element.", validate);
- return GetSchemaXmlStream (schemaUri, config,
validate);
- else if (validate.SchemaBody != null) {
- XmlReader r = new XmlNodeReader
(validate.SchemaBody);
- r.MoveToContent ();
- r.Read (); // Skip "schema" element
- r.MoveToContent ();
- if (r.NodeType == XmlNodeType.Element)
- return r;
- else
- return GetSchemaXmlStream
(r.ReadString (), config, validate);
- }
- else
- return null;
- }
- else
- throw new NvdlCompileException (String.Format
("Either MIME type '{0}' or the target schema document is not supported.",
schemaType), validate);
-
- schemaReader.MoveToContent ();
-
- NvdlValidationProvider provider =
- ctx.Config.GetProvider
(schemaReader.NamespaceURI);
-
- generator = provider.CreateGenerator (schemaReader,
ctx.Config.XmlResolverInternal);
-
- foreach (NvdlOption option in validate.Options) {
- bool mustSupport = option.MustSupport != null ?
- XmlConvert.ToBoolean
(option.MustSupport) : false;
- if (!generator.AddOption (option.Name,
- option.Arg) && mustSupport)
- throw new NvdlCompileException
(String.Format ("Option '{0}' with argument '{1}' is not supported for schema
type '{2}'.",
- option.Name, option.Arg,
- schemaType), validate);
- }
- }
-
- public static XmlReader GetSchemaXmlStream (string schemaUri,
NvdlConfig config, NvdlValidate validate)
- {
- XmlResolver r = config.Resolver;
- if (r == null)
- return null;
- Uri uri = r.ResolveUri (null, validate.schemaUri);
- Stream stream = r.GetEntity (uri, null, typeof
(Stream));
- if (stream == null)
- return null;
- XmlTextReader xtr = new XmlTextReader (uri != null ?
uri.ToString () : String.Empty, stream);
- xtr.XmlResolver = r;
- xtr.MoveToContent ();
- return xtr;
- }
-
- private bool ElementHasElementChild (XmlElement el)
- {
- foreach (XmlNode n in el.ChildNodes)
- if (n.NodeType == XmlNodeType.Element)
- return true;
- return false;
- }
-*/
}
}
Modified:
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlFilteredXmlReader.cs
===================================================================
---
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlFilteredXmlReader.cs
2005-03-07 04:17:44 UTC (rev 41498)
+++
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlFilteredXmlReader.cs
2005-03-07 05:31:56 UTC (rev 41499)
@@ -5,6 +5,29 @@
namespace Commons.Xml.Nvdl
{
+#if false
+ internal class NvdlFilteredXmlReader : XmlDefaultReader
+ {
+ public NvdlFilteredXmlReader (XmlReader reader,
+ NvdlValidateInterp validate)
+ : base (reader)
+ {
+ }
+
+ public bool Read ()
+ {
+ return !Reader.EOF;
+ }
+
+ public void AttachPlaceHolder ()
+ {
+ }
+
+ public void DetachPlaceHolder ()
+ {
+ }
+ }
+#else
internal class NvdlFilteredXmlReader : XmlReader
{
int placeHolderDepth = -1;
@@ -18,6 +41,9 @@
AttributeInfo [] attributes = new AttributeInfo [10];
int attributeCount;
+ // PlanAtt validation cache.
+ Hashtable attributeValidators = new Hashtable ();
+
class AttributeInfo
{
public string LocalName;
@@ -91,22 +117,22 @@
if (reader.EOF)
return false;
+ MoveToElement ();
+ attributeCount = 0;
+
if (nextPlaceHolder != XmlNodeType.None) {
placeHolder = nextPlaceHolder;
nextPlaceHolder = XmlNodeType.None;
return true;
}
- MoveToElement ();
- attributeCount = 0;
-
if (!reader.MoveToFirstAttribute ())
return true;
+
+ // Attribute rule application
+ attributeValidators.Clear ();
do {
- if (reader.NamespaceURI == String.Empty) {
- AddAttribute ();
- continue;
- }
+ // FIXME: could be more efficient
SimpleRule rule = FindAttributeRule (
reader.NamespaceURI,
validate.CreatedMode);
@@ -118,11 +144,18 @@
AddAttribute ();
if (ra != null)
continue;
- // FIXME: validate global attribute
(PlanAtt).
- SimpleValidate v = a as SimpleValidate;
+ attributeValidators
[reader.NamespaceURI] = a;
}
} while (reader.MoveToNextAttribute ());
reader.MoveToElement ();
+
+ if (attributeValidators.Count > 0) {
+ foreach (string ns in attributeValidators.Keys)
{
+ ((SimpleValidate) attributeValidators [
+ ns]).ValidateAttributes
(reader, ns);
+ }
+ }
+
return true;
}
@@ -523,5 +556,6 @@
}
}
}
+#endif
}
Modified: trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlSimplified.cs
===================================================================
--- trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlSimplified.cs
2005-03-07 04:17:44 UTC (rev 41498)
+++ trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlSimplified.cs
2005-03-07 05:31:56 UTC (rev 41499)
@@ -256,12 +256,12 @@
ann.LineNumber = this.LineNumber;
ann.LinePosition = this.LinePosition;
- NvdlAllow allow = new NvdlAllow ();
- allow.SourceUri = this.SourceUri;
- allow.LineNumber = this.LineNumber;
- allow.LinePosition = this.LinePosition;
+ NvdlAttach attach = new NvdlAttach ();
+ attach.SourceUri = this.SourceUri;
+ attach.LineNumber = this.LineNumber;
+ attach.LinePosition = this.LinePosition;
ann.Match = NvdlRuleTarget.Attributes;
- ann.Actions.Add (allow);
+ ann.Actions.Add (attach);
al.Add (new SimpleRule (ann, true, ctx));
}
@@ -542,59 +542,6 @@
// 6.4.7
generator = ctx.Config.GetGenerator (validate,
ctx.Rules.SchemaType);
-/*
- this.resolver = ctx.Config.XmlResolverInternal;
-
- // 6.4.7
- string schemaType = validate.SchemaType;
- if (schemaType == null)
- schemaType = ctx.Rules.SchemaType;
- if (schemaType == null && validate.SchemaBody != null
&& !ElementHasElementChild (validate.SchemaBody))
- schemaType = validate.SchemaBody.InnerText;
- if (schemaType == null)
- schemaType = "text/xml";
-
- // FIXME: this part must be totally rewritten.
-
- XmlReader schemaReader = null;
- if (schemaType == "text/xml") {
- if (validate.SchemaUri != null) {
- if (validate.SchemaBody != null)
- throw new NvdlCompileException
("Both 'schema' attribute and 'schema' element are specified in a 'validate'
element.", validate);
- // FIXME: use NvdlConfig
- schemaReader = new XmlTextReader
(validate.SchemaUri);
- }
- else if (validate.SchemaBody != null) {
- schemaReader = new XmlNodeReader
(validate.SchemaBody);
- schemaReader.MoveToContent ();
- schemaReader.Read (); // Skip "schema"
element
- }
- else
- throw new NvdlCompileException
("Neither 'schema' attribute nor 'schema' element is specified in a 'validate'
element.", validate);
- }
- else
- throw new NvdlCompileException (String.Format
("MIME type '{0}' is not supported at this moment.", schemaType), validate);
-
- schemaReader.MoveToContent ();
-
- NvdlValidationProvider provider =
- ctx.Config.GetProvider
(schemaReader.NamespaceURI);
-
- if (provider == null)
- throw new NvdlCompileException (String.Format
("Schema type '{0}' is not supported in this configuration. Use custom provider
that supports this schema type.", schemaType), validate);
-
- generator = provider.CreateGenerator (schemaReader,
ctx.Config.XmlResolverInternal);
-
- foreach (NvdlOption option in validate.Options) {
- bool mustSupport = option.MustSupport != null ?
- XmlConvert.ToBoolean
(option.MustSupport) : false;
- if (!generator.AddOption (option.Name,
- option.Arg) && mustSupport)
- throw new NvdlCompileException
(String.Format ("Option '{0}' with argument '{1}' is not supported for schema
type '{2}'.",
- option.Name, option.Arg,
- schemaType), validate);
- }
-*/
}
internal NvdlValidatorGenerator Generator {
@@ -609,6 +556,25 @@
{
return generator.CreateValidator (reader, resolver);
}
+
+ public void ValidateAttributes (XmlReader reader, string ns)
+ {
+ XmlDocument doc = new XmlDocument ();
+ XmlElement el = doc.CreateElement ("virtualElement",
+ Nvdl.PlaceHolderNamespace);
+ for (int i = 0; i < reader.AttributeCount; i++) {
+ reader.MoveToAttribute (i);
+ if (reader.NamespaceURI != ns)
+ continue;
+ el.SetAttribute (reader.LocalName,
+ reader.NamespaceURI, reader.Value);
+ }
+ reader.MoveToElement ();
+ XmlReader r = generator.CreateAttributeValidator (
+ new XmlNodeReader (el), resolver);
+ while (!r.EOF)
+ r.Read ();
+ }
}
internal class SimpleResultAction : SimpleAction
Modified:
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlValidationProvider.cs
===================================================================
---
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlValidationProvider.cs
2005-03-07 04:17:44 UTC (rev 41498)
+++
trunk/mcs/class/Commons.Xml.Relaxng/Commons.Xml.Nvdl/NvdlValidationProvider.cs
2005-03-07 05:31:56 UTC (rev 41499)
@@ -11,7 +11,10 @@
public virtual NvdlValidatorGenerator CreateGenerator
(NvdlValidate validate, string schemaType, NvdlConfig config)
{
XmlReader schema = null;
- if (schemaType != "text/xml")
+ // FIXME: we need a bit more strict check.
+ if (schemaType.Length < 5 ||
+ !schemaType.EndsWith ("xml") ||
+ Char.IsLetter (schemaType, schemaType.Length -
4))
return null;
string schemaUri = validate.SchemaUri;
@@ -77,8 +80,16 @@
{
// creates individual validator with schema
// (which should be provided in derived constructor).
- public abstract XmlReader CreateValidator (XmlReader reader,
XmlResolver resolver);
+ public abstract XmlReader CreateValidator (XmlReader reader,
+ XmlResolver resolver);
+ public virtual XmlReader CreateAttributeValidator (
+ XmlReader reader,
+ XmlResolver resolver)
+ {
+ throw new NotSupportedException ();
+ }
+
public abstract bool AddOption (string name, string arg);
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches