2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[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
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29 using System;\r
30 using System.Xml;\r
31 using System.ComponentModel;\r
32 using Mono.Xml.Schema;\r
33 using System.Xml.Serialization;\r
34 #if NET_2_0_in_the_future\r
35 using MS.Internal.Xml;\r
36 #endif\r
37 \r
38 namespace System.Xml.Schema\r
39 {\r
40         /// <summary>\r
41         /// Summary description for XmlSchemaType.\r
42         /// </summary>\r
43         public class XmlSchemaType : XmlSchemaAnnotated\r
44         {\r
45 #if NET_2_0\r
46                 static XmlValueConverter defaultConverter =\r
47                         new XsdStringConverter (XmlTypeCode.None);\r
48 #endif\r
49 \r
50                 private XmlSchemaDerivationMethod final;\r
51                 private bool isMixed;\r
52                 private string name;\r
53                 bool recursed;\r
54 \r
55 #if NET_2_0\r
56                 private XmlValueConverter converter;\r
57 #endif\r
58 \r
59                 internal XmlQualifiedName BaseSchemaTypeName;\r
60                 internal XmlSchemaType BaseXmlSchemaTypeInternal;\r
61                 internal XmlSchemaDatatype DatatypeInternal;\r
62                 internal XmlSchemaDerivationMethod resolvedDerivedBy;\r
63                 internal XmlSchemaDerivationMethod finalResolved;\r
64                 internal XmlQualifiedName QNameInternal;\r
65 \r
66                 public XmlSchemaType ()\r
67                 {\r
68                         final = XmlSchemaDerivationMethod.None;\r
69                         QNameInternal = XmlQualifiedName.Empty;\r
70                 }\r
71 \r
72                 #region Attributes\r
73                 [System.Xml.Serialization.XmlAttribute("name")]\r
74                 public string Name {\r
75                         get{ return name; }\r
76                         set{ name = value; }\r
77                 }\r
78 \r
79                 [DefaultValue(XmlSchemaDerivationMethod.None)]\r
80                 [System.Xml.Serialization.XmlAttribute("final")]\r
81                 public XmlSchemaDerivationMethod Final {\r
82                         get{ return  final; }\r
83                         set{ final = value; }\r
84                 }\r
85                 #endregion\r
86 \r
87                 #region Post Compilation Schema Information\r
88                 [XmlIgnore]\r
89                 public XmlQualifiedName QualifiedName {\r
90                         get{ return QNameInternal; }\r
91                 }\r
92 \r
93                 [XmlIgnore]\r
94                 public XmlSchemaDerivationMethod FinalResolved {\r
95                         get{ return finalResolved; }\r
96                 }\r
97 \r
98                 [XmlIgnore]\r
99 #if NET_2_0\r
100                 [Obsolete ("This property is going away. Use BaseXmlSchemaType instead")]\r
101 #endif\r
102                 public object BaseSchemaType {\r
103                         get{\r
104                                 if (BaseXmlSchemaType != null)\r
105                                         return BaseXmlSchemaType;\r
106                                 else if (this == XmlSchemaComplexType.AnyType)\r
107                                         return null; // This property is designed so.\r
108                                 else\r
109                                         return Datatype;\r
110                         }\r
111                 }\r
112 \r
113                 [XmlIgnore]\r
114                 [MonoTODO ("This property works as always returning a valid schema type.")]\r
115                 // In .NET 2.0, all schema types used in schema documents must\r
116                 // be XmlSchemaType, even if it is primitive type, in terms of\r
117                 // non-obsolete System.Xml.Schema members.\r
118                 \r
119                 // To modify this property, we have to make sure that it does\r
120                 // not affect to any compilation/validation logic.\r
121 #if NET_2_0\r
122                 public XmlSchemaType BaseXmlSchemaType {\r
123 #else\r
124                 internal XmlSchemaType BaseXmlSchemaType {\r
125 #endif\r
126                         get { return  BaseXmlSchemaTypeInternal; }\r
127                 }\r
128 \r
129                 [XmlIgnore]\r
130                 public XmlSchemaDerivationMethod DerivedBy {\r
131                         get{ return resolvedDerivedBy; }\r
132                 }\r
133 \r
134                 [XmlIgnore]\r
135                 public XmlSchemaDatatype Datatype {\r
136                         get{ return DatatypeInternal; }\r
137                 }\r
138 \r
139                 [XmlIgnore]\r
140                 public virtual bool IsMixed {  \r
141                         get{ return  isMixed; }\r
142                         set{ isMixed = value; } \r
143                 }\r
144 \r
145 #if NET_2_0\r
146                 [MonoTODO]\r
147                 // LAMESPEC: for IDREFS it returns Idref. for ENTITIES \r
148                 // it returns Entity. for NMTOKENS it returns NmToken.\r
149                 [XmlIgnore]\r
150                 public XmlTypeCode TypeCode {\r
151                         get {\r
152                                 if (this == XmlSchemaComplexType.AnyType)\r
153                                         return XmlTypeCode.Item;\r
154                                 if (DatatypeInternal == XmlSchemaSimpleType.AnySimpleType)\r
155                                         return XmlTypeCode.AnyAtomicType;\r
156                                 if (this == XmlSchemaSimpleType.XsIDRefs)\r
157                                         return XmlTypeCode.Idref;\r
158                                 if (this == XmlSchemaSimpleType.XsEntities)\r
159                                         return XmlTypeCode.Entity;\r
160                                 if (this == XmlSchemaSimpleType.XsNMTokens)\r
161                                         return XmlTypeCode.NmToken;\r
162                                 if (DatatypeInternal != null)\r
163                                         return DatatypeInternal.TypeCode;\r
164                                 return BaseXmlSchemaType.TypeCode;\r
165                         }\r
166                 }\r
167 \r
168                 [MonoTODO]\r
169                 [XmlIgnore]\r
170                 [CLSCompliant(false)]
171                 public XmlValueConverter ValueConverter {\r
172                         get {\r
173                                 return converter != null ?\r
174                                         converter :\r
175                                         BaseXmlSchemaTypeInternal != null ?\r
176                                         BaseXmlSchemaTypeInternal.ValueConverter :\r
177                                         defaultConverter;\r
178                         }\r
179                         internal set { converter = value; }\r
180                 }\r
181 #endif\r
182                 #endregion\r
183 \r
184 #if NET_2_0\r
185                 internal static XmlSchemaType GetBuiltInType (XmlQualifiedName qualifiedName)\r
186                 {\r
187                         XmlSchemaType t = GetBuiltInSimpleType (qualifiedName);\r
188                         if (t == null)\r
189                                 t = GetBuiltInComplexType (qualifiedName);\r
190                         return t;\r
191                 }\r
192 \r
193                 internal static XmlSchemaType GetBuiltInType (XmlTypeCode typecode)\r
194                 {\r
195                         if (typecode == XmlTypeCode.Item)\r
196                                 return XmlSchemaComplexType.AnyType;\r
197                         return GetBuiltInSimpleType (typecode);\r
198                 }\r
199 \r
200                 internal static XmlValueConverter BuildConverter (\r
201                         XmlTypeCode code)\r
202                 {\r
203                         switch (code) {\r
204                         case XmlTypeCode.AnyAtomicType:\r
205                                 return new XsdAnyTypeConverter (code);\r
206                         case XmlTypeCode.UntypedAtomic:\r
207                         case XmlTypeCode.String:\r
208                                 return new XsdStringConverter (code);\r
209                         case XmlTypeCode.Float:\r
210                         case XmlTypeCode.Double:\r
211                         case XmlTypeCode.Decimal:\r
212                         case XmlTypeCode.Integer:\r
213                                 return new XsdNumericConverter (code);\r
214                         case XmlTypeCode.Boolean:\r
215                                 return new XsdBooleanConverter (code);\r
216                         case XmlTypeCode.QName:\r
217                         case XmlTypeCode.Notation:\r
218                         case XmlTypeCode.Duration:\r
219                         case XmlTypeCode.DayTimeDuration:\r
220                         case XmlTypeCode.YearMonthDuration:\r
221                                 return new XsdNonPermissiveConverter (code);\r
222                         case XmlTypeCode.DateTime:\r
223                         case XmlTypeCode.Date:\r
224                         case XmlTypeCode.Time:\r
225                         case XmlTypeCode.GYearMonth:\r
226                         case XmlTypeCode.GYear:\r
227                         case XmlTypeCode.GMonth:\r
228                         case XmlTypeCode.GMonthDay:\r
229                         case XmlTypeCode.GDay:\r
230                                 return new XsdDateTimeConverter (code);\r
231                         case XmlTypeCode.AnyUri:\r
232                         case XmlTypeCode.Base64Binary:\r
233                         case XmlTypeCode.HexBinary:\r
234                                 return new XsdMiscBaseConverter (code);\r
235                         }\r
236                         return null;\r
237                 }\r
238 #endif\r
239 \r
240 #if NET_2_0\r
241                 public static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)\r
242 #else\r
243                 internal static XmlSchemaComplexType GetBuiltInComplexType (XmlQualifiedName qualifiedName)\r
244 #endif\r
245                 {\r
246                         if (qualifiedName.Name == "anyType" && qualifiedName.Namespace == XmlSchema.Namespace)\r
247                                 return XmlSchemaComplexType.AnyType;\r
248 \r
249                         return null;\r
250                 }\r
251 \r
252 #if NET_2_0\r
253                 public static XmlSchemaComplexType GetBuiltInComplexType (XmlTypeCode type)\r
254                 {\r
255                         switch (type) {\r
256                         case XmlTypeCode.Item:\r
257                                 return XmlSchemaComplexType.AnyType;\r
258                         }\r
259                         return null;\r
260                 }\r
261 #endif\r
262 \r
263 #if NET_2_0\r
264                 [MonoTODO]\r
265                 public static XmlSchemaSimpleType GetBuiltInSimpleType (XmlQualifiedName qualifiedName)\r
266                 {\r
267                         if (qualifiedName.Namespace == "http://www.w3.org/2003/11/xpath-datatypes") {\r
268                                 switch (qualifiedName.Name) {\r
269                                 case "untypedAtomic":\r
270                                         return XmlSchemaSimpleType.XdtUntypedAtomic;\r
271                                 case "anyAtomicType":\r
272                                         return XmlSchemaSimpleType.XdtAnyAtomicType;\r
273                                 case "yearMonthDuration":\r
274                                         return XmlSchemaSimpleType.XdtYearMonthDuration;\r
275                                 case "dayTimeDuration":\r
276                                         return XmlSchemaSimpleType.XdtDayTimeDuration;\r
277                                 }\r
278                                 return null;\r
279                         }\r
280                         else if (qualifiedName.Namespace != XmlSchema.Namespace)\r
281                                 return null;\r
282                         switch (qualifiedName.Name) {\r
283                         case "anySimpleType":\r
284                                 return XmlSchemaSimpleType.XsAnySimpleType;\r
285                         case "string":\r
286                                 return XmlSchemaSimpleType.XsString;\r
287                         case "boolean":\r
288                                 return XmlSchemaSimpleType.XsBoolean;\r
289                         case "decimal":\r
290                                 return XmlSchemaSimpleType.XsDecimal;\r
291                         case "float":\r
292                                 return XmlSchemaSimpleType.XsFloat;\r
293                         case "double":\r
294                                 return XmlSchemaSimpleType.XsDouble;\r
295                         case "duration":\r
296                                 return XmlSchemaSimpleType.XsDuration;\r
297                         case "dateTime":\r
298                                 return XmlSchemaSimpleType.XsDateTime;\r
299                         case "time":\r
300                                 return XmlSchemaSimpleType.XsTime;\r
301                         case "date":\r
302                                 return XmlSchemaSimpleType.XsDate;\r
303                         case "gYearMonth":\r
304                                 return XmlSchemaSimpleType.XsGYearMonth;\r
305                         case "gYear":\r
306                                 return XmlSchemaSimpleType.XsGYear;\r
307                         case "gMonthDay":\r
308                                 return XmlSchemaSimpleType.XsGMonthDay;\r
309                         case "gDay":\r
310                                 return XmlSchemaSimpleType.XsGDay;\r
311                         case "gMonth":\r
312                                 return XmlSchemaSimpleType.XsGMonth;\r
313                         case "hexBinary":\r
314                                 return XmlSchemaSimpleType.XsHexBinary;\r
315                         case "base64Binary":\r
316                                 return XmlSchemaSimpleType.XsBase64Binary;\r
317                         case "anyURI":\r
318                                 return XmlSchemaSimpleType.XsAnyUri;\r
319                         case "QName":\r
320                                 return XmlSchemaSimpleType.XsQName;\r
321                         case "NOTATION":\r
322                                 return XmlSchemaSimpleType.XsNotation;\r
323                         case "normalizedString":\r
324                                 return XmlSchemaSimpleType.XsNormalizedString;\r
325                         case "token":\r
326                                 return XmlSchemaSimpleType.XsToken;\r
327                         case "language":\r
328                                 return XmlSchemaSimpleType.XsLanguage;\r
329                         case "NMTOKEN":\r
330                                 return XmlSchemaSimpleType.XsNMToken;\r
331                         case "NMTOKENS":\r
332                                 return XmlSchemaSimpleType.XsNMTokens;\r
333                         case "Name":\r
334                                 return XmlSchemaSimpleType.XsName;\r
335                         case "NCName":\r
336                                 return XmlSchemaSimpleType.XsNCName;\r
337                         case "ID":\r
338                                 return XmlSchemaSimpleType.XsID;\r
339                         case "IDREF":\r
340                                 return XmlSchemaSimpleType.XsIDRef;\r
341                         case "IDREFS":\r
342                                 return XmlSchemaSimpleType.XsIDRefs;\r
343                         case "ENTITY":\r
344                                 return XmlSchemaSimpleType.XsEntity;\r
345                         case "ENTITIES":\r
346                                 return XmlSchemaSimpleType.XsEntities;\r
347                         case "integer":\r
348                                 return XmlSchemaSimpleType.XsInteger;\r
349                         case "nonPositiveInteger":\r
350                                 return XmlSchemaSimpleType.XsNonPositiveInteger;\r
351                         case "negativeInteger":\r
352                                 return XmlSchemaSimpleType.XsNegativeInteger;\r
353                         case "long":\r
354                                 return XmlSchemaSimpleType.XsLong;\r
355                         case "int":\r
356                                 return XmlSchemaSimpleType.XsInt;\r
357                         case "short":\r
358                                 return XmlSchemaSimpleType.XsShort;\r
359                         case "byte":\r
360                                 return XmlSchemaSimpleType.XsByte;\r
361                         case "nonNegativeInteger":\r
362                                 return XmlSchemaSimpleType.XsNonNegativeInteger;\r
363                         case "positiveInteger":\r
364                                 return XmlSchemaSimpleType.XsPositiveInteger;\r
365                         case "unsignedLong":\r
366                                 return XmlSchemaSimpleType.XsUnsignedLong;\r
367                         case "unsignedInt":\r
368                                 return XmlSchemaSimpleType.XsUnsignedInt;\r
369                         case "unsignedShort":\r
370                                 return XmlSchemaSimpleType.XsUnsignedShort;\r
371                         case "unsignedByte":\r
372                                 return XmlSchemaSimpleType.XsUnsignedByte;\r
373                         }\r
374                         return null;\r
375                 }\r
376 \r
377                 internal static XmlSchemaSimpleType GetBuiltInSimpleType (XmlSchemaDatatype type)\r
378                 {\r
379                         if (type is XsdEntities)\r
380                                 return XmlSchemaSimpleType.XsEntities;\r
381                         else if (type is XsdNMTokens)\r
382                                 return XmlSchemaSimpleType.XsNMTokens;\r
383                         else if (type is XsdIDRefs)\r
384                                 return XmlSchemaSimpleType.XsIDRefs;\r
385                         else\r
386                                 return GetBuiltInSimpleType (type.TypeCode);\r
387                 }\r
388 \r
389                 [MonoTODO]\r
390                 // Don't use this method to cover all XML Schema datatypes.\r
391                 public static XmlSchemaSimpleType GetBuiltInSimpleType (XmlTypeCode type)\r
392                 {\r
393                         switch (type) {\r
394                         case XmlTypeCode.None:\r
395                         case XmlTypeCode.Item:\r
396                         case XmlTypeCode.Node:\r
397                         case XmlTypeCode.Document: // node\r
398                         case XmlTypeCode.Element: // node\r
399                         case XmlTypeCode.Attribute: // node\r
400                         case XmlTypeCode.Namespace: // node\r
401                         case XmlTypeCode.ProcessingInstruction: // node\r
402                         case XmlTypeCode.Comment: // node\r
403                         case XmlTypeCode.Text:  // node\r
404                                 return null;\r
405                         case XmlTypeCode.AnyAtomicType:\r
406                                 return XmlSchemaSimpleType.XdtAnyAtomicType;\r
407                         case XmlTypeCode.UntypedAtomic:\r
408                                 return XmlSchemaSimpleType.XdtUntypedAtomic;\r
409                         case XmlTypeCode.String:\r
410                                 return XmlSchemaSimpleType.XsString;\r
411                         case XmlTypeCode.Boolean:\r
412                                 return XmlSchemaSimpleType.XsBoolean;\r
413                         case XmlTypeCode.Decimal:\r
414                                 return XmlSchemaSimpleType.XsDecimal;\r
415                         case XmlTypeCode.Float:\r
416                                 return XmlSchemaSimpleType.XsFloat;\r
417                         case XmlTypeCode.Double:\r
418                                 return XmlSchemaSimpleType.XsDouble;\r
419                         case XmlTypeCode.Duration:\r
420                                 return XmlSchemaSimpleType.XsDuration;\r
421                         case XmlTypeCode.DateTime:\r
422                                 return XmlSchemaSimpleType.XsDateTime;\r
423                         case XmlTypeCode.Time:\r
424                                 return XmlSchemaSimpleType.XsTime;\r
425                         case XmlTypeCode.Date:\r
426                                 return XmlSchemaSimpleType.XsDate;\r
427                         case XmlTypeCode.GYearMonth:\r
428                                 return XmlSchemaSimpleType.XsGYearMonth;\r
429                         case XmlTypeCode.GYear:\r
430                                 return XmlSchemaSimpleType.XsGYear;\r
431                         case XmlTypeCode.GMonthDay:\r
432                                 return XmlSchemaSimpleType.XsGMonthDay;\r
433                         case XmlTypeCode.GDay:\r
434                                 return XmlSchemaSimpleType.XsGDay;\r
435                         case XmlTypeCode.GMonth:\r
436                                 return XmlSchemaSimpleType.XsGMonth;\r
437                         case XmlTypeCode.HexBinary:\r
438                                 return XmlSchemaSimpleType.XsHexBinary;\r
439                         case XmlTypeCode.Base64Binary:\r
440                                 return XmlSchemaSimpleType.XsBase64Binary;\r
441                         case XmlTypeCode.AnyUri:\r
442                                 return XmlSchemaSimpleType.XsAnyUri;\r
443                         case XmlTypeCode.QName:\r
444                                 return XmlSchemaSimpleType.XsQName;\r
445                         case XmlTypeCode.Notation:\r
446                                 return XmlSchemaSimpleType.XsNotation;\r
447                         case XmlTypeCode.NormalizedString:\r
448                                 return XmlSchemaSimpleType.XsNormalizedString;\r
449                         case XmlTypeCode.Token:\r
450                                 return XmlSchemaSimpleType.XsToken;\r
451                         case XmlTypeCode.Language:\r
452                                 return XmlSchemaSimpleType.XsLanguage;\r
453                         case XmlTypeCode.NmToken: // NmTokens is not primitive\r
454                                 return XmlSchemaSimpleType.XsNMToken;\r
455                         case XmlTypeCode.Name:\r
456                                 return XmlSchemaSimpleType.XsName;\r
457                         case XmlTypeCode.NCName:\r
458                                 return XmlSchemaSimpleType.XsNCName;\r
459                         case XmlTypeCode.Id:\r
460                                 return XmlSchemaSimpleType.XsID;\r
461                         case XmlTypeCode.Idref: // Idrefs is not primitive\r
462                                 return XmlSchemaSimpleType.XsIDRef;\r
463                         case XmlTypeCode.Entity: // Entities is not primitive\r
464                                 return XmlSchemaSimpleType.XsEntity;\r
465                         case XmlTypeCode.Integer:\r
466                                 return XmlSchemaSimpleType.XsInteger;\r
467                         case XmlTypeCode.NonPositiveInteger:\r
468                                 return XmlSchemaSimpleType.XsNonPositiveInteger;\r
469                         case XmlTypeCode.NegativeInteger:\r
470                                 return XmlSchemaSimpleType.XsNegativeInteger;\r
471                         case XmlTypeCode.Long:\r
472                                 return XmlSchemaSimpleType.XsLong;\r
473                         case XmlTypeCode.Int:\r
474                                 return XmlSchemaSimpleType.XsInt;\r
475                         case XmlTypeCode.Short:\r
476                                 return XmlSchemaSimpleType.XsShort;\r
477                         case XmlTypeCode.Byte:\r
478                                 return XmlSchemaSimpleType.XsByte;\r
479                         case XmlTypeCode.NonNegativeInteger:\r
480                                 return XmlSchemaSimpleType.XsNonNegativeInteger;\r
481                         case XmlTypeCode.UnsignedLong:\r
482                                 return XmlSchemaSimpleType.XsUnsignedLong;\r
483                         case XmlTypeCode.UnsignedInt:\r
484                                 return XmlSchemaSimpleType.XsUnsignedInt;\r
485                         case XmlTypeCode.UnsignedShort:\r
486                                 return XmlSchemaSimpleType.XsUnsignedShort;\r
487                         case XmlTypeCode.UnsignedByte:\r
488                                 return XmlSchemaSimpleType.XsUnsignedByte;\r
489                         case XmlTypeCode.PositiveInteger:\r
490                                 return XmlSchemaSimpleType.XsPositiveInteger;\r
491                         case XmlTypeCode.YearMonthDuration:\r
492                                 return XmlSchemaSimpleType.XdtYearMonthDuration;\r
493                         case XmlTypeCode.DayTimeDuration:\r
494                                 return XmlSchemaSimpleType.XdtDayTimeDuration;\r
495                         }\r
496                         return null;\r
497                 }\r
498 \r
499                 public static bool IsDerivedFrom (XmlSchemaType derivedType, XmlSchemaType baseType, XmlSchemaDerivationMethod except)\r
500                 {\r
501                         if (derivedType.BaseXmlSchemaType == null)\r
502                                 return false;\r
503                         if ((derivedType.DerivedBy & except) != 0)\r
504                                 return false;\r
505                         if (derivedType.BaseXmlSchemaType == baseType)\r
506                                 return true;\r
507                         return IsDerivedFrom (derivedType.BaseXmlSchemaType,\r
508                                 baseType, except);\r
509                 }\r
510 #endif\r
511 \r
512                 internal bool ValidateRecursionCheck ()\r
513                 {\r
514                         if (recursed)\r
515                                 return (this != XmlSchemaComplexType.AnyType);\r
516                         recursed = true;\r
517                         XmlSchemaType baseType = this.BaseXmlSchemaType as XmlSchemaType;\r
518                         bool result = false;\r
519                         if (baseType != null)\r
520                                 result = baseType.ValidateRecursionCheck ();\r
521                         recursed = false;\r
522                         return result;\r
523                 }\r
524         }\r
525 }\r