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 public 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 char [] wsChars = new char [] {' ', '\t', '\n', '\r'};
\r
39 protected string Normalize (string s)
\r
41 switch (Whitespace) {
\r
42 case XsdWhitespaceFacet.Collapse:
\r
43 return String.Join (" ", s.Trim ().Split (wsChars));
\r
44 case XsdWhitespaceFacet.Replace:
\r
45 StringBuilder sb = new StringBuilder (s);
\r
46 sb.Replace ('\r', ' ');
\r
47 sb.Replace ('\n', ' ');
\r
48 sb.Replace ('\t', ' ');
\r
49 string result = sb.ToString ();
\r
57 //TODO: This should return all appropriate inbuilt type
\r
58 internal static XmlSchemaDatatype FromName (XmlQualifiedName qname)
\r
60 if (qname.Namespace != XmlSchema.Namespace)
\r
61 throw new InvalidOperationException ("Namespace " + XmlSchema.Namespace + " is required.");
\r
62 return FromName (qname.Name);
\r
65 //TODO: This should return all appropriate inbuilt type
\r
66 internal static XmlSchemaDatatype FromName (string localName)
\r
68 switch (localName) {
\r
70 return datatypeString;
\r
71 case "normalizedString":
\r
72 return datatypeNormalizedString;
\r
74 return datatypeToken;
\r
76 return datatypeLanguage;
\r
78 return datatypeNMToken;
\r
80 return datatypeNMTokens;
\r
82 return datatypeName;
\r
84 return datatypeNCName;
\r
88 return datatypeIDRef;
\r
90 return datatypeIDRefs;
\r
92 return datatypeEntity;
\r
94 return datatypeEntities;
\r
96 return datatypeNotation;
\r
98 return datatypeDecimal;
\r
100 return datatypeInteger;
\r
102 return datatypeLong;
\r
104 return datatypeInt;
\r
106 return datatypeShort;
\r
108 return datatypeByte;
\r
109 case "nonPositiveInteger":
\r
110 return datatypeNonPositiveInteger;
\r
111 case "negativeInteger":
\r
112 return datatypeNegativeInteger;
\r
113 case "nonNegativeInteger":
\r
114 return datatypeNonNegativeInteger;
\r
115 case "unsignedLong":
\r
116 return datatypeUnsignedLong;
\r
117 case "unsignedInt":
\r
118 return datatypeUnsignedInt;
\r
119 case "unsignedShort":
\r
120 return datatypeUnsignedShort;
\r
121 case "unsignedByte":
\r
122 return datatypeUnsignedByte;
\r
123 case "positiveInteger":
\r
124 return datatypePositiveInteger;
\r
126 throw new NotImplementedException ("Unknown type: " + localName);
\r
130 private static XsdString datatypeString = new XsdString ();
\r
131 private static XsdNormalizedString datatypeNormalizedString = new XsdNormalizedString ();
\r
132 private static XsdToken datatypeToken = new XsdToken ();
\r
133 private static XsdLanguage datatypeLanguage = new XsdLanguage ();
\r
134 private static XsdNMToken datatypeNMToken = new XsdNMToken ();
\r
135 private static XsdNMTokens datatypeNMTokens = new XsdNMTokens ();
\r
136 private static XsdName datatypeName = new XsdName ();
\r
137 private static XsdNCName datatypeNCName = new XsdNCName ();
\r
138 private static XsdID datatypeID = new XsdID ();
\r
139 private static XsdIDRef datatypeIDRef = new XsdIDRef ();
\r
140 private static XsdIDRefs datatypeIDRefs = new XsdIDRefs ();
\r
141 private static XsdEntity datatypeEntity = new XsdEntity ();
\r
142 private static XsdEntities datatypeEntities = new XsdEntities ();
\r
143 private static XsdNotation datatypeNotation = new XsdNotation ();
\r
144 private static XsdDecimal datatypeDecimal = new XsdDecimal ();
\r
145 private static XsdInteger datatypeInteger = new XsdInteger ();
\r
146 private static XsdLong datatypeLong = new XsdLong ();
\r
147 private static XsdInt datatypeInt = new XsdInt ();
\r
148 private static XsdShort datatypeShort = new XsdShort ();
\r
149 private static XsdByte datatypeByte = new XsdByte ();
\r
150 private static XsdNonNegativeInteger datatypeNonNegativeInteger = new XsdNonNegativeInteger ();
\r
151 private static XsdPositiveInteger datatypePositiveInteger = new XsdPositiveInteger ();
\r
152 private static XsdUnsignedLong datatypeUnsignedLong = new XsdUnsignedLong ();
\r
153 private static XsdUnsignedInt datatypeUnsignedInt = new XsdUnsignedInt ();
\r
154 private static XsdUnsignedShort datatypeUnsignedShort = new XsdUnsignedShort ();
\r
155 private static XsdUnsignedByte datatypeUnsignedByte = new XsdUnsignedByte ();
\r
156 private static XsdNonPositiveInteger datatypeNonPositiveInteger = new XsdNonPositiveInteger ();
\r
157 private static XsdNegativeInteger datatypeNegativeInteger = new XsdNegativeInteger ();
\r