Copyright © 2001 W3C® (MIT, INRIA, Keio), All Rights Reserved. W3C liability, trademark, document use, and software licensing rules apply.
This document defines basic operators and functions on the datatypes defined in [XML Schema Part 2: Datatypes] for use in XQuery, XPath, and other related XML standards. It also discusses operators and functions on nodes and node sequences as defined in the [XQuery 1.0 and XPath 2.0 Data Model] for use in XQuery, XPath, and other related XML standards.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. The latest status of this document series is maintained at the W3C.
This is the first Public Working Draft of this document for review by W3C Members and other interested parties. It is a draft document and may be updated, replaced or made obsolete by other documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress". This is work in progress and does not imply endorsement by the W3C membership.
This document describes constructors, operators, and functions that are used in XQuery 1.0 and XPath 2.0. The document is generally unconcerned with the specific syntax with which these constructors, operators, and functions will be used, and focuses instead on defining the semantics of them as precisely as feasible.
This document has been produced as part of the [XML Activity], following the procedures set out for the W3C Process. This document was produced through the efforts of a joint task force of the W3C XML Query Working Group and the W3C XML Schema Working Group and a second joint task force of the W3C XML Query Working Group and the W3C XSL Working Group. It is designed to be read in conjunction with the following documents: [XQuery 1.0 and XPath 2.0 Data Model], [XQuery 1.0: An XML Query Language] and [XQuery 1.0 Formal Semantics]. A list of current W3C Recommendations and other technical documents can be found at http://www.w3.org/TR/.
Comments on this document should be sent to the W3C mailing list www-xml-query-comments@w3.org (archived at http://lists.w3.org/Archives/Public/www-xml-query-comments/).
1 Introduction
1.1 Syntax
1.2 Notations
1.3 Namespace Prefix
2 Constructors, Functions, and Operators on Numbers
2.1 Numeric Types
2.2 Numeric Literals
2.3 Numeric Constructors
2.3.1 xf:decimal
2.3.2 xf:integer
2.3.3 xf:long
2.3.4 xf:int
2.3.5 xf:short
2.3.6 xf:byte
2.3.7 xf:float
2.3.8 xf:double
2.4 Operators on Numeric Values
2.5 Comparisons of Numeric Values
2.6 Functions on Numeric Values
2.6.1 xf:floor
2.6.2 xf:ceiling
2.6.3 xf:round
3 Constructors, Functions, and Operators on Strings
3.1 String Types
3.2 String Literals
3.3 String Constructors
3.3.1 xf:string
3.3.2 xf:normalizedString
3.3.3 xf:token
3.3.4 xf:language
3.3.5 xf:Name
3.3.6 xf:NMTOKEN
3.3.7 xf:NCName
3.3.8 xf:ID
3.3.9 xf:IDREF
3.3.10 xf:ENTITY
3.4 Equality and Comparison of Strings
3.4.1 xf:codepoint-compare
3.4.2 xf:compare
3.5 Functions on String Values
3.5.1 Usage Notes
3.5.2 xf:concat
3.5.3 xf:starts-with
3.5.4 xf:ends-with
3.5.5 xf:codepoint-contains
3.5.6 xf:contains
3.5.7 xf:substring
3.5.8 xf:string-length
3.5.9 xf:codepoint-substring-before
3.5.10 xf:substring-before
3.5.11 xf:codepoint-substring-after
3.5.12 xf:substring-after
3.5.13 xf:normalize-space
3.5.14 xf:normalize-unicode
3.5.15 xf:upper-case
3.5.16 xf:lower-case
3.5.17 xf:translate
3.5.18 xf:string-pad-beginning
3.5.19 xf:string-pad-end
3.5.20 xf:match
3.5.21 xf:replace
4 Constructors, Functions, and Operators on Booleans
4.1 Boolean Constructors
4.1.1 xf:true
4.1.2 xf:false
4.1.3 xf:boolean-from-string
4.2 Operators on Boolean Values
4.2.1 Semantics
4.3 Functions on Boolean Values
4.3.1 xf:not
5 Constructors, Functions, and Operators on Dates and Times
5.1 Duration and Datetime Types
5.2 Duration and Datetime Constructors
5.2.1 xf:duration
5.2.2 xf:dateTime
5.2.3 xf:date
5.2.4 xf:time
5.2.5 xf:gYearMonth
5.2.6 xf:gYear
5.2.7 xf:gMonthDay
5.2.8 xf:gMonth
5.2.9 xf:gDay
5.2.10 xf:currentDateTime
5.3 Comparisons of Duration and Datetime Values
5.4 Component Extraction Functions on Datetime Values
5.4.1 xf:get-Century-from-dateTime
5.4.2 xf:get-Century-from-date
5.4.3 xf:get-Century-from-gYear
5.4.4 xf:get-Century-from-gYearMonth
5.4.5 xf:get-gYear-from-dateTime
5.4.6 xf:get-gYear-from-date
5.4.7 xf:get-gYear-from-gYearMonth
5.4.8 xf:get-gMonth-from-dateTime
5.4.9 xf:get-gMonth-from-date
5.4.10 xf:get-gMonth-from-gYearMonth
5.4.11 xf:get-gMonth-from-gMonthDay
5.4.12 xf:get-gDay-from-dateTime
5.4.13 xf:get-gDay-from-date
5.4.14 xf:get-gDay-from-gMonthDay
5.4.15 xf:get-hour-from-dateTime
5.4.16 xf:get-hour-from-time
5.4.17 xf:get-minutes-from-dateTime
5.4.18 xf:get-minutes-from-time
5.4.19 xf:get-seconds-from-dateTime
5.4.20 xf:get-seconds-from-time
5.4.21 xf:get-timezone-from-dateTime
5.4.22 xf:get-timezone-from-date
5.4.23 xf:get-timezone-from-time
5.4.24 xf:get-timezone-from-gYear
5.4.25 xf:get-timezone-from-gYearMonth
5.4.26 xf:get-timezone-from-gMonth
5.4.27 xf:get-timezone-from-gMonthDay
5.4.28 xf:get-timezone-from-gDay
5.5 Component Extraction Functions on Duration Values
5.5.1 xf:get-years
5.5.2 xf:get-months
5.5.3 xf:get-days
5.5.4 xf:get-hours
5.5.5 xf:get-minutes
5.5.6 xf:get-seconds
5.6 Arithmetic Functions on Dates
5.6.1 xf:add-days
5.6.2 xf:add-months
5.6.3 xf:add-years
5.6.4 xf:add-gMonth
5.6.5 xf:add-gYear
5.7 Functions on TimePeriod Values
5.7.1 xf:get-duration
5.7.2 xf:get-end
5.7.3 xf:get-start
5.7.4 xf:temporal-dateTimes-contains
5.7.5 xf:temporal-dateTimeDuration-contains
5.7.6 xf:temporal-durationDateTime-contains
6 Constructors, Functions, and Operators on QNames
6.1 Constructors for QNames
6.1.1 xf:QName-from-uri
6.1.2 xf:QName-from-prefix
6.1.3 xf:QName
6.2 Functions on QNames
6.2.1 xf:get-local-name
6.2.2 xf:get-namespace-uri
7 Constructors, Functions, and Operators for anyURI
7.1 Constructor for anyURI
7.1.1 xf:anyURI
8 Functions and Operators on base64Binary and hexBinary
8.1 Comparisons of base64Binary and hexBinary Values
9 Constructors, Functions, and Operators on NOTATION
9.1 NOTATION Constructor
9.1.1 xf:NOTATION
10 Functions and Operators on Nodes
10.1 Operators on Nodes
10.2 Functions on Nodes
10.2.1 xf:local-name
10.2.2 xf:namespace-uri
10.2.3 xf:number
10.2.4 xf:node-equal
10.2.5 xf:value-equal
10.2.6 xf:node-before
10.2.7 xf:node-after
10.2.8 xf:copy
10.2.9 xf:shallow
10.2.10 xf:boolean
11 Constructors, Functions, and Operators on Sequences
11.1 Sequences
11.2 Constructors on Sequences
11.2.1 TO
11.3 Operators on Sequences
11.4 Functions on Sequences
11.4.1 xf:position
11.4.2 xf:last
11.4.3 xf:item-at
11.4.4 xf:index-of
11.4.5 xf:empty
11.4.6 xf:exists
11.4.7 xf:identity-distinct
11.4.8 xf:value-distinct
11.4.9 xf:sort
11.4.10 xf:reverse-sort
11.4.11 xf:insert
11.4.12 xf:sublist-before
11.4.13 xf:sublist-after
11.4.14 xf:sublist
11.4.15 xf:sequence-pad-beginning
11.4.16 xf:sequence-pad-end
11.4.17 xf:truncate-beginning
11.4.18 xf:truncate-end
11.4.19 xf:resize-beginning
11.4.20 xf:resize-end
11.4.21 xf:unordered
11.5 Equals, Union, Intersection and Except
11.5.1 xf:sequence-value-equal
11.5.2 xf:sequence-node-equal
11.5.3 xf:union
11.5.4 xf:union-all
11.5.5 xf:intersect
11.5.6 xf:intersect-all
11.5.7 xf:except
11.5.8 xf:except-all
11.6 Aggregate Functions
11.6.1 xf:count
11.6.2 xf:avg
11.6.3 xf:max
11.6.4 xf:min
11.6.5 xf:sum
11.7 Functions that Generate Sequences
11.7.1 xf:id
11.7.2 xf:idref
11.7.3 xf:filter
11.7.4 xf:document
12 Casting Functions
12.1 Casting to string and its derived types
12.2 Casting to numeric types
12.3 Casting to datetime and duration types
12.4 Casting to all other simple types
12.5 Miscellaneous casting functions
12.5.1 xf:boolean
12.5.2 xf:string
A References
A.1 Normative
B Functions and Operators Issues List (Non-Normative)
[XML Schema Part 2: Datatypes] defines a number of primitive and derived datatypes, collectively known as built-in datatypes. This document defines operations on those datatypes for use in XQuery, XPath and related XML standards. This document also discusses operators and functions on nodes and node sequences as defined in the [XQuery 1.0 and XPath 2.0 Data Model] for use in XQuery, XPath and other related XML standards.
The [XQuery 1.0 and XPath 2.0 Data Model] also defines several accessors on nodes such as name(), string-value(), typed-value(), parent(), children(), and node-kind(). [XQuery 1.0: An XML Query Language] defines kind tests such as text() and node(). These functions are not included in this document.
[Issue 86: In which document do the node accessors functions and the kind tests go?]
The diagram below shows the built-in [XML Schema Part 2: Datatypes]. Solid lines connect a base datatype above to a derived datatype below. Dashed lines connect a datatype created as a list of an item type above.
Diagram courtesy Asir Vedamuthu, webMethods
[Issue 24: What effect do facets have?]
This document includes examples of the use of a number of functions. Examples for the remaining functions are tentatively planned, but feedback is solicited on the utility of the examples for those functions for which they are supplied, as well as for those for which they are not yet supplied.
The purpose of this document is to catalog the functions and operators required for XML Query and XPath 2.0. The exact syntax used to invoke these functions and operators is specified in [XQuery 1.0: An XML Query Language].
In general, [XQuery 1.0: An XML Query Language] does not support function overloading. Consequently, there are no overloaded functions in this document except for legacy [XPath 1.0] functions such as string() which takes a single argument of a variety of types and concat() which takes a variable number of string arguments. This does not apply to operators such as "+" which may be overloaded. Functions with optional arguments are allowed. If optional arguments are omitted, omissions are assumed to begin from the right.
This document defines, among other things, a number of constructors and other functions that apply to one or more data types. Each constructor and function is defined by specifying its signature, a description of each of its arguments, and its semantics; in addition, examples are given of many constructors and functions to illustrate their use.
Each function's signature is presented in a form like this:
function-name(parameter-type parameter-name ... ) => return-type
In that notation, function-name is the name of the function whose signature is being specified. If the function takes no parameters, then the name is followed by an empty set of parentheses: (); otherwise, the name is followed by a parenthesized list of parameter declarations, each declaration specifying the static type of the parameter and a non-normative name used to reference the parameter when the function's semantics are specified. If there are two or more parameter declarations, they are separated by a comma. The return-type specifies the static type of the value returned by the function.
The names of constructor functions have been chosen so that their local names are "spelled the same" as the local names of the types for which they are constructors. For example, the name of the constructor function that constructs values whose type is xsd:decimal is xf:decimal. Throughout this document, we typically omit the prefix xsd: in the names of XML Schema types.
[Issue 101: Scalar functions should accept the empty sequence.]
The functions and operators discussed in this document are contained within a namespace and referenced using a qualified name. The namespace prefix used in this document — merely for illustrative purposes — is xf. The namespace prefix for these functions can vary, as long as the prefix is bound to the currect URI.
The actual namespace (that is, the URI of the namespace) is http://www.w3.org/2001/08/xquery-operators.
[Issue 13: What is the appropriate namespace to be used?]
[Issue 33: Issues should reference the source of the issues]
This section discusses arithmetic operators on the numeric datatypes defined in [XML Schema Part 2: Datatypes]. It uses an approach that permits lightweight operations whenever possible.
The operators described in this section are defined on the following numeric types.
| decimal | ||
| integer | ||
| int | ||
| long | ||
| short | ||
| byte | ||
| float | ||
| double |
They also apply to user-defined types derived by restriction from these types.
[Issue 39: Should all XML Schema numeric types be supported?]
The following literals are defined on the numeric types.
| Literal | Returns |
n, +n, or -n
[1]
|
integer |
nL, +nL, or -nL
[2]
|
long |
n., +n., or -n. , .n, +.n, or -.n , n.n, +n.n, or -n.n (with a decimal point) |
decimal |
n.nEn, +n.nEn, -n.nEn,
n.nE+n, +n.nE+n, -n.nE+n,
n.nE-n, +n.nE-n, or -n.nE-n
[3]
|
float |
[Issue 49: There are several syntax problems with numeric literals]
The following constructors are defined on the above numeric types.
| Constructor | Meaning |
xf:decimal
|
Produces a decimal value by parsing and interpreting a string. |
xf:integer
|
Produces an integer value by parsing and interpreting a string. |
xf:long
|
Produces a long value by parsing and interpreting a string. |
xf:int
|
Produces an int value by parsing and interpreting a string. |
xf:short
|
Produces a short value by parsing and interpreting a string. |
xf:byte
|
Produces a byte value by parsing and interpreting a string. |
xf:float
|
Produces a float value by parsing and interpreting a string. |
xf:double
|
Produces a double value by parsing and interpreting a string. |
For float and double, the string argument can indicate the special values: NaN, INF, -INF, +0, and -0.
Whitespace is not allowed as part of the string argument.
If the argument string passed to a constructor results in an error (for example, if it conatains a letter other than "E" or "e" or a string other than the special values named above), the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 40: Some numeric constructors have unexpected return types]
Returns the decimal value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is not a valid lexical representation for the decimal type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the number of characters contained in the value of $srcval that are digits is greater than the maximum number of decimal digits supported by the implementation, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
xf:decimal('123.5') returns the decimal value corresponding to one hundred twenty three and one-half.
xf:decimal('12.5E2') returns the error value, since the use of the letter "E" is prohibited in the constructor for the decimal type.
xf:decimal('12.5 ') returns the error value, since whitespace is not allowed in the argument string.
Returns the integer value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is not a valid lexical representation for the integer type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the number of characters contained in the value of $srcval that are digits is greater than the maximum number of digits supported by the implementation, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
Returns the long value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is not a valid lexical representation for the long type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of the number corresponding to the characters contained in the value of $srcval is greater than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
Returns the int value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is not a valid lexical representation for the int type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of the number corresponding to the characters contained in the value of $srcval is greater than 2,147,483,647 or less than -2,147,483,648, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
xf:int('1235') returns the int value corresponding to one thousand two hundred thirty five.
xf:int('2147483648') returns an error value, since the value two billion, one hundred forty seven million, four hundred eighty three thousand, six hundred forty eight is not a valid value for the short type.
Returns the short value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is not a valid lexical representation for the short type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of the number corresponding to the characters contained in the value of $srcval is greater than 32,767 or less than -32,768, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
Returns the byte value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is not a valid lexical representation for the byte type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of the number corresponding to the characters contained in the value of $srcval is greater than 127 or less than -128, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
Returns the float value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is "
NaN
", then the constructor returns the "not-a-number" value.
If the value of $srcval is "
INF
" or "
+INF
", then the constructor returns the "positive infinity" value. If the value of $srcval is "
-INF
", then the constructor returns the "negative infinity" value.
If the value of $srcval is "
0
" or "
+0
", then the constructor returns the value positive zero. If the value of $srcval is "
-0
", then the constructor returns the value negative zero.
If the value of $srcval is not a valid lexical representation for the float type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of the number corresponding to the characters contained in the value of $srcval is not a valid value for the float type, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 50: Should double("ZZZ") or cast as float("ZZZ") return an error or NaN? ]
xf:float('510E2') returns the float value corresponding to fifty one thousand.
xf:float('15.25') returns the float value corresponding to fifteen and a quarter.
xf:float('51D1') returns an error value, since the use of the letter "D" is prohibited in the constructor for the float type.
Returns the double value that is represented by the characters contained in the value of $srcval.
If the value of $srcval is "
NaN
", then the constructor returns the "not-a-number" value.
If the value of $srcval is "
INF
" or "
+INF
", then the constructor returns the "positive infinity" value. If the value of $srcval is "
-INF
", then the constructor returns the "negative infinity" value.
NOTE:In XPath 1.0,
double("INF")returned the "not-a-number" value.
If the value of $srcval is "
0
" or "
+0
", then the constructor returns the value positive zero. If the value of $srcval is "
-0
", then the constructor returns the value negative zero.
If the value of $srcval is not a valid lexical representation for the double type as specified in [XML Schema Part 2: Datatypes], then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of the number corresponding to the characters contained in the value of $srcval is not a valid value for the float type, then an error value is returned as specified in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 50: Should double("ZZZ") or cast as float("ZZZ") return an error or NaN? ]
xf:double('510E2') returns the double value corresponding to fifty one thousand.
xf:double('15.25') returns the double value corresponding to fifteen and a quarter.
xf:double('51D1') returns an error value, since the use of the letter "D" is prohibited in the constructor for the double type.
The following operators are defined on these numeric types:
| Operator | Meaning | Source |
+
|
Addition | XPath 1.0 |
-
|
Subtraction | XPath 1.0 |
*
|
Multiplication | XPath 1.0 |
div
|
Division | XPath 1.0 |
mod |
Division modulus | XPath 1.0 |
+
|
Unary plus | XPath 2.0 Req 1.7 Shd. |
-
|
Unary minus (negation) | XPath 1.0 |
The arguments and return types of all arithmetic operators are primitive numeric types: decimal, float, or double. Although arithmetic operations are defined on only a few types, a simple type promotion scheme allows these operations to be performed on all arithmetic types, including derived types.
Integers, which are primitive in most language environments, are not primitive types in XML Schema. To be efficient, most implementations will probably choose to treat integer as primitive, and define promotions from integer to decimal.
The type promotion scheme includes only two rules:
Any type may be promoted to the type of its primitive ancestor (or integer if appropriate).
integer may be promoted to decimal, decimal may be promoted to float, and float may be promoted to double.
For simplicity, each operator is defined to operate on operands of the same datatype and to return the same datatype. If the two operands are not of the same datatype, one operand is promoted to be the type of the other operand.
The result type of operations (using ¤ to represent a binary operators such as +, -, *, div, and mod, as well as unary operators such as + and -), along with their argument datatypes, is defined in the table below:
| Operator | Returns |
| integer ¤ integer | integer |
| decimal ¤ decimal | decimal |
| float ¤ float | float |
| double ¤ double | double |
| ¤ integer | integer |
| ¤ decimal | decimal |
| ¤ float | float |
| ¤ double | double |
These rules define any operation on any pair of arithmetic types. Consider the following example:
int*double => double*double
For this operation, int must be converted to double. This can be done, since int can be promoted to decimal, its most primitive ancestor, decimal can be promoted to float, and float can be promoted to double.
[Issue 78: Type promotion rules appear to be inconsistent]
Consider another example:
byte*short => decimal*decimal
This is true because the * operator is not defined on derived types. Both byte and short must be promoted to decimal so that the operation can be performed.
We define the following comparison operators on numeric values. Comparisons take two arguments of the same type. If the arguments are of different types, one argument is promoted to the type of the other. Each comparison operator returns a boolean value, except in the case when one or both operands are the empty sequence. In that case, the result is the empty sequence.
| Operator | Meaning | Source |
=
|
Equality comparison | XPath 1.0 |
<
|
Less-than comparison | XPath 1.0 |
>
|
Greater-than comparison | XPath 1.0 |
<=
|
Less-than-or-equal-to comparison | XPath 1.0 |
>=
|
Greater-than-or-equal-to comparison | XPath 1.0 |
!=
|
Inequality comparison | XPath 1.0 |
[Issue 8: Relationships Between Some Numeric Types Should Be Reconsidered]
[Issue 113: Need more complete numeric comparison semantics]
The following functions are defined on these numeric types:
| Function | Meaning | Source |
| xf:floor | Returns the largest integer less than or equal to the argument | XPath 1.0 |
| xf:ceiling | Returns the smallest integer greater than or equal to the argument | XPath 1.0 |
| xf:round | Rounds to the nearest integer | XPath 1.0 |
[Issue 53: Certain XPath 1.0 functions and other needed functions are not included]
[Issue 79: How many digits of precision (etc.) are returned from certain functions?]
[Issue 92: The abs() function is required.]
Returns the number that is closest to the argument and that is an integer. More formally, round(x) produces the same result as floor(x+0.5). These semantics are consistent with Java's semantics. If there are two such numbers, then the one that is closest to positive infinity is returned. If the argument is NaN, then NaN is returned. If the argument is positive infinity, then positive infinity is returned. If the argument is negative infinity, then negative infinity is returned. If the argument is positive zero, then positive zero is returned. If the argument is negative zero, then negative zero is returned. If the argument is less than zero, but greater than or equal to -0.5, then negative zero is returned.
This section discusses functions and operators on the [XML Schema Part 2: Datatypes] string datatype and the datatypes derived from string.
The operators described in this section are defined on the following string types.
| string | |||||
| normalizedString | |||||
| token | |||||
| language | |||||
| NMTOKEN | |||||
| Name | |||||
| NCName | |||||
| ID | |||||
| IDREF | |||||
| ENTITY |
They also apply to user-defined types derived by restriction from these types.
The following literals are defined on string types and produce values of the types indicated.
| Literal | Returns |
"xxx"
[4]
|
string |
'xxx'
[5]
|
string |
The following constructors are defined on string types.
| Constructor | Meaning |
xf:string
|
Produces a string value by parsing and interpreting a supplied string. |
xf:normalizedString
|
Produces a normalizedString — the XML Schema datatype — value by parsing and interpreting a string |
xf:token
|
Produces a token value by parsing and interpreting a string. |
xf:language
|
Produces a language value by parsing and interpreting a string. |
xf:Name
|
Produces a Name value by parsing and interpreting a string. |
xf:NMTOKEN
|
Produces an NMTOKEN value by parsing and interpreting a string. |
xf:NCName
|
Produces an NCName value by parsing and interpreting a string. |
xf:ID
|
Produces an ID value by parsing and interpreting a string. |
xf:IDREF
|
Produces an IDREF value by parsing and interpreting a string. |
xf:ENTITY
|
Produces an ENTITY value by parsing and interpreting a string. |
[Issue 14: Some function signatures are unclear about argument types]
[Issue 90: Constructors for id and idref need a document context for validity.]
[Issue 107: Notion of document context required?]
Returns a string value that is the value of $srcval. This constructor is correctly perceived as a "no-op", but is included for the sake of orthogonality.
xf:string('abc') returns "abc".
xf:string('Jérôme') returns "Jérôme" ("̂" is the numeric code reference for the Unicode character U+0302, called "Combining Curcumflex Accent").
NOTE:The preceding semantic is correct if and only if this document requires the use of Unicode Normalization Form C (NFC) semantics for this constructor. [Character Model for the World Wide Web 1.0] requires normalization following certain operations, so it may be appropriate to mandate it here, too.
[Issue 106: Do function invocations expand character references?]
Returns a normalizedString — the XML Schema datatype — value that is the value of $srcval. Every character contained in $srcval that is a line feed (#xA) is removed from the returned value.
If the argument string passed to a constructor is not a valid value in the lexical space of normalizedString as specified in [XML Schema Part 2: Datatypes], then the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model]. Note that the argument to construct a normalizedString cannot contain the carriage return (#xD) or the tab (#x9) character.
xf:normalizedString('abc') returns "abc".
xf:normalizedString('ab
cd) returns "abcd".
xf:normalizedString('ab
cd) returns an error value.
[Issue 106: Do function invocations expand character references?]
Returns a token value that is the value of $srcval. Note that the argument to construct a token must not contain the line feed (#xA) nor tab (#x9) characters, have no leading or trailing spaces (#x20), and must have no internal sequences of two or more spaces. If the argument string passed to a constructor results in an error, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 46: xf:token: Should other Unicode space characters be considered?]
Returns a language value that is the value of $srcval. Note that the value of $srcval to construct a value of type language must be a valid language identifier as defined in the language identification section of [XML 1.0 Recommendation (Second Edition)]. If the argument string passed to a constructor results in an error (for example, is not a valid language identifier), the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Returns a Name value that is the value of $srcval. Note that the value of $srcval to construct a value of type Name must match the Name production of [XML 1.0 Recommendation (Second Edition)]. If the argument string passed to a constructor results in an error, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Returns an NMTOKEN value that is the value of $srcval. Note that the value of $srcval to construct a value of type NMTOKEN must match the Nmtoken production of [XML 1.0 Recommendation (Second Edition)]. If the argument string passed to a constructor results in an error, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Returns an NCName value that is the value of $srcval. Note that the value of $srcval to construct a value of type NCName must match the NCName production of [XML 1.0 Recommendation (Second Edition)]. If the argument string passed to a constructor results in an error, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Returns an ID value that is the value of $srcval. Note that the value of $srcval to construct a value of type ID must match the NCName production of [XML 1.0 Recommendation (Second Edition)]. If the argument string passed to a constructor results in an error, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Returns an IDREF value that is the value of $srcval. Note that the value of $srcval to construct a value of type IDREF must match the NCName production of [XML 1.0 Recommendation (Second Edition)]. If the argument string passed to a constructor results in an error, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Returns an ENTITY value that is the value of $srcval. Note that the value of $srcval to construct a value of type ENTITY must match the NCName production of [XML 1.0 Recommendation (Second Edition)]. If the argument string passed to a constructor results in an error, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
The [Character Model for the World Wide Web 1.0] discusses the fact that strings from a particular character set may need to be collated (sorted) differently for different applications. Thus, the collation needs to be taken into account when comparing strings in any context. In this document, we assume that collations can be named and the collation name used as an argument to the comparison function. This document will also defines the manner in which a default collation is determined, allowing the collation argument to be optional in the functions that allow it.
[Issue 44: Collations: URIs and URI references or short names?]
[Issue 70: How are "default" collations determined?]
Some collations can be "tailored" for various purposes. See [Unicode Collation Algorithm]. This document does not discuss tailoring. Instead, we assume that the collation argument to the various functions below is a tailored and named collation.
NOTE:A user who wishes to preserve the XPath 1.0 semantics of "
<" and ">" can define a collation that converts each string to a number and then compares them numerically.
Collations can also indicate that some characters that are rendered differently are, in fact equal for collation purpose (e.g., "uve" and "uwe" are considered equivalent in some European languages). Thus, strings can be compared character-by-character or in a logical manner based on the collation.
[Issue 45: Collations: Is there a relationship to xml:lang?]
The [Character Model for the World Wide Web 1.0] recommends that all strings be normalized early and, thus, string comparisons need only be defined on normalized strings. If this is not the case, then we may also want to compare unnormalized strings based on their normalized representations.
| Function | Meaning | Source |
| xf:codepoint-compare | Compares two character strings on a character-by-character basis | |
| xf:compare | Compares two character strings; a collation may optionally be specified | XSLT 2.0, Req. 2.13 (Could) |
[Issue 19: Do we need collation-sensitive comparisons and another sort?]
[Issue 73: Is a "between" function needed?]
[Issue 114: codepoint-compare versus compare with special collation]
Returns -1, 0, or 1, depending on whether the value of $comparand1 is respectively less than, equal to, or greater than the value of $comparand2, compared on a character by character basis using the Unicode values for each character.
If the value of $comparand2 is longer than the value of $comparand1 and starts with the value of $comparand1, the result is -1. If the value of $comparand1 is longer and starts with the the value of $comparand2, the result is 1.
If either argument is the empty sequence, the result is the empty sequence.
xf:compare(string $comparand1, string $comparand2) => integer
xf:compare(string $comparand1, string $comparand2, anyURI $collation) => integer
$comparand1— static type isstring
$comparand2— static type isstring
$collation— static type isanyURI
Returns -1, 0, or 1, depending on whether the value of the $comparand1 is respectively less than, equal to, or greater than the value of $comparand2, according to the rules of the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
If the value of $comparand2 begins with a string that is equal to the value of $comparand1 (according to the collation that is used) and has additional characters following that beginning string, then the result is -1. If the value of $comparand1 begins with a string that is equal to the value of $comparand2 (according to the collation that is used) and has additional characters following that beginning string, then the result is 1.
If either argument is the empty sequence, the result is the empty sequence.
xf:compare('abc', 'abc') returns 0.
xf:compare('Strasse', 'Straße') returns 0 if and only if the default collation includes provisions that equate "ss" and the (German) character "ß" ("sharp-s"). (Otherwise, the returned value depends on the semantics of the default collation.)
xf:compare('Strasse', 'Straße', anyURI('deutsch')) returns 0 if and only if the collation identified by the relative URI constructed from the string value "deutsch" includes provisions that equate "ss" and the (German) character "ß" ("sharp-s"). (Otherwise, the returned value depends on the semantics of that collation.)
xf:compare('Strassen', 'Straße') returns 1 if and only if the default collation includes provisions that equate "ss" and the (German) character "ß" ("sharp-s"). (Since the value of $comparand1 has an additional character, an "n", following the string that is equal to "Straße", it is greater than the value of $comparand2.)
The following functions are defined on these string types:
| Function | Meaning | Source |
| xf:concat | Concatenates two or more character strings. | XPath 1.0 |
| xf:starts-with | Indicates whether the value of one string begins with the characters of the value of another string. | |
| xf:ends-with | Indicates whether the value of one string ends with the characters of the value of another string. | |
| xf:codepoint-contains | Indicates whether the value of one string contains the characters of the value of another string using the default Unicode collation. | |
| xf:contains | Indicates whether the value of one string contains the characters of the value of another string. A collation may optionally be specified. | XPath 1.0 |
| xf:substring | Returns a string located at a specified place in the value of a string. | XPath 1.0 |
| xf:string-length | Returns the length of the argument. | XPath 1.0 |
| xf:codepoint-substring-before | Returns the characters of one string that precede in that string the characters in the value of another string. | |
| xf:substring-before | Returns the characters of one string that precede in that string the characters in the value of another string. A collation may optionally be specified. | XPath 1.0 |
| xf:codepoint-substring-after | Returns the characters of one string that precede in that string the characters in the value of another string. | |
| xf:substring-after | Returns the characters of one string that precede in that string the characters in the value of another string. A collation may optionally be specified. | XPath 1.0 |
| xf:normalize-space | Returns the whitespace-normalized value of the argument. | XPath 1.0 |
| xf:normalize | Returns the normalized value of the first argument in the normalization form specified by the second argument. | XPath 2.0 Req 2.9 (Should) |
| xf:upper-case | Returns the upper-cased value of the argument. | XPath 2.0 Req 2.4.3 (Should) |
| xf:lower-case | Returns the lower-cased value of the argument. | XPath 2.0 Req 2.4.3 (Should) |
| xf:translate | Returns the first argument string with occurrences of characters in the second argument replaced by the character at the corresponding position in the third string. | XPath 1.0 |
| xf:string-pad-beginning | Returns the string padded in front by copies of the third argument. | XPath 2.0 Req 2.4.2, 4.4 (Should) |
| xf:string-pad-end | Returns the string padded at the end by copies of the third argument. | XPath 2.0 Req 2.4.2, 4.4 (Should) |
| xf:match | Returns a sequence of integers indicating the positions in the value of the first argument that are matched by the regular expression that is the value of the second argument. | XPath 2.0 Req 3. (Must) |
| xf:replace | Returns the first argument with every substring matched by the second argument replaced by the value of the third argument. | XPath 2.0 Req 2.4.1. (Should) |
[Issue 23: "Returns a copy" is not appropriate wording]
[Issue 21: What is the precise type returned by each function?]
[Issue 37: Linguistic contains required?]
[Issue 56: Some functions may be redundant]
[Issue 94: Must allow searching for words near other words. ]
[Issue 104: Need equality and inequality operators for strings.]
Note that the resulting string after operations such as concatenation or substring must be normalized. See [Character Model for the World Wide Web 1.0].
[Issue 108: Should strings always be returned in Unicode normalized form?]
Note also that when the above operators and functions are applied to datatypes derived from string, they are guaranteeed to return legal strings, but they may not return legal value for the particular subtype to which they were applied.
Returns the string that is the concatenation of the values of its arguments. XPath allows a variable number of arguments. The resulting string might not be normalized in any Unicode or W3C normalization.
NOTE:The
concat()function is specified to allow an arbitrary number of string arguments that are concatenated together. This capability is retained for compatibility with [XPath 1.0] and is the only function specified in this document that has that characteristic.
xf:starts-with(string $operand1, string $operand2) => boolean
xf:starts-with(string $operand1, string $operand2, anyURI $collation) => boolean
$operand1— static type isstring
$operand2— static type isstring
$collation— static type isanyURI
Returns a boolean indicating whether or not the value of $operand1 starts with a string that is equal to the value of $operand2 according to the collation that is used.
If the value of $operand2 is the zero-length string, then the function returns true. If the value of $operand1 is the zero-length string and the value of $operand2 is not the zero-length string, then the function returns false.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
xf:ends-with(string $operand1, string $operand2) => boolean
xf:ends-with(string $operand1, string $operand2, anyURI collation) => boolean
$operand1— static type isstring
$operand2— static type isstring
$collation— static type isanyURI
Returns a boolean indicating whether or not the value of $operand1 ends with a string that is equal to the value of $operand2 according to the specified collation.
If the value of $operand2 is the zero-length string, then the function returns true. If the value of $operand1 is the zero-length string and the value of $operand2 is not the zero-length string, then the function returns false.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
Returns a boolean indicating whether or not the value of $operand1 contains (at the beginning, at the end, or anywhere within) a string equal to the value of $operand2, considered on a character-by-character basis using the Unicode value of each character for comparison .
If the value of $operand2 is the zero-length string, then the function returns true. If the value of $operand1 is the zero-length string and the value of $operand2 is not the zero-length string, then the function returns false.
xf:contains(string $operand1, string $operand2) => boolean
xf:contains(string $operand1, string $operand2, anyURI $collation) => boolean
$operand1— static type isstring
$operand2— static type isstring
$collation— static type isanyURI
Returns a boolean indicating whether or not the value of $operand1 contains (at the beginning, at the end, or anywhere within) a string equal to the value of $operand1 according to the collation that is used.
If the value of $operand2 is the zero-length string, then the function returns true. If the value of $operand1 is the zero-length string and the value of $operand2 is not the zero-length string, then the function returns false.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
xf:substring(string $sourceString, decimal $startingLoc) => string
xf:substring(string $sourceString, decimal $startingLoc, decimal $length) => string
$sourceString— static type isstring
$startingLoc— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($startingLoc)).
$length— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($length)).
Returns the portion of the value of $sourceString beginning at the position indicated by the value of $startingLoc and continuing for the number of characters indicated by the value of $length.
If $length is not specified, then the substring identifies characters to the end of $sourceString.
The value of $length can be greater than the number of characters in the value of $sourceString following the beginning position, in which case the substring identifies characters to the end of $sourceString.
The first character of a string is located at position 1 (not position 0).
Returns the substring of the value of $operand1 that precedes in the value of $operand1 the first occurrence of a string that is equal to the value of $operand2 comparing each character in turn according to its Unicode value.
If the value of $operand2 is the zero-length string, then the function returns the value of $operand1. If the value of $operand1 is the zero-length string and the value of $operand2 is the zero-length string, then the function returns the zero-length string.
If the value of $operand1 does not contain a string that is equal to the value of $operand2, then the function returns the empty string.
xf:substring-before(string $operand1, string $operand2) => string
xf:substring-before(string $operand1, string $operand2, anyURI $collation) => string
$operand1— static type isstring
$operand2— static type isstring
$collation— static type isanyURI
Returns the substring of the value of $operand1 that precedes in the value of $operand1 the first occurrence of a string that is equal to the value of $operand2 according to the collation that is used.
If the value of $operand2 is the zero-length string, then the function returns the value of $operand1. If the value of $operand1 is the zero-length string and the value of $operand2 is the zero-length string, then the function returns the zero-length string.
If the value of $operand1 does not contain a string that is equal to the value of $operand2, then the function returns the empty string.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
Returns the substring of the value of $operand1 that follows in the value of $operand1 the first occurrence of a string that is equal to the value of $operand2 comparing each character in turn according to its Unicode value.
If the value of $operand2 is the zero-length string, then the function returns the value of $operand1. If the value of $operand1 is the zero-length string and the value of $operand2 is the zero-length string, then the function returns the zero-length string.
If the value of $operand1 does not contain a string that is equal to the value of $operand2, then the function returns the zero-length string.
xf:substring-after(string $operand1, string $operand2) => string
xf:substring-after(string $operand1, string $operand2, anyURI $collation) => string
$operand1— static type isstring
$operand2— static type isstring
$collation— static type isanyURI
Returns the substring of the value of $operand1 that follows in the value of $operand1 the first occurrence of a string that is equal to the value of $operand2 according to the collation that is used.
If the value of $operand2 is the zero-length string, then the function returns the value of $operand1. If the value of $operand1 is the zero-length string and the value of $operand2 is the zero-length string, then the function returns the zero-length string.
If the value of $operand1 does not contain a string that is equal to the value of $operand2, then the function returns the zero-length string.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
$srcval— static type isstring
$normalizationForm— static type isstring. The effective value is the value returned byupper-case($normalizationForm).
Returns the value of $srcval normalized according to the normalization criteria for a normalization form identified by the value of $normalizationForm:
If the effective value of
$normalizationFormis "NFC", then the value returned by the function is the value of$srcvalin Unicode Normalization Form C (NFC).
If the effective value of$normalizationFormis "NFD", then the value returned by the function is the value of$srcvalin Unicode Normalization Form D (NFD).
If the effective value of$normalizationFormis "W3C", then the value returned by the function is the value of$srcvalin W3C Normal Form.
Returns the value of $srcval after translating every lower-case letter to its upper-case correspondent. Every lower-case letter that does not have an upper-case correspondent, and every character that is not a lower-case letter, is included in the returned value in its original form.
A "lower-case letter" is a character whose Unicode General Category class includes "Ll". The corresponding upper-case letter is determined using [Unicode Case Mappings].
Returns the value of $srcval after translating every upper-case letter to its lower-case correspondent. Every upper-case letter that does not have a lower-case correspondent, and every character that is not an upper-case letter, is included in the output in its original form.
An "upper-case letter" is a character whose Unicode General Category class includes "Lu". The corresponding lower-case letter is determined using [Unicode Case Mappings].
$srcval— static type isstring
$mapString— static type isstring
$transString— static type isstring
Returns the value of $srcval modified so that every character in the value of $srcval that occurs at some position N in the value of $mapString has been replaced by the character that occurs at position N in the value of $transString.
Every character in the value of $srcval that does not appear in the value of $mapString is unchanged.
Every character in the value of $srcval that appears at some position M in the value of $mapString, where the value of $transString is less than M characters in length, is omitted from the returned value.
xf:string-pad-beginning(string $srcval, decimal $padCount, string $padChar) => string
$srcval— static type isstring
$padCount— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($padCount)).
$padChar— static type isstring.
Returns the value of $srcval in which zero or more copies of the value of $padChar have been inserted preceding the first character of the value of $srcval. The number of copies of the value of $padChar that are inserted is equal to the value of $padCount.
If the value of string-length(padChar) is greater than 1, then the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
$srcval— static type isstring
$padCount— static type isdecimal. The effective value is computed ascast as unsignedInt(floor(length)).
$padChar— static type isstring.
Returns the value of $srcval in which zero or more copies of the value of $padChar have been appended following the last character of the value of $srcval. The number of copies of the value of $padChar that are appended is equal to the value of $padCount.
If the value of string-length(padChar) is greater than 1, then the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
xf:match(string $srcval, string $regexp) => integer*
xf:match(string $srcval, string $regexp, anyURI $collation) => integer*
$srcval— static type isstring
$regexp— static type isstring
$collation— static type isanyURI
Returns a list of integers that identify the offsets of locations within the value of $srcval that are matched by the regular expression that is the value of $regexp. Note that this list might often be implicitly converted to a boolean and that it is probably more common to determine whether a string matches than to ask where those matches occur.
The regular expression in the value of $regexp uses the syntax of regular expressions specified in Appendix F of [XML Schema Part 2: Datatypes].
Comparisons of characters and character strings are, like in all functions, performed in the context of a collation.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
[Issue 74: Is a "match-exact()" function needed?]
[Issue 75: The semantics of match() are incompletely specified]
[Issue 81: What are the precise semantics of regular expressions?]
xf:replace(string $srcval, string $regexp, string $repval) => string
xf:replace(string $srcval, string $regexp, string $repval, anyURI $collation) => string
$srcval— static type isstring
$regexp— static type isstring
$repval— static type isstring
$collation— static type isanyURI
Returns the value of $srcval in which every substring of the value of $srcval that is matched by the regular expression that is the value of $regexp, has been replaced by a copy of the value of $repval.
Ordinary regular expression semantics are used. Among other characteristics, if the value of $regexp is an ordinary character string without any of the "special characters" that give regular expressions their semantics, then the phrase "matched by the regular expression" is equivalent in meaning to "equal to the string".
The value of $repval may use the standard regular expression syntax of "$N" (where N is some integer) to represent the N-th part of the matched pattern indicated by parentheses in the value of $regexp.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
This section discusses operators on the [XML Schema Part 2: Datatypes] boolean datatype.
The following constructors are defined on the boolean type.
| Constructor | Meaning | Source |
xf:true
|
boolean | XPath 1.0 |
xf:false
|
boolean | XPath 1.0 |
xf:boolean-from-string
|
boolean |
$srcval— static type isstring. The effective value is the value returned byupper-case($srcval).
If the effective value of $srcval is "TRUE", then this constructor returns the boolean value true; if the effective value of $srcval is "FALSE", then this constructor returns the boolean value false.
If the effective value of $srcval is any value other than "TRUE" or "FALSE", the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
The following operators are defined on these boolean types:
| Operator | Meaning | Source |
and
|
Logical conjunction | XPath 1.0 |
or
|
Logical disjunction | XPath 1.0 |
=
|
Equality comparison | XPath 1.0 |
!=
|
Inequality comparison | XPath 1.0 |
[Issue 57: Some boolean operators are incompletely or incorrectly specified]
The arguments and return types of all boolean operators are boolean types.
For and, if one of the arguments is the empty sequence, the result is the empty sequence except if the other argument is false in which case the result is false. For or, if one of the arguments is the empty sequence, the result is the empty sequence except if the other argument is true in which case the result is true. The empty seqeunce does not compare equal to any value including itself.
The following functions are defined on boolean types:
| Function | Meaning | Source |
| xf:not | Inverts the boolean value of the argument. | XPath 1.0 |
This section discusses operators on the [XML Schema Part 2: Datatypes] date and time types.
[Issue 109: Calendar context allows for non-Gregorian calendars]
The operators described in this section are defined on the following duration and datetime types.
duration
dateTime
date
time
gYearMonth
gYear
gMonthDay
gMonth
gDay
The following constructors are defined on duration and datetime datatypes.
| Constructor | Meaning |
xf:duration
|
Returns a duration type derived by parsing and interpreting a string value. |
xf:dateTime
|
Returns a dateTime type derived by parsing and interpreting a string value. |
xf:date
|
Returns a date type derived by parsing and interpreting a string value. |
xf:time
|
Returns a time type derived by parsing and interpreting a string value. |
xf:gYearMonth
|
Returns a gYearMonth type derived by parsing and interpreting a string value. |
xf:gYear
|
Returns a gYear type derived by parsing and interpreting a string value. |
xf:gMonthDay
|
Returns a gMonthDay type derived by parsing and interpreting a string value. |
xf:gMonth
|
Returns a gMonth type derived by parsing and interpreting a string value. |
xf:gDay
|
Returns a gDay type derived by parsing and interpreting a string value. |
xf:currentDateTime()
|
Returns the current dateTime. |
If the value of $srcval conforms to the lexical representation of a duration as defined in [XML Schema Part 2: Datatypes], the constructor returns the duration corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval conforms to the lexical representation of a dateTime as defined in [XML Schema Part 2: Datatypes], the constructor returns the dateTime corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
xf:dateTime("1999-05-31T05:00:00")
returns a dateTime value corresponding to the 31st. of May, 1999 at 5:00 AM in an unspecified timezone.
xf:dateTime("1999-05-31T13:20:00-05:00") returns a dateTime value corresponding to 1:20 pm on May the 31st, 1999 for Eastern Standard Time, which is 5 hours behind Coordinated Universal Time (UTC).
If the value of $srcval conforms to the lexical representation of a date as defined in [XML Schema Part 2: Datatypes], the constructor returns the date corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval conforms to the lexical representation of a time as defined in [XML Schema Part 2: Datatypes], the constructor returns the time corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
xf:time("11:33:24") returns a time value corresponding to 33 minutes and 24 seconds past 11 AM in an unspecified timezone.
xf:time("23:33:24.35-05:00") returns a time value corresponding to 33 minutes and 24.35 seconds past 11 PM for Eastern Standard Time, which is 5 hours behind Coordinated Universal Time (UTC).
If the value of $srcval conforms to the lexical representation of a gYearMonth as defined in [XML Schema Part 2: Datatypes], the constructor returns the gYearMonth corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval conforms to the lexical representation of a gYear as defined in [XML Schema Part 2: Datatypes], the constructor returns the gYear corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval conforms to the lexical representation of a gMonthDay as defined in [XML Schema Part 2: Datatypes], the constructor returns the gMonthDay corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval conforms to the lexical representation of a gMonth as defined in [XML Schema Part 2: Datatypes], the constructor returns the gMonth corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval conforms to the lexical representation of a gDay as defined in [XML Schema Part 2: Datatypes], the constructor returns the gDay corresponding to that representation. Otherwise, the constructor returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
xf:gDay("13") returns a gDay corresponding to the thirteenth day in an unspecified month and year in an unspecified timezone.
xf:gDay("14+02:30") returns a gDay corresponding to the fourteenth day in an unspecified month and year in a timezone that is 2.5 hours ahead of Coordinated Universal Time (UTC).
Returns the dateTime that is current at some time during the evaluation of the XQuery or XPath expression in which the currentDateTime() constructor is executed. All invocations of currentDateTime() that are executed during the course of a single outermost XQuery or XPath expression return the same value; the precise instant during that XQuery or Xpath expression's evaluation when the currentDateTime() constructor's value represents is implementation-defined.
The following operators are defined on date and time values:
| Operator | Meaning |
=
|
Equality comparison |
<
|
Less-than comparison |
>
|
Greater-than comparison |
<=
|
Less-than-or-equal-to comparison |
>=
|
Greater-than-or-equal-to comparison |
!=
|
Inequality comparison |
These operators take two arguments of the same type. For equality and inequality, these operators return a boolean result. As discussed in [XML Schema Part 2: Datatypes], the order relation on the duration and the date and time datatypes is not a total order but, rather, a partial order. For this reason, the operators <, >, <=, and >= can return one of three values: true, false, or "indeterminate", represented by the symbol "
<>
".
When comparing durations, there is no indeterminacy if either both arguments contain only years and months or both arguments contains only days, hours, minutes and seconds.
When comparing dateTime values, indeterminacy arises only in the cases when one of the arguments has a timezone and the other does not. If both arguments have timezones or if both arguments do not have timezones, an indeterminate value is never returned.
If one or more arguments is the empty sequence, the result is the empty sequence.
[Issue 38: How are indeterminate values in date/time values represented?]
[Issue 121: Representation of indeterminate comparison]
[Issue 123: Comparison of durations and datetimes: functions or operators?]
The date and time datatypes may be considered to be composite datatypes in that they contain distinct components. The extraction functions specified below extract one component from a date or time value.
| Function | Meaning |
xf:get-Century-from-dateTime
|
Returns the century component of the years value of the argument. |
xf:get-Century-from-date
|
Returns the century component of the years value of the argument. |
xf:get-Century-from-gYear
|
Returns the century component of the years value of the argument. |
xf:get-Century-from-gYearMonth
|
Returns the century component of the years value of the argument. |
xf:get-gYear-from-dateTime
|
Returns the years value of the argument. |
xf:get-gYear-from-date
|
Returns the years value of the argument. |
xf:get-gYear-from-gYearMonth
|
Returns the years value of the argument. |
xf:get-gMonth-from-dateTime
|
Returns the months value of the argument. |
xf:get-gMonth-from-date
|
Returns the months value of the argument. |
xf:get-gMonth-from-gYearMonth
|
Returns the months value of the argument. |
xf:get-gMonth-from-gMonthDay
|
Returns the months value of the argument. |
xf:get-gDay-from-dateTime
|
Returns the days value of the argument. |
xf:get-gDay-from-date
|
Returns the days value of the argument. |
xf:get-gDay-from-gMonthDay
|
Returns the days value of the argument. |
xf:get-hour-from-dateTime
|
Returns the hours value of the argument. |
xf:get-hour-from-time
|
Returns the hours value of the argument. |
xf:get-minutes-from-dateTime
|
Returns the minutes value of the argument. |
xf:get-minutes-from-time
|
Returns the minutes value of the argument. |
xf:get-seconds-from-dateTime
|
Returns the seconds value of the argument. |
xf:get-seconds-from-time
|
Returns the seconds value of the argument. |
xf:get-timezone-from-dateTime
|
Returns the timezone part of the argument. |
xf:get-timezone-from-date
|
Returns the timezone part of the argument. |
xf:get-timezone-from-time
|
Returns the timezone part of the argument. |
xf:get-timezone-from-gYearMonth
|
Returns the timezone part of the argument. |
xf:get-timezone-from-gYear
|
Returns the timezone part of the argument. |
xf:get-timezone-from-gMonthDay
|
Returns the timezone part of the argument. |
xf:get-timezone-from-gMonth
|
Returns the timezone part of the argument. |
xf:get-timezone-from-gDay
|
Returns the timezone part of the argument. |
xf:get-gMonth-from-gYearMonth(gYearMonth $srcval) => positiveInteger (range 1 to 12)
xf:get-gMonth-from-gMonthDay(gMonthDay $srcval) => positiveInteger (range 1 to 12)
Returns a decimal value representing the seconds and fractional seconds identified in the value of $srcval. The value ranges from 0 to 61.999..., inclusive. The number of digits of fractional seconds precision is determined by the relevant facet of the argument. Note that the value can be greater than 60 seconds to accomodate occassional leap seconds used to keep human time synchronized with the rotation of the planet.
Returns a decimal value representing the seconds and fractional seconds identified in the value of $srcval. The value ranges from 0 to 60.999..., inclusive. The number of digits of fractional seconds precision is determined by the relevant facet of the argument. Note that the value can be greater than 60 seconds to accomodate occassional leap seconds used to keep human time synchronized with the rotation of the planet.
The extraction functions specified below extract one component from a duration.
| Function | Meaning |
xf:get-years(duration)
|
Returns the years component of the argument. |
xf:get-months(duration)
|
Returns the months component of the argument. |
xf:get-days(duration)
|
Returns the days component of the argument. |
xf:get-hours(duration)
|
Returns the hours component of the argument. |
xf:get-minutes(duration)
|
Returns the minutes component of the argument. |
xf:get-seconds(duration)
|
Returns the seconds component of the argument. |
| Function | Meaning |
xf:add-days
|
Adds the number of days indicated by the second argument to the first argument. |
xf:add-months
|
Adds the number of months indicated by the second argument to the first argument. |
xf:add-years
|
Adds the number of years indicated by the second argument to the first argument. |
xf:add-gMonth
|
Adds the number of months indicated by the value of the second argument to the value of the first argument. |
xf:add-gYear
|
Adds the number of years indicated by the value of the second argument to the value of the first argument. |
These functions add a duration to a date. Appendix E of [XML Schema Part 2: Datatypes] describes an algorithm for adding durations to dates.
Adds the number of months indicated by the value of $incrMonths to the value of $dateParam. The value of $incrMonths may be negative. If the value of $dateParam has a timezone, it remains unchanged. The returned value is always normlized into a correct Gregorian calendar date.
[Issue 124: add-months() and add-years() incompletely specified]
Adds the number of years indicated by the value of $incrYears to the value of $dateParam. The value of $incrYears may be negative. If the value of $dateParam has a timezone, it remains unchanged. The returned value is always normlized into a correct Gregorian calendar date.
[Issue 124: add-months() and add-years() incompletely specified]
Let us define a time period as an interval or duration of time with a fixed start and end. Thus, time periods have three properties, two of which are independent. The first three functions below take two of the properties as arguments and return the third. The last three functions test whhether a given dateTime falls within a time period.
| Function | Meaning |
xf:get-duration
|
Returns the difference between two dateTimes as a duration. The two arguments must both have a timezone or both have no timezone. |
xf:get-end
|
Returns the end of a time period by adding the dateTime that starts the period and the duration of the period. |
xf:get-start
|
Returns the beginning of a time period by substracting the duration of the period from the the dateTime that ends the period. |
xf:temporal-dateTimes-contains
|
Indicates whether the time period defined by the first two arguments contain the time specified in the third argument. All three dateTime arguments must have a timezone or all three must not have a timezone. |
xf:temporal-dateTimeDuration-contains
|
Indicates whether the time period defined by the first two arguments contain the time specified in the third argument. The two dateTime arguments must have a timezone or both must not have a timezone. |
xf:temporal-durationDateTimes-contains
|
Indicates whether the time period defined by the first two arguments contain the time specified in the third argument. The two dateTime arguments must have a timezone or both must not have a timezone. |
[Issue 25: Is a normalize function needed for duration types?]
[Issue 96: These functions on time-period values are better written using operators as in SQL.]
[Issue 111: get-end and get-start should be more unique]
Returns the duration that corresponds to the difference between the value of $parameter1 and the value of $parameter2. If the value of $parameter1 follows in time the value of $parameter2, then the returned value is a negative duration. The two arguments must both have a timezone or both have no timezone.
xf:temporal-dateTimes-contains(dateTime $parameter1, dateTime $parameter2, dateTime $parameter3) => boolean
$parameter1— static type isdateTime
$parameter2— static type isdateTime
$parameter3— static type isdateTime
If the value of $parameter3 is either (1)equal to the value of $parameter1, (2)equal to the value of $parameter2, (3)greater than the value of $parameter1 and less than the value of $parameter2, or (4)less than the value of $parameter1 and greater than the value of $parameter2, then the function returns true; otherwise, the function returns false. All three dateTime arguments must have a timezone or all three must not have a timezone.
xf:temporal-dateTimes-contains(xf:dateTime("2000-10-30T11:12:00"), xf:dateTime("1999-11-28T09:00:00"), xf:dateTime("2000-01-01T12:00:00")) returns true.
xf:temporal-dateTimes-contains(xf:dateTime("2000-10-30T11:12:00Z"), xf:dateTime("2000-01-01T09:00:00"), xf:dateTime("2000-01-01T12:00:00")) returns error.
xf:temporal-dateTimeDuration-contains(dateTime $parameter1, duration $parameter2, dateTime $parameter3) => boolean
$parameter1— static type isdateTime
$parameter2— static type isduration
$parameter3— static type isdateTime
If the value of $parameter3 is either (1)equal to the value of $parameter1, (2)equal to the value of the dateTime value resulting from adding the value of $parameter2 to the value of $parameter1, (3)greater than the value of $parameter1 and less than the value of the dateTime value resulting from adding the value of $parameter2 to the value of $parameter1, or (4)less than the value of $parameter1 and greater than the value of the dateTime value resulting from adding the value of $parameter2 to the value of $parameter1, then the function returns true; otherwise, the function returns false. The two dateTime arguments must both have a timezone or must both not have a timezone.
xf:temporal-durationDateTime-contains(duration $parameter1, dateTime $parameter2, dateTime $parameter3) => boolean
$parameter1— static type isduration
$parameter2— static type isdateTime
$parameter3— static type isdateTime
If the value of $parameter3 is either (1)equal to the value of $parameter2, (2)equal to the value of the dateTime value resulting from subtracting the value of $parameter1 from the value of $parameter2, (3)greater than the value of $parameter2 and less than the value of the dateTime value resulting from subtracting the value of $parameter1 from the value of $parameter2, or (4)less than the value of $parameter1 and greater than the value of the dateTime value resulting from subtracting the value of $parameter1 from the value of $parameter2, then the function returns true; otherwise, the function returns false. The two dataTime arguments must both have a timezone both or must both not have a timezone.
This section discusses constructors for QNames as defined in [XML Schema Part 2: Datatypes].
| Function | Meaning | Source |
xf:QName-from-uri
|
Returns a QName with the namespace URI given in the first argument and the local name in the second argument. | |
xf:QName-from-prefix
|
Returns a QName with the namespace URI that maps to the prefix given in the first argument and the local name in the second argument. The prefix-to-URI mapping uses the namespaces in scope. | |
xf:QName
|
Returns a QName in no namespace with the local name given in the argument. |
[Issue 115: QName-from-string function]
This section discusses functions on QNames as defined in [XML Schema Part 2: Datatypes].
| Function | Meaning | Source |
xf:get-local-name
|
Returns a string representing the local part of the QName argument. | |
xf:get-namespace-uri
|
Returns the namespace URI for the QName argument. This may be the empty sequence if the QName is in no namespace. |
This section discusses a constructor for anyURI as defined in [XML Schema Part 2: Datatypes].
| Function | Meaning | Source |
xf:anyURI
|
Returns an anyURI with a URI reference as given in the argument. |
Returns an anyURI value with a URI reference specified as the value of $srcval.
[Issue 10: Do we need functions to decompose and resolve URIs?]
We define the following comparison operators on base64Binary and hexBinary values. Comparisons take two operands of the same type i.e both operands must be base64Binary or hexBinary. Each comparison operator returns a boolean value.
The comparison is bit by bit. So, for base64Binary, "A" < "B" < "a". If the two
operands are of different lengths and the second operand starts with the first
operand, then the first operand < second operand.
| Operator | Meaning |
=
|
Equality comparison |
<
|
Less-than comparison |
>
|
Greater-than comparison |
<=
|
Less-than-or-equal-to comparison |
>=
|
Greater-than-or-equal-to comparison |
!=
|
Inequality comparison |
If either argument is the empty sequence, the result is the empty sequence.
[Issue 125: Do comparisons on base64Binary and hexBinary make sense?]
This section discusses a constructor for NOTATION as defined in [XML Schema Part 2: Datatypes].
| Function | Meaning | Source |
xf:NOTATION
|
Returns a NOTATION with the value given in the argument. |
This section discusses functions and operators on nodes as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 86: In which document do the node accessors functions and the kind tests go?]
The following operators are defined on sequences.
| Operator | Meaning |
==
|
Tests if two nodes have the same identity. |
!==
|
Tests if two nodes do not have the same identity. |
=>
|
The left-operand is an element or attribute with a value of type IDREF or IDREFS. The right-operand is a node test. The operator dereferences value and returns the referenced nodes that satisfy the node test. See also 11.7 Functions that Generate Sequences |
| Function | Meaning | Source |
xf:local-name
|
Returns the local name of the context node or the specified node as a QName. | XPath 1.0 modified |
xf:namespace-uri
|
Returns the namespace URI for the name of the specified node. | XPath 1.0 |
xf:number
|
Returns the value of the context node or the specified node converted to a number. | XPath 2.0 req 1.5 (Could) |
xf:node-equal
|
Returns true if the two arguments have the same identity. | Data Model |
xf:value-equal
|
Returns true if the two arguments have the same value. | Data Model |
xf:node-before
|
Indicates whether one node appears before another node in document order. | Data Model |
xf:node-after
|
Indicates whether one node appears before another node in document order. | Data Model |
xf:copy
|
Returns a deep copy of a node. | Data Model |
xf:shallow
|
Returns a shallow copy of a node. | Data Model |
xf:boolean
|
Casts a node to a boolean. See 12.5 Miscellaneous casting functions. | XPath 1.0 |
[Issue 59: Recommend = operator for value-equal and "is" for node-equal.]
[Issue 95: Need if-absent and if-empty functions to handle missing and unknown data.]
[Issue 97: We need a deep-equals function for nodes.]
[Issue 103: Need operators for BEFORE and AFTER.]
For the illustrative examples below, assume an XQuery operating on a Purchase Order document containing a number of item elements. Each item has child elements called description, quantity, etc. Quantity has simple content of type decimal. Further assume that variables $item1, $item2,
etc. are bound to the nodes for the item elements in the document in sequence.
Returns the value of the node indicated by $srcval or, if $srcval is not specified, the context node, converted to a double. If the value of the node is not a valid lexical representation of a numeric simple type as defined in [XML Schema Part 2: Datatypes], then the function returns an error value as specified in [XQuery 1.0 and XPath 2.0 Data Model].
xf:value-equal(node $parameter1, node $parameter2) => boolean
xf:value-equal(node $parameter1, node $parameter2, anyURI $collation) => boolean
$parameter1— static type isnode
$parameter2— static type isnode
$collation— static type isanyURI
If the node identified by the value of $parameter1 has the same value as the node identified by the value of $parameter2, then the function returns true; otherwise, the function returns false.
We define the value-equality as follows. We assume value equality over simple values is defined. Equality of string values is determined according to the collation that is used. Equality over all other data model values is defined recursively:
Given attributes a1 and a2,
xf:value-equal(a1,a2),
if and only if
xf:value-equal(name(a1), name(a2)) and
xf:value-equal(value(a1), value(a2)).
Given elements e1 and e2,
xf:value-equal(e1, e2),
if and only if
xf:value-equal(name(e1), name(e2)) and
xf:value-equal(attributes(e1), attributes(e2)) and
xf:value-equal(children(e1), children(e2)).
Given two sequences (u1, ...,
uj) and
(v1, ..., vk),
xf:value-equal((u1,
..., uj),
(v1, ...,
vk)) holds if and
only if j = k and xf:value-equal(ui,
vi) holds for all 1 <= i <=
n.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
If the node identified by the value of $parameter1 occurs in document order before the node identified by the value of $parameter2, this function returns true; otherwise, the function returns false. The rules determining "document order" can be found in [XQuery 1.0 and XPath 2.0 Data Model].
If the nodes identified by the values of the two arguments are from different documents, the result is implementation-dependent.
[Issue 117: Data model defines document order for multiple documents]
If the node identified by the value of $parameter1 occurs in document order after the node identified by the value of $parameter2, this function returns true; otherwise, the function returns false. The rules determining "document order" can be found in [XQuery 1.0 and XPath 2.0 Data Model].
If the nodes identified by the values of the two arguments are from different documents, the result is implementation-dependent.
[Issue 117: Data model defines document order for multiple documents]
Returns a copy of the node that is the value of $srcval including all its attributes and descendants; the copy has a different identity than the node indicated by the value of $srcval.
[Issue 60: What are the precise semantics of the copy() function?]
$var = xf:copy($item1) creates a node that is a copy of the value of $item1, including its attributes and descendants, gives it a different identity, and sets the value of $var equal to it. Assume that the value of $item1 was the element node:
<family name='green'>
<father>peter</father>
<mother>mary<mother>
<child>joseph</child>
</family>
The value of $var would be
<family name='green'>
<father>peter</father>
<mother>mary<mother>
<child>joseph</child>
</family>
Returns a copy of the node that is the value of $srcval including all its attributes but not its descendants; the copy has a different identity than the node indicated by the value of $srcval.
$var = xf:copy($item1) creates a node that is a copy of $item1, including only its attributes and not its descendants, gives it a different identity, and sets the value of $varequal to it. Assume that the value of $item1 was the element node:
<family name='green'>
<father>peter</father>
<mother>mary<mother>
<child>joseph</child>
</family>
The value of $var would be
<family name='green'/>
Casts a node to a boolean. See 12.5 Miscellaneous casting functions.
[XML Schema Part 2: Datatypes] allows users to define datatypes that consist of space separated lists of values. The values must be of a specified datatype, called the itemType, which must be an atomic datatype but may be a union type. In addition, it defines three legacy XML datatypes as lists: NMTOKENS, IDREFS and ENTITIES.
[XQuery 1.0 and XPath 2.0 Data Model] defines node sets, now renamed sequences, consisting of lists of nodes. There is a significant semantic difference between lists and sequences as defined in these two specifications: a list with a single value is still a list; a sequence with a single value is equivalent to the single value by itself.
For the purpose of this section, lists and sequences as defined above are referred to as sequences.
[Issue 82: Clarify distinction between node sets, lists, and sequences]
[Issue 89: Functions that have anyType in their return are problematic.]
The operators described in this section are defined on the following types.
Node sequences
User-defined list types
NMTOKENS
IDREFS
ENTITIES
The following constructors are defined for sequences.
| Operator | Meaning |
TO
|
Returns the sequence containing every integer between the values of the operands. (Implemented as an infix operator.) |
The following operators are defined on sequences.
| Operator | Meaning |
,
|
Infix operator. Concatenates two sequences. |
The following functions are defined on sequences.
| Function | Meaning | Source |
xf:position
|
Returns an unsignedInt indicating the position of the given item in the given sequence. See also [Issue 100: Reconcile the definitions of these functions with XPath. ] | XPath 1.0 |
xf:last
|
Returns an unsignedInt indicating the last position in the given sequence. [Issue 100: Reconcile the definitions of these functions with XPath. ] | XPath 1.0 |
xf:item-at
|
Returns the item at given index. | XPath 2.0 Req 4.4 (Should) |
xf:index-of
|
Returns a sequence of unsignedInts, each of which is the index of a member of the specified sequence that is equal to the simple value or node that is the value of the second argument. If no members of the specified sequence are equal to the value of the second argument, the function returns an empty sequence. | XPath 2.0 Req 4.4 (Should) |
xf:empty
|
Indicates whether or not the provided sequence is empty. | XPath 2.0 Req 4.4 (Should) |
xf:exists
|
Indicates whether or not the provided sequence is not empty. | |
xf:identity-distinct
|
Returns a sequence in which all redundant duplicate elements, based on node identity, have been deleted. The specific node in a collection of redundant duplicate nodes that is retained in implementation-dependent. | XPath 2.0 Req 4.4 (Should) |
xf:value-distinct
|
Returns a sequence in which all redundant duplicate elements, based on value equality, have been deleted. The specific node in a collection of redundant duplicate nodes that is retained in implementation-dependent. | XPath 2.0 Req 4.4 (Should) |
xf:sort
|
Sorts into ascending order the elements in the provided sequence according to the values of the elements. | XPath 2.0 Req 4.4 (Should) |
xf:reverse-sort
|
Sorts into descending order the elements in the provided sequence according to the values of the elements. | XPath 2.0 Req 4.4 (Should) |
xf:insert
|
Inserts an element or sequence of elements into a specified position of a sequence. | XPath 2.0 Req 2.4, 4.4 (Should) |
xf:sublist-before
|
Returns the part of the first sequence that occurs before the first occurrence of the second sequence. | XPath 2.0 Req 4.4 (Should) |
xf:sublist-after
|
Returns the part of the first sequence that occurs after the last occurrence of the second sequence. | XPath 2.0 Req 4.4 (Should) |
xf:sublist
|
Returns a sequence located at a specified place in the value of a given sequence. | XPath 2.0 Req 4.4 (Should) |
xf:sequence-pad-beginning
|
Returns the sequence padded in front by copies of the third argument. | XPath 2.0 Req 2.4.2, 4.4 (Should) |
xf:sequence-pad-end
|
Returns the sequence padded at the end by copies of the third argument. | XPath 2.0 Req 2.4.2, 4.4 (Should) |
xf:truncate-beginning
|
Truncates the beginning of the sequence, resulting in a sequence whose number of elements equals the second argument. | XPath 2.0 Req 2.4, 4.4 (Should) |
xf:truncate-end
|
Truncates the beginning of the sequence, resulting in a sequence whose number of elements equals the second argument. | XPath 2.0 Req 2.4, 4.4 (Should) |
xf:resize-beginning
|
Truncates the beginning of a sequence, or pads a sequence at the beginning with the third argument, so that the sequence has a number of elements equal to the second argument. | XPath 2.0 Req 2.4, 4.4 (Should) |
xf:resize-end
|
Truncates the end of a sequence, or pads a sequence at the end with the third argument, so that the sequence has a number of elements equal to the second argument. | XPath 2.0 Req 2.4, 4.4 (Should) |
xf:unordered
|
This function provides a hint to the query optimizer that the order of the argument sequence is not important and can be ignored. | XQuery |
[Issue 63: Do we need variations of index-of for values and identity?]
[Issue 65: Are certain sequence functions both adequate and required?]
[Issue 66: A function to reorder a sequence into document order is needed]
[Issue 98: Need head() and tail() functions on sequences.]
[Issue 99: Remove sort and reverse-sort-functions. Covered by SORTBY operator in the language.]
As in the previous section, for the illustrative examples below, assume an XQuery operating on a Purchase Order document containing a number of item elements. The variable $seq is bound to the sequence of item nodes in document order. The variables $item1, $item2, etc. are bound to individual item nodes in the sequence.
Returns an unsignedInt indicating the position of the $itemParam in the $seqParam.
If the $itemParam is not contained in $seqParam, then the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 130: Several functions might become second-order functions]
$seqParam— static type isanyType*
$posParam— static type isdecimal. The effective value isfloor($posParam).
Returns the item in the sequence that is the value of $seqParam that is located at the index that is the value of $posParam.
If the value of $posParam is greater than the number of items in the sequence, or is less than or equal to zero, then the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
xf:index-of(anyType* $seqParam, anyType $srchParam) => unsignedInt*
xf:index-of(anyType* $seqParam, anyType $srchParam, anyURI $collation) => unsignedInt*
$seqParam— static type isanyType*
$srchParam— static type isanyType
$collation— static type isanyURI
If the value of $seqParam contains simple values (that is, not nodes), then the function returns a sequence of values indicating the indexes (positions) of items in the value of $seqParam that are equal to the simple value of $srchParam. If the data types of the simple values are strings, then equality is determined according to the collation that is used.
If the value of $seqParam contains nodes, then the function returns a sequence of values indicating the indexes (positions) of nodes whose string values are equal to the string value of the node in the second argument. Equality of string values is determined according to the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
The sequence must contain either simple values or nodes, not both. If the sequence contains both simple values and nodes, then the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $seqParam is an empty sequence, then the returned value is an empty sequence.
The index is 1-based (not 0-based).
xf:value-distinct(anyType* $srcval) => anyType*
xf:value-distinct(anyType* $srcval, anyURI $collation) => anyType*
Returns the sequence that results from removing from $srcval all but the first of a set of nodes that are equal to one other, based on the nodes' values (that is, using value-equal()). If the sequence is a sequence of nodes, then the typed values of the nodes are used for the comparison. The specific node in a collection of nodes having equal values that is retained in implementation-dependent. Equality of string values are determined according to the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
Sorts into ascending order the sequence that is the value of $srcval using the typed values of the elements of the sequence.
The sequence must be a sequence of comparable objects.
If the sequence contains any two items that are not comparable with one another, then an error value is returned as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval is a sequence of string values, or if the value of $srcval is a sequence of nodes that are compared according to their string values, then the ordering is performed based on the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
Sorts into descending order the sequence that is the value of $srcval using the typed values of the elements of the sequence.
The sequence must be a sequence of comparable objects.
If the sequence contains any two items that are not comparable with one another, then an error value is returned as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If the value of $srcval is a sequence of string values, or if the value of $srcval is a sequence of nodes that are compared according to their string values, then the ordering is performed based on the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
[Issue 64: Should reverse-sort be replaced by generic reverse?]
$target— static type isanyType*
$position— static type isdecimal. The effective value is computed asfloor($position).
$inserts— static type isanyType*
Returns a new sequence constructed from the value of $target with the value of $inserts inserted at the position specified by the value of $position. (The value of $target is not affected by the sequence construction.)
Let the effective value of $position be N.
If N is less than zero, the effective value of N is zero. If N is greater than the number of items in $target, then the effective value of N is equal to the number of items in $target.
The value returned by the function consists of all items of $target whose index is less than or equal to N, followed by all items of $inserts, followed by the remaining elements of $target, in that sequence.
xf:sublist-before(anyType* $parameter1, anyType* $parameter2) => anyType*
xf:sublist-before(anyType* $parameter1, anyType* $parameter2, anyURI $collation) => anyType*
$parameter1— static type isanyType*
$parameter2— static type isanyType*
$collation— static type isanyURI
If there is at least one contiguous sequence of elements in the value of $parameter1 that are, taken in order, equal
to the elements of the value of $parameter2, then the function returns a sequence constructed of every element of the value of $parameter1, taken in order, that occur before the first such contiguous sequence of elements in the value of $parameter1. In sequences of simple values, elements are compared for equality by value. In sequences of nodes, they
are compared by identity.
If the value of $operand1 does not contain such a contiguous sequence of elements, then the function returns the empty sequence.
If the values of $parameter1 and $parameter2 are sequences of string values, or if the values of $parameter1 and $parameter2 are a sequences of nodes that are compared according to their string values, then the ordering is performed based on the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
[Issue 130: Several functions might become second-order functions]
xf:sublist-after(anyType* $parameter1, anyType* $parameter2) => anyType*
xf:sublist-after(anyType* $parameter1, anyType* $parameter2, anyURI $collation) => anyType*
$parameter1— static type isanyType*
$parameter2— static type isanyType*
$collation— static type isanyURI
If there is at least one contiguous sequence of elements in the value of $parameter1 that are, taken in order, equal
to the elements of the value of $parameter2, then the function returns a sequence constructed of every element of the value of $parameter1, taken in order, that occur after the last such contiguous sequence of elements in the value of $parameter1. In sequences of simple values, elements are compared for equality by value. In sequences of nodes, they
are compared by identity.
If the value of $operand1 does not contain such a contiguous sequence of elements, then the function returns the empty sequence.
If the values of $parameter1 and $parameter2 are sequences of string values, or if the values of $parameter1 and $parameter2 are a sequences of nodes that are compared according to their string values, then the ordering is performed based on the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
[Issue 130: Several functions might become second-order functions]
xf:sublist(anyType* $sourceSeq, decimal $startingLoc) => anyType*
xf:sublist(anyType* $sourceSeq, decimal $startingLoc, decimal $length) => anyType*
$sourceSeq— static type isanyType*
$startingLoc— static type isdecimal. The effective value is computed asfloor($startingLoc).
$length— static type isdecimal. The effective value is computed asfloor($length).
Returns the contiguous sequence of items in the value of $sourceSeq beginning at the position indicated by the value of $startingLoc and continuing for the number of items indicated by the value of $length.
If $length is not specified, then the sublist identifies items to the end of $sourceSeq.
The value of $length can be greater than the number of items in the value of $sourceSeq following the beginning position, in which case the sublist identifies items to the end of $length.
The first item of a sequence is located at position 1 (not position 0).
xf:sequence-pad-beginning(anyType* $srcval, decimal $padCount, anyType $padItem) => anyType*
$srcval— static type isanyType*
$padCount— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($padCount)).
$padItem— static type isanyType
Returns a new sequence constructed from the value of $srcval in which zero or more copies of the value of $padItem have been inserted preceding the first item in the value of $srcval. The number of copies of the value of $padItem that are inserted is equal to the value of $padCount.
If the value of $padItem has a type that is not the type of the items in the value of $srcval, then the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 130: Several functions might become second-order functions]
xf:sequence-pad-end(anyType* $srcval, decimal $padCount, anyType $padItem) => anyType*
$srcval— static type isanyType*
$padCount— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($padCount)).
$padItem— static type isanyType
Returns a new sequence constructed from the value of $srcval in which zero or more copies of the value of $padItem have been inserted following the last item in the value of $srcval. The number of copies of the value of $padItem that are inserted is equal to the value of $padCount.
If the value of $padItem has a type that is not the type of the items in the value of $srcval, then the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 130: Several functions might become second-order functions]
$srcval— static type isanyType*
$length— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($length)).
Returns a sequence constructed from the sequence that is the value of $srcval, removing elements from the beginning of the sequence until the number of remaining elements is equal to the effective value of $length.
If the number of elements in the sequence that is the value of $srcval is less than or equal to the value of $length, then the returned sequence is the value of $srcval.
[Issue 130: Several functions might become second-order functions]
$srcval— static type isanyType*
$length— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($length)).
Returns a sequence constructed from the sequence that is the value of $srcval, removing elements from the end of the sequence until the number of remaining elements is equal to the effective value of $length.
If the number of elements in the sequence that is the value of $srcval is less than or equal to the value of $length, then the returned sequence is the value of $srcval.
[Issue 130: Several functions might become second-order functions]
xf:resize-beginning(anyType* $srcval, decimal $finalLength, anyType $padItem) => anyType*
$srcval— static type isanyType*
$finalLength— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($finalLength)).
$padItem— static type isanyType
Returns a sequence constructed from the sequence that is the value of $srcval.
If the number of elements in the value of $srcval is greater than the value of $finalLength, then elements are removed from the beginning of the value of $srcval until the number of remaining elements is equal to the value of $finalLength.
If the number of elements in the value of $srcval is equal to the value of $finalLength, then the returned sequence is the value of $srcval.
If the number of elements in the value of $srcval is less than the value of $finalLength, then the returned sequence is modified by adding instances of the value of $padItem at the beginning of the returned sequence until the number of elements of the returned sequence is equal to the value of $finalLength.
[Issue 130: Several functions might become second-order functions]
NOTE:This is a "convenience function" that effectively performs a
pad-beginningor atruncate-beginningas required to fulfil the$finalLengthcriterion.
xf:resize-end(anyType* $srcval, decimal $finalLength, anyType $padItem) => anyType*
$srcval— static type isanyType*
$finalLength— static type isdecimal. The effective value is computed ascast as unsignedInt(floor($finalLength)).
$padItem— static type isanyType
Returns a sequence constructed from the sequence that is the value of $srcval.
If the number of elements in the value of $srcval is greater than the value of $finalLength, then elements are removed from the end of the value of $srcval until the number of remaining elements is equal to the value of $finalLength.
If the number of elements in the value of $srcval is equal to the value of $finalLength, then the returned sequence is the value of $srcval.
If the number of elements in the value of $srcval is less than the value of $finalLength, then the returned sequence is modified by appending instances of the value of $padItem at the end of the returned sequence until the number of elements of the returned sequence is equal to the value of $finalLength.
[Issue 130: Several functions might become second-order functions]
NOTE:This is a "convenience function" that effectively performs a
pad-endor atruncate-endas required to fulfil the$finalLengthcriterion.
| Function | Meaning | Source |
xf:sequence-value-equal
|
Returns true if the two arguments have the same value. | Data Model |
xf:sequence-node-equal
|
Returns true if the two arguments have the same nodes. | Data Model |
xf:union
|
Returns the union of the two sequence arguments, eliminating duplicates. | XPath 2.0 Req 1.5 (Should) |
xf:union-all
|
Returns the union of the two sequence arguments without eliminating duplicates. | |
xf:intersect
|
Returns the intersection of the two sequence arguments, eliminating duplicates. XPath uses "&" for this. | XPath 2.0 Req 1.5 (Should) |
xf:intersect-all
|
Returns the intersection of the two sequence arguments without eliminating duplicates. | |
xf:except
|
Returns the difference of the two sequence arguments, eliminating duplicates. | XPath 2.0 Req 1.5 (Should) |
xf:except-all
|
Returns the difference of the two sequence arguments without eliminating duplicates. |
[Issue 91: Need value-based functions for Union, Intersect and Except.]
[Issue 102: Need operators for UNION, INTERSECT and EXCEPT.]
[Issue 132: union(), intersect(), and except(): only for simple values?]
As in the previous sections, for the illustrative examples below, assume a XQuery operating on a Purchase
Order document containing a number of item elements. The variables
$item1, $item2, etc. are bound to individual item nodes in the sequence. We shall use sequences of these nodes in the examples below.
xf:sequence-value-equal(anyType* $parameter1, anyType* $parameter2) => boolean
xf:sequence-value-equal(anyType* $parameter1, anyType* $parameter2, anyURI $collation) => boolean
$parameter1— static type isanyType*
$parameter2— static type isanyType*
$collation— static type isanyURI
If the sequences that are the values of $parameter1 and $parameter2 have the same values (that is, they have the same number of items and items in corresponding positions in the two sequences are value-equal), then the function returns true; otherwise, the function returns false. Returns the empty sequence if one or both of its arguments is the empty sequence.
String values are compared according to the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
If the sequences that are the values of $parameter1 and $parameter2 have the same nodes as content (that is, they have the same number of items and items in corresponding positions in the two sequences are the identical nodes), then the function returns true; otherwise, the function returns false. Returns the empty sequence if one or both of its arguments is the empty sequence.
Constructs a sequence containing every element that occurs in the values of $parameter1 or of $parameter2, eliminating redundant duplicate elements. The specific element in a collection of redundant duplicate elements that is retained in implementation-dependent.
Elements are compared using xf:node-equal().
The returned sequence is a sequence of nodes (that is, not of the values of the nodes) in document order, as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Note: XPath uses "|" for union().
Constructs a sequence containing every element that occurs in the values of $parameter1 or of $parameter2, retaining redundant duplicate elements (that is, duplicates are not eliminated).
Elements are compared using xf:node-equal().
The returned sequence is in document order, as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Constructs a sequence containing every element that occurs in the values of both $parameter1 and $parameter2, eliminating redundant duplicate elements. The specific element in a collection of redundant duplicate elements that is retained in implementation-dependent.
Elements are compared using xf:node-equal().
The returned sequence is in document order, as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Constructs a sequence containing every element that occurs in the values of both $parameter1 and $parameter2, retaining redundant duplicate elements (that is, duplicates are not eliminated).
The number of each redundant duplicate element that is included in the result is the minimum of the number of occurrences of the element in $parameter1 and the number of occurrences of the element in $parameter2.
Elements are compared using xf:node-equal().
The returned sequence is in document order, as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Constructs a sequence containing every element that occurs in the values of $parameter1, but not in the value of $parameter2, eliminating redundant duplicate elements. The specific element in a collection of redundant duplicate elements that is retained in implementation-dependent.
Elements are compared using xf:node-equal().
The returned sequence is in document order, as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Constructs a sequence containing every element that occurs in the values of $parameter1, but not in the value of $parameter2, retaining redundant duplicate elements (that is, duplicates are not eliminated).
The number of each redundant duplicate element that is included in the result is the difference between the number of occurrences of the element in $parameter1 and the number of occurrences of the element in $parameter2.
Elements are compared using xf:node-equal().
The returned sequence is in document order, as defined in [XQuery 1.0 and XPath 2.0 Data Model].
| Function | Meaning | Source |
xf:count
|
Returns the number of items in the sequence. | XPath 1.0 |
xf:avg
|
Returns the average of a sequence of numbers. | XSLT 2.0 Req. 1.4 (Must) |
xf:max
|
Returns the object with maximum value from a collection of comparable objects. | XSLT 2.0 Req. 1.4 (Must) |
xf:min
|
Returns the object with minimum value from a collection of comparable objects. | XSLT 2.0 Req. 1.4 (Must) |
xf:sum
|
Returns the sum of a sequence of numbers. | XSLT 1.0 |
Returns the number of items in the value of $srcval.
[Issue 67: Should duplicates be eliminated for count() and sum()?]
If every item in the value of $srcval is a number, then the function returns the average of the numbers (computed as sum($srcval) div count($srcval)).
Otherwise, the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
xf:max(anyType* $srcval) => anyType
xf:max(anyType* $srcval, anyURI $collation) => anyType
Returns the item in the value of $srcval whose value is greater than the value of every other item in the value of $srcval. If there are two or more such items, then the specific item whose value is returned is implementation-dependent.
If the items in the value of $srcval are strings, then the determination of the greatest item is made according to the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
xf:max(anyType* $srcval) => anyType
xf:min(anyType* $srcval, anyURI $collation) => anyType
Returns the item in the value of $srcval whose value is less than the value of every other item in the value of $srcval. If there are two or more such items, then the specific item whose value is returned is implementation-dependent.
If the items in the value of $srcval are strings, then the determination of the least item is made according to the collation that is used.
If $collation is specified, then the value of $collation must identify a collation that is supported in the environment in which the function is invoked. Either an absolute URI or a relative URI may be specified. The collation identified by $collation, while effectively based on the Unicode Collation Algorithm, has implementation-defined semantics.
If no collation is specified, then the default collation is used. The default collation is determined according to the rules in TO BE DETERMINED.
If every item in the value of $srcval is a number, then the function returns the sum of those numbers.
Otherwise, the function returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 67: Should duplicates be eliminated for count() and sum()?]
| Function | Meaning | Source |
xf:id
|
Returns the sequence of nodes having unique IDs that match the IDREFs represented by the argument sequence. | XPath 1.0 |
xf:idref
|
Returns the sequence of nodes with IDREFs matching the items in the argument sequence. | XSLT 2.0 Req. 2.11 (Could) |
xf:filter
|
Returns a shallow copy of the nodes that are selected by the expression argument, preserving any relationships that exist among these nodes. | XQuery |
xf:document
|
Treats its string argument as a URI Reference and returns the root node of the referenced document. | XSLT 1.0 |
[Issue 43: Are function names ID/id and IDREF/idref confusing?]
[Issue 68: The id-nodes() and id-NMTOKENS() functions must specify result documents]
Returns the sequence of element nodes with an IDREF value
matching the value of one of the items in the sequence argument or an IDREFS value containing an IDREF matching the value of one of the items in the sequence argument. If the value of $srcval is a single string, it behaves as though a sequence of length one of strings was supplied. This function allows reverse navigation from IDs to IDREFs.
The filter function returns a shallow copy of the nodes that are selected by expression that is the value of $srcval, preserving any relationships that exist among these nodes.
Suppose that the argument to filter is a path expression that selects nodes X, Y, and Z from some document. Suppose that, in the original document, nodes Y and Z are descendants (at any level) of node X. Then the result of filter is a copy of node X, with copies of nodes Y and Z as its immediate children. Any other intervening nodes from the original document are not includeed in the result. The name filter suggests a function that operates on a document to extract the parts that are of interest and discard the remainder, while retaining the structure of the original document.
Treats the string value of $srcval as a URI reference and returns the root node of the referenced document. Returns an error if the document cannot be accessed. [XSLT 1.0] allows many other kinds of arguments and returns a sequence of nodes.
Cast functions or cast operators take an expression as their argument and return a value of a given type. There are two basic differences from constructor: casting takes an expression rather than a literal as argument, and validity checking is done at run time rather than at compile time.
[Issue 17: Is CAST a function/operator for this document?]
In this specification, casting is available for conversions between certain combinations of the primitive and derived types defined by [XML Schema Part 2: Datatypes]. The type conversions that are supported are indicated in the following tables. In these tables, there is a row for each primitive and derived type for which a conversion is defined with that type as the source of the conversion. In addition, there is a column for each primitive and derived type for which a conversion is defined with that type as the target of the conversion. The intersections of rows and columns contain one of three characters: "Y" indicates that a conversion from values of the type to which the row applies to the type to which the column applies is supported; "N" indicates that there are no supported conversions from values of the type to which the row applies to the type to which the column applies; and "M" indicates that a conversion from values of the type to which the row applies to the type to which the column applies may be supported, subject to restrictions given in this section of this specification. (Temporarily, while this specification is under development, there may be table entries containing "?", indicating that it has not yet been determined whether or not a conversion is provided.)
In the following tables, the columns and rows are identified by short codes that identify simple (both primitive and derived) types as follows:
aURI = anyURI
b64 = base64Binary
bool = boolean
byt = byte
dat = date
Day = gDay
dbl = double
dec = decimal
dT = dateTime
dur = duration
ENS = ENTITIES
ENT = ENTITY
flt = float
hxB = hexBinary
ID = ID
IDR = IDREF
IDS = IDREFS
int = int
itg = integer
lan = language
lng = long
MD = gMonthDay
Mon = gMonth
Nam = Name
NC = NCNAME
nI = negativeInteger
NMS = NMTOKENS
NMT = NMTOKEN
nNI = nonNegativeInteger
NOT = NOTATION
nPI = nonPositiveInteger
nStr = normalizedString
pI = positiveInteger
QN = Qname
sh = short
str = string
tim = time
tok = token
uB = unsignedByte
uI = unsignedInt
uL = unsignedLong
uS = unsignedShort
YM = gYearMonth
Yr = gYear
In each of the following tables, the notation "S\T" indicates that the source ("S") of the conversion is indicated in the column below the notation and that the target ("T") is indicated in the row to the right of the notation.
[Issue 83: Are the cast tables appropriately structured and ordered?]
The following table covers conversions to string and its derived types.
| S\T | str | nStr | tok | lan | Nam | NC | ID | IDR | IDS | ENT | ENS | NMT | NMS |
| str | Y | Y | Y | M | M | M | N | N | N | N | N | M | M |
| nStr | Y | Y | Y | M | M | M | N | N | N | N | N | M | M |
| tok | Y | Y | Y | M | M | M | N | N | N | N | N | M | M |
| lan | Y | Y | Y | Y | Y | Y | N | N | N | N | N | Y | Y |
| Nam | Y | Y | Y | Y | Y | Y | N | N | N | N | N | Y | Y |
| NC | Y | Y | Y | M | M | Y | N | N | N | N | N | Y | Y |
| ID | Y | Y | Y | M | Y | Y | N | N | N | N | N | Y | Y |
| IDR | Y | Y | Y | M | Y | Y | N | N | N | N | N | Y | Y |
| IDS | Y | Y | Y | M | M | M | N | N | N | N | N | M | Y |
| ENT | Y | Y | Y | M | Y | Y | N | N | N | N | N | Y | Y |
| ENS | Y | Y | Y | M | M | M | N | N | N | N | N | M | Y |
| NMT | Y | Y | Y | M | Y | Y | N | N | N | N | N | Y | Y |
| NMS | Y | Y | Y | M | M | M | N | N | N | N | N | M | Y |
| flt | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| dbl | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| dec | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| itg | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| nPI | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| nI | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| lng | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| int | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| sh | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| byt | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| nNI | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| uL | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| uI | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| uS | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| uB | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| pI | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| dur | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| dT | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| tim | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| dat | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| YM | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| Yr | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| MD | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| Day | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| Mon | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| bool | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| b64 | Y | Y | Y | M | M | M | M | M | M | M | M | M | M |
| hxB | Y | Y | Y | M | M | M | M | M | M | M | M | M | M |
| aURI | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| QN | Y | Y | Y | N | N | N | N | N | N | N | N | N | N |
| NOT | Y | Y | Y | M | M | M | M | M | M | M | M | M | M |
As specified in the preceding table, casting is supported from almost every data type (the exception is base64Binary) into the primitive type string and into its derived types normalizedString and token. Conversion to other types derived from string depends on factors considered below. (If the entry in the preceding table is "N", then no cast is supported; consequently, the following specifications do not discuss those conversions.)
When a value of any simple type is cast to string, the derivation of the string value TV depends on the source type ST and on the source value SV, as follows.
If ST is string, normalizedString, token, language, Name, NCName, ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, or NMTOKENS, then TV is SV.
If ST is float, double, decimal, integer, nonPositiveInteger, negativeInteger, long, int, short, byte, nonNegativeInteger, unsignedLong, unsignedInt, unsignedShort, unsignedByte, or positiveInteger, then TV is the canonical representation of SV, as defined by [XML Schema Part 2: Datatypes].
If ST is duration, then TV is the lexical representation of SV, as defined by [XML Schema Part 2: Datatypes], in which each integer and decimal component is expressed in its canonical representation.
If ST is dateTime or time, then TV is the canonical representation of SV, as defined by [XML Schema Part 2: Datatypes].
If ST is date, gYearMonth, gYear, gMonthDay, gDay, or gMonth, then TV is the lexical representation of SV, as defined by [XML Schema Part 2: Datatypes].
If ST is boolean, then TV is "true" if SV is true and "false" if SV is false.
If ST is hexBinary, then TV is the canonical representation of SV, as defined by [XML Schema Part 2: Datatypes].
If ST is anyURI, then TV is the lexical representation of SV, as defined in [XML Schema Part 2: Datatypes], with each space replaced by the sequence "%20".
If ST is QName or NOTATION, then TV is SV.
When a value of any simple type is cast to normalizedString, the normalizedString value TV is derived from the source type ST and the source value SV> as follows:
SV is converted to an intermediate value IV of type string.
IV is converted to normalizedString by removing from it all carriage return codes (#xD), all line feed codes (#xA), and all tab characters (#x9).
When a value of any simple type is cast to token, the token value TV is derived from the source type ST and the source value SV> as follows:
SV is converted to an intermediate value IV of type string.
IV is converted to token by removing from it all all line feed codes (#xA) and all tab characters (#x9), then removing all spaces (#x20) that precede all non-space characters (leading spaces) and all spaces that follow all non-space characters (trailing spaces), and then replacing all sequences of two or more spaces (#x20) with a single space.
[Issue 84: When casting to token, are linefeed/tab converted to space?]
When a value of any simple type is cast to language, the language value TV is derived from the source type ST and the source value SV as follows:
If ST is language, then TV is SV and the conversion is complete.
SV is converted to an intermediate value IV of type NMTOKEN.
If IV is not a valid value for language as defined in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to Name, the Name value TV is derived from the source type ST and the source value SV as follows:
If ST is name, then TV is SV and the conversion is complete.
SV is converted to an intermediate value IV of type string.
If IV is not a valid value for Name as defined in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to NCName, the NCName value TV is derived from the source type ST and the source value SV as follows:
If ST is NCName, ID, or IDREF, then TV is SV and the conversion is complete.
SV is converted to an intermediate value IV of type string.
If IV is not a valid value for NCName as defined in [Namespaces in XML], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to NMTOKEN, the NMTOKEN value TV is derived from the source type ST and the source value SV as follows:
If ST is NMTOKEN, then TV is SV and the conversion is complete.
SV is converted to an intermediate value IV of type string.
If IV is not a valid value for NMTOKEN as defined in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to NMTOKENS, the NMTOKENS value TV is derived from the source type ST and the source value SV as follows:
If ST is NMTOKEN or NMTOKENS, then TV is SV and the conversion is complete.
SV is converted to an intermediate value IV of type string.
If IV is not a valid value for NMTOKENS as defined in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
The following table covers conversions to float and to double, and to decimal and its derived types.
| S\T | flt | dbl | dec | itg | nPI | nI | lng | int | sh | byt | nNI | uL | uI | uS | uB | pI |
| str | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M |
| nStr | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M |
| tok | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M |
| lan | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| Nam | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| NC | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| ID | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| IDR | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| IDS | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| ENT | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| ENS | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| NMT | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| NMS | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| flt | Y | Y | M | M | M | M | M | M | M | M | M | M | M | M | M | M |
| dbl | M | Y | M | M | M | M | M | M | M | M | M | M | M | M | M | M |
| dec | Y | Y | Y | M | M | M | M | M | M | M | M | M | M | M | M | M |
| itg | Y | Y | Y | Y | M | M | M | M | M | M | M | M | M | M | M | M |
| nPI | Y | Y | Y | Y | Y | M | M | M | M | M | M | M | M | M | M | N |
| nI | Y | Y | Y | Y | Y | Y | M | M | M | M | N | N | N | N | N | N |
| lng | Y | Y | Y | Y | M | M | Y | M | M | M | M | M | M | M | M | M |
| int | Y | Y | Y | Y | M | M | Y | Y | M | M | M | M | M | M | M | M |
| sh | Y | Y | Y | Y | M | M | Y | Y | Y | M | M | M | M | M | M | M |
| byt | Y | Y | Y | Y | M | M | Y | Y | Y | Y | M | M | M | M | M | M |
| nNI | Y | Y | Y | Y | M | N | M | M | M | M | Y | M | M | M | M | M |
| uL | Y | Y | Y | Y | M | N | M | M | M | M | Y | Y | M | M | M | M |
| uI | Y | Y | Y | Y | M | N | Y | M | M | M | Y | Y | Y | M | M | M |
| uS | Y | Y | Y | Y | M | N | Y | Y | M | M | Y | Y | Y | Y | M | M |
| uB | Y | Y | Y | Y | M | N | Y | Y | Y | M | Y | Y | Y | Y | Y | M |
| pI | Y | Y | Y | Y | N | N | M | M | M | M | M | M | M | M | M | Y |
| dur | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| dT | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| tim | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| dat | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| YM | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| Yr | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| MD | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| Day | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| Mon | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| bool | Y | Y | Y | Y | M | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | M |
| b64 | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| hxB | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M | M |
| aURI | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| QN | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| NOT | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
As specified in the preceding table, conversion from various simple types to the various numeric types (that is, float, double, decimal, and types derived from decimal) depends on factors considered below. (If the entry in the preceding table is "N", then no cast is supported; consequently, the following specifications do not discuss those conversions.)
When a value of any simple type is cast to float, the float value TV is derived from the source type ST and the source value SV as follows:
If ST is float, then TV is SV and the conversion is complete.
If ST is double and SV cannot be represented in the value space of float as defined in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is double and SV can be represented in the value space of float as defined in [XML Schema Part 2: Datatypes], then TV is SV and the conversion is complete.
If ST is decimal, integer, nonPositiveInteger, negativeInteger, long, int, short, byte, nonNegativeInteger, unsignedLong, unsignedInt, unsignedShort, unsignedByte, or positiveInteger, then TV is xf:float(cast as string(
SV
)) and the conversion is complete.
SV is converted to an intermediate value IV of type token.
If the value of xf:upper(
IV
) is INF, -INF, or NAN, then TV is positive infinity, negative infinity, or not-a-number, respectively, and the conversion is complete.
If IV does not match the lexical structure of NumericLiteral as defined in [XQuery 1.0: An XML Query Language], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
[Issue 50: Should double("ZZZ") or cast as float("ZZZ") return an error or NaN? ]
Otherwise, let NL be a NumericLiteral comprising the same sequence of characters as IV. TV is xf:float(
NL
).
When a value of any simple type is cast to double, the double value TV is derived from the source type ST and the source value SV as follows:
If ST is double, then TV is SV and the conversion is complete.
If ST is float, decimal, integer, nonPositiveInteger, negativeInteger, long, int, short, byte, nonNegativeInteger, unsignedLong, unsignedInt, unsignedShort, unsignedByte, or positiveInteger, then TV is xf:double(cast as string(
SV
)) and the conversion is complete.
SV is converted to an intermediate value IV of type token.
If the value of xf:upper(
IV
) is INF, -INF, or NAN, then TV is positive infinity, negative infinity, or not-a-number, respectively, and the conversion is complete.
If IV does not match the lexical structure of NumericLiteral as defined in [XQuery 1.0: An XML Query Language], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, let NL be a NumericLiteral comprising the same sequence of characters as IV. TV is xf:double(
NL
).
When a value of any simple type is cast to decimal, the decimal value TV is derived from the source type ST and the source value SV as follows:
If ST is decimal, then TV is SV and the conversion is complete.
If ST is integer, nonPositiveInteger, negativeInteger, long, int, short, byte, nonNegativeInteger, unsignedLong, unsignedInt, unsignedShort, unsignedByte, or positiveInteger, then TV is decimal(cast as string(
SV
)) and the conversion is complete.
If ST is float or double, then TV is decimal(cast as string(xf:round(
SV
))) and the conversion is complete.
SV is converted to an intermediate value IV of type token.
If IV does not match the lexical structure of NumericLiteral as defined in [XQuery 1.0: An XML Query Language], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, let NL be a NumericLiteral comprising the same sequence of characters as IV. TV is decimal(cast as string(xf:round(
NL
))).
When a value of any simple type is cast to integer, the integer value TV is derived from the source type ST and the source value SV as follows:
If ST is integer, nonPositiveInteger, negativeInteger, long, int, short, byte, nonNegativeInteger, unsignedLong, unsignedInt, unsignedShort, unsignedByte, or positiveInteger, then TV is integer(cast as string(
SV
)) and the conversion is complete.
If ST is decimal, float or double, then TV is integer(cast as string(xf:round(
SV
))) and the conversion is complete.
SV is converted to an intermediate value IV of type token.
If IV does not match the lexical structure of NumericLiteral as defined in [XQuery 1.0: An XML Query Language], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, let NL be a NumericLiteral comprising the same sequence of characters as IV. TV is integer(cast as string(xf:round(
NL
))).
When a value of any simple type is cast to nonPositiveInteger, the nonPositiveInteger value TV is derived from the source type ST and the source value SV as follows:
SV is converted to an intermediate value IV of type integer.
If IV is greater than zero, then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to negativeInteger, the negativeInteger value TV is derived from the source type ST and the source value SV as follows:
SV is converted to an intermediate value IV of type integer.
If IV is greater than or equal to zero, then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to long, int, short, or byte, the long, int, short, or byte, respectively, value TV is derived from the source type ST and the source value SV as follows:
SV is converted to an intermediate value IV of type integer.
If IV is greater than the value of maxInclusive for long, int, short, or byte, respectively, or less than the value of minInclusive for long, int, short, or byte, respectively, as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to nonNegativeInteger, the nonNegativeInteger value TV is derived from the source type ST and the source value SV as follows:
SV is converted to an intermediate value IV of type integer.
If IV is less than zero, then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to unsignedLong, unsignedInt, unsignedShort, or unsignedByte, the unsignedLong, unsignedInt, unsignedShort, or unsignedByte, respectively, value TV is derived from the source type ST and the source value SV as follows:
SV is converted to an intermediate value IV of type integer.
If IV is greater than the value of maxInclusive for unsignedLong, unsignedInt, unsignedShort, or unsignedByte, respectively, as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
When a value of any simple type is cast to positiveInteger, the positiveInteger value TV is derived from the source type ST and the source value SV as follows:
SV is converted to an intermediate value IV of type integer.
If IV is less than or equal to zero, then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
Otherwise, TV is IV.
The following table covers conversions to datetime and duration types.
| S\T | dur | dT | tim | dat | YM | Yr | MD | Day | Mon |
| str | M | M | M | M | M | M | M | M | M |
| nStr | M | M | M | M | M | M | M | M | M |
| tok | N | N | N | N | N | N | N | N | N |
| lan | N | N | N | N | N | N | N | N | N |
| Nam | N | N | N | N | N | N | N | N | N |
| NC | N | N | N | N | N | N | N | N | N |
| ID | N | N | N | N | N | N | N | N | N |
| IDR | N | N | N | N | N | N | N | N | N |
| IDS | N | N | N | N | N | N | N | N | N |
| ENT | N | N | N | N | N | N | N | N | N |
| ENS | N | N | N | N | N | N | N | N | N |
| NMT | N | N | N | N | N | N | N | N | N |
| NMS | N | N | N | N | N | N | N | N | N |
| flt | N | N | N | N | N | N | N | N | N |
| dbl | N | N | N | N | N | N | N | N | N |
| dec | N | N | N | N | N | N | N | N | N |
| itg | N | N | N | N | N | N | N | N | N |
| nPI | N | N | N | N | N | N | N | N | N |
| nI | N | N | N | N | N | N | N | N | N |
| lng | N | N | N | N | N | N | N | N | N |
| int | N | N | N | N | N | N | N | N | N |
| sh | N | N | N | N | N | N | N | N | N |
| byt | N | N | N | N | N | N | N | N | N |
| nNI | N | N | N | N | N | N | N | N | N |
| uL | N | N | N | N | N | N | N | N | N |
| uI | N | N | N | N | N | N | N | N | N |
| uS | N | N | N | N | N | N | N | N | N |
| uB | N | N | N | N | N | N | N | N | N |
| pI | N | N | N | N | N | N | N | N | N |
| dur | Y | N | N | N | N | N | N | N | N |
| dT | N | Y | Y | Y | Y | Y | Y | Y | Y |
| tim | N | Y | Y | N | N | N | N | N | N |
| dat | N | Y | N | Y | Y | Y | Y | Y | Y |
| YM | N | Y | N | Y | Y | Y | Y | N | Y |
| Yr | N | Y | N | Y | Y | Y | N | N | N |
| MD | N | Y | N | Y | Y | N | Y | Y | Y |
| Day | N | Y | N | Y | N | N | Y | Y | N |
| Mon | N | Y | N | Y | Y | N | Y | N | Y |
| bool | N | N | N | N | N | N | N | N | N |
| b64 | N | N | N | N | N | N | N | N | N |
| hxB | N | N | N | N | N | N | N | N | N |
| aURI | N | N | N | N | N | N | N | N | N |
| QN | N | N | N | N | N | N | N | N | N |
| NOT | N | N | N | N | N | N | N | N | N |
As specified in the preceding table, conversion from various simple types to the various duration- and time-related types depends on factors considered below. (If the entry in the preceding table is "N", then no cast is supported; consequently, the following specifications do not discuss those conversions.)
When a value of any simple type is cast to duration, the duration value TV is derived from the source type ST and the source value SV as follows:
If ST is duration, then TV is SV.
| Editorial note | |
It is unclear what effects the pattern facet of either the source or target duration items should have on this conversion. | |
If ST is string or normalizedString, then TV is xf:duration(cast as string(
SV
)).
When a value of any simple type is cast to dateTime, time, date, gYearMonth, gYear,
gMonthDay, gDay, or gMonth, let CYR be cast as string( xf:get-Year( xf:currentDateTime() ) ), let CMO be cast as string( xf:get-month( xf:currentDateTime() ) ), and let CDA be cast as string( xf:get-day( xf:currentDateTime() ) ).
When a value of any simple type is cast to dateTime, the dateTime value TV is derived from the source type ST and the source value SV as follows:
If ST is dateTime, then TV is SV.
If ST is time, then let SHR be cast as string( xf:get-hour(
SV
) ), let SMI be cast as string( xf:get-minute(
SV
) ), and let SSE be cast as string( xf:get-second(
SV
) ); TV is xf:dateTime( xf:concat(
CYR
, '-',
CMO
, '-',
CDA
, 'T',
SHR
, ':',
SMI
, ':',
SSE
) ).
If ST is date, then let SYR be cast as string( xf:get-Year(
SV
) ), let SMO be cast as string( xf:get-month(
SV
) ), and let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:dateTime( xf:concat(
SYR
, '-',
SMO
, '-',
SDA
, 'T00:00:00') ).
If ST is gYearMonth, then let SYR be cast as string( xf:get-Year(
SV
) ) and let SMO be cast as string( xf:get-month(
SV
) ); TV is xf:dateTime( xf:concat(
SYR
, '-',
SMO
, '-01T00:00:00') ).
If ST is gYear, then let SYR be cast as string( xf:get-Year(
SV
) ); TV is xf:dateTime( xf:concat(
SYR
, '-01-01T00:00:00') ).
If ST is gMonthDay, then let SMO be cast as string( xf:get-month(
SV
) ) and let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:dateTime( xf:concat(
CYR
, '-',
SMO
, '-',
SDA
, 'T00:00:00') ).
If ST is gDay, then let SDA be cast as string(
SV
); TV is xf:dateTime( xf:concat(
CYR
, '-',
CMO
, '-',
SDA
, 'T00:00:00') ).
If ST is gMonth, then let SMO be cast as string(
SV
); TV is xf:dateTime( xf:concat(
CYR
, '-',
SMO
, '-01T00:00:00') ).
If ST is string or normalizedString and SV is not a valid lexical representation for dateTime as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is string or normalizedString and SV is a valid lexical representation for dateTime as specified in [XML Schema Part 2: Datatypes], then TV is xf:dateTime(
SV
).
When a value of any simple type is cast to time, the time value TV is derived from the source type ST and the source value SV as follows:
If ST is time, then TV is SV.
If ST is dateTime, then TV is xf:time( xf:concat( cast as string( xf:get-hour(
SV
) ), ':', cast as string( xf:get-minute(
SV
) ), ':', cast as string( xf:get-second(
SV
) ) ) ).
If ST is string or normalizedString and SV is a valid lexical representation for time as specified in [XML Schema Part 2: Datatypes], then TV is xf:time(
SV
).
When a value of any simple type is cast to date, the date value TV is derived from the source type ST and the source value SV as follows:
If ST is dateTime, then let SYR be cast as string( xf:get-Year(
SV
) ), let SMO be cast as string( xf:get-month(
SV
) ), and let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:dateTime( xf:concat(
SYR
, '-',
SMO
, '-',
SDA
) ).
If ST is date, then TV is SV.
If ST is gYearMonth, then let SYR be cast as string( xf:get-Year(
SV
) ) and let SMO be cast as string(xf:get-month(
SV
) ); TV is xf:dateTime( xf:concat(
SYR
, '-',
SMO
, '-01') ).
If ST is gYear, then let SYR be cast as string( xf:get-Year(
SV
) ); TV is xf:dateTime( xf:concat(
SYR
, '-01-01') ).
If ST is gMonthDay, then let SMO be cast as string( xf:get-month(
SV
) ) and let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:dateTime( xf:concat(
CYR
, '-',
SMO
, '-',
SDA
) ).
If ST is gDay, then let SDA be cast as string(
SV
); TV is xf:dateTime( xf:concat(
CYR
, '-',
CMO
, '-',
SDA
) ).
If ST is gMonth, then let SMO be cast as string (
SV
); TV is xf:dateTime( xf:concat(
CYR
, '-',
SMO
, '-01') ).
If ST is string or normalizedString and SV is not a valid lexical representation for date as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is string or normalizedString and SV is a valid lexical representation for date as specified in [XML Schema Part 2: Datatypes], then TV is xf:date(
SV
).
When a value of any simple type is cast to gYearMonth, the gYearMonth value TV is derived from the source type ST and the source value SV as follows:
If ST is dateTime or date, then let SMO be cast as string( xf:get-month(
SV
) ) and let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:gYearMonth( xf:concat(
SMO
, '-',
SDA
) ).
If ST is gYearMonth, then TV is SV.
If ST is gYear, then let SYR be cast as string( xf:get-Year(
SV
) ); TV is xf:dateTime( xf:concat(
SYR
, '-01') ).
If ST is gMonthDay or gMonth, then let SMO be cast as string( xf:get-month(
SV
) ); TV is xf:dateTime( xf:concat(
CYR
, '-',
SMO
) ).
If ST is string or normalizedString and SV is not a valid lexical representation for gYearMonth as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is string or normalizedString and SV is a valid lexical representation for gYearMonth as specified in [XML Schema Part 2: Datatypes], then TV is xf:date(
SV
).
When a value of any simple type is cast to gYear, the gYear value TV is derived from the source type ST and the source value SV as follows:
If ST is dateTime, date, or gYearMonththen let SYR be cast as string( xf:get-Year(
SV
) ); TV is xf:gYear(
SYR
).
If ST is gYearMonth, then TV is SV.
If ST is string or normalizedString and SV is not a valid lexical representation for gYear as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is string or normalizedString and SV is a valid lexical representation for gYear as specified in [XML Schema Part 2: Datatypes], then TV is xf:date(
SV
).
When a value of any simple type is cast to gMonthDay, the gMonthDay value TV is derived from the source type ST and the source value SV as follows:
If ST is dateTime or date, then let SMO be cast as string( xf:get-month(
SV
) ) and let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:gYearMonth( xf:concat(
SMO
, '-',
SDA
) ).
If ST is gYearMonth, then let SMO be cast as string( xf:get-month(
SV
) ); TV is xf:dateTime( xf:concat(
SMO
, '-01') ).
If ST is gMonthDay, then TV is SV.
If ST is gDay, then let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:dateTime( xf:concat(
CMO
,
CDA
) ).
If ST is gMonth, then let SMO be cast as string( xf:get-month(
SV
) ); TV is xf:dateTime( xf:concat(
SMO
, '-01') ).
If ST is string or normalizedString and SV is not a valid lexical representation for gMonthDay as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is string or normalizedString and SV is a valid lexical representation for gMonthDay as specified in [XML Schema Part 2: Datatypes], then TV is xf:date(
SV
).
When a value of any simple type is cast to gDay, the gDay value TV is derived from the source type ST and the source value SV as follows:
If ST is dateTime, date, or gMonthDay, then let SDA be cast as string( xf:get-day(
SV
) ); TV is xf:gDay(
SDA
).
If ST is gDay, then TV is SV.
If ST is string or normalizedString and SV is not a valid lexical representation for gDay as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is string or normalizedString and SV is a valid lexical representation for gDay as specified in [XML Schema Part 2: Datatypes], then TV is xf:date(
SV
).
When a value of any simple type is cast to gMonth, the gMonth value TV is derived from the source type ST and the source value SV as follows:
If ST is dateTime, date, gYearMonth, or gMonthDay, then let SMO be cast as string( xf:get-month(
SV
) ); TV is xf:gMonth(
SMO
).
If ST is gMonth, then TV is SV.
If ST is string or normalizedString and SV is not a valid lexical representation for gMonth as specified in [XML Schema Part 2: Datatypes], then the cast returns an error value as defined in [XQuery 1.0 and XPath 2.0 Data Model].
If ST is string or normalizedString and SV is a valid lexical representation for gMonth as specified in [XML Schema Part 2: Datatypes], then TV is xf:date(
SV
).
The following table covers conversions to all other simple types.
| S\T | bool | b64 | hxB | aURI | QN | NOT |
| str | M | Y | M | M | M | N |
| nStr | M | Y | M | M | M | N |
| tok | N | Y | M | N | N | N |
| lan | N | Y | N | N | N | N |
| Nam | N | Y | N | N | N | N |
| NC | N | Y | N | N | N | N |
| ID | N | Y | N | N | N | N |
| IDR | N | Y | N | N | N | N |
| IDS | N | Y | N | N | N | N |
| ENT | N | Y | N | N | N | N |
| ENS | N | Y | N | N | N | N |
| NMT | N | Y | N | N | N | N |
| NMS | N | Y | N | N | N | N |
| flt | M | Y | N | N | N | N |
| dbl | M | Y | N | N | N | N |
| dec | M | Y | N | N | N | N |
| itg | M | Y | N | N | N | N |
| nPI | M | Y | N | N | N | N |
| nI | M | Y | N | N | N | N |
| lng | M | Y | N | N | N | N |
| int | M | Y | N | N | N | N |
| sh | M | Y | N | N | N | N |
| byt | M | Y | N | N | N | N |
| nNI | M | Y | N | N | N | N |
| uL | M | Y | N | N | N | N |
| uI | M | Y | N | N | N | N |
| uS | M | Y | N | N | N | N |
| uB | M | Y | N | N | N | N |
| pI | M | Y | N | N | N | N |
| dur | N | Y | N | N | N | N |
| dT | N | Y | N | N | N | N |
| tim | N | Y | N | N | N | N |
| dat | N | Y | N | N | N | N |
| YM | N | Y | N | N | N | N |
| Yr | N | Y | N | N | N | N |
| MD | N | Y | N | N | N | N |
| Day | N | Y | N | N | N | N |
| Mon | N | Y | N | N | N | N |
| bool | Y | Y | N | N | N | N |
| b64 | M | Y | M | N | N | N |
| hxB | M | Y | Y | N | N | N |
| aURI | N | N | N | Y | N | N |
| QN | N | N | N | N | Y | N |
| NOT | N | N | N | N | N | N |
As specified in the preceding table, casting from most simple types to base64Binary and to hexBinary is possible, but sometimes depends on factors considered below; by contrast, casting to anyURI, or QName is possible only from the same type or possibly from string or normalizedString. (If the entry in the preceding table is "N", then no cast is supported; consequently, the following specifications do not discuss those conversions.)
When a value of any simple type is cast to boolean, the boolean value TV is derived from the source type ST and the source value SV as follows:
If ST is string or normalizedString and xf:upper(
SV
) is "
TRUE
" or "
1
", then TV is true; if ST is string or normalizedString and xf:upper(
SV
) is "
FALSE
" or "
0
", then TV is false.
If ST is float, double, decimal, integer, long, int, short, byte, nonNegativeInteger, unsignedLong, unsignedInt, unsignedShort, unsignedByte, or positiveInteger and SV is 1, then TV is true.
If ST is float, double, decimal, integer, nonPositiveInteger, long, int, short, byte, nonNegativeInteger, unsignedLong, unsignedInt, unsignedShort, or unsignedByte and SV is 0, then TV is false.
If ST