2 // System.Xml.Schema.XmlSchemaDatatype.cs
\r
5 // Dwivedi, Ajay kumar <Adwiv@Yahoo.com>
\r
6 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
\r
9 using System.Collections;
\r
12 using Mono.Xml.Schema;
\r
14 namespace System.Xml.Schema
\r
16 public abstract class XmlSchemaDatatype
\r
18 protected XmlSchemaDatatype()
\r
22 internal XsdWhitespaceFacet WhitespaceValue =
\r
23 XsdWhitespaceFacet.Preserve;
\r
26 internal virtual XsdWhitespaceFacet Whitespace {
\r
27 get { return WhitespaceValue; }
\r
30 public abstract XmlTokenizedType TokenizedType { get; }
\r
31 public abstract Type ValueType { get; }
\r
34 public abstract object ParseValue (string s,
\r
35 XmlNameTable nameTable, XmlNamespaceManager nsmgr);
\r
37 internal abstract ValueType ParseValueType (string s,
\r
38 XmlNameTable nameTable, XmlNamespaceManager nsmgr);
\r
40 static char [] wsChars = new char [] {' ', '\t', '\n', '\r'};
\r
42 StringBuilder sb = new StringBuilder ();
\r
43 internal string Normalize (string s)
\r
45 return Normalize (s, Whitespace);
\r
48 internal string Normalize (string s, XsdWhitespaceFacet whitespaceFacet)
\r
50 int idx = s.IndexOfAny (wsChars);
\r
53 switch (whitespaceFacet) {
\r
54 case XsdWhitespaceFacet.Collapse:
\r
55 string [] arr = s.Trim ().Split (wsChars);
\r
56 for (int i = 0; i < arr.Length; i++) {
\r
57 string one = arr [i];
\r
63 string result = sb.ToString ();
\r
65 return result.Trim ();
\r
66 case XsdWhitespaceFacet.Replace:
\r
69 for (int i = 0; i < sb.Length; i++)
\r
77 result = sb.ToString ();
\r
85 internal static XmlSchemaDatatype FromName (XmlQualifiedName qname)
\r
87 if (qname.Namespace != XmlSchema.Namespace)
\r
88 throw new InvalidOperationException ("Namespace " + XmlSchema.Namespace + " is required.");
\r
89 return FromName (qname.Name);
\r
92 internal static XmlSchemaDatatype FromName (string localName)
\r
94 switch (localName) {
\r
95 case "anySimpleType":
\r
96 return datatypeAnySimpleType;
\r
98 return datatypeString;
\r
99 case "normalizedString":
\r
100 return datatypeNormalizedString;
\r
102 return datatypeToken;
\r
104 return datatypeLanguage;
\r
106 return datatypeNMToken;
\r
108 return datatypeNMTokens;
\r
110 return datatypeName;
\r
112 return datatypeNCName;
\r
116 return datatypeIDRef;
\r
118 return datatypeIDRefs;
\r
120 return datatypeEntity;
\r
122 return datatypeEntities;
\r
124 return datatypeNotation;
\r
126 return datatypeDecimal;
\r
128 return datatypeInteger;
\r
130 return datatypeLong;
\r
132 return datatypeInt;
\r
134 return datatypeShort;
\r
136 return datatypeByte;
\r
137 case "nonPositiveInteger":
\r
138 return datatypeNonPositiveInteger;
\r
139 case "negativeInteger":
\r
140 return datatypeNegativeInteger;
\r
141 case "nonNegativeInteger":
\r
142 return datatypeNonNegativeInteger;
\r
143 case "unsignedLong":
\r
144 return datatypeUnsignedLong;
\r
145 case "unsignedInt":
\r
146 return datatypeUnsignedInt;
\r
147 case "unsignedShort":
\r
148 return datatypeUnsignedShort;
\r
149 case "unsignedByte":
\r
150 return datatypeUnsignedByte;
\r
151 case "positiveInteger":
\r
152 return datatypePositiveInteger;
\r
154 return datatypeFloat;
\r
156 return datatypeDouble;
\r
157 case "base64Binary":
\r
158 return datatypeBase64Binary;
\r
160 return datatypeBoolean;
\r
162 return datatypeAnyURI;
\r
164 return datatypeDuration;
\r
166 return datatypeDateTime;
\r
168 return datatypeDate;
\r
170 return datatypeTime;
\r
172 return datatypeHexBinary;
\r
174 return datatypeQName;
\r
176 return datatypeGYearMonth;
\r
178 return datatypeGMonthDay;
\r
180 return datatypeGYear;
\r
182 return datatypeGMonth;
\r
184 return datatypeGDay;
\r
186 // Maybe invalid name was specified. In such cases, let processors handle them.
\r
191 static readonly XsdAnySimpleType datatypeAnySimpleType = new XsdAnySimpleType ();
\r
192 static readonly XsdString datatypeString = new XsdString ();
\r
193 static readonly XsdNormalizedString datatypeNormalizedString = new XsdNormalizedString ();
\r
194 static readonly XsdToken datatypeToken = new XsdToken ();
\r
195 static readonly XsdLanguage datatypeLanguage = new XsdLanguage ();
\r
196 static readonly XsdNMToken datatypeNMToken = new XsdNMToken ();
\r
197 static readonly XsdNMTokens datatypeNMTokens = new XsdNMTokens ();
\r
198 static readonly XsdName datatypeName = new XsdName ();
\r
199 static readonly XsdNCName datatypeNCName = new XsdNCName ();
\r
200 static readonly XsdID datatypeID = new XsdID ();
\r
201 static readonly XsdIDRef datatypeIDRef = new XsdIDRef ();
\r
202 static readonly XsdIDRefs datatypeIDRefs = new XsdIDRefs ();
\r
203 static readonly XsdEntity datatypeEntity = new XsdEntity ();
\r
204 static readonly XsdEntities datatypeEntities = new XsdEntities ();
\r
205 static readonly XsdNotation datatypeNotation = new XsdNotation ();
\r
206 static readonly XsdDecimal datatypeDecimal = new XsdDecimal ();
\r
207 static readonly XsdInteger datatypeInteger = new XsdInteger ();
\r
208 static readonly XsdLong datatypeLong = new XsdLong ();
\r
209 static readonly XsdInt datatypeInt = new XsdInt ();
\r
210 static readonly XsdShort datatypeShort = new XsdShort ();
\r
211 static readonly XsdByte datatypeByte = new XsdByte ();
\r
212 static readonly XsdNonNegativeInteger datatypeNonNegativeInteger = new XsdNonNegativeInteger ();
\r
213 static readonly XsdPositiveInteger datatypePositiveInteger = new XsdPositiveInteger ();
\r
214 static readonly XsdUnsignedLong datatypeUnsignedLong = new XsdUnsignedLong ();
\r
215 static readonly XsdUnsignedInt datatypeUnsignedInt = new XsdUnsignedInt ();
\r
216 static readonly XsdUnsignedShort datatypeUnsignedShort = new XsdUnsignedShort ();
\r
217 static readonly XsdUnsignedByte datatypeUnsignedByte = new XsdUnsignedByte ();
\r
218 static readonly XsdNonPositiveInteger datatypeNonPositiveInteger = new XsdNonPositiveInteger ();
\r
219 static readonly XsdNegativeInteger datatypeNegativeInteger = new XsdNegativeInteger ();
\r
220 static readonly XsdFloat datatypeFloat = new XsdFloat ();
\r
221 static readonly XsdDouble datatypeDouble = new XsdDouble ();
\r
222 static readonly XsdBase64Binary datatypeBase64Binary = new XsdBase64Binary ();
\r
223 static readonly XsdBoolean datatypeBoolean = new XsdBoolean ();
\r
224 static readonly XsdAnyURI datatypeAnyURI = new XsdAnyURI ();
\r
225 static readonly XsdDuration datatypeDuration = new XsdDuration ();
\r
226 static readonly XsdDateTime datatypeDateTime = new XsdDateTime ();
\r
227 static readonly XsdDate datatypeDate = new XsdDate ();
\r
228 static readonly XsdTime datatypeTime = new XsdTime ();
\r
229 static readonly XsdHexBinary datatypeHexBinary = new XsdHexBinary ();
\r
230 static readonly XsdQName datatypeQName = new XsdQName ();
\r
231 static readonly XsdGYearMonth datatypeGYearMonth = new XsdGYearMonth ();
\r
232 static readonly XsdGMonthDay datatypeGMonthDay = new XsdGMonthDay ();
\r
233 static readonly XsdGYear datatypeGYear = new XsdGYear ();
\r
234 static readonly XsdGMonth datatypeGMonth = new XsdGMonth ();
\r
235 static readonly XsdGDay datatypeGDay = new XsdGDay ();
\r