The Built-in Types

A wide array of atomic types is built into XQuery. These simple types, shown in Figure 11-1, represent common datatypes such as strings, numbers, dates, and times. The built-in types are identified by qualified names that are prefixed with xs, because they are defined in the XML Schema Namespace. You can use all of these built-in types in your queries whether or not the implementation is actually schema-aware, and whether or not you are using schemas to validate your source or result documents.

The atomic type hierarchy

Figure 11-1. The atomic type hierarchy

Nineteen of the built-in types are primitive, meaning that they are the top level of the type hierarchy. Each primitive type has a value space, which describes all its valid values, and a set of lexical representations for each value in the value space. There is one lexical representation, the canonical representation, that maps one-to-one with each value in the value space. The canonical representation is important because it is the format used when a value is serialized or cast as a string.[*]

For example, the primitive type xs:integer has a value that is equal to 12 in its value space. This value has multiple lexical representations that map to the same value, such as 12, +12, and 012. The canonical representation is 12. Some primitive types, such as xs:date, only have one lexical representation, which becomes, by default, the canonical representation.

The rest of the built-in types are derived (directly or indirectly) from one of the primitive types. The derived built-in types (and indeed, user-defined types) inherit the qualities of the primitive type from which they are derived, including their value space (possibly restricted), lexical representations, and canonical representations. Their values can also be substituted for each other. For example, the insert-before function expects a value of type xs:integer for its second argument. Nevertheless, it accepts a value of any type derived from xs:integer, such as xs:positiveInteger or xs:long.

At the top of the built-in atomic type hierarchy is xs:anyAtomicType. This type encompasses all of the other atomic types. No values ever actually have the type xs:anyAtomicType; they always have a more specific type. However, this type name can be used as a placeholder for all other atomic types. For example, the distinct-values function signature specifies that its argument is xs:anyAtomicType. This means that atomic values of any type can be passed to this function.

All of the built-in types are covered in detail in Appendix B, with a description, lexical representations, and examples. In practice, you are likely to need only a handful of these built-in types.



[*] There are three exceptions: xs:decimal, xs:float, and xs:double values, when cast to xs:string, may differ slightly from the canonical representation defined in XML Schema. See Appendix B for details.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.138.117.75