2004-05-06 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaType.cs
1 //\r
2 // XmlSchemaType.cs\r
3 //\r
4 // Authors:\r
5 //      Dwivedi, Ajay kumar  Adwiv@Yahoo.com\r
6 //      Atsushi Enomoto  atsushi@ximian.com\r
7 //\r
8 using System;\r
9 using System.Xml;\r
10 using System.ComponentModel;\r
11 using System.Xml.Serialization;\r
12 #if NET_2_0_in_the_future\r
13 using MS.Internal.Xml;\r
14 #endif\r
15 \r
16 namespace System.Xml.Schema\r
17 {\r
18         /// <summary>\r
19         /// Summary description for XmlSchemaType.\r
20         /// </summary>\r
21         public class XmlSchemaType : XmlSchemaAnnotated\r
22         {\r
23                 private XmlSchemaDerivationMethod final;\r
24                 private bool isMixed;\r
25                 private string name;\r
26                 bool recursed;\r
27 \r
28                 internal XmlQualifiedName BaseSchemaTypeName;\r
29                 internal XmlSchemaType BaseXmlSchemaTypeInternal;\r
30                 internal XmlSchemaDatatype DatatypeInternal;\r
31                 internal XmlSchemaDerivationMethod resolvedDerivedBy;\r
32                 internal XmlSchemaDerivationMethod finalResolved;\r
33                 internal XmlQualifiedName QNameInternal;\r
34 \r
35                 public XmlSchemaType ()\r
36                 {\r
37                         final = XmlSchemaDerivationMethod.None;\r
38                         QNameInternal = XmlQualifiedName.Empty;\r
39                 }\r
40 \r
41                 #region Attributes\r
42                 [System.Xml.Serialization.XmlAttribute("name")]\r
43                 public string Name {\r
44                         get{ return name; }\r
45                         set{ name = value; }\r
46                 }\r
47 \r
48                 [DefaultValue(XmlSchemaDerivationMethod.None)]\r
49                 [System.Xml.Serialization.XmlAttribute("final")]\r
50                 public XmlSchemaDerivationMethod Final {\r
51                         get{ return  final; }\r
52                         set{ final = value; }\r
53                 }\r
54                 #endregion\r
55 \r
56                 #region Post Compilation Schema Information\r
57                 [XmlIgnore]\r
58                 public XmlQualifiedName QualifiedName {\r
59                         get{ return QNameInternal; }\r
60                 }\r
61 \r
62                 [XmlIgnore]\r
63                 public XmlSchemaDerivationMethod FinalResolved {\r
64                         get{ return finalResolved; }\r
65                 }\r
66 \r
67                 [XmlIgnore]\r
68 #if NET_2_0\r
69                 [Obsolete ("This property is going away. Use BaseXmlSchemaType instead")]\r
70 #endif\r
71                 public object BaseSchemaType {\r
72                         get{\r
73                                 if (BaseXmlSchemaType != null)\r
74                                         return BaseXmlSchemaType;\r
75                                 else if (this == XmlSchemaComplexType.AnyType)\r
76                                         return null; // This property is designed so.\r
77                                 else\r
78                                         return Datatype;\r
79                         }\r
80                 }\r
81 \r
82                 [XmlIgnore]\r
83 #if NET_2_0\r
84                 public XmlSchemaType BaseXmlSchemaType {\r
85 #else\r
86                 internal XmlSchemaType BaseXmlSchemaType {\r
87 #endif\r
88                         get { return  BaseXmlSchemaTypeInternal; }\r
89                 }\r
90 \r
91                 [XmlIgnore]\r
92                 public XmlSchemaDerivationMethod DerivedBy {\r
93                         get{ return resolvedDerivedBy; }\r
94                 }\r
95 \r
96                 [XmlIgnore]\r
97                 public XmlSchemaDatatype Datatype {\r
98                         get{ return DatatypeInternal; }\r
99                 }\r
100 \r
101                 [XmlIgnore]\r
102                 public virtual bool IsMixed {  \r
103                         get{ return  isMixed; }\r
104                         set{ isMixed = value; } \r
105                 }\r
106                 #endregion\r
107 \r
108 #if NET_2_0\r
109                 public static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)\r
110 #else\r
111                 internal static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)\r
112 #endif\r
113                 {\r
114                         if (qualifiedName == XmlSchemaComplexType.AnyType.QualifiedName)\r
115                                 return XmlSchemaComplexType.AnyType;\r
116 \r
117                         return null;\r
118                 }\r
119 \r
120 #if NET_2_0_in_the_future\r
121                 public static XmlSchemaSimpleType GetBuiltInSimpleType (XmlQualifiedName qualifiedName)\r
122                 {\r
123                         if (qualifiedName.Name == "anySimpleType" && qualifiedName.Namespace == XmlSchema.Namespace)\r
124                                 return XmlSchemaSimpleType.AnySimpleType;\r
125 \r
126                         return null;\r
127                 }\r
128 \r
129                 public virtual IXmlInfosetReader Validate (IXmlInfosetReader reader, object schemas)\r
130                 {\r
131                         throw new NotImplementedException ();\r
132                 }\r
133 \r
134                 public virtual IXmlInfosetWriter Validate (IXmlInfosetWriter reader, object schemas)\r
135                 {\r
136                         throw new NotImplementedException ();\r
137                 }\r
138 #endif\r
139 \r
140                 internal bool ValidateRecursionCheck ()\r
141                 {\r
142                         if (recursed)\r
143                                 return (this != XmlSchemaComplexType.AnyType);\r
144                         recursed = true;\r
145                         XmlSchemaType baseType = this.BaseXmlSchemaType as XmlSchemaType;\r
146                         bool result = false;\r
147                         if (baseType != null)\r
148                                 result = baseType.ValidateRecursionCheck ();\r
149                         recursed = false;\r
150                         return result;\r
151                 }\r
152         }\r
153 }\r