-//\r
-// XmlSchemaType.cs\r
-//\r
-// Authors:\r
-// Dwivedi, Ajay kumar Adwiv@Yahoo.com\r
-// Atsushi Enomoto atsushi@ximian.com\r
-//\r
+//
+// XmlSchemaType.cs
+//
+// Authors:
+// Dwivedi, Ajay kumar Adwiv@Yahoo.com
+// Atsushi Enomoto atsushi@ximian.com
+//
//
// Permission is hereby granted, free of charge, to any person obtaining
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using System;\r
-using System.Xml;\r
-using System.ComponentModel;\r
-using Mono.Xml.Schema;\r
-using System.Xml.Serialization;\r
-#if NET_2_0_in_the_future\r
-using MS.Internal.Xml;\r
-#endif\r
-\r
-namespace System.Xml.Schema\r
-{\r
- /// <summary>\r
- /// Summary description for XmlSchemaType.\r
- /// </summary>\r
- public class XmlSchemaType : XmlSchemaAnnotated\r
- {\r
- private XmlSchemaDerivationMethod final;\r
- private bool isMixed;\r
- private string name;\r
- bool recursed;\r
-\r
- internal XmlQualifiedName BaseSchemaTypeName;\r
- internal XmlSchemaType BaseXmlSchemaTypeInternal;\r
- internal XmlSchemaDatatype DatatypeInternal;\r
- internal XmlSchemaDerivationMethod resolvedDerivedBy;\r
- internal XmlSchemaDerivationMethod finalResolved;\r
- internal XmlQualifiedName QNameInternal;\r
-\r
- public XmlSchemaType ()\r
- {\r
- final = XmlSchemaDerivationMethod.None;\r
- QNameInternal = XmlQualifiedName.Empty;\r
- }\r
-\r
- #region Attributes\r
- [System.Xml.Serialization.XmlAttribute("name")]\r
- public string Name {\r
- get{ return name; }\r
- set{ name = value; }\r
- }\r
-\r
- [DefaultValue(XmlSchemaDerivationMethod.None)]\r
- [System.Xml.Serialization.XmlAttribute("final")]\r
- public XmlSchemaDerivationMethod Final {\r
- get{ return final; }\r
- set{ final = value; }\r
- }\r
- #endregion\r
-\r
- #region Post Compilation Schema Information\r
- [XmlIgnore]\r
- public XmlQualifiedName QualifiedName {\r
- get{ return QNameInternal; }\r
- }\r
-\r
- [XmlIgnore]\r
- public XmlSchemaDerivationMethod FinalResolved {\r
- get{ return finalResolved; }\r
- }\r
-\r
- [XmlIgnore]\r
-#if NET_2_0\r
- [Obsolete ("This property is going away. Use BaseXmlSchemaType instead")]\r
-#endif\r
- public object BaseSchemaType {\r
- get{\r
- if (BaseXmlSchemaType != null)\r
- return BaseXmlSchemaType;\r
- else if (this == XmlSchemaComplexType.AnyType)\r
- return null; // This property is designed so.\r
- else\r
- return Datatype;\r
- }\r
- }\r
-\r
- [XmlIgnore]\r
- [MonoTODO ("This property works as always returning a valid schema type.")]\r
- // In .NET 2.0, all schema types used in schema documents must\r
- // be XmlSchemaType, even if it is primitive type, in terms of\r
- // non-obsolete System.Xml.Schema members.\r
- \r
- // To modify this property, we have to make sure that it does\r
- // not affect to any compilation/validation logic.\r
-#if NET_2_0\r
- public XmlSchemaType BaseXmlSchemaType {\r
-#else\r
- internal XmlSchemaType BaseXmlSchemaType {\r
-#endif\r
- get { return BaseXmlSchemaTypeInternal; }\r
- }\r
-\r
- [XmlIgnore]\r
- public XmlSchemaDerivationMethod DerivedBy {\r
- get{ return resolvedDerivedBy; }\r
- }\r
-\r
- [XmlIgnore]\r
- public XmlSchemaDatatype Datatype {\r
- get{ return DatatypeInternal; }\r
- }\r
-\r
- [XmlIgnore]\r
- public virtual bool IsMixed { \r
- get{ return isMixed; }\r
- set{ isMixed = value; } \r
- }\r
-\r
-#if NET_2_0\r
- [MonoTODO]\r
- // LAMESPEC: for IDREFS it returns Idref. for ENTITIES \r
- // it returns Entity. for NMTOKENS it returns NmToken.\r
- [XmlIgnore]\r
- public XmlTypeCode TypeCode {\r
- get {\r
- if (this == XmlSchemaComplexType.AnyType)\r
- return XmlTypeCode.Item;\r
- if (DatatypeInternal == XmlSchemaSimpleType.AnySimpleType)\r
- return XmlTypeCode.AnyAtomicType;\r
- if (this == XmlSchemaSimpleType.XsIDRefs)\r
- return XmlTypeCode.Idref;\r
- if (this == XmlSchemaSimpleType.XsEntities)\r
- return XmlTypeCode.Entity;\r
- if (this == XmlSchemaSimpleType.XsNMTokens)\r
- return XmlTypeCode.NmToken;\r
- if (DatatypeInternal != null)\r
- return DatatypeInternal.TypeCode;\r
- return BaseXmlSchemaType.TypeCode;\r
- }\r
- }\r
-#endif\r
- #endregion\r
-\r
-#if NET_2_0\r
- internal static XmlSchemaType GetBuiltInType (XmlQualifiedName qualifiedName)\r
- {\r
- XmlSchemaType t = GetBuiltInSimpleType (qualifiedName);\r
- if (t == null)\r
- t = GetBuiltInComplexType (qualifiedName);\r
- return t;\r
- }\r
-\r
- internal static XmlSchemaType GetBuiltInType (XmlTypeCode typecode)\r
- {\r
- if (typecode == XmlTypeCode.Item)\r
- return XmlSchemaComplexType.AnyType;\r
- return GetBuiltInSimpleType (typecode);\r
- }\r
-#endif\r
-\r
-#if NET_2_0\r
- public static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)\r
-#else\r
- internal static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)\r
-#endif\r
- {\r
- if (qualifiedName.Name == "anyType" && qualifiedName.Namespace == XmlSchema.Namespace)\r
- return XmlSchemaComplexType.AnyType;\r
-\r
- return null;\r
- }\r
-\r
-#if NET_2_0\r
- public static XmlSchemaComplexType GetBuiltInComplexType (XmlTypeCode type)\r
- {\r
- switch (type) {\r
- case XmlTypeCode.Item:\r
- return XmlSchemaComplexType.AnyType;\r
- }\r
- return null;\r
- }\r
-#endif\r
-\r
-#if NET_2_0\r
- [MonoTODO]\r
- public static XmlSchemaSimpleType GetBuiltInSimpleType (XmlQualifiedName qualifiedName)\r
- {\r
- if (qualifiedName.Namespace == "http://www.w3.org/2003/11/xpath-datatypes") {\r
- switch (qualifiedName.Name) {\r
- case "untypedAtomic":\r
- return XmlSchemaSimpleType.XdtUntypedAtomic;\r
- case "anyAtomicType":\r
- return XmlSchemaSimpleType.XdtAnyAtomicType;\r
- case "yearMonthDuration":\r
- return XmlSchemaSimpleType.XdtYearMonthDuration;\r
- case "dayTimeDuration":\r
- return XmlSchemaSimpleType.XdtDayTimeDuration;\r
- }\r
- return null;\r
- }\r
- else if (qualifiedName.Namespace != XmlSchema.Namespace)\r
- return null;\r
- switch (qualifiedName.Name) {\r
- case "anySimpleType":\r
- return XmlSchemaSimpleType.XsAnySimpleType;\r
- case "string":\r
- return XmlSchemaSimpleType.XsString;\r
- case "boolean":\r
- return XmlSchemaSimpleType.XsBoolean;\r
- case "decimal":\r
- return XmlSchemaSimpleType.XsDecimal;\r
- case "float":\r
- return XmlSchemaSimpleType.XsFloat;\r
- case "double":\r
- return XmlSchemaSimpleType.XsDouble;\r
- case "duration":\r
- return XmlSchemaSimpleType.XsDuration;\r
- case "dateTime":\r
- return XmlSchemaSimpleType.XsDateTime;\r
- case "time":\r
- return XmlSchemaSimpleType.XsTime;\r
- case "date":\r
- return XmlSchemaSimpleType.XsDate;\r
- case "gYearMonth":\r
- return XmlSchemaSimpleType.XsGYearMonth;\r
- case "gYear":\r
- return XmlSchemaSimpleType.XsGYear;\r
- case "gMonthDay":\r
- return XmlSchemaSimpleType.XsGMonthDay;\r
- case "gDay":\r
- return XmlSchemaSimpleType.XsGDay;\r
- case "gMonth":\r
- return XmlSchemaSimpleType.XsGMonth;\r
- case "hexBinary":\r
- return XmlSchemaSimpleType.XsHexBinary;\r
- case "base64Binary":\r
- return XmlSchemaSimpleType.XsBase64Binary;\r
- case "anyURI":\r
- return XmlSchemaSimpleType.XsAnyUri;\r
- case "QName":\r
- return XmlSchemaSimpleType.XsQName;\r
- case "NOTATION":\r
- return XmlSchemaSimpleType.XsNotation;\r
- case "normalizedString":\r
- return XmlSchemaSimpleType.XsNormalizedString;\r
- case "token":\r
- return XmlSchemaSimpleType.XsToken;\r
- case "language":\r
- return XmlSchemaSimpleType.XsLanguage;\r
- case "NMTOKEN":\r
- return XmlSchemaSimpleType.XsNMToken;\r
- case "NMTOKENS":\r
- return XmlSchemaSimpleType.XsNMTokens;\r
- case "Name":\r
- return XmlSchemaSimpleType.XsName;\r
- case "NCName":\r
- return XmlSchemaSimpleType.XsNCName;\r
- case "ID":\r
- return XmlSchemaSimpleType.XsID;\r
- case "IDREF":\r
- return XmlSchemaSimpleType.XsIDRef;\r
- case "IDREFS":\r
- return XmlSchemaSimpleType.XsIDRefs;\r
- case "ENTITY":\r
- return XmlSchemaSimpleType.XsEntity;\r
- case "ENTITIES":\r
- return XmlSchemaSimpleType.XsEntities;\r
- case "integer":\r
- return XmlSchemaSimpleType.XsInteger;\r
- case "nonPositiveInteger":\r
- return XmlSchemaSimpleType.XsNonPositiveInteger;\r
- case "negativeInteger":\r
- return XmlSchemaSimpleType.XsNegativeInteger;\r
- case "long":\r
- return XmlSchemaSimpleType.XsLong;\r
- case "int":\r
- return XmlSchemaSimpleType.XsInt;\r
- case "short":\r
- return XmlSchemaSimpleType.XsShort;\r
- case "byte":\r
- return XmlSchemaSimpleType.XsByte;\r
- case "nonNegativeInteger":\r
- return XmlSchemaSimpleType.XsNonNegativeInteger;\r
- case "positiveInteger":\r
- return XmlSchemaSimpleType.XsPositiveInteger;\r
- case "unsignedLong":\r
- return XmlSchemaSimpleType.XsUnsignedLong;\r
- case "unsignedInt":\r
- return XmlSchemaSimpleType.XsUnsignedInt;\r
- case "unsignedShort":\r
- return XmlSchemaSimpleType.XsUnsignedShort;\r
- case "unsignedByte":\r
- return XmlSchemaSimpleType.XsUnsignedByte;\r
- }\r
- return null;\r
- }\r
-\r
- internal static XmlSchemaSimpleType GetBuiltInSimpleType (XmlSchemaDatatype type)\r
- {\r
- if (type is XsdEntities)\r
- return XmlSchemaSimpleType.XsEntities;\r
- else if (type is XsdNMTokens)\r
- return XmlSchemaSimpleType.XsNMTokens;\r
- else if (type is XsdIDRefs)\r
- return XmlSchemaSimpleType.XsIDRefs;\r
- else\r
- return GetBuiltInSimpleType (type.TypeCode);\r
- }\r
-\r
- [MonoTODO]\r
- // Don't use this method to cover all XML Schema datatypes.\r
- public static XmlSchemaSimpleType GetBuiltInSimpleType (XmlTypeCode type)\r
- {\r
- switch (type) {\r
- case XmlTypeCode.None:\r
- case XmlTypeCode.Item:\r
- case XmlTypeCode.Node:\r
- case XmlTypeCode.Document: // node\r
- case XmlTypeCode.Element: // node\r
- case XmlTypeCode.Attribute: // node\r
- case XmlTypeCode.Namespace: // node\r
- case XmlTypeCode.ProcessingInstruction: // node\r
- case XmlTypeCode.Comment: // node\r
- case XmlTypeCode.Text: // node\r
- return null;\r
- case XmlTypeCode.AnyAtomicType:\r
- return XmlSchemaSimpleType.XdtAnyAtomicType;\r
- case XmlTypeCode.UntypedAtomic:\r
- return XmlSchemaSimpleType.XdtUntypedAtomic;\r
- case XmlTypeCode.String:\r
- return XmlSchemaSimpleType.XsString;\r
- case XmlTypeCode.Boolean:\r
- return XmlSchemaSimpleType.XsBoolean;\r
- case XmlTypeCode.Decimal:\r
- return XmlSchemaSimpleType.XsDecimal;\r
- case XmlTypeCode.Float:\r
- return XmlSchemaSimpleType.XsFloat;\r
- case XmlTypeCode.Double:\r
- return XmlSchemaSimpleType.XsDouble;\r
- case XmlTypeCode.Duration:\r
- return XmlSchemaSimpleType.XsDuration;\r
- case XmlTypeCode.DateTime:\r
- return XmlSchemaSimpleType.XsDateTime;\r
- case XmlTypeCode.Time:\r
- return XmlSchemaSimpleType.XsTime;\r
- case XmlTypeCode.Date:\r
- return XmlSchemaSimpleType.XsDate;\r
- case XmlTypeCode.GYearMonth:\r
- return XmlSchemaSimpleType.XsGYearMonth;\r
- case XmlTypeCode.GYear:\r
- return XmlSchemaSimpleType.XsGYear;\r
- case XmlTypeCode.GMonthDay:\r
- return XmlSchemaSimpleType.XsGMonthDay;\r
- case XmlTypeCode.GDay:\r
- return XmlSchemaSimpleType.XsGDay;\r
- case XmlTypeCode.GMonth:\r
- return XmlSchemaSimpleType.XsGMonth;\r
- case XmlTypeCode.HexBinary:\r
- return XmlSchemaSimpleType.XsHexBinary;\r
- case XmlTypeCode.Base64Binary:\r
- return XmlSchemaSimpleType.XsBase64Binary;\r
- case XmlTypeCode.AnyUri:\r
- return XmlSchemaSimpleType.XsAnyUri;\r
- case XmlTypeCode.QName:\r
- return XmlSchemaSimpleType.XsQName;\r
- case XmlTypeCode.Notation:\r
- return XmlSchemaSimpleType.XsNotation;\r
- case XmlTypeCode.NormalizedString:\r
- return XmlSchemaSimpleType.XsNormalizedString;\r
- case XmlTypeCode.Token:\r
- return XmlSchemaSimpleType.XsToken;\r
- case XmlTypeCode.Language:\r
- return XmlSchemaSimpleType.XsLanguage;\r
- case XmlTypeCode.NmToken: // NmTokens is not primitive\r
- return XmlSchemaSimpleType.XsNMToken;\r
- case XmlTypeCode.Name:\r
- return XmlSchemaSimpleType.XsName;\r
- case XmlTypeCode.NCName:\r
- return XmlSchemaSimpleType.XsNCName;\r
- case XmlTypeCode.Id:\r
- return XmlSchemaSimpleType.XsID;\r
- case XmlTypeCode.Idref: // Idrefs is not primitive\r
- return XmlSchemaSimpleType.XsIDRef;\r
- case XmlTypeCode.Entity: // Entities is not primitive\r
- return XmlSchemaSimpleType.XsEntity;\r
- case XmlTypeCode.Integer:\r
- return XmlSchemaSimpleType.XsInteger;\r
- case XmlTypeCode.NonPositiveInteger:\r
- return XmlSchemaSimpleType.XsNonPositiveInteger;\r
- case XmlTypeCode.NegativeInteger:\r
- return XmlSchemaSimpleType.XsNegativeInteger;\r
- case XmlTypeCode.Long:\r
- return XmlSchemaSimpleType.XsLong;\r
- case XmlTypeCode.Int:\r
- return XmlSchemaSimpleType.XsInt;\r
- case XmlTypeCode.Short:\r
- return XmlSchemaSimpleType.XsShort;\r
- case XmlTypeCode.Byte:\r
- return XmlSchemaSimpleType.XsByte;\r
- case XmlTypeCode.NonNegativeInteger:\r
- return XmlSchemaSimpleType.XsNonNegativeInteger;\r
- case XmlTypeCode.UnsignedLong:\r
- return XmlSchemaSimpleType.XsUnsignedLong;\r
- case XmlTypeCode.UnsignedInt:\r
- return XmlSchemaSimpleType.XsUnsignedInt;\r
- case XmlTypeCode.UnsignedShort:\r
- return XmlSchemaSimpleType.XsUnsignedShort;\r
- case XmlTypeCode.UnsignedByte:\r
- return XmlSchemaSimpleType.XsUnsignedByte;\r
- case XmlTypeCode.PositiveInteger:\r
- return XmlSchemaSimpleType.XsPositiveInteger;\r
- case XmlTypeCode.YearMonthDuration:\r
- return XmlSchemaSimpleType.XdtYearMonthDuration;\r
- case XmlTypeCode.DayTimeDuration:\r
- return XmlSchemaSimpleType.XdtDayTimeDuration;\r
- }\r
- return null;\r
- }\r
-\r
- public static bool IsDerivedFrom (XmlSchemaType derivedType, XmlSchemaType baseType, XmlSchemaDerivationMethod except)\r
- {\r
- if (derivedType.BaseXmlSchemaType == null)\r
- return false;\r
- if ((derivedType.DerivedBy & except) != 0)\r
- return false;\r
- if (derivedType.BaseXmlSchemaType == baseType)\r
- return true;\r
- return IsDerivedFrom (derivedType.BaseXmlSchemaType,\r
- baseType, except);\r
- }\r
-#endif\r
-\r
- internal bool ValidateRecursionCheck ()\r
- {\r
- if (recursed)\r
- return (this != XmlSchemaComplexType.AnyType);\r
- recursed = true;\r
- XmlSchemaType baseType = this.BaseXmlSchemaType as XmlSchemaType;\r
- bool result = false;\r
- if (baseType != null)\r
- result = baseType.ValidateRecursionCheck ();\r
- recursed = false;\r
- return result;\r
- }\r
- }\r
-}\r
+using System;
+using System.Xml;
+using System.ComponentModel;
+using Mono.Xml.Schema;
+using System.Xml.Serialization;
+#if NET_2_0_in_the_future
+using MS.Internal.Xml;
+#endif
+
+namespace System.Xml.Schema
+{
+ /// <summary>
+ /// Summary description for XmlSchemaType.
+ /// </summary>
+ public class XmlSchemaType : XmlSchemaAnnotated
+ {
+ private XmlSchemaDerivationMethod final;
+ private bool isMixed;
+ private string name;
+ bool recursed;
+
+ internal XmlQualifiedName BaseSchemaTypeName;
+ internal XmlSchemaType BaseXmlSchemaTypeInternal;
+ internal XmlSchemaDatatype DatatypeInternal;
+ internal XmlSchemaDerivationMethod resolvedDerivedBy;
+ internal XmlSchemaDerivationMethod finalResolved;
+ internal XmlQualifiedName QNameInternal;
+
+ public XmlSchemaType ()
+ {
+ final = XmlSchemaDerivationMethod.None;
+ QNameInternal = XmlQualifiedName.Empty;
+ }
+
+ #region Attributes
+ [System.Xml.Serialization.XmlAttribute("name")]
+ public string Name {
+ get{ return name; }
+ set{ name = value; }
+ }
+
+ [DefaultValue(XmlSchemaDerivationMethod.None)]
+ [System.Xml.Serialization.XmlAttribute("final")]
+ public XmlSchemaDerivationMethod Final {
+ get{ return final; }
+ set{ final = value; }
+ }
+ #endregion
+
+ #region Post Compilation Schema Information
+ [XmlIgnore]
+ public XmlQualifiedName QualifiedName {
+ get{ return QNameInternal; }
+ }
+
+ [XmlIgnore]
+ public XmlSchemaDerivationMethod FinalResolved {
+ get{ return finalResolved; }
+ }
+
+ [XmlIgnore]
+#if NET_2_0
+ [Obsolete ("This property is going away. Use BaseXmlSchemaType instead")]
+#endif
+ public object BaseSchemaType {
+ get{
+ if (BaseXmlSchemaType != null)
+ return BaseXmlSchemaType;
+ else if (this == XmlSchemaComplexType.AnyType)
+ return null; // This property is designed so.
+ else
+ return Datatype;
+ }
+ }
+
+ [XmlIgnore]
+ // FIXME:This property works as always returning a valid schema type.
+ [MonoTODO]
+ // In .NET 2.0, all schema types used in schema documents must
+ // be XmlSchemaType, even if it is primitive type, in terms of
+ // non-obsolete System.Xml.Schema members.
+
+ // To modify this property, we have to make sure that it does
+ // not affect to any compilation/validation logic.
+#if NET_2_0
+ public XmlSchemaType BaseXmlSchemaType {
+#else
+ internal XmlSchemaType BaseXmlSchemaType {
+#endif
+ get { return BaseXmlSchemaTypeInternal; }
+ }
+
+ [XmlIgnore]
+ public XmlSchemaDerivationMethod DerivedBy {
+ get{ return resolvedDerivedBy; }
+ }
+
+ [XmlIgnore]
+ public XmlSchemaDatatype Datatype {
+ get{ return DatatypeInternal; }
+ }
+
+ [XmlIgnore]
+ public virtual bool IsMixed {
+ get{ return isMixed; }
+ set{ isMixed = value; }
+ }
+
+#if NET_2_0
+ // LAMESPEC: for IDREFS it returns Idref. for ENTITIES
+ // it returns Entity. for NMTOKENS it returns NmToken.
+ [XmlIgnore]
+ public XmlTypeCode TypeCode {
+ get {
+ if (this == XmlSchemaComplexType.AnyType)
+ return XmlTypeCode.Item;
+ if (DatatypeInternal == XmlSchemaSimpleType.AnySimpleType)
+ return XmlTypeCode.AnyAtomicType;
+ if (this == XmlSchemaSimpleType.XsIDRefs)
+ return XmlTypeCode.Idref;
+ if (this == XmlSchemaSimpleType.XsEntities)
+ return XmlTypeCode.Entity;
+ if (this == XmlSchemaSimpleType.XsNMTokens)
+ return XmlTypeCode.NmToken;
+ if (DatatypeInternal != null)
+ return DatatypeInternal.TypeCode;
+ return BaseXmlSchemaType.TypeCode;
+ }
+ }
+#endif
+ #endregion
+
+#if NET_2_0
+ internal static XmlSchemaType GetBuiltInType (XmlQualifiedName qualifiedName)
+ {
+ XmlSchemaType t = GetBuiltInSimpleType (qualifiedName);
+ if (t == null)
+ t = GetBuiltInComplexType (qualifiedName);
+ return t;
+ }
+
+ internal static XmlSchemaType GetBuiltInType (XmlTypeCode typecode)
+ {
+ if (typecode == XmlTypeCode.Item)
+ return XmlSchemaComplexType.AnyType;
+ return GetBuiltInSimpleType (typecode);
+ }
+#endif
+
+#if NET_2_0
+ public static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)
+#else
+ internal static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)
+#endif
+ {
+ if (qualifiedName.Name == "anyType" && qualifiedName.Namespace == XmlSchema.Namespace)
+ return XmlSchemaComplexType.AnyType;
+
+ return null;
+ }
+
+#if NET_2_0
+ public static XmlSchemaComplexType GetBuiltInComplexType (XmlTypeCode type)
+ {
+ switch (type) {
+ case XmlTypeCode.Item:
+ return XmlSchemaComplexType.AnyType;
+ }
+ return null;
+ }
+#endif
+
+#if NET_2_0
+ [MonoTODO]
+ public static XmlSchemaSimpleType GetBuiltInSimpleType (XmlQualifiedName qualifiedName)
+ {
+ if (qualifiedName.Namespace == "http://www.w3.org/2003/11/xpath-datatypes") {
+ switch (qualifiedName.Name) {
+ case "untypedAtomic":
+ return XmlSchemaSimpleType.XdtUntypedAtomic;
+ case "anyAtomicType":
+ return XmlSchemaSimpleType.XdtAnyAtomicType;
+ case "yearMonthDuration":
+ return XmlSchemaSimpleType.XdtYearMonthDuration;
+ case "dayTimeDuration":
+ return XmlSchemaSimpleType.XdtDayTimeDuration;
+ }
+ return null;
+ }
+ else if (qualifiedName.Namespace != XmlSchema.Namespace)
+ return null;
+ switch (qualifiedName.Name) {
+ case "anySimpleType":
+ return XmlSchemaSimpleType.XsAnySimpleType;
+ case "string":
+ return XmlSchemaSimpleType.XsString;
+ case "boolean":
+ return XmlSchemaSimpleType.XsBoolean;
+ case "decimal":
+ return XmlSchemaSimpleType.XsDecimal;
+ case "float":
+ return XmlSchemaSimpleType.XsFloat;
+ case "double":
+ return XmlSchemaSimpleType.XsDouble;
+ case "duration":
+ return XmlSchemaSimpleType.XsDuration;
+ case "dateTime":
+ return XmlSchemaSimpleType.XsDateTime;
+ case "time":
+ return XmlSchemaSimpleType.XsTime;
+ case "date":
+ return XmlSchemaSimpleType.XsDate;
+ case "gYearMonth":
+ return XmlSchemaSimpleType.XsGYearMonth;
+ case "gYear":
+ return XmlSchemaSimpleType.XsGYear;
+ case "gMonthDay":
+ return XmlSchemaSimpleType.XsGMonthDay;
+ case "gDay":
+ return XmlSchemaSimpleType.XsGDay;
+ case "gMonth":
+ return XmlSchemaSimpleType.XsGMonth;
+ case "hexBinary":
+ return XmlSchemaSimpleType.XsHexBinary;
+ case "base64Binary":
+ return XmlSchemaSimpleType.XsBase64Binary;
+ case "anyURI":
+ return XmlSchemaSimpleType.XsAnyUri;
+ case "QName":
+ return XmlSchemaSimpleType.XsQName;
+ case "NOTATION":
+ return XmlSchemaSimpleType.XsNotation;
+ case "normalizedString":
+ return XmlSchemaSimpleType.XsNormalizedString;
+ case "token":
+ return XmlSchemaSimpleType.XsToken;
+ case "language":
+ return XmlSchemaSimpleType.XsLanguage;
+ case "NMTOKEN":
+ return XmlSchemaSimpleType.XsNMToken;
+ case "NMTOKENS":
+ return XmlSchemaSimpleType.XsNMTokens;
+ case "Name":
+ return XmlSchemaSimpleType.XsName;
+ case "NCName":
+ return XmlSchemaSimpleType.XsNCName;
+ case "ID":
+ return XmlSchemaSimpleType.XsID;
+ case "IDREF":
+ return XmlSchemaSimpleType.XsIDRef;
+ case "IDREFS":
+ return XmlSchemaSimpleType.XsIDRefs;
+ case "ENTITY":
+ return XmlSchemaSimpleType.XsEntity;
+ case "ENTITIES":
+ return XmlSchemaSimpleType.XsEntities;
+ case "integer":
+ return XmlSchemaSimpleType.XsInteger;
+ case "nonPositiveInteger":
+ return XmlSchemaSimpleType.XsNonPositiveInteger;
+ case "negativeInteger":
+ return XmlSchemaSimpleType.XsNegativeInteger;
+ case "long":
+ return XmlSchemaSimpleType.XsLong;
+ case "int":
+ return XmlSchemaSimpleType.XsInt;
+ case "short":
+ return XmlSchemaSimpleType.XsShort;
+ case "byte":
+ return XmlSchemaSimpleType.XsByte;
+ case "nonNegativeInteger":
+ return XmlSchemaSimpleType.XsNonNegativeInteger;
+ case "positiveInteger":
+ return XmlSchemaSimpleType.XsPositiveInteger;
+ case "unsignedLong":
+ return XmlSchemaSimpleType.XsUnsignedLong;
+ case "unsignedInt":
+ return XmlSchemaSimpleType.XsUnsignedInt;
+ case "unsignedShort":
+ return XmlSchemaSimpleType.XsUnsignedShort;
+ case "unsignedByte":
+ return XmlSchemaSimpleType.XsUnsignedByte;
+ }
+ return null;
+ }
+
+ internal static XmlSchemaSimpleType GetBuiltInSimpleType (XmlSchemaDatatype type)
+ {
+ if (type is XsdEntities)
+ return XmlSchemaSimpleType.XsEntities;
+ else if (type is XsdNMTokens)
+ return XmlSchemaSimpleType.XsNMTokens;
+ else if (type is XsdIDRefs)
+ return XmlSchemaSimpleType.XsIDRefs;
+ else
+ return GetBuiltInSimpleType (type.TypeCode);
+ }
+
+ [MonoTODO]
+ // Don't use this method to cover all XML Schema datatypes.
+ public static XmlSchemaSimpleType GetBuiltInSimpleType (XmlTypeCode type)
+ {
+ switch (type) {
+ case XmlTypeCode.None:
+ case XmlTypeCode.Item:
+ case XmlTypeCode.Node:
+ case XmlTypeCode.Document: // node
+ case XmlTypeCode.Element: // node
+ case XmlTypeCode.Attribute: // node
+ case XmlTypeCode.Namespace: // node
+ case XmlTypeCode.ProcessingInstruction: // node
+ case XmlTypeCode.Comment: // node
+ case XmlTypeCode.Text: // node
+ return null;
+ case XmlTypeCode.AnyAtomicType:
+ return XmlSchemaSimpleType.XdtAnyAtomicType;
+ case XmlTypeCode.UntypedAtomic:
+ return XmlSchemaSimpleType.XdtUntypedAtomic;
+ case XmlTypeCode.String:
+ return XmlSchemaSimpleType.XsString;
+ case XmlTypeCode.Boolean:
+ return XmlSchemaSimpleType.XsBoolean;
+ case XmlTypeCode.Decimal:
+ return XmlSchemaSimpleType.XsDecimal;
+ case XmlTypeCode.Float:
+ return XmlSchemaSimpleType.XsFloat;
+ case XmlTypeCode.Double:
+ return XmlSchemaSimpleType.XsDouble;
+ case XmlTypeCode.Duration:
+ return XmlSchemaSimpleType.XsDuration;
+ case XmlTypeCode.DateTime:
+ return XmlSchemaSimpleType.XsDateTime;
+ case XmlTypeCode.Time:
+ return XmlSchemaSimpleType.XsTime;
+ case XmlTypeCode.Date:
+ return XmlSchemaSimpleType.XsDate;
+ case XmlTypeCode.GYearMonth:
+ return XmlSchemaSimpleType.XsGYearMonth;
+ case XmlTypeCode.GYear:
+ return XmlSchemaSimpleType.XsGYear;
+ case XmlTypeCode.GMonthDay:
+ return XmlSchemaSimpleType.XsGMonthDay;
+ case XmlTypeCode.GDay:
+ return XmlSchemaSimpleType.XsGDay;
+ case XmlTypeCode.GMonth:
+ return XmlSchemaSimpleType.XsGMonth;
+ case XmlTypeCode.HexBinary:
+ return XmlSchemaSimpleType.XsHexBinary;
+ case XmlTypeCode.Base64Binary:
+ return XmlSchemaSimpleType.XsBase64Binary;
+ case XmlTypeCode.AnyUri:
+ return XmlSchemaSimpleType.XsAnyUri;
+ case XmlTypeCode.QName:
+ return XmlSchemaSimpleType.XsQName;
+ case XmlTypeCode.Notation:
+ return XmlSchemaSimpleType.XsNotation;
+ case XmlTypeCode.NormalizedString:
+ return XmlSchemaSimpleType.XsNormalizedString;
+ case XmlTypeCode.Token:
+ return XmlSchemaSimpleType.XsToken;
+ case XmlTypeCode.Language:
+ return XmlSchemaSimpleType.XsLanguage;
+ case XmlTypeCode.NmToken: // NmTokens is not primitive
+ return XmlSchemaSimpleType.XsNMToken;
+ case XmlTypeCode.Name:
+ return XmlSchemaSimpleType.XsName;
+ case XmlTypeCode.NCName:
+ return XmlSchemaSimpleType.XsNCName;
+ case XmlTypeCode.Id:
+ return XmlSchemaSimpleType.XsID;
+ case XmlTypeCode.Idref: // Idrefs is not primitive
+ return XmlSchemaSimpleType.XsIDRef;
+ case XmlTypeCode.Entity: // Entities is not primitive
+ return XmlSchemaSimpleType.XsEntity;
+ case XmlTypeCode.Integer:
+ return XmlSchemaSimpleType.XsInteger;
+ case XmlTypeCode.NonPositiveInteger:
+ return XmlSchemaSimpleType.XsNonPositiveInteger;
+ case XmlTypeCode.NegativeInteger:
+ return XmlSchemaSimpleType.XsNegativeInteger;
+ case XmlTypeCode.Long:
+ return XmlSchemaSimpleType.XsLong;
+ case XmlTypeCode.Int:
+ return XmlSchemaSimpleType.XsInt;
+ case XmlTypeCode.Short:
+ return XmlSchemaSimpleType.XsShort;
+ case XmlTypeCode.Byte:
+ return XmlSchemaSimpleType.XsByte;
+ case XmlTypeCode.NonNegativeInteger:
+ return XmlSchemaSimpleType.XsNonNegativeInteger;
+ case XmlTypeCode.UnsignedLong:
+ return XmlSchemaSimpleType.XsUnsignedLong;
+ case XmlTypeCode.UnsignedInt:
+ return XmlSchemaSimpleType.XsUnsignedInt;
+ case XmlTypeCode.UnsignedShort:
+ return XmlSchemaSimpleType.XsUnsignedShort;
+ case XmlTypeCode.UnsignedByte:
+ return XmlSchemaSimpleType.XsUnsignedByte;
+ case XmlTypeCode.PositiveInteger:
+ return XmlSchemaSimpleType.XsPositiveInteger;
+ case XmlTypeCode.YearMonthDuration:
+ return XmlSchemaSimpleType.XdtYearMonthDuration;
+ case XmlTypeCode.DayTimeDuration:
+ return XmlSchemaSimpleType.XdtDayTimeDuration;
+ }
+ return null;
+ }
+
+ public static bool IsDerivedFrom (XmlSchemaType derivedType, XmlSchemaType baseType, XmlSchemaDerivationMethod except)
+ {
+ if (derivedType.BaseXmlSchemaType == null)
+ return false;
+ if ((derivedType.DerivedBy & except) != 0)
+ return false;
+ if (derivedType.BaseXmlSchemaType == baseType)
+ return true;
+ return IsDerivedFrom (derivedType.BaseXmlSchemaType,
+ baseType, except);
+ }
+#endif
+
+ internal bool ValidateRecursionCheck ()
+ {
+ if (recursed)
+ return (this != XmlSchemaComplexType.AnyType);
+ recursed = true;
+ XmlSchemaType baseType = this.BaseXmlSchemaType as XmlSchemaType;
+ bool result = false;
+ if (baseType != null)
+ result = baseType.ValidateRecursionCheck ();
+ recursed = false;
+ return result;
+ }
+ }
+}