Changes

Jump to navigation Jump to search
5,959 bytes added ,  11:39, 27 September 2018
no edit summary
This [[Module Library|XQuery Module]] contains functions for manipulating arrays, which will officially be has been introduced with [[XQuery 3.1#Arrays|XQuery 3.1]].<br/>Please note that the functions are subject to change until the specification has reached its final stage.
=Conventions=
All functions and errors in this module are assigned to the {{Code|<code><nowiki>http://www.w3.org/2005/xpath-functions/array}} </nowiki></code> namespace, which is statically bound to the {{Code|array}} prefix.<br/>
=Functions=
==array:size==
 
{| width='100%'
| width='120' | '''Signatures'''
|-
| '''Summary'''
| Returns the number of members in the supplied {{Code|$array}}. Note that because an array is an item, the {{Code|fn:count}} function when applied to an array always returns {{Code|1}}.
|-
| '''Examples'''
|
* <code>array:size([1 to 10])</code> returns {{Code|10}}.
* <code>array:size(array { 1 to 10 })</code> returns {{Code|10}}.
* <code>array:size([1 to 10])</code> returns {{Code|1}}, because the array contains a single sequence with 10 integers.
|}
 
==array:get==
 
{| width='100%'
| width='120' | '''Signatures'''
|{{Func|array:get|$array as array(*), $position as xs:integer|item()*}}
|-
| '''Summary'''
| Returns the {{Code|$array}} member at the specified {{Code|$position}}.
|-
| '''Errors'''
|{{Error|FOAY0001|#Errors}} {{Code|$position}} is not in the range {{Code|1}} to {{Code|array:size($array)}} inclusive.
|-
| '''Examples'''
|
* <code>array:get(array { reverse(1 to 5) }, 5)</code> returns the value {{Code|1}}.
|}
==array:append==
 
{| width='100%'
| width='120' | '''Signatures'''
|{{Func|array:append|$array as array(*), $insert member as item()*|array(*)}}
|-
| '''Summary'''
| Adds one member at the end Returns a copy of the array. The result is an array whose size is {{Code|array:size($array) + 1}}, in which all members in positions {{Code|1}} to with a new {{Code|array:size($array)}} are the same as the members in the corresponding position of $array, and the member in position {{Code|array:size($array) + 1}} is {{Code|$insert}}attached.
|-
| '''Examples'''
{| width='100%'
| width='120' | '''Signatures'''
|{{Func|array:subarray|$array as array(*), $start position as xs:integer|array(*)}}<br/>{{Func|array:subarray|$array as array(*), $start position as xs:integer, $length as xs:integer|array(*)}}|-| '''Summary'''| Constructs a new array with with {{Code|$length}} members of {{Code|$array}} beginning from the specified {{Code|$position}}.<br/>The two-argument version of the function returns the same result as the three-argument version when called with {{Code|$length}} equal to the value of {{Code|array:size($array) - $position + 1}}.|-| '''Errors'''|{{Error|FOAY0001|#Errors}} {{Code|$position}} is less than one, or if {{Code|$position + $length}} is greater than {{Code|array:size($array) + 1}}.<br/>{{Error|FOAY0002|#Errors}} {{Code|$length}} is less than zero.|-| '''Examples'''|* <code>array:subarray(["a", "b", "c"], 2)</code> returns the array {{Code|["b", "c"]}}.|} ==array:put== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:put|$array as array(*), $position as xs:integer, $member as item()*|array(*)}}
|-
| '''Summary'''
| Gets an array containing all members from Returns a supplied copy of {{Code|$array starting at a supplied position, up to a specified length.<br/>The two-argument version of the function returns the same result as the three-argument version when called }} with {{Code|$lengthmember}} equal to replaced at the value of specified {{Code|$position}}. Equivalent to <code>$array => array:sizeremove($position) => array) :insert- before($position, $start + 1}}member)</code>.
|-
| '''Errors'''
|{{Error|FOAY0001|#Errors}}: {{Code|$startposition}} is less than one, or if not in the range {{Code|$start + $length1}} is greater than to {{Code|array:size($array) + 1}}.<br/>{{Error|FOAY0002|#Errors}}: {{Code|$length}} is less than zeroinclusive.
|-
| '''Examples'''
|
* <code>array:appendput(['member1'"a", "b", "c"], 'member2'2, "d")</code> returns the array {{Code|["member1a", "d", "member2c"]}}.
|}
{| width='100%'
| width='120' | '''Signatures'''
|{{Func|array:remove|$array as array(*), $index positions as xs:integer*|array(*)}}
|-
| '''Summary'''
| Constructs Returns a new copy of {{Code|$array }} without the member at the specified {{Code|$indexpositions}}.
|-
| '''Errors'''
|{{Error|FOAY0001|#Errors}}: {{Code|$index}} A position is not in the range {{Code|1}} to {{Code|array:size($array)}} inclusive.
|-
| '''Examples'''
{| width='100%'
| width='120' | '''Signatures'''
|{{Func|array:insert-before|$array as array(*), $index position as xs:integer, $insert member as item()*|array(*)}}
|-
| '''Summary'''
| Constructs Returns a new copy of {{Code|$array by adding }} with one new {{Code|$member }} at a the specified {{Code|$position}}. Setting {{Code|$indexposition}} to the value {{Code|array:size($array) + 1}} delivers yields the same result as {{Code|array:append($array, $insert)}}.
|-
| '''Errors'''
|{{Error|FOAY0001|#Errors}}: {{Code|$indexposition}} is not in the range {{Code|1}} to {{Code|array:size($array) + 1}} inclusive.
|-
| '''Examples'''
|-
| '''Errors'''
|{{Error|FOAY0001|#Errors}}: The array is empty.
|-
| '''Examples'''
|}
==array:serializetail== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:tail|$array as array(*)|array(*)}}|-| '''Summary'''| Returns a new array with all members except the first from {{Code|$array}}. This function is equivalent to the expression {{Code|array:remove($array, 1)}}.|-| '''Errors'''|{{Error|FOAY0001|#Errors}} The array is empty.|-| '''Examples'''|* <code>array:insert-before(["a"], 1, "b")</code> returns the array {{Code|["b", "a"]}}.|} ==array:reverse== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:reverse|$array as array(*)|array(*)}}|-| '''Summary'''| Returns a new array with all members of {{Code|$array}} in reverse order.|-| '''Examples'''|* <code>array:reverse(array { 1 to 3 })</code> returns the array {{Code|[3, 2, 1]}}.|} ==array:join==
{| width='100%'
| width='120' | '''Signatures'''
|{{Func|maparray:serializejoin|$input arrays as maparray(*)*|xs:stringarray(*)}}<br/>
|-
| '''Summary'''
| This function is specific to BaseX. It returns a string representation of Concatenates the supplied array. The purpose contents of this function is to get an insight several {{Code|$arrays}} into the structure of an array item; it cannot necessarily be used for reconstructing the original a single array.
|-
| '''Examples'''
|
* <code>array:serializejoin(())</code> returns the array {{Code|[ ]}}.* <code>array:join((1to 3) ! array { . })</code> returns the array {{Code|[1, 2, 3]}}.|} ==array:flatten== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:flatten|$items as item()*|item()*}}|-| '''Summary'''| Recursively flattens all arrays that occur in the supplied {{Code|$items}}.|-| '''Examples'''|* <code>array:flatten(["a","b"])</code> returns the sequence {{Code|"a", "b"}}.* <code>array:flatten([1,[2, 3],4]])</code> returns the sequence {{Code|1, 2, 3, 4 }}.|} ==array:for-each== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:for-each|$array as array(*), $function as function(item()*) as item()*|array(*)}}|-| '''Summary'''| Returns a new array, in which each member is computed by applying {{Code|$function}} to the corresponding member of {{Code|$array}}.|-| '''Examples'''|The following query returns the array {{Code|[2, 3, 4, 5, 6 ]}}:<pre class="brush:xquery">array:for-each( array { 1 to 5 }, function($i) { $i + 1})</pre>|} ==array:filter== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:filter|$array as array(*), $function as function(item()*) as xs:boolean|array(*)}}|-| '''Summary'''| Returns a new array with those members of {{Code|$array}} for which {{Code|$function}} returns {{Code|true}}.|-| '''Examples'''|The following query returns the array {{Code|[0, 1, 3]}}:<pre class="brush:xquery">array:filter( array { 0, 1, -2, 3, -4 }, function($i) { $i > 0 })</pre>|} ==array:fold-left== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:fold-left|$array as array(*), $zero as item()*, $function as function(item()*, item()*) as item()*|item()*}}|-| '''Summary'''| Evaluates the supplied {{Code|$function}} cumulatively on successive members of the supplied {{Code|$array}} from left to right and using {{Code|$zero}} as first argument.|-| '''Examples'''|The following query returns {{Code|55}} (the sum of the integers 1 to 10):<pre class="brush:xquery">array:fold-left( array { 1 to 10 }, 0, function($a, $b) { $a + $b })</pre>|} ==array:fold-right== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:fold-right|$array as array(*), $zero as item()*, $function as function(item()*, item()*) as item()*|item()*}}|-| '''Summary'''| Evaluates the supplied {{Code|$function}} cumulatively on successive members of the supplied {{Code|$array}} from right to left and using {{Code|$zero}} as first argument.|-| '''Examples'''|The following query is equivalent to the expression <code>array:reverse(array { 1 to 5 })</code>:<pre class="brush:xquery">array { array:fold-right( array { 1 to 5 }, (), function($a, $b) { $b, $a } )}</pre>|} ==array:for-each-pair== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:for-each-pair|$array1 as array(*), $array2 as array(*), $function as function(item()*) as item()*|array(*)}}|-| '''Summary'''| Returns a new array obtained by evaluating the supplied {{Code|$function}} for each pair of members at the same position in {{Code|$array1}} and {{Code|$array2}}.|-| '''Examples'''|The following query returns the array {{Code|[5, 7, 9]}}:<pre class="brush:xquery">array:for-each-pair( array { 1 to 3 }, array { 4 to 6 }, function($a + $b) { $a + $b })</pre>|} ==array:sort== {| width='100%'| width='120' | '''Signatures'''|{{Func|array:sort|$array as array(*)|array(*)}}<br/>{{Func|array:sort|$array as array(*), $collation as xs:string?|array(*)}}<br/>{{Func|array:sort|$array as array(*), $collation as xs:string?, $key as function(item()*) as xs:anyAtomicType*|array(*)}}<br/>|-| '''Summary'''| Returns a new array with sorted {{Code|$array}} members, using an optional {{Code|$collation}}. If a {{Code|$key}} function is supplied, it will be applied on all array members. The items of the resulting values will be sorted using the semantics of the {{Code|lt}} expression.|-| '''Examples'''|* <code>array:sort(array { reverse(1 to 3) })</code> returns <code>[1, 2, 3]</code>* <code>array:sort([3,-2,1], (), abs#1)</code> returns <code>[1, -2, 3]</code>* <code>array:sort([1,2,3], (), function(4$x) { -$x })</code> returns <code>[3, 2, 51]</code>* <code>array:sort((1, 6'a'))]</code>.returns an error (strings and integers cannot be compared)
|}
|}
=Changelog= ;Version 8.6* Updated: [[Category#array:sort|array:XQueryput]]collation argument was inserted between first and second argument.
=Changelog=;Version 8.5* Added: [[#array:put|array:put]] ;Version 8.4* Removed: array:serialize (use fn:serialize instead)
Introduced with Version 8.0.
 
[[Category:XQuery]]
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu