Conversion Functions
This module contains functions to convert data between different formats.
The following functions have been superseded by the Binary Functions and by standard functions of XQuery 4.0:
| BaseX 12 |
XQuery 4 |
convert:binary-to-string |
bin:decode-string |
convert:string-to-base64 |
bin:encode-string |
convert:string-to-hex |
xs:hexBinary(bin:encode-string(...)) |
convert:integer-to-dayTime($ms) |
$ms * seconds(0.001) |
convert:dayTime-to-integer($d) |
xs:integer($d div seconds(0.001)) |
All functions and errors are in the
http://basex.org/modules/convert namespace, to which the
convert prefix is statically bound.
Removed: convert:binary-to-string, convert:string-to-base64, convert:string-to-hex (use the Binary Functions instead).
| Signature | convert:integers-to-base64( $input as xs:integer*) as xs:base64Binary |
|---|
| Summary | Converts the specified integer sequence $input to an item of type xs:base64Binary:
- Only the last 8 bits of the supplied integers will be considered.
- Conversion of byte sequences is very efficient, as items of binary type are internally represented as byte arrays.
bin:from-octets is similar, but it only accepts integers from 0 to 255, and hence rejects the negative bytes returned by convert:binary-to-bytes.
|
|---|
| Examples | convert:integers-to-base64(Q{java:java.lang.String}get-bytes('abc')) Converts a byte sequence to a xs:base64Binary item. |
|---|
| Signature | convert:integers-to-hex( $input as xs:integer*) as xs:hexBinary |
|---|
| Summary | Converts the specified integer sequence $input to an item of type xs:hexBinary:
- Only the last 8 bits of the supplied integers will be considered.
- Conversion of byte sequences is very efficient, as items of binary type are internally represented as byte arrays.
- The function is identical to
xs:hexBinary(convert:integers-to-base64($input)). For integers from 0 to 255, xs:hexBinary(bin:from-octets($input)) can be used as well.
|
|---|
| Signature | convert:binary-to-integers( $value as (xs:base64Binary|xs:hexBinary)) as xs:integer* |
|---|
| Summary | Returns the specified binary $value as a sequence of unsigned integers (octets). The function is identical to bin:to-octets. |
|---|
| Examples | convert:binary-to-integers(xs:hexBinary('FF')) Result: 255 |
|---|
| Signature | convert:binary-to-bytes( $value as (xs:base64Binary|xs:hexBinary)) as xs:byte* |
|---|
| Summary | Returns the specified binary $value as a sequence of bytes. The conversion is very cheap and takes no additional memory, as items of binary type are internally represented as byte arrays. bin:to-octets is similar, but it returns unsigned integers from 0 to 255.
|
|---|
| Examples | convert:binary-to-bytes(xs:base64Binary('QmFzZVggaXMgY29vbA==')) Yields the sequence (66, 97, 115, 101, 88, 32, 105, 115, 32, 99, 111, 111, 108).
convert:binary-to-bytes(xs:hexBinary("4261736558")) Yields the sequence (66, 97, 115, 101, 88). |
|---|
| Signature | convert:integer-to-base( $value as xs:integer, $base as xs:integer) as xs:string |
|---|
| Summary | Converts the specified integer $value to a string, using the specified $base, interpreting it as a 64-bit unsigned integer. The first base elements of the sequence '0',..,'9','a',..,'z' are used as digits. Valid bases are 2, .., 36. fn:format-integer with a radix picture (e.g. format-integer($value, '16^x')) returns the same result for non-negative integers; negative integers are prefixed with a minus sign instead of being interpreted as unsigned. |
|---|
| Errors | base | The specified base is not in the range 2-36. |
|
|---|
| Examples | convert:integer-to-base(-1, 16) Result: 'ffffffffffffffff'
convert:integer-to-base(22, 5) Result: '42' |
|---|
| Signature | convert:integer-from-base( $value as xs:string, $base as xs:integer) as xs:integer |
|---|
| Summary | Decodes an integer from the specified string $value, using the specified $base. The first base elements of the sequence '0',..,'9','a',..,'z' are allowed as digits; case does not matter. Valid bases are 2 - 36. If the supplied string contains more than 64 bits of information, the result will be truncated. fn:parse-integer is similar, but it additionally accepts signs, whitespace and underscores, and it raises errors for empty strings and for values that exceed the integer range. |
|---|
| Errors | base | The specified base is not in the range 2-36. | integer | The specified digit is not valid for the given base. |
|
|---|
| Examples | convert:integer-from-base('ffffffffffffffff', 16) Result: -1
convert:integer-from-base('CAFEBABE', 16) Result: 3405691582
convert:integer-from-base('42', 5) Result: 22
convert:integer-from-base(convert:integer-to-base(123, 7), 7) Result: 123 |
|---|
Removed: convert:integer-to-dayTime, convert:dayTime-to-integer (use fn:seconds instead).
| Signature | convert:integer-to-dateTime( $value as xs:integer) as xs:dateTimeStamp |
|---|
| Summary | Converts the specified number of milliseconds $value since 1 Jan 1970 to an item of type xs:dateTimeStamp. fn:unix-dateTime returns the same result, but it only accepts non-negative integers. |
|---|
| Examples | convert:integer-to-dateTime(0) Result: xs:dateTime('1970-01-01T00:00:00Z')
convert:integer-to-dateTime(1234567890123) Result: xs:dateTime('2009-02-13T23:31:30.123Z')
convert:integer-to-dateTime(prof:current-ms()) Returns the current time as an xs:dateTimeStamp item. |
|---|
| Signature | convert:dateTime-to-integer( $value as xs:dateTime) as xs:integer |
|---|
| Summary | Converts the specified dateTime $value to the number of milliseconds since 1 Jan 1970.
A $value without a timezone is interpreted in the implicit timezone.
A FOCA0003 error is raised if the result is not representable as an xs:integer.
The expression ($value - unix-dateTime()) div seconds(0.001) is similar, but it returns an xs:decimal that includes fractions of milliseconds. Rounding the result with xs:integer differs for instants before 1970: this function rounds down, whereas xs:integer truncates towards zero. |
|---|
| Examples | convert:dateTime-to-integer(xs:dateTime('1970-01-01T00:00:00Z')) Result: 0
convert:dateTime-to-integer(xs:dateTime('292278994-08-17T07:12:55Z')) Result: 9223372036854775000. The most distant instant that can still be represented. |
|---|
The key conversion is employed by the
JSON Functions and the
CSV Functions to encode strings to valid element names and back to the original representation:
- If lax conversion is disabled, a string is encoded to a valid NCName representation:
- An empty string is converted to a single underscore (
_).
- Existing underscores are rewritten to two underscores (
__).
- Characters that are not valid NCName characters are rewritten to an underscore and the character’s four-digit Unicode. For example, the exclamation mark
! is transformed to _0021.
- With lax conversion enabled, invalid characters are replaced with underscores or (when invalid as first character of an element name) prefixed with an underscore. The resulting string may be better readable, but it cannot necessarily be converted back to the original form.
| Signature | convert:encode-key( $key as xs:string, $lax as xs:boolean? := false()) as xs:string |
|---|
| Summary | Encodes the specified $key (with the optional $lax conversion method) to a valid NCName representation, which can be used to create an element node. This encoding is employed by the JSON Functions and the CSV Functions. |
|---|
| Examples | element { convert:encode-key("!") } { } Creates a new element with an encoded name: <_0021/>. |
|---|
| Signature | convert:decode-key( $key as xs:string, $lax as xs:boolean? := false()) as xs:string |
|---|
| Summary | Decodes the specified $key (with the optional $lax conversion method) to the original string representation. Keys supplied to this function can be element names that have been created by the JSON Functions or CSV Functions. |
|---|
| Errors | key | The specified key cannot be decoded to its original representation. |
|
|---|
| Examples | convert:decode-key(name(<_0021/>)) Result: '!'
json:doc("doc.json")//* ! convert:decode-key(name()) Yields the original string representation of all names of a JSON document. |
|---|
| Code | Description |
|---|
base | The specified base is not in the range 2-36. |
integer | The specified digit is not valid for the given base. |
key | The specified key cannot be decoded to its original representation. |
Version 13.0- Removed:
convert:binary-to-string, convert:string-to-base64, convert:string-to-hex in favor of Binary Functions. - Removed:
convert:integer-to-dayTime, convert:dayTime-to-integer in favor of fn:seconds.
Version 9.4Version 9.0Version 8.5- Updated:
convert:binary-to-string: $fallback argument added.
Version 7.5Version 7.3- Added: New module added. Some of the functions have been adopted from the obsolete Utility Functions.
⚡Generated with XQuery