Difference between revisions of "Map Module"
| Line 139: | Line 139: | ||
map:merge(($week, map { 7: "Unbekannt" })) | map:merge(($week, map { 7: "Unbekannt" })) | ||
</pre> | </pre> | ||
| − | * In the following example, the values of all maps are combined, resulting in <code>map { "key": (1, 2, 3) }</code>: | + | * In the following example, the values of all maps are combined, resulting in a map with a single key (<code>map { "key": (1, 2, 3) }</code>): |
<pre class="brush:xquery"> | <pre class="brush:xquery"> | ||
map:merge( | map:merge( | ||
Revision as of 14:15, 11 October 2016
This XQuery Module contains functions for manipulating maps, which has been introduced with XQuery 3.1.
Contents
Conventions
All functions in this module are assigned to the http://www.w3.org/2005/xpath-functions/map namespace, which is statically bound to the map prefix.
Functions
Some examples use the map $week defined as:
declare variable $week as map(*) := map {
0: "Sonntag",
1: "Montag",
2: "Dienstag",
3: "Mittwoch",
4: "Donnerstag",
5: "Freitag",
6: "Samstag"
};
map:contains
| Signatures | map:contains($map as map(*), $key as xs:anyAtomicType) as xs:boolean
|
| Summary | Returns true if the supplied $map contains an entry with a key equal to the supplied value of $key; otherwise it returns false. No error is raised if the map contains keys that are not comparable with the supplied $key.
If the supplied key is |
| Examples |
|
map:entry
| Signatures | map:entry($key as xs:anyAtomicType, $value as item()*) as map(*)
|
| Summary | Creates a new map containing a single entry. The key of the entry in the new map is $key, and its associated value is $value.
The function map:merge((
map:entry("Su", "Sunday"),
map:entry("Mo", "Monday"),
map:entry("Tu", "Tuesday"),
map:entry("We", "Wednesday"),
map:entry("Th", "Thursday"),
map:entry("Fr", "Friday"),
map:entry("Sa", "Saturday")
))
Unlike the map:merge(for $b in //book return map:entry($b/isbn, $b)) |
| Examples | map:entry("M", "Monday") creates map { "M": "Monday" }.
|
map:for-each
| Signatures | map:for-each($map as map(*), $fun as function(xs:anyAtomicType, item()*) as item()*) as item()*
|
| Summary | Applies a function to every entry of the supplied $map and returns the results as a sequence. The function supplied as $fun takes two arguments. It is called supplying the key of the map entry as the first argument, and the associated value as the second argument.
|
| Examples | The following query adds the keys and values of all map entries and returns (3,7):
map:for-each(
map { 1: 2, 3: 4 },
function($a, $b) { $a + $b }
)
|
map:get
| Signatures | map:get($map as map(*), $key as xs:anyAtomicType) as item()*
|
| Summary | Returns the value associated with a supplied key in a given map. This function attempts to find an entry within the $map that has a key equal to the supplied value of $key. If there is such an entry, the function returns the associated value; otherwise it returns an empty sequence. No error is raised if the map contains keys that are not comparable with the supplied $key. If the supplied key is xs:untypedAtomic, it is converted to xs:string.
A return value of |
| Examples |
|
map:keys
| Signatures | map:keys($map as map(*)) as xs:anyAtomicType*
|
| Summary | Returns a sequence containing all the key values present in a map. The function takes the supplied $map and returns the keys that are present in the map as a sequence of atomic values. The order may differ from the order in which entries were inserted in the map.
|
| Examples |
|
map:merge
Template:Mark Signature extended with options argument. By default, value of first key is now adopted.
| Signatures | map:merge($maps as map(*)*) as map(*)map:merge($maps as map(*)*, $options as map(*)) as map(*) |
| Summary | Constructs and returns a new map. The map is formed by combining the contents of the supplied $maps. The maps are combined as follows:
|
| Examples |
map:merge(($week, map { 7: "Unbekannt" }))
map:merge(
for $i in 1 to 3 return map { 'key': $i },
map { 'duplicates': 'combine' }
)
|
map:put
| Signatures | map:put($map as map(*), $key as xs:anyAtomicType, $value as item()*) as map(*)
|
| Summary | Creates a new map, containing the entries of the supplied $map and a new entry composed by $key and $value. The semantics of this function are equivalent to map:merge(($map, map { $key, $value }))
|
map:remove
| Signatures | map:remove($map as map(*), $keys as xs:anyAtomicType*) as map(*) |
| Summary | Constructs a new map by removing entries from an existing map. The entries in the new map correspond to the entries of $map, excluding entries supplied via $keys.
No failure occurs if the input map contains no entry with the supplied keys; the input map is returned unchanged. |
| Examples |
|
map:size
| Signatures | map:size($map as map(*)) as xs:integer |
| Summary | Returns a the number of entries in the supplied map. The function takes the supplied $map and returns the number of entries that are present in the map.
|
| Examples |
|
Changelog
- Version 8.6
- Updated: map:merge signature extended with options argument. By default, value of first key is now adopted.
- Version 8.4
- Removed: map:serialize (use fn:serialize instead)
- Version 8.0
- Added:
map:for-each,map:merge,map:put - Removed: support for collations (in accordance with the XQuery 3.1 spec).
- Removed:
map:new(replaced withmap:merge) - Updated: aligned with latest specification: compare keys of type
xs:untypedAtomicasxs:stringinstances, storexs:floatorxs:doublevalueNaN. - Introduction on maps is now found in the article on XQuery 3.1.
- Version 7.8
- Updated: map syntax
map { 'key': 'value' } - Added: map:serialize
- Version 7.7.1
- Updated: alternative map syntax without
mapkeyword and:as key/value delimiter (e.g.:{ 'key': 'value' })