2 // System.Xml.Schema.XmlSchemaDatatype.cs
5 // Dwivedi, Ajay kumar <Adwiv@Yahoo.com>
6 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
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
.Collections
;
33 using Mono
.Xml
.Schema
;
35 namespace System
.Xml
.Schema
37 public abstract class XmlSchemaDatatype
39 protected XmlSchemaDatatype()
43 internal XsdWhitespaceFacet WhitespaceValue
=
44 XsdWhitespaceFacet
.Preserve
;
47 internal virtual XsdWhitespaceFacet Whitespace
{
48 get { return WhitespaceValue; }
52 public abstract XmlTypeCode TypeCode { get; }
54 public virtual XmlSchemaDatatypeVariety Variety
{
56 return XmlSchemaDatatypeVariety
.Atomic
;
61 public abstract XmlTokenizedType TokenizedType { get; }
62 public abstract Type ValueType { get; }
67 public virtual object ChangeType (object value, Type targetType
)
69 return ChangeType (value, targetType
, null);
73 public virtual object ChangeType (object value, Type targetType
, IXmlNamespaceResolver nsResolver
)
75 throw new NotImplementedException ();
79 public virtual bool IsDerivedFrom (XmlSchemaDatatype datatype
)
81 throw new NotImplementedException ();
86 public abstract object ParseValue (string s
,
87 XmlNameTable nameTable
, IXmlNamespaceResolver nsmgr
);
89 internal abstract ValueType
ParseValueType (string s
,
90 XmlNameTable nameTable
, IXmlNamespaceResolver nsmgr
);
92 public abstract object ParseValue (string s
,
93 XmlNameTable nameTable
, XmlNamespaceManager nsmgr
);
95 internal abstract ValueType
ParseValueType (string s
,
96 XmlNameTable nameTable
, XmlNamespaceManager nsmgr
);
99 static char [] wsChars
= new char [] {' ', '\t', '\n', '\r'}
;
101 StringBuilder sb
= new StringBuilder ();
102 internal string Normalize (string s
)
104 return Normalize (s
, Whitespace
);
107 internal string Normalize (string s
, XsdWhitespaceFacet whitespaceFacet
)
109 int idx
= s
.IndexOfAny (wsChars
);
112 switch (whitespaceFacet
) {
113 case XsdWhitespaceFacet
.Collapse
:
114 string [] arr
= s
.Trim ().Split (wsChars
);
115 for (int i
= 0; i
< arr
.Length
; i
++) {
116 string one
= arr
[i
];
122 string result
= sb
.ToString ();
124 return result
.Trim ();
125 case XsdWhitespaceFacet
.Replace
:
128 for (int i
= 0; i
< sb
.Length
; i
++)
136 result
= sb
.ToString ();
144 internal static XmlSchemaDatatype
FromName (XmlQualifiedName qname
)
146 return FromName (qname
.Name
, qname
.Namespace
);
149 internal static XmlSchemaDatatype
FromName (string localName
, string ns
)
152 case XmlSchema
.Namespace
:
155 case XmlSchema
.XdtNamespace
:
157 case "anyAtomicType":
158 return datatypeAnyAtomicType
;
159 case "untypedAtomic":
160 return datatypeUntypedAtomic
;
161 case "dayTimeDuration":
162 return datatypeDayTimeDuration
;
163 case "yearMonthDuration":
164 return datatypeYearMonthDuration
;
169 // Maybe invalid name was specified. In such cases, let processors handle them.
174 case "anySimpleType":
175 return datatypeAnySimpleType
;
177 return datatypeString
;
178 case "normalizedString":
179 return datatypeNormalizedString
;
181 return datatypeToken
;
183 return datatypeLanguage
;
185 return datatypeNMToken
;
187 return datatypeNMTokens
;
191 return datatypeNCName
;
195 return datatypeIDRef
;
197 return datatypeIDRefs
;
199 return datatypeEntity
;
201 return datatypeEntities
;
203 return datatypeNotation
;
205 return datatypeDecimal
;
207 return datatypeInteger
;
213 return datatypeShort
;
216 case "nonPositiveInteger":
217 return datatypeNonPositiveInteger
;
218 case "negativeInteger":
219 return datatypeNegativeInteger
;
220 case "nonNegativeInteger":
221 return datatypeNonNegativeInteger
;
223 return datatypeUnsignedLong
;
225 return datatypeUnsignedInt
;
226 case "unsignedShort":
227 return datatypeUnsignedShort
;
229 return datatypeUnsignedByte
;
230 case "positiveInteger":
231 return datatypePositiveInteger
;
233 return datatypeFloat
;
235 return datatypeDouble
;
237 return datatypeBase64Binary
;
239 return datatypeBoolean
;
241 return datatypeAnyURI
;
243 return datatypeDuration
;
245 return datatypeDateTime
;
251 return datatypeHexBinary
;
253 return datatypeQName
;
255 return datatypeGYearMonth
;
257 return datatypeGMonthDay
;
259 return datatypeGYear
;
261 return datatypeGMonth
;
265 // Maybe invalid name was specified. In such cases, let processors handle them.
270 static readonly XsdAnySimpleType datatypeAnySimpleType
= new XsdAnySimpleType ();
271 static readonly XsdString datatypeString
= new XsdString ();
272 static readonly XsdNormalizedString datatypeNormalizedString
= new XsdNormalizedString ();
273 static readonly XsdToken datatypeToken
= new XsdToken ();
274 static readonly XsdLanguage datatypeLanguage
= new XsdLanguage ();
275 static readonly XsdNMToken datatypeNMToken
= new XsdNMToken ();
276 static readonly XsdNMTokens datatypeNMTokens
= new XsdNMTokens ();
277 static readonly XsdName datatypeName
= new XsdName ();
278 static readonly XsdNCName datatypeNCName
= new XsdNCName ();
279 static readonly XsdID datatypeID
= new XsdID ();
280 static readonly XsdIDRef datatypeIDRef
= new XsdIDRef ();
281 static readonly XsdIDRefs datatypeIDRefs
= new XsdIDRefs ();
282 static readonly XsdEntity datatypeEntity
= new XsdEntity ();
283 static readonly XsdEntities datatypeEntities
= new XsdEntities ();
284 static readonly XsdNotation datatypeNotation
= new XsdNotation ();
285 static readonly XsdDecimal datatypeDecimal
= new XsdDecimal ();
286 static readonly XsdInteger datatypeInteger
= new XsdInteger ();
287 static readonly XsdLong datatypeLong
= new XsdLong ();
288 static readonly XsdInt datatypeInt
= new XsdInt ();
289 static readonly XsdShort datatypeShort
= new XsdShort ();
290 static readonly XsdByte datatypeByte
= new XsdByte ();
291 static readonly XsdNonNegativeInteger datatypeNonNegativeInteger
= new XsdNonNegativeInteger ();
292 static readonly XsdPositiveInteger datatypePositiveInteger
= new XsdPositiveInteger ();
293 static readonly XsdUnsignedLong datatypeUnsignedLong
= new XsdUnsignedLong ();
294 static readonly XsdUnsignedInt datatypeUnsignedInt
= new XsdUnsignedInt ();
295 static readonly XsdUnsignedShort datatypeUnsignedShort
= new XsdUnsignedShort ();
296 static readonly XsdUnsignedByte datatypeUnsignedByte
= new XsdUnsignedByte ();
297 static readonly XsdNonPositiveInteger datatypeNonPositiveInteger
= new XsdNonPositiveInteger ();
298 static readonly XsdNegativeInteger datatypeNegativeInteger
= new XsdNegativeInteger ();
299 static readonly XsdFloat datatypeFloat
= new XsdFloat ();
300 static readonly XsdDouble datatypeDouble
= new XsdDouble ();
301 static readonly XsdBase64Binary datatypeBase64Binary
= new XsdBase64Binary ();
302 static readonly XsdBoolean datatypeBoolean
= new XsdBoolean ();
303 static readonly XsdAnyURI datatypeAnyURI
= new XsdAnyURI ();
304 static readonly XsdDuration datatypeDuration
= new XsdDuration ();
305 static readonly XsdDateTime datatypeDateTime
= new XsdDateTime ();
306 static readonly XsdDate datatypeDate
= new XsdDate ();
307 static readonly XsdTime datatypeTime
= new XsdTime ();
308 static readonly XsdHexBinary datatypeHexBinary
= new XsdHexBinary ();
309 static readonly XsdQName datatypeQName
= new XsdQName ();
310 static readonly XsdGYearMonth datatypeGYearMonth
= new XsdGYearMonth ();
311 static readonly XsdGMonthDay datatypeGMonthDay
= new XsdGMonthDay ();
312 static readonly XsdGYear datatypeGYear
= new XsdGYear ();
313 static readonly XsdGMonth datatypeGMonth
= new XsdGMonth ();
314 static readonly XsdGDay datatypeGDay
= new XsdGDay ();
316 static readonly XdtAnyAtomicType datatypeAnyAtomicType
317 = new XdtAnyAtomicType ();
318 static readonly XdtUntypedAtomic datatypeUntypedAtomic
319 = new XdtUntypedAtomic ();
320 static readonly XdtDayTimeDuration datatypeDayTimeDuration
321 = new XdtDayTimeDuration ();
322 static readonly XdtYearMonthDuration datatypeYearMonthDuration
323 = new XdtYearMonthDuration ();