if (nsmgr == null)\r
throw new ArgumentNullException ("namespace manager");\r
int colonAt = s.IndexOf (':');\r
- string localName = \r
- nameTable.Add (colonAt < 0 ? s : s.Substring (colonAt + 1));\r
+ string localName = colonAt < 0 ? s : s.Substring (colonAt + 1);\r
+// string localName = nameTable.Add (colonAt < 0 ? s : s.Substring (colonAt + 1));\r
return new XmlQualifiedName (localName, nsmgr.LookupNamespace (\r
colonAt < 0 ? "" : s.Substring (0, colonAt - 1)));\r
}\r
+2004-01-22 Atsushi Enomoto <atsushi@ximian.com>
+
+ * BuiltInDatatype.cs : On parsing QName, we don't have to spend costs
+ on Add()ing parsed name to name table.
+ * XmlSchemaUtil.cs : Added IsBuiltInDatatypeName().
+ * XmlSchemaAttribute.cs, XmlSchemaComplexType.cs,
+ XmlSchemaElement.cs, XmlSchemaSimpleContentExtension.cs,
+ XmlSchemaSimpleContentRestriction.cs, XmlSchemaSimpleTypeList.cs :
+ Use the method above instead of Namespace string comparison.
+ (it will be required to validate schema for schemas.)
+ * XmlSchemaComplexType.cs : Type Derivation OK (3.4.6) should also
+ treat null base type as anyType. Derivation Valid Restriction
+ (3.4.6) should allow base type wildcard absense in case of anyType.
+
2004-01-22 Atsushi Enomoto <atsushi@ximian.com>
* XmlSchema.cs : When we have schema A which includes schema B which
}\r
else if (SchemaTypeName == XmlSchemaComplexType.AnyTypeName)\r
attributeType = XmlSchemaComplexType.AnyType;
- else if (SchemaTypeName.Namespace == XmlSchema.Namespace) {\r
+ else if (XmlSchemaUtil.IsBuiltInDatatypeName (SchemaTypeName)) {\r
attributeType = XmlSchemaDatatype.FromName (SchemaTypeName);\r
if (attributeType == null)\r
error (h, "Invalid xml schema namespace datatype was specified.");\r
this.DatatypeInternal = baseType.Datatype;\r
} else if (BaseSchemaTypeName == XmlSchemaComplexType.AnyTypeName)\r
DatatypeInternal = XmlSchemaSimpleType.AnySimpleType;
- else if (BaseSchemaTypeName.Namespace == XmlSchema.Namespace) {\r
+ else if (XmlSchemaUtil.IsBuiltInDatatypeName (BaseSchemaTypeName)) {\r
DatatypeInternal = XmlSchemaDatatype.FromName (BaseSchemaTypeName);\r
}\r
\r
// base\r
if (BaseSchemaTypeName == XmlSchemaComplexType.AnyTypeName)\r
baseComplexType = XmlSchemaComplexType.AnyType;\r
- else if (BaseSchemaTypeName.Namespace == XmlSchema.Namespace)\r
+ else if (XmlSchemaUtil.IsBuiltInDatatypeName (BaseSchemaTypeName))\r
error (h, "Referenced base schema type is XML Schema datatype.");\r
else if (baseComplexType == null && !schema.IsNamespaceAbsent (BaseSchemaTypeName.Namespace))\r
error (h, "Referenced base schema type " + BaseSchemaTypeName + " was not complex type or not found in the corresponding schema.");\r
error (h, "Base schema complex type of a simple content must be simple content type. Base type is " + BaseSchemaTypeName);\r
} else if (sce == null && (baseSimpleType != null && BaseSchemaTypeName.Namespace != XmlSchema.Namespace)) {\r
error (h, "If a simple content is not an extension, base schema type must be complex type. Base type is " + BaseSchemaTypeName);\r
- } else if (BaseSchemaTypeName.Namespace == XmlSchema.Namespace) {\r
- if (XmlSchemaDatatype.FromName (BaseSchemaTypeName) == null)\r
- error (h, "Invalid schema data type was specified: " + BaseSchemaTypeName);\r
+ } else if (XmlSchemaUtil.IsBuiltInDatatypeName (BaseSchemaTypeName)) {\r
// do nothing for particle.\r
}\r
// otherwise, it might be missing sub components.\r
error (h, "Derivation type " + resolvedDerivedBy + " is prohibited by the base type.");\r
if (BaseXmlSchemaType == b) // 2.2\r
return;\r
- if (BaseXmlSchemaType == XmlSchemaComplexType.AnyType) { // 2.3.1\r
+ if (BaseXmlSchemaType == null || BaseXmlSchemaType == XmlSchemaComplexType.AnyType) { // 2.3.1\r
error (h, "Derived type's base schema type is anyType.");\r
return;\r
}\r
}\r
// I think 3. is considered in 2.\r
// 4.\r
- if (this.AttributeWildcard != null) {\r
+ if (this.AttributeWildcard != null && baseType != XmlSchemaComplexType.AnyType) {\r
if (baseType.AttributeWildcard == null)\r
error (h, "Invalid attribute derivation by restriction because of attribute wildcard.");\r
else\r
refName = XmlQualifiedName.Empty;\r
schemaTypeName = XmlQualifiedName.Empty;\r
substitutionGroup = XmlQualifiedName.Empty;\r
- substitutionGroup = XmlQualifiedName.Empty;\r
}\r
\r
#region Attributes\r
}\r
else if (SchemaTypeName == XmlSchemaComplexType.AnyTypeName)\r
elementType = XmlSchemaComplexType.AnyType;
- else if (SchemaTypeName.Namespace == XmlSchema.Namespace) {\r
+ else if (XmlSchemaUtil.IsBuiltInDatatypeName (SchemaTypeName)) {\r
datatype = XmlSchemaDatatype.FromName (SchemaTypeName);\r
if (datatype == null)\r
error (h, "Invalid schema datatype was specified.");\r
actualBaseSchemaType = st;\r
} else if (baseTypeName == XmlSchemaComplexType.AnyTypeName) {\r
actualBaseSchemaType = XmlSchemaComplexType.AnyType;
- } else if (baseTypeName.Namespace == XmlSchema.Namespace) {\r
+ } else if (XmlSchemaUtil.IsBuiltInDatatypeName (baseTypeName)) {\r
actualBaseSchemaType = XmlSchemaDatatype.FromName (baseTypeName);\r
if (actualBaseSchemaType == null)\r
error (h, "Invalid schema datatype name is specified.");\r
actualBaseSchemaType = st;\r
} else if (baseTypeName == XmlSchemaComplexType.AnyTypeName) {\r
actualBaseSchemaType = XmlSchemaComplexType.AnyType;
- } else if (baseTypeName.Namespace == XmlSchema.Namespace) {\r
+ } else if (XmlSchemaUtil.IsBuiltInDatatypeName (baseTypeName)) {\r
actualBaseSchemaType = XmlSchemaDatatype.FromName (baseTypeName);\r
if (actualBaseSchemaType == null)\r
error (h, "Invalid schema datatype name is specified.");\r
validatedListItemType = type;\r
} else if (itemTypeName == XmlSchemaComplexType.AnyTypeName) {\r
validatedListItemType = XmlSchemaSimpleType.AnySimpleType;
- } else if (itemTypeName.Namespace == XmlSchema.Namespace) {\r
+ } else if (XmlSchemaUtil.IsBuiltInDatatypeName (itemTypeName)) {\r
validatedListItemType = XmlSchemaDatatype.FromName (itemTypeName);\r
if (validatedListItemType == null)\r
error (h, "Invalid schema type name was specified: " + itemTypeName);\r
/// </summary>\r
internal class XmlSchemaUtil\r
{\r
- static XmlSchemaUtil()\r
+ static XmlSchemaUtil ()\r
{\r
FinalAllowed = XmlSchemaDerivationMethod.Restriction | \r
XmlSchemaDerivationMethod.Extension;\r
return true;\r
}\r
\r
-// public static bool CheckLanguage(string lang)\r
-// {\r
- //check if the string conforms to http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#language\r
-// return true;\r
-// }\r
public static bool CheckNCName(string name)\r
{\r
//check if the string conforms to http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/datatypes.html#NCName\r
throw new NotSupportedException ("XmlParserContext cannot be acquired from this XmlReader.");\r
}\r
\r
+ public static bool IsBuiltInDatatypeName (XmlQualifiedName qname)\r
+ {\r
+ if (qname.Namespace != XmlSchema.Namespace)\r
+ return false;\r
+ switch (qname.Name) {\r
+ case "anySimpleType":\r
+ case "duration": case "dateTime": case "time":\r
+ case "date": case "gYearMonth": case "gYear":\r
+ case "gMonthDay": case "gDay": case "gMonth":\r
+ case "boolean":\r
+ case "base64Binary": case "hexBinary":\r
+ case "float": case "double":\r
+ case "anyURI":\r
+ case "QName":\r
+ case "NOTATION":\r
+ case "string": case "normalizedString": case "token":\r
+ case "language": case "Name": case "NCName":\r
+ case "ID": case "IDREF": case "IDREFS":\r
+ case "ENTITY": case "ENTITIES":\r
+ case "NMTOKEN": case "NMTOKENS":\r
+ case "decimal": case "integer":\r
+ case "nonPositiveInteger": case "negativeInteger":\r
+ case "nonNegativeInteger":\r
+ case "unsignedLong": case "unsignedInt":\r
+ case "unsignedShort": case "unsignedByte":\r
+ case "positiveInteger":\r
+ case "long": case "int": case "short": case "byte":\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+\r
public static bool IsSchemaDatatypeEquals (XsdAnySimpleType st1, object v1,
XsdAnySimpleType st2, object v2)
{