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 private static XsdAnySimpleType datatypeAnySimpleType = new XsdAnySimpleType ();
\r
192 private static XsdString datatypeString = new XsdString ();
\r
193 private static XsdNormalizedString datatypeNormalizedString = new XsdNormalizedString ();
\r
194 private static XsdToken datatypeToken = new XsdToken ();
\r
195 private static XsdLanguage datatypeLanguage = new XsdLanguage ();
\r
196 private static XsdNMToken datatypeNMToken = new XsdNMToken ();
\r
197 private static XsdNMTokens datatypeNMTokens = new XsdNMTokens ();
\r
198 private static XsdName datatypeName = new XsdName ();
\r
199 private static XsdNCName datatypeNCName = new XsdNCName ();
\r
200 private static XsdID datatypeID = new XsdID ();
\r
201 private static XsdIDRef datatypeIDRef = new XsdIDRef ();
\r
202 private static XsdIDRefs datatypeIDRefs = new XsdIDRefs ();
\r
203 private static XsdEntity datatypeEntity = new XsdEntity ();
\r
204 private static XsdEntities datatypeEntities = new XsdEntities ();
\r
205 private static XsdNotation datatypeNotation = new XsdNotation ();
\r
206 private static XsdDecimal datatypeDecimal = new XsdDecimal ();
\r
207 private static XsdInteger datatypeInteger = new XsdInteger ();
\r
208 private static XsdLong datatypeLong = new XsdLong ();
\r
209 private static XsdInt datatypeInt = new XsdInt ();
\r
210 private static XsdShort datatypeShort = new XsdShort ();
\r
211 private static XsdByte datatypeByte = new XsdByte ();
\r
212 private static XsdNonNegativeInteger datatypeNonNegativeInteger = new XsdNonNegativeInteger ();
\r
213 private static XsdPositiveInteger datatypePositiveInteger = new XsdPositiveInteger ();
\r
214 private static XsdUnsignedLong datatypeUnsignedLong = new XsdUnsignedLong ();
\r
215 private static XsdUnsignedInt datatypeUnsignedInt = new XsdUnsignedInt ();
\r
216 private static XsdUnsignedShort datatypeUnsignedShort = new XsdUnsignedShort ();
\r
217 private static XsdUnsignedByte datatypeUnsignedByte = new XsdUnsignedByte ();
\r
218 private static XsdNonPositiveInteger datatypeNonPositiveInteger = new XsdNonPositiveInteger ();
\r
219 private static XsdNegativeInteger datatypeNegativeInteger = new XsdNegativeInteger ();
\r
220 private static XsdFloat datatypeFloat = new XsdFloat ();
\r
221 private static XsdDouble datatypeDouble = new XsdDouble ();
\r
222 private static XsdBase64Binary datatypeBase64Binary = new XsdBase64Binary ();
\r
223 private static XsdBoolean datatypeBoolean = new XsdBoolean ();
\r
224 private static XsdAnyURI datatypeAnyURI = new XsdAnyURI ();
\r
225 private static XsdDuration datatypeDuration = new XsdDuration ();
\r
226 private static XsdDateTime datatypeDateTime = new XsdDateTime ();
\r
227 private static XsdDate datatypeDate = new XsdDate ();
\r
228 private static XsdTime datatypeTime = new XsdTime ();
\r
229 private static XsdHexBinary datatypeHexBinary = new XsdHexBinary ();
\r
230 private static XsdQName datatypeQName = new XsdQName ();
\r
231 private static XsdGYearMonth datatypeGYearMonth = new XsdGYearMonth ();
\r
232 private static XsdGMonthDay datatypeGMonthDay = new XsdGMonthDay ();
\r
233 private static XsdGYear datatypeGYear = new XsdGYear ();
\r
234 private static XsdGMonth datatypeGMonth = new XsdGMonth ();
\r
235 private static XsdGDay datatypeGDay = new XsdGDay ();
\r