In addition to the string and other primitive types defined by the XML 1.0 recommendation, the Microsoft XML processor supports a rich set of additional data types. This release also supports conversions between the primitive types and these rich data types.
Data types are referenced from the data type namespace, "urn:schemas-microsoft-com:datatypes". To use data types within an XML Schema, declare the data type namespace within the schema document. This documentation assumes that the data type namespace has been assigned the "dt" prefix. For example,
<Schema name="myschema"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<!-- ... -->
</Schema>
In Internet Explorer 5.01, you can use data types as elements in an XML document (though it is not possible to type such elements through schema). So rather than declaring a data type on the instance using the dt:dt attribute, or in the schema using the dt:type attribute or <datatype> element, you can use a data type declared as an element. The following example illustrates using the dt:dt attribute:
<shoes xmlns:dt="urn:schemas-microsoft-com:datatypes" id="f1121" sizes="mens"/>
<sizes id="mens">
<size dt:dt="int">8</size>
<size dt:dt="int">10</size>
<size dt:dt="int">12</size>
</sizes>
</shoes>
The next example is the same as the above XML, but the data types are declared as elements:
<shoes xmlns:dt="urn:schemas-microsoft-com:datatypes" id="f1121" sizes="mens"/>
<sizes id="mens">
<dt:int>8</dt:int>
<dt:int>10</dt:int>
<dt:int>12</dt:int>
</sizes>
</shoes>
The datatypeproperty on data type elements is read-only and returns the data type of the element. Use the nodeTypedValue property to return the typed value of the element. Getting the nodeTypedValue of an element that has no data type returns the string value of the element.
The contents of data type elements are validated against the type of the element. If a data type isn't supported by the parser it is disregarded, and no error occurs. A data type element cannot have child elements.
bin.base64 | MIME-style Base64 encoded binary BLOB. |
bin.hex | Hexadecimal digits representing octets. |
boolean | 0 or 1, where 0 == "false" and 1 =="true". |
char | String, one character long. |
date | Date in a subset ISO 8601 format, without the time data. For example: "1994-11-05". The date itself is not validated (for example, 2-31-99 will pass validation). |
dateTime | Date in a subset of ISO 8601 format, with optional time and no optional zone. Fractional seconds can be as precise as nanoseconds. For example, "1988-04-07T18:39:09". |
dateTime.tz | Date in a subset ISO 8601 format, with optional time and optional zone. Fractional seconds can be as precise as nanoseconds. For example: "1988-04-07T18:39:09-08:00". |
fixed.14.4 | Same as "number" but no more than 14 digits to the left of the decimal point, and no more than 4 to the right. |
float | Real number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 1.7976931348623157E+308 to 2.2250738585072014E-308. |
int | Number, with optional sign, no fractions, and no exponent. |
number | Number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. (Values have same range as most significant number, R8, 1.7976931348623157E+308 to 2.2250738585072014E-308.) |
time | Time in a subset ISO 8601 format, with no date and no time zone. For example: "08:15:27". |
time.tz | Time in a subset ISO 8601 format, with no date but optional time zone. For example: "08:1527-05:00". |
i1 | Integer represented in one byte. A number, with optional sign, no fractions, no exponent. For example: "1, 127, -128". |
i2 | Integer represented in one word. A number, with optional sign, no fractions, no exponent. For example: "1, 703, -32768". |
i4 | Integer represented in four bytes. A number, with optional sign, no fractions, no exponent. For example: "1, 703, -32768, 148343, -1000000000". |
r4 | Real number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 3.40282347E+38F to 1.17549435E-38F. |
r8 | Same as "float." Real number, with no limit on digits; can potentially have a leading sign, fractional digits, and optionally an exponent. Punctuation as in U.S. English. Values range from 1.7976931348623157E+308 to 2.2250738585072014E-308. |
ui1 | Unsigned integer. A number, unsigned, no fractions, no exponent. For example: "1, 255". |
ui2 | Unsigned integer, two bytes. A number, unsigned, no fractions, no exponent. For example: "1, 255, 65535". |
ui4 | Unsigned integer, four bytes. A number, unsigned, no fractions, no exponent. For example: "1, 703, 3000000000". |
uri | Universal Resource Identifier (URI). For example, "urn:schemas-microsoft-com:Office9". |
uuid | Hexadecimal digits representing octets, optional embedded hyphens that are ignored. For example: "333C7BC4-460F-11D0-BC04-0080C7055A83". |
The World Wide Web Consortium (W3C) XML 1.0 Recommendation also defines enumerated types (notations and enumerations) and a set of tokenized types. These types, defined in the W3C XML 1.0 Recommendation, are referred to as "primitive types" within this Microsoft XML documentation.
The primitive types include the following, defined in Section 3.3.1 of the W3C XML 1.0 Recommendation.
entity | Represents the XML ENTITY type. |
entities | Represents the XML ENTITIES type. |
enumeration | Represents an enumerated type (supported on attributes only). |
id | Represents the XML ID type. |
idref | Represents the XML IDREF type. |
idrefs | Represents the XML IDREFS type. |
nmtoken | Represents the XML NMTOKEN type. |
nmtokens | Represents the XML NMTOKENS type. |
notation | Represents a NOTATION type. |
string | Represents a string type. |
The following table lists the data type conversions supported by the Microsoft XML processor in Microsoft® Internet Explorer 5.
Data type | Variant type |
string | VT_BSTR, VT_BOOL, VT_CY, VT_DATE, VT_VARIANT, VT_DECIMAL, VT_UII, VT_I2, VT_I4, VT_R4, VT_R8, VT_EMPTY, VT_NULL, VT_ARRAY |
number | VT_BSTR, VT_BOOL, VT_CY, VT_VARIANT, VT_DECIMAL, VT_UII, VT_I2, VT_I4, VT_R4, VT_R8, VT_EMPTY, VT_NULL |
int | VT_BSTR, VT_BOOL, VT_VARIANT, VT_UII, VT_I2, VT_I4, VT_EMPTY, VT_NULL |
float | VT_BSTR, VT_CY, VT_VARIANT, VT_DECIMAL, VT_UII, VT_I2, VT_I4, VT_R4, VT_R8, VT_EMPTY, VT_NULL |
fixed.14.4 (currency) | VT_BSTR, VT_CY, VT_VARIANT, VT_DECIMAL, VT_UII, VT_I2, VT_I4, VT_R4, VT_EMPTY, VT_NULL |
boolean | VT_BSTR, VT_BOOL, VT_VARIANT, VT_DECIMAL, VT_UII, VT_I2, VT_I4, VT_EMPTY, VT_NULL |
dateTime | VT_BSTR, VT_DATE, VT_VARIANT |
i1 | VT_BSTR, VT_BOOL, VT_VARIANT, VT_DECIMAL, VT_EMPTY, VT_NULL |
i2 | VT_BSTR, VT_BOOL, VT_VARIANT, VT_DECIMAL, VT_I2, VT_EMPTY, VT_NULL |
i4 | VT_BSTR, VT_BOOL, VT_VARIANT, VT_DECIMAL, VT_I2, VT_I4, VT_EMPTY, VT_NULL |
i8 | VT_BSTR, VT_BOOL, VT_CY, VT_VARIANT, VT_DECIMAL, VT_I2, VT_I4 |
ui1 | VT_BSTR, VT_BOOL, VT_VARIANT, VT_DECIMAL, VT_UI1, VT_EMPTY, VT_NULL |
ui2 | VT_BSTR, VT_BOOL, VT_VARIANT, VT_UI1, VT_I2, VT_EMPTY, VT_NULL |
ui4 | VT_BSTR, VT_BOOL, VT_VARIANT, VT_UI1, VT_I2, VT_I4, VT_EMPTY, VT_NULL |
ui8 | VT_BSTR, VT_BOOL, VT_CY, VT_VARIANT, VT_DECIMAL, VT_UI1, VT_I2, VT_I4, VT_EMPTY, VT_NULL |
r4 | VT_BSTR, VT_CY, VT_VARIANT, VT_DECIMAL, VT_I2, VT_I4, VT_R4, VT_EMPTY, VT_NULL |
r8 | VT_BSTR, VT_CY, VT_VARIANT, VT_DECIMAL, VT_I2, VT_I4, VT_R4, VT_R8, VT_EMPTY, VT_NULL |
uuid | VT_BSTR, VT_VARIANT |
uri | VT_BSTR, VT_VARIANT |
bin.hex | VT_BSTR, VT_VARIANT, VT_ARRAY |
char | VT_BSTR, VT_VARIANT, VT_I2, VT_EMPTY, VT_NULL |
See Also