Strings and numbers can be created using literals. Values of other types are usually created using constructor functions, each of which has the same name as the type that they're used to create.
Examples:
xs:time( '18:00:00' )
xs:QName('xs:string' )
xs:QName( concat( 'xs', ':', 'string' ) )
casting between types
Two ways to cast
1. use constructor function - always accept empty sequence
2. use cast expression -
value cast as type
with question mark, empty sequence is acceptable:
@rating cast as xs:decimal?
without question mark, NO empty sequence
@rating cast as xs:decimal
Testing castability
Not all the types can be cast freely
xs:string and xdt:untypedAtomc can be cast freely
casting from subtype to supertype should always be success