Author: atsushi
Date: 2006-10-27 11:12:25 -0400 (Fri, 27 Oct 2006)
New Revision: 67031
Added:
trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd
Modified:
trunk/mcs/class/System.XML/ChangeLog
trunk/mcs/class/System.XML/Makefile
trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog
trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs
trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs
trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog
Log:
2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
* XsdValidatingReader.cs : Fixed bug #79650. Enumeration facet was
not validated for attributes. Also, simple type restriction should
require namespace manager to resolve QNames.
* XmlSchemaSimpleTypeRestriction.cs : for facet validation, it should
use namespacemanager. Though the change is not perfect, thus I
disable this change for now.
* XmlValidatingReaderTests.cs : added bug #79650 case.
* 79650.xsd : added test for bug #79650.
* Makefile : added 79650.xsd to dist file.
Modified: trunk/mcs/class/System.XML/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/ChangeLog 2006-10-27 15:09:15 UTC (rev
67030)
+++ trunk/mcs/class/System.XML/ChangeLog 2006-10-27 15:12:25 UTC (rev
67031)
@@ -1,5 +1,9 @@
2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
+ * Makefile : added 79650.xsd to dist file.
+
+2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
+
* Makefile : added 79683.dtd to dist file.
2006-10-22 Zoltan Varga <[EMAIL PROTECTED]>
Modified: trunk/mcs/class/System.XML/Makefile
===================================================================
--- trunk/mcs/class/System.XML/Makefile 2006-10-27 15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Makefile 2006-10-27 15:12:25 UTC (rev 67031)
@@ -65,6 +65,7 @@
Test/XmlFiles/xsd/77687inc.xsd \
Test/XmlFiles/xsd/78985.xml \
Test/XmlFiles/xsd/78985.xsd \
+ Test/XmlFiles/xsd/79650.xsd \
Test/XmlFiles/xsd/inter-inc-1.xsd \
Test/XmlFiles/xsl/91834.xml \
Test/XmlFiles/xsl/91834.xsl \
Modified: trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog 2006-10-27
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Mono.Xml.Schema/ChangeLog 2006-10-27
15:12:25 UTC (rev 67031)
@@ -1,3 +1,9 @@
+2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * XsdValidatingReader.cs : Fixed bug #79650. Enumeration facet was
+ not validated for attributes. Also, simple type restriction should
+ require namespace manager to resolve QNames.
+
2006-08-04 Atsushi Enomoto <[EMAIL PROTECTED]>
* XsdIdentityState.cs : Fixed bug #78985. If there are two identical
Modified: trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs
===================================================================
--- trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs
2006-10-27 15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Mono.Xml.Schema/XsdValidatingReader.cs
2006-10-27 15:12:25 UTC (rev 67031)
@@ -555,6 +555,20 @@
XsDatatype validatedDatatype = dt;
if (st != null) {
string normalized = validatedDatatype.Normalize
(value);
+ ValidateRestrictedSimpleTypeValue (st, ref
validatedDatatype, normalized);
+ }
+ if (validatedDatatype != null) {
+ try {
+ validatedDatatype.ParseValue (value,
NameTable, NamespaceManager);
+ } catch (Exception ex) { // FIXME:
(wishlist) It is bad manner ;-(
+ HandleError ("Invalidly typed data was
specified.", ex);
+ }
+ }
+ }
+
+ void ValidateRestrictedSimpleTypeValue (SimpleType st, ref
XsDatatype dt, string normalized)
+ {
+ {
string [] values;
XsDatatype itemDatatype;
SimpleType itemSimpleType;
@@ -624,24 +638,17 @@
// mmm, will check later.
SimpleType baseType =
st.BaseXmlSchemaType as SimpleType;
if (baseType != null) {
-
AssessStringValid(baseType, dt, value);
+
AssessStringValid(baseType, dt, normalized);
}
- if
(!str.ValidateValueWithFacets (value, NameTable)) {
+ if
(!str.ValidateValueWithFacets (normalized, NameTable, NamespaceManager)) {
HandleError ("Specified
value was invalid against the facets.");
break;
}
}
- validatedDatatype = st.Datatype;
+ dt = st.Datatype;
break;
}
}
- if (validatedDatatype != null) {
- try {
- validatedDatatype.ParseValue (value,
NameTable, NamespaceManager);
- } catch (Exception ex) { // FIXME:
(wishlist) It is bad manner ;-(
- HandleError ("Invalidly typed data was
specified.", ex);
- }
- }
}
private object GetXsiType (string name)
@@ -954,12 +961,20 @@
if (dt != SimpleType.AnySimpleType ||
attr.ValidatedFixedValue != null) {
string normalized = dt.Normalize (reader.Value);
object parsedValue = null;
+
+ // check part of 3.14.4 StringValid
+ SimpleType st = attr.AttributeType as
SimpleType;
+ if (st != null)
+ ValidateRestrictedSimpleTypeValue (st,
ref dt, normalized);
+
try {
parsedValue = dt.ParseValue
(normalized, reader.NameTable, NamespaceManager);
} catch (Exception ex) { // FIXME: (wishlist)
It is bad manner ;-(
HandleError ("Attribute value is
invalid against its data type " + dt.TokenizedType, ex);
}
- if (attr.ValidatedFixedValue != null &&
attr.ValidatedFixedValue != normalized) {
+
+ if (attr.ValidatedFixedValue != null &&
+ attr.ValidatedFixedValue != normalized) {
HandleError ("The value of the
attribute " + attr.QualifiedName + " does not match with its fixed value.");
parsedValue = dt.ParseValue
(attr.ValidatedFixedValue, reader.NameTable, NamespaceManager);
}
Modified: trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog 2006-10-27
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/System.Xml.Schema/ChangeLog 2006-10-27
15:12:25 UTC (rev 67031)
@@ -1,3 +1,9 @@
+2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * XmlSchemaSimpleTypeRestriction.cs : for facet validation, it should
+ use namespacemanager. Though the change is not perfect, thus I
+ disable this change for now.
+
2006-07-27 Atsushi Enomoto <[EMAIL PROTECTED]>
* XmlSchema.cs, XmlSchemaSimpleTypeList.cs,
Modified:
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
===================================================================
---
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
2006-10-27 15:09:15 UTC (rev 67030)
+++
trunk/mcs/class/System.XML/System.Xml.Schema/XmlSchemaSimpleTypeRestriction.cs
2006-10-27 15:12:25 UTC (rev 67031)
@@ -586,7 +586,7 @@
if (ActualBaseSchemaType is
XmlSchemaSimpleType) {
XmlSchemaSimpleTypeContent st =
((XmlSchemaSimpleType) ActualBaseSchemaType).Content as
XmlSchemaSimpleTypeContent;
if (st is
XmlSchemaSimpleTypeRestriction) {
- if
(((XmlSchemaSimpleTypeRestriction)st).ValidateValueWithFacets(value, null)) {
+ if
(((XmlSchemaSimpleTypeRestriction)st).ValidateValueWithFacets(value, null,
null)) {
return ret;
} else {
return null;
@@ -601,7 +601,7 @@
return ret;
}
- internal bool ValidateValueWithFacets (string value,
XmlNameTable nt)
+ internal bool ValidateValueWithFacets (string value,
XmlNameTable nt, XmlNamespaceManager nsmgr)
{
/*
* FIXME: Shouldn't this be recursing more? What if
this is a
@@ -612,12 +612,12 @@
// numeric
if (listType != null)
- return ValidateListValueWithFacets (value, nt);
+ return ValidateListValueWithFacets (value, nt,
nsmgr);
else
- return ValidateNonListValueWithFacets (value,
nt);
+ return ValidateNonListValueWithFacets (value,
nt, nsmgr);
}
- private bool ValidateListValueWithFacets (string value,
XmlNameTable nt)
+ private bool ValidateListValueWithFacets (string value,
XmlNameTable nt, XmlNamespaceManager nsmgr)
{
string [] list = ((XsdAnySimpleType)
XmlSchemaDatatype.FromName ("anySimpleType",
XmlSchema.Namespace)).ParseListValue (value, nt);
@@ -634,7 +634,16 @@
for (int l = 0; l < list.Length; l++) {
bool matched = false;
for (int i = 0; i <
this.enumarationFacetValues.Length; i++) {
+#if true
+ // FIXME: enum values must be
checked by value space, not literal space
if (list [l] ==
this.enumarationFacetValues [i]) {
+#else
+ // FIXME: enum values should be
parsed only once.
+ XsdAnySimpleType dt =
getDatatype ();
+ if (dt == null)
+ dt = (XsdAnySimpleType)
XmlSchemaDatatype.FromName ("anySimpleType", XmlSchema.Namespace);
+ if
(XmlSchemaUtil.IsSchemaDatatypeEquals (dt, dt.ParseValue (list [l], nt, nsmgr),
dt, dt.ParseValue (this.enumarationFacetValues [i], nt, nsmgr))) {
+#endif
matched = true;
break;
}
@@ -658,7 +667,7 @@
return true;
}
- private bool ValidateNonListValueWithFacets (string value,
XmlNameTable nt)
+ private bool ValidateNonListValueWithFacets (string value,
XmlNameTable nt, XmlNamespaceManager nsmgr)
{
// pattern
// Patterns are the only facets that need to be checked
on this
@@ -674,11 +683,23 @@
if (!matched)
return false;
}
+
+ XsdAnySimpleType dt = getDatatype ();
+
// enumeration
if (this.enumarationFacetValues != null) {
bool matched = false;
+ XsdAnySimpleType edt = dt;
+ if (edt == null)
+ edt = (XsdAnySimpleType)
XmlSchemaDatatype.FromName ("anySimpleType", XmlSchema.Namespace);
for (int i = 0; i <
this.enumarationFacetValues.Length; i++) {
- if (value ==
this.enumarationFacetValues [i]) {
+#if true
+ // FIXME: enum values must be checked
by value space, not literal space
+ if (value == enumarationFacetValues
[i]) {
+#else
+ // FIXME: the enum value should be
parsed only once.
+ if
(XmlSchemaUtil.IsSchemaDatatypeEquals (edt, edt.ParseValue (value, nt, nsmgr),
edt, edt.ParseValue (this.enumarationFacetValues [i], nt, nsmgr))) {
+#endif
matched = true;
break;
}
@@ -686,7 +707,6 @@
if (!matched)
return false;
}
- XsdAnySimpleType dt = getDatatype ();
// Need to skip length tests for
// types derived from QName or NOTATION
Modified: trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog 2006-10-27
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog 2006-10-27
15:12:25 UTC (rev 67031)
@@ -1,5 +1,9 @@
2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
+ * XmlValidatingReaderTests.cs : added bug #79650 case.
+
+2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
+
* XmlTextReaderTests.cs : added bug #79683 case.
2006-09-26 Atsushi Enomoto <[EMAIL PROTECTED]>
Modified: trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs
2006-10-27 15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/System.Xml/XsdValidatingReaderTests.cs
2006-10-27 15:12:25 UTC (rev 67031)
@@ -319,5 +319,18 @@
while (reader.Read ())
;
}
+
+ [Test] // bug #79650
+ [ExpectedException (typeof (XmlSchemaException))]
+ public void EnumerationFacetOnAttribute ()
+ {
+ string xml = "<test mode='NOT A ENUMERATION VALUE' />";
+ XmlSchema schema = XmlSchema.Read (new XmlTextReader
("Test/XmlFiles/xsd/79650.xsd"), null);
+ XmlValidatingReader xvr = new XmlValidatingReader (xml,
XmlNodeType.Document, null);
+ xvr.ValidationType = ValidationType.Schema;
+ xvr.Schemas.Add (schema);
+ while (!xvr.EOF)
+ xvr.Read ();
+ }
}
}
Added: trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd
===================================================================
--- trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd 2006-10-27
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/XmlFiles/xsd/79650.xsd 2006-10-27
15:12:25 UTC (rev 67031)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<xs:schema id="schema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:simpleType name="ModeType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="on" />
+ <xs:enumeration value="off" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="test">
+ <xs:complexType>
+ <xs:sequence/>
+ <xs:attribute name="mode" type="ModeType" use="required" />
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
Modified: trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog 2006-10-27
15:09:15 UTC (rev 67030)
+++ trunk/mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog 2006-10-27
15:12:25 UTC (rev 67031)
@@ -1,3 +1,7 @@
+2006-10-27 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * 79650.xsd : added test for bug #79650.
+
2006-08-04 Atsushi Enomoto <[EMAIL PROTECTED]>
* 78985.xsd, 78985.xml : test for bug #78985.
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches