2 // System.Xml.Schema.XmlSchemaDatatype.cs
\r
7 // (C)2003 Atsushi Enomoto
\r
10 using System.Collections;
\r
13 using System.Xml.Schema;
\r
15 namespace Mono.Xml.Schema
\r
17 public enum XsdWhitespaceFacet
\r
24 public enum XsdOrderedFacet
\r
31 public abstract class XsdAnySimpleType : XmlSchemaDatatype
\r
33 // Fundamental Facets
\r
34 public abstract bool Bounded { get; }
\r
36 public abstract bool Finite { get; }
\r
38 public abstract bool Numeric { get; }
\r
40 public abstract XsdOrderedFacet Ordered { get; }
\r
45 public class XsdString : XsdAnySimpleType
\r
47 internal XsdString ()
\r
51 public override XmlTokenizedType TokenizedType {
\r
52 get { return XmlTokenizedType.CDATA; }
\r
55 public override Type ValueType {
\r
56 get { return typeof (string); }
\r
59 public override object ParseValue (string s,
\r
60 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
62 return Normalize (s);
\r
65 // Fundamental Facets
\r
66 public override bool Bounded {
\r
67 get { return false; }
\r
69 public override bool Finite {
\r
70 get { return false; }
\r
72 public override bool Numeric {
\r
73 get { return false; }
\r
75 public override XsdOrderedFacet Ordered {
\r
76 get { return XsdOrderedFacet.False; }
\r
79 // Constraining Facets
\r
80 public bool HasLengthFacet;
\r
81 public bool HasMaxLengthFacet;
\r
82 public bool HasMinLengthFacet;
\r
84 public int MaxLength;
\r
85 public int MinLength;
\r
86 public string Pattern;
\r
87 public ICollection Enumeration;
\r
90 // xs:normalizedString
\r
91 public class XsdNormalizedString : XsdString
\r
93 internal XsdNormalizedString ()
\r
95 this.WhitespaceValue = XsdWhitespaceFacet.Replace;
\r
98 public override XmlTokenizedType TokenizedType {
\r
100 get { return XmlTokenizedType.CDATA; }
\r
103 public override Type ValueType {
\r
104 get { return typeof (string); }
\r
107 // ParseValue () method is as same as that of xs:string
\r
111 public class XsdToken : XsdNormalizedString
\r
113 internal XsdToken ()
\r
117 public override XmlTokenizedType TokenizedType {
\r
118 get { return XmlTokenizedType.CDATA; }
\r
121 public override Type ValueType {
\r
122 get { return typeof (string); }
\r
125 // ParseValue () method is as same as that of xs:string
\r
129 public class XsdLanguage : XsdToken
\r
131 internal XsdLanguage ()
\r
135 public override XmlTokenizedType TokenizedType {
\r
136 get { return XmlTokenizedType.CDATA; }
\r
139 public override Type ValueType {
\r
140 get { return typeof (string); }
\r
143 // ParseValue () method is as same as that of xs:string
\r
147 public class XsdNMToken : XsdToken
\r
149 internal XsdNMToken ()
\r
153 public override XmlTokenizedType TokenizedType {
\r
154 get { return XmlTokenizedType.NMTOKEN; }
\r
157 public override Type ValueType {
\r
158 get { return typeof (string); }
\r
161 // ParseValue () method is as same as that of xs:string
\r
165 public class XsdNMTokens : XsdNMToken
\r
167 internal XsdNMTokens ()
\r
171 public override XmlTokenizedType TokenizedType {
\r
172 get { return XmlTokenizedType.NMTOKENS; }
\r
175 public override Type ValueType {
\r
176 get { return typeof (string []); }
\r
179 // ParseValue () method is as same as that of xs:string
\r
183 public class XsdName : XsdToken
\r
185 internal XsdName ()
\r
189 public override XmlTokenizedType TokenizedType {
\r
190 get { return XmlTokenizedType.CDATA; }
\r
193 public override Type ValueType {
\r
194 get { return typeof (string); }
\r
197 // ParseValue () method is as same as that of xs:string
\r
201 public class XsdNCName : XsdName
\r
203 internal XsdNCName ()
\r
207 public override XmlTokenizedType TokenizedType {
\r
208 get { return XmlTokenizedType.NCName; }
\r
211 public override Type ValueType {
\r
212 get { return typeof (string); }
\r
215 // ParseValue () method is as same as that of xs:string
\r
219 public class XsdID : XsdName
\r
225 public override XmlTokenizedType TokenizedType {
\r
226 get { return XmlTokenizedType.ID; }
\r
229 public override Type ValueType {
\r
230 get { return typeof (string); }
\r
233 // ParseValue () method is as same as that of xs:string
\r
237 public class XsdIDRef : XsdName
\r
239 internal XsdIDRef ()
\r
243 public override XmlTokenizedType TokenizedType {
\r
244 get { return XmlTokenizedType.IDREF; }
\r
247 public override Type ValueType {
\r
248 get { return typeof (string); }
\r
251 // ParseValue () method is as same as that of xs:string
\r
255 public class XsdIDRefs : XsdName
\r
257 internal XsdIDRefs ()
\r
261 public override XmlTokenizedType TokenizedType {
\r
262 get { return XmlTokenizedType.IDREFS; }
\r
265 public override Type ValueType {
\r
266 get { return typeof (string []); }
\r
269 // ParseValue () method is as same as that of xs:string
\r
273 public class XsdEntity : XsdName
\r
275 internal XsdEntity ()
\r
279 public override XmlTokenizedType TokenizedType {
\r
280 get { return XmlTokenizedType.ENTITY; }
\r
283 public override Type ValueType {
\r
284 get { return typeof (string); }
\r
287 // ParseValue () method is as same as that of xs:string
\r
292 public class XsdEntities : XsdName
\r
294 internal XsdEntities ()
\r
298 public override XmlTokenizedType TokenizedType {
\r
299 get { return XmlTokenizedType.ENTITIES; }
\r
302 public override Type ValueType {
\r
303 get { return typeof (string []); }
\r
306 // ParseValue () method is as same as that of xs:string
\r
310 public class XsdNotation : XsdAnySimpleType
\r
312 internal XsdNotation ()
\r
316 public override XmlTokenizedType TokenizedType {
\r
317 get { return XmlTokenizedType.NOTATION; }
\r
320 public override Type ValueType {
\r
321 get { return typeof (string); }
\r
324 public override object ParseValue (string s,
\r
325 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
327 throw new NotImplementedException ();
\r
330 // Fundamental Facets
\r
331 public override bool Bounded {
\r
332 get { return false; }
\r
334 public override bool Finite {
\r
335 get { return false; }
\r
337 public override bool Numeric {
\r
338 get { return false; }
\r
340 public override XsdOrderedFacet Ordered {
\r
341 get { return XsdOrderedFacet.False; }
\r
344 // Constraining Facets
\r
345 public bool HasLengthFacet;
\r
346 public bool HasMaxLengthFacet;
\r
347 public bool HasMinLengthFacet;
\r
349 public int MaxLength;
\r
350 public int MinLength;
\r
351 public string Pattern;
\r
352 public ICollection Enumeration;
\r
356 public class XsdDecimal : XsdAnySimpleType
\r
358 internal XsdDecimal ()
\r
362 public override XmlTokenizedType TokenizedType {
\r
363 get { return XmlTokenizedType.CDATA; }
\r
366 public override Type ValueType {
\r
367 get { return typeof (decimal); }
\r
370 public override object ParseValue (string s,
\r
371 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
373 return XmlConvert.ToDecimal (this.Normalize (s));
\r
376 // Fundamental Facets
\r
377 public override bool Bounded {
\r
378 get { return false; }
\r
380 public override bool Finite {
\r
381 get { return false; }
\r
383 public override bool Numeric {
\r
384 get { return true; }
\r
386 public override XsdOrderedFacet Ordered {
\r
387 get { return XsdOrderedFacet.Total; }
\r
390 // Constraining Facets
\r
391 public bool HasLengthFacet;
\r
392 public bool HasMaxLengthFacet;
\r
393 public bool HasMinLengthFacet;
\r
395 public int MaxLength;
\r
396 public int MinLength;
\r
397 public string Pattern;
\r
398 public ICollection Enumeration;
\r
402 public class XsdInteger : XsdDecimal
\r
404 // Here it may be bigger than int's (or long's) MaxValue.
\r
405 public override Type ValueType {
\r
406 get { return typeof (decimal); }
\r
409 public override object ParseValue (string s,
\r
410 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
412 return XmlConvert.ToDecimal (Normalize (s));
\r
417 public class XsdLong : XsdNonNegativeInteger
\r
419 public override Type ValueType {
\r
420 get { return typeof (long); }
\r
423 public override object ParseValue (string s,
\r
424 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
426 return XmlConvert.ToInt64 (Normalize (s));
\r
431 public class XsdInt : XsdLong
\r
433 public override Type ValueType {
\r
434 get { return typeof (int); }
\r
437 public override object ParseValue (string s,
\r
438 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
440 return XmlConvert.ToInt32 (Normalize (s));
\r
446 public class XsdShort : XsdInt
\r
448 public override Type ValueType {
\r
449 get { return typeof (short); }
\r
452 public override object ParseValue (string s,
\r
453 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
455 return XmlConvert.ToInt16 (Normalize (s));
\r
460 public class XsdByte : XsdShort
\r
462 public override Type ValueType {
\r
463 get { return typeof (byte); }
\r
466 public override object ParseValue (string s,
\r
467 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
469 return XmlConvert.ToByte (Normalize (s));
\r
473 // xs:nonNegativeInteger
\r
474 [CLSCompliant (false)]
\r
475 public class XsdNonNegativeInteger : XsdInteger
\r
477 public override Type ValueType {
\r
478 get { return typeof (decimal); }
\r
481 [CLSCompliant (false)]
\r
482 public override object ParseValue (string s,
\r
483 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
485 return XmlConvert.ToDecimal (Normalize (s));
\r
490 [CLSCompliant (false)]
\r
491 public class XsdUnsignedLong : XsdNonNegativeInteger
\r
493 public override Type ValueType {
\r
494 get { return typeof (ulong); }
\r
497 public override object ParseValue (string s,
\r
498 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
500 return XmlConvert.ToUInt64 (Normalize (s));
\r
505 [CLSCompliant (false)]
\r
506 public class XsdUnsignedInt : XsdUnsignedLong
\r
508 public override Type ValueType {
\r
509 get { return typeof (uint); }
\r
512 public override object ParseValue (string s,
\r
513 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
515 return XmlConvert.ToUInt32 (Normalize (s));
\r
520 // xs:unsignedShort
\r
521 [CLSCompliant (false)]
\r
522 public class XsdUnsignedShort : XsdUnsignedInt
\r
524 public override Type ValueType {
\r
525 get { return typeof (ushort); }
\r
528 public override object ParseValue (string s,
\r
529 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
531 return XmlConvert.ToUInt16 (Normalize (s));
\r
536 [CLSCompliant (false)]
\r
537 public class XsdUnsignedByte : XsdUnsignedShort
\r
539 public override Type ValueType {
\r
540 get { return typeof (byte); }
\r
543 public override object ParseValue (string s,
\r
544 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
546 return XmlConvert.ToByte(Normalize (s));
\r
550 // xs:positiveInteger
\r
551 public class XsdPositiveInteger : XsdNonNegativeInteger
\r
553 // It returns decimal, instead of int or long.
\r
554 // Maybe MS developers thought about big integer...
\r
555 public override Type ValueType {
\r
556 get { return typeof (decimal); }
\r
559 public override object ParseValue (string s,
\r
560 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
562 return XmlConvert.ToDecimal (Normalize (s));
\r
566 // xs:nonPositiveInteger
\r
567 public class XsdNonPositiveInteger : XsdInteger
\r
569 public override Type ValueType {
\r
570 get { return typeof (decimal); }
\r
573 public override object ParseValue (string s,
\r
574 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
576 return XmlConvert.ToDecimal (Normalize (s));
\r
580 // xs:negativeInteger
\r
581 public class XsdNegativeInteger : XsdNonPositiveInteger
\r
583 public override Type ValueType {
\r
584 get { return typeof (decimal); }
\r
587 public override object ParseValue (string s,
\r
588 XmlNameTable nameTable, XmlNamespaceManager nsmgr)
\r
590 return XmlConvert.ToDecimal (Normalize (s));
\r