# XQuery 3.0 and XQuery Update changes

The term XQuery 3.0 is the new proposed name for the language currently published as a W3C working draft under the title XQuery 1.1.

In the absence of an `xquery version` declaration in the query prolog, Saxon now permits XQuery 3.0 syntax if it is enabled from the command line or API. An `xquery version` declaration that specifies version="3.0" is accepted only if XQuery 3.0 has been enabled from the command line or API.

The syntax for production `AnyFunctionItem` is now `function(*)` rather than `function()`. For backwards compatibility with Saxon 9.2, the older syntax continues to be supported for the time being.

The new `switch` expression is implemented.

The custom syntax for partial function application (for example `concat("[", ?, ", ", ?, "]")` is implemented. (For the time being, the `partial-apply()` function remains available as well.)

The syntax for "outer for" has been changed (W3C bug 6927). In place of `"outer for $x in E"`, write `"for $x allowing empty in E"`.

In a FLOWR expression, the `where` clause can now be repeated. (The construct `where X where Y` is simply another way of writing `where X and Y`.)

The new context-independent QName syntax `"uri":local` is recognized if XQuery 3.0 is enabled.

The qualifiers `deterministic`, `nondeterministic`, `public`, and `private` are now recognized on function declarations. However they currently have no effect.

In XQuery Update, the tree constructed by the `copy-modify` (or "transform") expression will now automatically be a mutable tree, regardless of the default tree model for the `Configuration`.

On the `net.sf.saxon.Query` command line interface, the `-traceout` option now governs the destination of trace output from the standard `TraceListener` (-T option) as well as from the `trace()` function. The `-TP` option (for timing profile information) is extended so a filename can be specified: `-TP:filename`.

Next