Changes

Jump to navigation Jump to search
49 bytes added ,  14:53, 12 December 2017
This article is part of the [[XQuery|XQuery Portal]].It summarizes provides a summary of the new most important features of the [http://www.w3.org/TR/xquery-31/ XQuery 3.1] and[http://www.w3.org/TR/xpath-functions-31/ XQuery 3.1 Functions and Operators] specificationsthat are already supported by BaseX. Please note that not all of the features that are listed on this page are alreadyfound in the official specification documents today. You can check out the[https://www.w3.org/Bugs/Public/ W3 Bugzilla Tracker] to find out more about themost recently added featuresRecommendation.
=Maps=
=Lookup Operator=
The lookup operator provides some syntactic sugar to access values of maps or array members at a specified position. It is introduced by the question mark ({{Code|?}}) and followed by a specifier. The specifier can be:
# A wildcard {{Code|*}},
<pre class="brush:xquery">
for let $map in maps := (
map { 'name': 'Guðrún', 'city': 'Reykjavík' },
map { 'name': 'Hildur', 'city': 'Akureyri' }
)
return $mapmaps[?name = 'Hildur'] ?city
</pre>
=Arrow Operator=
The arrow operator applies <code>=></code> provides a function convenient alternative syntax for passing on functions to a value. The value is used expression that precedes the operator will be supplied as the first argument to of the function. It is introduced with the characters <code>=></code>, and it is followed by that follows the function to be calledarrow. If <code>$v</code> is a value and <code>f()</code> is a function, then <code>$v=>f()</code> is equivalent to <code>f($v)</code>, and <code>$v=>f($j)</code> is equivalent to <code>f($v, $j)</code>. This is further illustrated by an example:
<pre class="brush:xquery">
let $c := 1 to 3
return ``[»Count `{ $c }`, and I will be there.«]``</pre>
 
=Enclosed Expressions=
 
''Enclosed expression'' is the syntactical term for the expressions that are specified inside a function body, try/catch clauses, node constructors and some other expressions. In the following example expressions, it’s the empty sequence:
 
<pre class="brush:xquery">
declare function local:x() { () };
try { () } catch * { () },
element x { () },
text { () }
</pre>
 
With XQuery 3.1, the expression can be omitted. The following query is equivalent to the upper one:
 
<pre class="brush:xquery">
declare function local:x() { };
try { } catch * { },
element x { }
text { }
</pre>
=Serialization=
==Adaptive Serialization==
In BaseX, The {{Code|adaptive}} is used as the new default serialization method. It provides a an intuitive textual representation for all XDM types, including maps and arrays, functions, attributes, and namespaces. All items will be separated using by the value of the {{Code|item-separator}} parameter, or which by default is a newline if no value character. It is specifiedutilized by the functions <code>[[Profiling Module#prof:dump|prof:dump]]</code> and <code>[http://www.w3.org/TR/xpath-functions-31/#func-trace fn:trace]</code>. Example:
<pre class="brush:xquery">
declare option output:method 'adaptive';
<element id='id0'/>/@id,
xs:token("abc"),
map { 'key': 'value' },
true#0
<pre class="brush:xml">
id="id0"xs:token("abc"),map {
"key": "value"
}
function fn:true#0
</pre>
The new {{Code|json}} serialization output method can be used to serialize XQuery maps, arrays, atomic values and empty sequences as JSON.
The {{Code|json}} output method has been introduced in BaseX quite a while agobefore it was added to the official specification. The implementation of this method now It complies with the standard serialization rules and, at the same time, preserves the existing semantics:
* If an XML node of type {{Code|element(json)}} is found, it will be serialized following the serialization rules of the [[JSON Module]].
=Functions=
The following functions of have been added in the [http://www.w3.org/TR/xpath-functions-31/ XQuery 3.1 Functions and Operators] Working Draft have been added. Please be aware that the functions are still subject to changeSpecification:
==Map Functions==
 
The following map functions are now available:
<code>map:merge</code>, <code>map:size</code>, <code>map:keys</code>, <code>map:contains</code>, <code>map:get</code>, <code>map:entry</code>, <code>map:put</code>, <code>map:remove</code>, <code>map:for-each</code>
==Array Functions==
 
The following array functions are now available:
<code>array:size</code>, <code>array:append</code>, <code>array:subarray</code>, <code>array:remove</code>, <code>array:insert-before</code>, <code>array:head</code>, <code>array:tail</code>, <code>array:reverse</code>, <code>array:join</code>, <code>array:flatten</code>, <code>array:for-each</code>, <code>array:filter</code>, <code>array:fold-left</code>, <code>array:fold-right</code>, <code>array:for-each-pair</code>
 
Please check out the [[Array Module]] for more details.
==JSON Functions==
With XQuery now provides 3.1, native support for JSON objectswas added. Strings and resources can be parsed to XQuery items and, as [[#JSON Serialization|shown above]], serialized back to their original form.
===fn:parse-json===
</pre>
===fn:json-docsdoc===
; Signatures
; Signatures
* <code>fn:sort($input as item()*) as item()*</code>
* <code>fn:sort($input as item()*, $collation as xs:string?) as xs:anyAtomicType*)) as item()*</code>* <code>fn:sort($input as item()*, $collation as xs:string?, $key as function(item()*) as xs:anyAtomicType*)) as item()*</code>
Returns a new sequence with sorted {{Code|$input}} items, using an optional {{Code|$collation}}. If a sort {{Code|$key}} function is givensupplied, it will be applied on all items. The items of the resulting values will be sorted using the semantics of the {{Code|lt}} expression.
<pre class="brush:xquery">
sort(reverse(1 to 3)) (: yields 1, 2, 3 :),reverse(sort(1 to 3)) (: returns the sorted order in descending order :),sort((3, -2, 1), (), abs#1) (: yields 1, -2, 3 :),sort((1,2,3), (), function($x) { -$x }) (: yields 3, 2, 1 :),sort((1, 'a')) (: yields an error, as strings and integers cannot be compared :)
</pre>
; Signatures
* <code>fn:apply($function as function(*), $array arguments as array(*)) as item()*</code>
A The supplied {{Code|$function }} is invoked with the specified {{Code|$arguments supplied by an array}}. The arity of the function must be the same as the size of the array.
Example:
fn:apply(concat#5, array { 1 to 5 }) (: 12345 :)
fn:apply(function($a) { sum($a) }, [ 1 to 5 ]) (: 15 :)
fn:apply(count#1, [ 1,2 ]) (: error (. the array has two members) :)
</pre>
==fn:default-language==
Returns the default language used for formatting numbers and dates. BaseX always returns {{MarkCode|Introduced with BaseX 8.4:en}}. ==Appendix==
Returns the default language used for formatting numbers The three functions <code>fn:transform</code>, <code>fn:load-xquery-module</code> and dates. <code>fn:collation-key</code> may be added in a future version of BaseX always returns {{Code|en}}as their implementation might require the use of additional external libraries.
=Binary Data=
Items of type <code>xs:hexBinary</code> and <code>xs:base64Binary</code> can now be compared against each other. The following queries all yield {{Code|true}}:
<pre class="brush:xquery">
=Collations=
XQuery 3.1 provides a new default collation, which allows for a case-insensitive comparison of ASCII characters (<code>A-Z</code> = <code>a-z</code>). This query returns <code>true</code>:
<pre class="brush:xquery">
</pre>
=Pending FeaturesEnclosed Expressions''Enclosed expression'' is the syntactical term for the expressions that are specified inside a function body, try/catch clauses, node constructors and some other expressions. In the following example expressions, its the empty sequence: <pre class="brush:xquery">declare function local:x() { () }; itry { () } catch * { () },element x { () },text { () }</pre>
With XQuery 3.1, the expression can be omitted. The following functions have not been implemented yetquery is equivalent to the upper one:
* <code>fnpre class="brush:collation-key</code>, <codexquery">fndeclare function local:load-xquery-module</code>x() { };try { } catch * { }, <code>fn:transformelement x { }text { }</codepre>
=Changelog=
 
;Version 8.6
 
* Updated: Collation argument was inserted between first and second argument.
;Version 8.4
* Added: [[#String Constructors|String Constructors]], [[#fn:default-language|fn:default-language]], [[#Enclosed Expressions|Enclosed Expressions]]
* Updated: [[#Adaptive Serialization|Adaptive Serialization]], [[#fn:string-join|fn:string-join]]
;Version 8.2
;Version 8.1
* Updated: arrays are now based on an efficient a [http://en.wikipedia.org/wiki/Finger_tree Finger Tree] implementation.
Introduced with Version 8.0.
 
[[Category:XQuery]]
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu