2 // System.Xml.Schema.XmlSchemaSimpleType.cs
\r
5 // Dwivedi, Ajay kumar Adwiv@Yahoo.com
\r
6 // Atsushi Enomoto ginga@kit.hi-ho.ne.jp
\r
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:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
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.
30 using System.Xml.Serialization;
\r
32 using Mono.Xml.Schema;
\r
34 namespace System.Xml.Schema
\r
37 /// Summary description for XmlSchemaSimpleType.
\r
39 public class XmlSchemaSimpleType : XmlSchemaType
\r
41 const string xmlname = "simpleType";
\r
42 private static XmlSchemaSimpleType schemaLocationType;
\r
44 private XmlSchemaSimpleTypeContent content;
\r
46 internal bool islocal = true; // Assuming local means we have to specify islocal=false only in XmlSchema
\r
47 private bool recursed;
\r
48 private XmlSchemaDerivationMethod variety;
\r
51 // predefined simple types
\r
52 internal static readonly XmlSchemaSimpleType XsAnySimpleType;
\r
53 internal static readonly XmlSchemaSimpleType XsString;
\r
54 internal static readonly XmlSchemaSimpleType XsBoolean;
\r
55 internal static readonly XmlSchemaSimpleType XsDecimal;
\r
56 internal static readonly XmlSchemaSimpleType XsFloat;
\r
57 internal static readonly XmlSchemaSimpleType XsDouble;
\r
58 internal static readonly XmlSchemaSimpleType XsDuration;
\r
59 internal static readonly XmlSchemaSimpleType XsDateTime;
\r
60 internal static readonly XmlSchemaSimpleType XsTime;
\r
61 internal static readonly XmlSchemaSimpleType XsDate;
\r
62 internal static readonly XmlSchemaSimpleType XsGYearMonth;
\r
63 internal static readonly XmlSchemaSimpleType XsGYear;
\r
64 internal static readonly XmlSchemaSimpleType XsGMonthDay;
\r
65 internal static readonly XmlSchemaSimpleType XsGDay;
\r
66 internal static readonly XmlSchemaSimpleType XsGMonth;
\r
67 internal static readonly XmlSchemaSimpleType XsHexBinary;
\r
68 internal static readonly XmlSchemaSimpleType XsBase64Binary;
\r
69 internal static readonly XmlSchemaSimpleType XsAnyUri;
\r
70 internal static readonly XmlSchemaSimpleType XsQName;
\r
71 internal static readonly XmlSchemaSimpleType XsNotation;
\r
72 internal static readonly XmlSchemaSimpleType XsNormalizedString;
\r
73 internal static readonly XmlSchemaSimpleType XsToken;
\r
74 internal static readonly XmlSchemaSimpleType XsLanguage;
\r
75 internal static readonly XmlSchemaSimpleType XsNMToken;
\r
76 internal static readonly XmlSchemaSimpleType XsNMTokens;
\r
77 internal static readonly XmlSchemaSimpleType XsName;
\r
78 internal static readonly XmlSchemaSimpleType XsNCName;
\r
79 internal static readonly XmlSchemaSimpleType XsID;
\r
80 internal static readonly XmlSchemaSimpleType XsIDRef;
\r
81 internal static readonly XmlSchemaSimpleType XsIDRefs;
\r
82 internal static readonly XmlSchemaSimpleType XsEntity;
\r
83 internal static readonly XmlSchemaSimpleType XsEntities;
\r
84 internal static readonly XmlSchemaSimpleType XsInteger;
\r
85 internal static readonly XmlSchemaSimpleType XsNonPositiveInteger;
\r
86 internal static readonly XmlSchemaSimpleType XsNegativeInteger;
\r
87 internal static readonly XmlSchemaSimpleType XsLong;
\r
88 internal static readonly XmlSchemaSimpleType XsInt;
\r
89 internal static readonly XmlSchemaSimpleType XsShort;
\r
90 internal static readonly XmlSchemaSimpleType XsByte;
\r
91 internal static readonly XmlSchemaSimpleType XsNonNegativeInteger;
\r
92 internal static readonly XmlSchemaSimpleType XsUnsignedLong;
\r
93 internal static readonly XmlSchemaSimpleType XsUnsignedInt;
\r
94 internal static readonly XmlSchemaSimpleType XsUnsignedShort;
\r
95 internal static readonly XmlSchemaSimpleType XsUnsignedByte;
\r
96 internal static readonly XmlSchemaSimpleType XsPositiveInteger;
\r
98 internal static readonly XmlSchemaSimpleType XdtUntypedAtomic;
\r
99 internal static readonly XmlSchemaSimpleType XdtAnyAtomicType;
\r
100 internal static readonly XmlSchemaSimpleType XdtYearMonthDuration;
\r
101 internal static readonly XmlSchemaSimpleType XdtDayTimeDuration;
\r
104 static XmlSchemaSimpleType ()
\r
106 // This is not used in the meantime.
\r
107 XmlSchemaSimpleType st = new XmlSchemaSimpleType ();
\r
108 XmlSchemaSimpleTypeList list = new XmlSchemaSimpleTypeList ();
\r
109 list.ItemTypeName = new XmlQualifiedName ("anyURI", XmlSchema.Namespace);
\r
111 st.BaseXmlSchemaTypeInternal = null;
\r
112 st.variety = XmlSchemaDerivationMethod.List;
\r
113 schemaLocationType = st;
\r
116 // Built-In schema types
\r
117 XsAnySimpleType = BuildSchemaType ("anySimpleType", null);
\r
118 XsString = BuildSchemaType ("string", "anySimpleType");
\r
119 XsBoolean = BuildSchemaType ("boolean", "anySimpleType");
\r
120 XsDecimal = BuildSchemaType ("decimal", "anySimpleType");
\r
121 XsFloat = BuildSchemaType ("float", "anySimpleType");
\r
122 XsDouble = BuildSchemaType ("double", "anySimpleType");
\r
123 XsDuration = BuildSchemaType ("duration", "anySimpleType");
\r
124 XsDateTime = BuildSchemaType ("dateTime", "anySimpleType");
\r
125 XsTime = BuildSchemaType ("time", "anySimpleType");
\r
126 XsDate = BuildSchemaType ("date", "anySimpleType");
\r
127 XsGYearMonth = BuildSchemaType ("gYearMonth", "anySimpleType");
\r
128 XsGYear = BuildSchemaType ("gYear", "anySimpleType");
\r
129 XsGMonthDay = BuildSchemaType ("gMonthDay", "anySimpleType");
\r
130 XsGDay = BuildSchemaType ("gDay", "anySimpleType");
\r
131 XsGMonth = BuildSchemaType ("gMonth", "anySimpleType");
\r
132 XsHexBinary = BuildSchemaType ("hexBinary", "anySimpleType");
\r
133 XsBase64Binary = BuildSchemaType ("base64Binary", "anySimpleType");
\r
134 XsAnyUri = BuildSchemaType ("anyURI", "anySimpleType");
\r
135 XsQName = BuildSchemaType ("QName", "anySimpleType");
\r
136 XsNotation = BuildSchemaType ("NOTATION", "anySimpleType");
\r
138 XsNormalizedString = BuildSchemaType ("normalizedString", "string");
\r
139 XsToken = BuildSchemaType ("token", "normalizedString");
\r
140 XsLanguage = BuildSchemaType ("language", "token");
\r
141 XsNMToken = BuildSchemaType ("NMTOKEN", "token");
\r
143 XsID = BuildSchemaType ("ID", "NCName");
\r
144 XsIDRef = BuildSchemaType ("IDREF", "NCName");
\r
145 XsEntity = BuildSchemaType ("ENTITY", "NCName");
\r
147 XsInteger = BuildSchemaType ("integer", "decimal");
\r
148 XsNonPositiveInteger = BuildSchemaType ("nonPositiveInteger", "integer");
\r
149 XsNegativeInteger = BuildSchemaType ("negativeInteger", "nonPositiveInteger");
\r
150 XsLong = BuildSchemaType ("long", "integer");
\r
151 XsInt = BuildSchemaType ("int", "long");
\r
152 XsShort = BuildSchemaType ("short", "int");
\r
153 XsByte = BuildSchemaType ("byte", "short");
\r
154 XsNonNegativeInteger = BuildSchemaType ("nonNegativeInteger", "integer");
\r
155 XsUnsignedLong = BuildSchemaType ("unsignedLong", "nonNegativeInteger");
\r
156 XsUnsignedInt = BuildSchemaType ("unsignedInt", "unsignedLong");
\r
157 XsUnsignedShort = BuildSchemaType ("unsignedShort ", "unsignedInt");
\r
158 XsUnsignedByte = BuildSchemaType ("unsignedByte", "unsignedByte");
\r
159 XsPositiveInteger = BuildSchemaType ("positiveInteger", "nonNegativeInteger");
\r
162 XdtAnyAtomicType = BuildSchemaType ("anyAtomicType", "anySimpleType", true, false);
\r
163 XdtUntypedAtomic = BuildSchemaType ("untypedAtomic", "anyAtomicType", true, true);
\r
164 XdtDayTimeDuration = BuildSchemaType ("dayTimeDuration", "duration", true, false);
\r
165 XdtYearMonthDuration = BuildSchemaType ("yearMonthDuration", "duration", true, false);
\r
167 // NMTOKENS, IDREFS, ENTITIES - lists
\r
168 XsIDRefs = new XmlSchemaSimpleType ();
\r
169 XmlSchemaSimpleTypeList sl = new XmlSchemaSimpleTypeList ();
\r
170 sl.ItemType = XsIDRef;
\r
171 XsIDRefs.Content = sl;
\r
172 XsEntities = new XmlSchemaSimpleType ();
\r
173 sl = new XmlSchemaSimpleTypeList ();
\r
174 sl.ItemType = XsEntity;
\r
175 XsEntities.Content = sl;
\r
176 XsNMTokens = new XmlSchemaSimpleType ();
\r
177 sl = new XmlSchemaSimpleTypeList ();
\r
178 sl.ItemType = XsNMToken;
\r
179 XsNMTokens.Content = sl;
\r
184 private static XmlSchemaSimpleType BuildSchemaType (string name, string baseName)
\r
186 return BuildSchemaType (name, baseName, false, false);
\r
189 private static XmlSchemaSimpleType BuildSchemaType (string name, string baseName, bool xdt, bool baseXdt)
\r
191 string ns = xdt ? "http://www.w3.org/2003/11/xpath-datatypes" : XmlSchema.Namespace;
\r
192 string ns2 = baseXdt ? "http://www.w3.org/2003/11/xpath-datatypes" : XmlSchema.Namespace;
\r
193 XmlSchemaSimpleType st = new XmlSchemaSimpleType ();
\r
194 st.QNameInternal = new XmlQualifiedName (name, ns);
\r
195 if (baseName != null)
\r
196 st.BaseXmlSchemaTypeInternal = XmlSchemaType. GetBuiltInSimpleType (new XmlQualifiedName (baseName, ns2));
\r
197 st.DatatypeInternal = XmlSchemaDatatype.FromName (st.QualifiedName);
\r
202 internal static XsdAnySimpleType AnySimpleType {
\r
203 get { return XsdAnySimpleType.Instance; }
\r
206 internal static XmlSchemaSimpleType SchemaLocationType {
\r
207 get { return schemaLocationType; }
\r
210 public XmlSchemaSimpleType ()
\r
214 [XmlElement("restriction",typeof(XmlSchemaSimpleTypeRestriction),Namespace=XmlSchema.Namespace)]
\r
215 [XmlElement("list",typeof(XmlSchemaSimpleTypeList),Namespace=XmlSchema.Namespace)]
\r
216 [XmlElement("union",typeof(XmlSchemaSimpleTypeUnion),Namespace=XmlSchema.Namespace)]
\r
217 public XmlSchemaSimpleTypeContent Content
\r
219 get{ return content; }
\r
220 set{ content = value; }
\r
223 internal XmlSchemaDerivationMethod Variety
\r
225 get{ return variety; }
\r
229 /// For a simple Type:
\r
230 /// 1. Content must be present
\r
231 /// 2. id if present, must have be a valid ID
\r
232 /// a) If the simpletype is local
\r
233 /// 1- are from <xs:complexType name="simpleType"> and <xs:complexType name="localSimpleType">
\r
234 /// 1. name is prohibited
\r
235 /// 2. final is prohibited
\r
236 /// b) If the simpletype is toplevel
\r
237 /// 1- are from <xs:complexType name="simpleType"> and <xs:complexType name="topLevelSimpleType">
\r
238 /// 1. name is required, type must be NCName
\r
239 /// 2. Content is required
\r
240 /// 3. final can have values : #all | (list | union | restriction)
\r
241 /// 4. If final is set, finalResolved is same as final (but within the values of b.3)
\r
242 /// 5. If final is not set, the finalDefault of the schema (ie. only #all and restriction)
\r
243 /// 6. Base type is:
\r
244 /// 4.1 If restriction is chosen,the base type of restriction or elements
\r
245 /// 4.2 otherwise simple ur-type
\r
247 internal override int Compile(ValidationEventHandler h, XmlSchema schema)
\r
249 // If this is already compiled this time, simply skip.
\r
250 if (this.IsComplied (schema.CompilationId))
\r
255 if(this.islocal) // a
\r
257 if(this.Name != null) // a.1
\r
258 error(h,"Name is prohibited in a local simpletype");
\r
260 this.QNameInternal = new XmlQualifiedName(this.Name,schema.TargetNamespace);
\r
261 if(this.Final != XmlSchemaDerivationMethod.None) //a.2
\r
262 error(h,"Final is prohibited in a local simpletype");
\r
266 if(this.Name == null) //b.1
\r
267 error(h,"Name is required in top level simpletype");
\r
268 else if(!XmlSchemaUtil.CheckNCName(this.Name)) // b.1.2
\r
269 error(h,"name attribute of a simpleType must be NCName");
\r
271 this.QNameInternal = new XmlQualifiedName(this.Name,schema.TargetNamespace);
\r
273 //NOTE: Although the FinalResolved can be Empty, it is not a valid value for Final
\r
274 //DEVIATION: If an error occurs, the finaldefault is always consulted. This deviates
\r
275 // from the way MS implementation works.
\r
276 switch(this.Final) //b.3, b.4
\r
278 case XmlSchemaDerivationMethod.All:
\r
279 this.finalResolved = XmlSchemaDerivationMethod.All;
\r
281 case XmlSchemaDerivationMethod.List:
\r
282 case XmlSchemaDerivationMethod.Union:
\r
283 case XmlSchemaDerivationMethod.Restriction:
\r
284 this.finalResolved = Final;
\r
287 error(h,"The value of final attribute is not valid for simpleType");
\r
288 goto case XmlSchemaDerivationMethod.None;
\r
289 // use assignment from finaldefault on schema.
\r
290 case XmlSchemaDerivationMethod.None: // b.5
\r
291 XmlSchemaDerivationMethod flags =
\r
292 (XmlSchemaDerivationMethod.Restriction | XmlSchemaDerivationMethod.List |
\r
293 XmlSchemaDerivationMethod.Extension | XmlSchemaDerivationMethod.Union );
\r
294 switch (schema.FinalDefault) {
\r
295 case XmlSchemaDerivationMethod.All:
\r
296 finalResolved = XmlSchemaDerivationMethod.All;
\r
298 case XmlSchemaDerivationMethod.None:
\r
299 finalResolved = XmlSchemaDerivationMethod.Empty;
\r
302 finalResolved = schema.FinalDefault & flags;
\r
309 XmlSchemaUtil.CompileID(Id,this,schema.IDCollection,h);
\r
311 if (Content != null)
\r
312 Content.OwnerType = this;
\r
314 if(this.Content == null) //a.3,b.2
\r
315 error(h,"Content is required in a simpletype");
\r
316 else if(Content is XmlSchemaSimpleTypeRestriction)
\r
318 this.resolvedDerivedBy = XmlSchemaDerivationMethod.Restriction;
\r
319 errorCount += ((XmlSchemaSimpleTypeRestriction)Content).Compile(h,schema);
\r
321 else if(Content is XmlSchemaSimpleTypeList)
\r
323 this.resolvedDerivedBy = XmlSchemaDerivationMethod.List;
\r
324 errorCount += ((XmlSchemaSimpleTypeList)Content).Compile(h,schema);
\r
326 else if(Content is XmlSchemaSimpleTypeUnion)
\r
328 this.resolvedDerivedBy = XmlSchemaDerivationMethod.Union;
\r
329 errorCount += ((XmlSchemaSimpleTypeUnion)Content).Compile(h,schema);
\r
332 this.CompilationId = schema.CompilationId;
\r
336 internal void CollectBaseType (ValidationEventHandler h, XmlSchema schema)
\r
338 if (Content is XmlSchemaSimpleTypeRestriction) {
\r
339 object o = ((XmlSchemaSimpleTypeRestriction) Content).GetActualType (h, schema, false);
\r
340 BaseXmlSchemaTypeInternal = o as XmlSchemaSimpleType;
\r
341 if (BaseXmlSchemaTypeInternal != null)
\r
342 DatatypeInternal = BaseXmlSchemaTypeInternal.Datatype;
\r
344 DatatypeInternal = o as XmlSchemaDatatype;
\r
346 // otherwise, actualBaseSchemaType is null
\r
348 DatatypeInternal = XmlSchemaSimpleType.AnySimpleType;
\r
351 internal override int Validate(ValidationEventHandler h, XmlSchema schema)
\r
353 // 3.14.6 Properties Correct.
\r
355 // 1. Post Compilation Properties
\r
356 // {name}, {target namespace} => QNameInternal. Already Compile()d.
\r
357 // {base type definition} => baseSchemaTypeInternal
\r
358 // {final} => finalResolved. Already Compile()d.
\r
359 // {variety} => resolvedDerivedBy. Already Compile()d.
\r
361 // 2. Should be checked by "recursed" field.
\r
363 if(IsValidated (schema.ValidationId))
\r
367 error (h, "Circular type reference was found.");
\r
372 CollectBaseType (h, schema);
\r
374 if (content != null)
\r
375 errorCount += content.Validate (h, schema);
\r
378 // BaseSchemaType property
\r
379 BaseXmlSchemaTypeInternal = content.ActualBaseSchemaType as XmlSchemaType;
\r
380 if (this.BaseXmlSchemaTypeInternal == null)
\r
381 this.DatatypeInternal = content.ActualBaseSchemaType as XmlSchemaDatatype;
\r
384 // Datatype property
\r
385 XmlSchemaSimpleType simple = BaseXmlSchemaType as XmlSchemaSimpleType;
\r
386 if (simple != null)
\r
387 this.DatatypeInternal = simple.Datatype;
\r
389 // DatatypeInternal = BaseSchemaType as XmlSchemaDatatype;
\r
392 XmlSchemaSimpleType baseSType = BaseXmlSchemaType as XmlSchemaSimpleType;
\r
393 if (baseSType != null) {
\r
394 if ((baseSType.FinalResolved & this.resolvedDerivedBy) != 0)
\r
395 error (h, "Specified derivation is prohibited by the base simple type.");
\r
399 if (this.resolvedDerivedBy == XmlSchemaDerivationMethod.Restriction &&
\r
401 this.variety = baseSType.Variety;
\r
403 this.variety = this.resolvedDerivedBy;
\r
405 // 3.14.6 Derivation Valid (Restriction, Simple)
\r
406 XmlSchemaSimpleTypeRestriction r = Content as XmlSchemaSimpleTypeRestriction;
\r
407 object baseType = BaseXmlSchemaType != null ? (object) BaseXmlSchemaType : Datatype;
\r
409 ValidateDerivationValid (baseType, r.Facets, h, schema);
\r
411 // TODO: describe which validation term this belongs to.
\r
412 XmlSchemaSimpleTypeList l = Content as XmlSchemaSimpleTypeList;
\r
414 XmlSchemaSimpleType itemSimpleType = l.ValidatedListItemType as XmlSchemaSimpleType;
\r
415 if (itemSimpleType != null && itemSimpleType.Content is XmlSchemaSimpleTypeList)
\r
416 error (h, "List type must not be derived from another list type.");
\r
420 ValidationId = schema.ValidationId;
\r
424 // 3.14.6 Derivation Valid (RestrictionSimple)
425 internal void ValidateDerivationValid (object baseType, XmlSchemaObjectCollection facets,
426 ValidationEventHandler h, XmlSchema schema)
429 XmlSchemaSimpleType baseSimpleType = baseType as XmlSchemaSimpleType;
430 switch (this.Variety) {
432 case XmlSchemaDerivationMethod.Restriction:
434 if (baseSimpleType != null && baseSimpleType.resolvedDerivedBy != XmlSchemaDerivationMethod.Restriction)
435 error (h, "Base schema type is not either atomic type or primitive type.");
437 if (baseSimpleType != null &&
438 (baseSimpleType.FinalResolved & XmlSchemaDerivationMethod.Restriction) != 0)
439 error (h, "Derivation by restriction is prohibited by the base simple type.");
440 // TODO: 1.3 facet restriction valid.
442 case XmlSchemaDerivationMethod.List:
443 XmlSchemaSimpleTypeList thisList = Content as XmlSchemaSimpleTypeList;
445 // 2.1 item list type not allowed
446 if (baseSimpleType != null && baseSimpleType.resolvedDerivedBy == XmlSchemaDerivationMethod.List)
447 error (h, "Base list schema type is not allowed.");
448 XmlSchemaSimpleTypeUnion baseUnion = baseSimpleType.Content as XmlSchemaSimpleTypeUnion;
449 if (baseUnion != null) {
450 bool errorFound = false;
451 foreach (object memberType in baseUnion.ValidatedTypes) {
452 XmlSchemaSimpleType memberST = memberType as XmlSchemaSimpleType;
453 if (memberST != null && memberST.resolvedDerivedBy == XmlSchemaDerivationMethod.List)
457 error (h, "Base union schema type should not contain list types.");
460 // 2.2 facets limited
462 foreach (XmlSchemaFacet facet in facets) {
463 if (facet is XmlSchemaLengthFacet ||
464 facet is XmlSchemaMaxLengthFacet ||
465 facet is XmlSchemaMinLengthFacet ||
466 facet is XmlSchemaEnumerationFacet ||
467 facet is XmlSchemaPatternFacet)
470 error (h, "Not allowed facet was found on this simple type which derives list type.");
473 case XmlSchemaDerivationMethod.Union:
478 foreach (XmlSchemaFacet facet in facets) {
479 if (facet is XmlSchemaEnumerationFacet ||
480 facet is XmlSchemaPatternFacet)
483 error (h, "Not allowed facet was found on this simple type which derives list type.");
489 // 3.14.6 Type Derivation OK (Simple)
490 internal bool ValidateTypeDerivationOK (object baseType,
491 ValidationEventHandler h, XmlSchema schema, bool raiseError)
494 // Note that anyType should also be allowed as anySimpleType.
495 if (this == baseType || baseType == XmlSchemaSimpleType.AnySimpleType ||
496 baseType == XmlSchemaComplexType.AnyType)
500 XmlSchemaSimpleType baseSimpleType = baseType as XmlSchemaSimpleType;
501 if (baseSimpleType != null &&
502 (baseSimpleType.FinalResolved & resolvedDerivedBy) != 0) {
504 error (h, "Specified derivation is prohibited by the base type.");
509 if (BaseXmlSchemaType == baseType || Datatype == baseType)
513 XmlSchemaSimpleType thisBaseSimpleType = BaseXmlSchemaType as XmlSchemaSimpleType;
514 if (thisBaseSimpleType != null) {
515 if (thisBaseSimpleType.ValidateTypeDerivationOK (baseType, h, schema, false))
521 case XmlSchemaDerivationMethod.Union:
522 case XmlSchemaDerivationMethod.List:
523 if (baseType == XmlSchemaSimpleType.AnySimpleType)
528 // 2.2.4 validly derived from one of the union member type.
529 if (baseSimpleType != null && baseSimpleType.Variety == XmlSchemaDerivationMethod.Union) {
530 foreach (object memberType in ((XmlSchemaSimpleTypeUnion) baseSimpleType.Content).ValidatedTypes)
531 if (this.ValidateTypeDerivationOK (memberType, h, schema, false))
536 error(h, "Invalid simple type derivation was found.");
540 internal string Normalize (string s, XmlNameTable nt, XmlNamespaceManager nsmgr)
542 return Content.Normalize (s, nt, nsmgr);
546 // final = (#all | (list | union | restriction))
\r
549 // {any attributes with non-schema namespace . . .}>
\r
550 // Content: (annotation?, (restriction | list | union))
\r
552 internal static XmlSchemaSimpleType Read(XmlSchemaReader reader, ValidationEventHandler h)
\r
554 XmlSchemaSimpleType stype = new XmlSchemaSimpleType();
\r
555 reader.MoveToElement();
\r
557 if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)
\r
559 error(h,"Should not happen :1: XmlSchemaGroup.Read, name="+reader.Name,null);
\r
564 stype.LineNumber = reader.LineNumber;
\r
565 stype.LinePosition = reader.LinePosition;
\r
566 stype.SourceUri = reader.BaseURI;
\r
568 while(reader.MoveToNextAttribute())
\r
570 if(reader.Name == "final")
\r
573 stype.Final = XmlSchemaUtil.ReadDerivationAttribute(reader, out innerex, "final",
\r
574 XmlSchemaUtil.FinalAllowed);
\r
575 if(innerex != null)
\r
576 error(h, "some invalid values not a valid value for final", innerex);
\r
578 else if(reader.Name == "id")
\r
580 stype.Id = reader.Value;
\r
582 else if(reader.Name == "name")
\r
584 stype.Name = reader.Value;
\r
586 else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)
\r
588 error(h,reader.Name + " is not a valid attribute for simpleType",null);
\r
592 XmlSchemaUtil.ReadUnhandledAttribute(reader,stype);
\r
596 reader.MoveToElement();
\r
597 if(reader.IsEmptyElement)
\r
600 // Content: (annotation?, (restriction | list | union))
\r
602 while(reader.ReadNextElement())
\r
604 if(reader.NodeType == XmlNodeType.EndElement)
\r
606 if(reader.LocalName != xmlname)
\r
607 error(h,"Should not happen :2: XmlSchemaSimpleType.Read, name="+reader.Name,null);
\r
610 if(level <= 1 && reader.LocalName == "annotation")
\r
612 level = 2; //Only one annotation
\r
613 XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);
\r
614 if(annotation != null)
\r
615 stype.Annotation = annotation;
\r
620 if(reader.LocalName == "restriction")
\r
623 XmlSchemaSimpleTypeRestriction restriction = XmlSchemaSimpleTypeRestriction.Read(reader,h);
\r
624 if(restriction != null)
\r
625 stype.content = restriction;
\r
628 if(reader.LocalName == "list")
\r
631 XmlSchemaSimpleTypeList list = XmlSchemaSimpleTypeList.Read(reader,h);
\r
633 stype.content = list;
\r
636 if(reader.LocalName == "union")
\r
639 XmlSchemaSimpleTypeUnion union = XmlSchemaSimpleTypeUnion.Read(reader,h);
\r
641 stype.content = union;
\r
645 reader.RaiseInvalidElementError();
\r