Main Page » Changelog

Changelog

The following features have been added, updated, or removed in BaseX 13:

Startup

  • Updated: Switched to Java 21

Graphical User Interface

  • Added: Editor: Code completion, function signatures, marked occurrences, code formatting, go to declaration, Markdown highlighting; word wrapping can be disabled; files changed on disk are reloaded.
  • Updated: Introduction: The Map view is disabled by default.
  • Added: Project View: Search and replace in all files, with backup and undo.
  • Added: FlatLaf: Support for the FlatLaf library.
  • Updated: Editor: Faster rendering of the editor and text panels.
  • Updated: Search and Replace: Count hits, improved interaction, scroll bar integration.
  • Updated: Look and Feel: Scaling relative to the operating system.
  • Updated: Startup: Single GUI instance per project directory.
  • Updated: Introduction: Panel sizes and arrangement are preserved across restarts; the menu bar was restructured.
  • Removed: Introduction: Fullscreen mode.

Command-Line Options

  • Added: -L to start a database server instance in addition (HTTP server).

Commands

  • Updated: PUT, BINARY PUT: Replace or ignore new resources.
  • Updated: INFO: Libraries section.
  • Updated: INSPECT: Optional database name, additional checks, new output format.
  • Updated: OPTIMIZE: Incrementally updated indexes are compacted, unchanged indexes are skipped.

Options

  • Added: FTMIXED: Index the string values of elements with mixed content.
  • Added: THESINDEX: Index the thesaurus documents of a database.
  • Added: AUTHALGORITHMS: Configure the password algorithms for which hashes are stored.
  • Added: TRUSTEXTERNAL: Default for the trust-external option of XQuery functions.
  • Added: XSILOCATION: Retrieve schemas referenced by xsi:schemaLocation attributes.
  • Added: RETAINLOCATION: Retain the source location of parsed nodes.
  • Added: REPLACE: PUT: replace or ignore existing resources.
  • Added: CACHEMAX: Maximum number of entries stored in a cache.
  • Added: CACHETTL: Lifetime of cache entries.
  • Added: OPTPLAN: Create the query plan before or after query compilation.
  • Updated: UPDINDEX: New default: true. The full-text index is updatable as well.
  • Updated: HTTPLOCAL: New default: true.
  • Updated: PARALLEL: New default: 32.
  • Updated: STRIPWS: Only whitespace-only text nodes are discarded; whitespace in mixed content is preserved.
  • Updated: INTPARSE: Improved DTD support.
  • Updated: ADDARCHIVES: Parsing of Zstandard- and XZ-compressed files.
  • Updated: LOG: SLF4J levels warn and error for HTTP client and server errors.
  • Removed: MIXUPDATES: Use job:execute to run updating and non-updating queries side by side.
  • Removed: LSERROR: Use using fuzzy N errors or the errors option of the full-text functions.
  • Removed: FAIRLOCK: Non-fair locking is always used.
  • Removed: SPLITSIZE: Index structures are always split based on the available main memory.
  • Removed: ADDCACHE: Documents are moved to disk while they are being added if they get too large for main memory.
  • Removed: TAILCALLS: Tail calls are always eliminated.
  • Removed: FORCECREATE: Use db:create to create databases.
  • Removed: AUTHMETHOD: Digest value.

Configuration

  • Updated: The ancestors of the current user directory are checked as well.

Integrating oXygen

  • Added: Instructions for accessing database resources via WebDAV were re-added.

Integrating Eclipse

  • Added: Instructions for accessing database resources via WebDAV were re-added.

XQuery 4.0

  • Added: JNodes: XPath navigation on map and array structures. Example: json-doc(…)//city.
  • Added: Destructuring: Assign components of sequences, arrays and maps to variables
  • Added: Record declarations: but with operator for updating record values. Example: $record but with { 'key': 'value' }.
  • Added: Trace Clause: Emit diagnostic output per tuple. Example: for $i in 1 to 3 trace $i return $i.
  • Added: Axes: additional axes that include the context node, e.g. preceding-or-self.
  • Added: Node Comparisons: New operators and aliases.
  • Added: Unicode Operators: × (U+00D7) and ÷ (U+00F7).
  • Updated: Record types: A record has a fixed set of fields. Optional fields (field?) and the wildcard (*) were removed, field access is strict, and subtyping is width-invariant.
  • Updated: Record declarations: Declared record types are nominative. Declarations with identical fields define distinct types.
  • Updated: Map Constructors: Syntax generalized to allow arbitrary expressions: { $map-entry }
  • Updated: Methods: Annotation %method replaced by =?> operator
  • Updated: Dynamic Function Calls: Dynamic evaluation of function sequences.
  • Updated: Function Declarations: local namespace prefix can be omitted.
  • Updated: Default Element Namespace: new keyword fixed and special value "##any".
  • Updated: QName literals: QName literals with prefix.
  • Updated: Casting: Casting from strings follows XSD 1.1; casts to xs:anyURI never fail.
  • Removed: Map and array filter was removed.

Invisible XML

  • Updated: Now using Markup Blitz 1.13.

Functions

  • Added: Geo Module re-added with GML 3 support.
  • Removed: Higher-Order Functions Module.

Standard Functions

  • Added: fn:atomic-type-annotation, fn:build-dateTime, fn:build-uri, fn:current, fn:days-in-month, fn:duration-to-seconds, fn:element-to-map-plan, fn:element-to-map, fn:graphemes, fn:index-of-substring, fn:jkey, fn:jtree, fn:jvalue, fn:location, fn:map-to-element, fn:matching-segments, fn:node-type-annotation, fn:pad-string, fn:parts-of-dateTime, fn:scan, fn:schema-type, fn:substring-after-last, fn:substring-before-last, fn:system-properties, fn:transform, fn:trim-space, fn:unix-dateTime, fn:xsd-validator.
  • Updated: fn:analyze-string, fn:char, fn:codepoints-to-string, fn:decode-from-uri, fn:deep-equal, fn:doc, fn:doc-available, fn:insert-separator, fn:load-xquery-module, fn:parse-uri, fn:parse-xml, fn:parse-xml-fragment, fn:random-number-generator, fn:replace, fn:unparsed-text
  • Removed: fn:function-identity, fn:intersperse, fn:sequence-join

Map Functions

  • Updated: map:filter, map:for-each: Positional callback argument added.
  • Removed: map:keys-where, map:of-pairs, map:pairs.

Array Functions

  • Added: array:sort-by, array:sort-with.
  • Updated: array:members, array:of-members: JNodes are used instead of value records.
  • Removed: array:join: $separator parameter.

Archive Functions

  • Added: TAR archives (tar, tar.gz) can be created, updated and read. Zstandard and XZ compression (zstd, xz, tar.zst, tar.xz) are supported for creating and reading archives.

Binary Functions

  • Added: bin:infer-encoding: New function for inferring the encoding of binary data.
  • Added: bin:rotate: New function for cyclic bit rotation.
  • Added: bin:is-bit-set: New function for testing a single bit.
  • Added: bin:set-bits: New function for setting or clearing bits.
  • Added: bin:count-bits-set: New function for counting one-bits.
  • Added: bin:to-base64url, bin:from-base64url: New functions for Base64url conversions.

Cache Functions

  • Added: New module.

Conversion Functions

  • 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.

Cryptographic Functions

  • Added: crypto:pbkdf2.
  • Updated: crypto:encrypt, crypto:decrypt: AES-GCM and RSA added; DES removed; algorithm names are case-insensitive.
  • Updated: crypto:generate-signature: RSA_SHA256, RSA_SHA512 and DSA_SHA256 added; defaults changed to SHA256 and RSA_SHA256.

CSV Functions

  • Added: Options: comment-marker option.
  • Updated: Options: Support for backslash-escape sequences. strict-quoting is enabled by default. field-delimiter renamed back to separator.
  • Removed: Options: row-delimiter (rows are always delimited by a newline), skip-empty; xquery format (use w3).

Database Functions

  • Added: db:counts: Count distinct values of nodes.
  • Added: db:inspect: Check storage structures for inconsistencies.
  • Updated: db:add: Multiple inputs are accepted; binary and value resources can be added.
  • Updated: db:create: Binary and value resources can be stored as initial contents.
  • Updated: db:put, db:put-value: Replace or ignore new resources.
  • Updated: db:put-binary: Replace or ignore new resources; $input restricted to binary items and strings (strings are interpreted as URIs).
  • Removed: db:create, db:add, db:put: addcache option; large inputs are moved to disk automatically.
  • Updated: db:get, db:text: $database can be addressed by a compact node.
  • Updated: db:system: libraries element.

File Functions

  • Updated: file:read-text, file:read-text-lines, file:descendants: New $options parameter.
  • Updated: file:size: New $recursive parameter.
  • Updated: file:delete: Non-existing paths are ignored.
  • Removed: file:read-text-lines: $offset and $length parameters removed.

Full-Text Functions

  • Updated: ft:search: New stop-words option; full-text options declared in the query prolog are inherited; elements are returned if the index contains the string values of elements.
  • Updated: ft:contains: New stop-words and occurs options; full-text options declared in the query prolog are inherited.
  • Updated: ft:tokens: New fuzzy and errors options for looking up index tokens with a bounded number of errors.
  • Updated: ft:mark, ft:extract: Constructed nodes are accepted; the name of the marker element must be an NCName.
  • Updated: ft:count: Constructed nodes are accepted.
  • Updated: ft:thesaurus: Terms are normalized with the full-text options; the thesaurus index of a database is used; the queried term is not returned anymore.
  • Updated: Tokenization: Letters that denote multiple characters are expanded (ß → ss, æ → ae, …).
  • Updated: Database Functions: Rebuild indexes of older versions to apply the standardized token normalization.

Geo Functions

  • Added: Module re-added with GML 3 support.

HTML Functions

  • Added: Validator.nu option fail-on-error.
  • Updated: If no parser is available, the HTML input will be wrapped in an html element.

HTTP Client Functions

  • Added: http:get, http:head, http:delete, http:options, http:post, http:put, http:patch, http:query, http:send: map-based interface with typed options and record results.
  • Added: http:send-request: proxy, verify and xml attributes.
  • Updated: http:send-request: follow-redirect accepts a maximum number of redirects; auth-method is case-insensitive; timeout accepts fractions of a second.
  • Updated: Compressed responses are requested by default; redirects are no longer forwarded to another origin with credentials, and downgrades from https to http are not followed.
  • Added: http:send-request: cookies attribute for collecting and resending cookies.
  • Added: http:send-request: href and version attributes in the http:response element; SHA-256 and SHA-512-256 digest authentication.
  • Updated: http:send-request: response header names are returned in lower case.
  • Updated: http:send-request: binary response bodies are returned as lazy items; file-based request payloads are streamed.

Job Functions

  • Added: job:next, job:info
  • Updated: job:eval: A function item can be invoked instead of a query. Cron syntax and daylight saving changes are supported. permission, timeout and memory options added. A service must have a unique id; memory, timeout and permission are rejected.
  • Updated: job:execute: A function item can be invoked instead of a query. Raise deadlock error if execution would deadlock the calling query.
  • Updated: job:list-details: cron, address and session attributes added.

Cron Syntax

  • Added: New article added.

JSON Functions

  • Added: W3-Mapping: New conversion format.
  • Added: Options: Option mapping for the w3-mapping format. Serialization option escape-solidus, parsing option json-lines.
  • Updated: Options: number-parser was replaced with number-format.
  • Removed: Options: Conversion formats xquery and basic (use w3 and w3-xml).

Process Functions

  • Updated: proc:system: New options binary, normalize-newlines and fallback; binary input; invalid characters are rejected.
  • Updated: proc:execute: New options binary, normalize-newlines and fallback; binary input; invalid characters are rejected.

Profiling Functions

  • Updated: prof:track: allocated option added.
  • Updated: prof:human: arbitrary numbers and durations accepted.

Request Functions

  • Added: request:body
  • Updated: Functions can also be called in WebSocket handlers and asynchronous jobs.

Sessions Functions

  • Added: sessions:list-details

SQL Functions

  • Added: sql:execute-batch: executes a prepared statement over multiple parameter sets.
  • Updated: sql:execute: generated-keys and null options added.
  • Updated: sql:execute-prepared: Parameters can be supplied as an array; null option added.
  • Updated: sql:prepare: generated-keys option added.

Store Functions

  • Added: store:info, store:close
  • Updated: All opened stores are now kept in main memory.

String Functions

  • Added: string:closest, string:levenshtein-distance, string:partial-ratio, string:token-sort-ratio, string:token-set-ratio, string:ngram-similarity, string:ngrams
  • Updated: The similarity functions and string:ngrams adopt the $options of ft:tokenize (case, diacritics, stemming, language).
  • Updated: string:soundex: a string without letters yields an empty string (before: 0000).
  • Removed: string:format in favor of fn:pad-string.

Unit Functions

  • Added: unit:timeout: abort tests that exceed a time limit.
  • Updated: unit:test: multiple expected error codes can be specified.

Web Functions

  • Updated: web:error: $message can be an arbitrary item; serialization $options added.
  • Updated: web:response-header: message attribute removed (deprecated Servlet API feature).
  • Updated: web:redirect: Status parameter added.
  • Removed: web:forward: server-side forwarding was dropped.

WebSocket Functions

  • Added: ws:list-details, ws:names, ws:ping
  • Updated: ws:eval: A function item can be invoked instead of a query; job options and serialization parameters.
  • Updated: ws:close: Optional close status and reason.

XQuery Functions

  • Added: xquery:for-each: New function for parallel iteration.
  • Added: xquery:reduce: New function for parallel aggregation.
  • Added: xquery:fork-any: New function returning the first available result.
  • Updated: xquery:eval: A function item can be invoked instead of a query. Allow decimal places for timeout value. The permission option also applies to returned function items.
  • Updated: xquery:eval-update: A function item can be invoked instead of a query.
  • Updated: xquery:fork-join: report and timeout options added.
  • Updated: xquery:parse: optimize option added.

Full-Text

  • Added: Full-Text Index: The index is updatable with UPDINDEX.
  • Updated: Mixed Content: Elements with mixed content can be indexed, and their matches are highlighted.
  • Updated: Thesaurus: Terms are normalized with the full-text options. Thesauri can be stored and indexed in databases. Equivalent Terms can be grouped. The query term is not returned as thesaurus term anymore.

Updates

  • Removed: MIXUPDATES option. Use job:execute to combine updating and non-updating operations.

Indexes

  • Added: Full-Text Index: The index is updatable with UPDINDEX. FTMIXED indexes the string values of elements with mixed content.
  • Added: Thesaurus Index: Thesauri stored in databases can be indexed with THESINDEX.
  • Updated: Full-Text Index: Faster fuzzy querying. Token normalization was standardized (rebuild indexes of older versions to apply it).
  • Updated: Text Index, Attribute Index: integer comparisons (equality and ranges) on integer-typed nodes are rewritten for value-index access.
  • Updated: Path Index, Name Index, Updates: insertions keep the path index, name index and statistics up to date.

XQuery Optimizations

  • Added: Loop Unswitching, Node Construction.

Repository

  • Added: Web Applications: RESTXQ applications can be packaged as archives
  • Updated: Java classes are cached after the first import.
  • Updated: Listing: absolute paths are returned

XQuery Extensions

  • Added: %basex:memo annotation for the Memoization of function results.
  • Added: %basex:eval annotation for the Evaluation in Other Queries.
  • Removed: The regular expression flags j, ! and ;.
  • Removed: The nondeterministic prefix for dynamic function calls: calls of functions that are statically unknown are now treated as nondeterministic.

Serialization

  • Added: Standard Parameters: indent-unit, line-ending, json-lines, escape-solidus, csv-header, csv-quote-character, csv-separator.
  • Added: Custom Parameters: canonical for Canonical XML output, expression for output as XQuery expression.
  • Updated: Standard Parameters: The csv output method is part of the official specification: it is the inverse of fn:parse-csv and fn:csv-to-arrays. indent-attributes is now a standard serialization parameter. html-version: Default changed from 4.0 to 5.0. html-version, version: Control characters that the requested version does not allow now raise an error.
  • Updated: Custom Parameters: indents, newline and tabulator are superseded by indent-unit and line-ending.

Web Application

  • Added: WebDAV has been re-added as a RESTXQ application.
  • Removed: Digest authentication.
  • Updated: BaseX is now based on the Jetty EE10 environment (Servlet 6.0) and can be deployed in any Jakarta EE 10 servlet container.
  • Updated: Static resources are served by a servlet of BaseX; the directory is specified via the path parameter.
  • Updated: No database server is started anymore by default (see HTTPLOCAL).

RESTXQ

  • Added: Web Archives: applications can be deployed as ZIP archives.
  • Added: Default HTTP Methods: Support for QUERY method added.
  • Updated: Paths: %rest:path can be specified more than once.
  • Updated: Default HTTP Methods: Functions with method annotations are preferred.
  • Updated: Scope Error Handlers: %rest:error can be combined with %rest:path.
  • Removed: Server-side forwarding (<rest:forward> element and web:forward function) was dropped.

Permissions

  • Updated: Security functions are also invoked for WebSocket handshakes.

WebSockets

  • Added: Path templates in WebSocket annotations.
  • Added: Permission checks for WebSocket handshakes.
  • Added: %ws:subprotocol annotation: sub-protocol negotiation.
  • Updated: All Request Functions can be used in WebSocket handlers.
  • Updated: %ws:error annotation: also invoked for errors of WebSocket functions and of ws:eval. Without such a function, no error message will be sent to the client.
  • Updated: %ws:close annotation: close status and reason can be bound to variables.
  • Removed: %ws:header-param annotation (use the Request Functions instead).

REST

  • Added: QUERY Method: Evaluate the request body as XQuery expression.
  • Added: PUT Method: Replace or ignore new resources.

WebDAV

  • Added: WebDAV is now written in XQuery and runs as a RESTXQ application.
  • Updated: Locks are kept in main memory; the ~webdav database is not used anymore.

DBA

  • Added: Stores view; Caches panel of the Activity view.
  • Updated: Full redesign: side-by-side panels, Workspace, Activity, CodeMirror 6, use of WebSockets.

Clients

  • Updated: Digest replaced with salted authentication.
  • Removed: Support for digest and cram-md5 authentication, and the outdated clients.

Server Protocol

  • Updated: Digest replaced with salted authentication
  • Removed: Digest authentication of clients of Version 8 to 12, and the client-side fallback to cram-md5 authentication

Java Examples

  • Removed: XML:DB API

User Management

  • Added: Trusted Code: Code can be untrusted.
  • Updated: Permissions: Permissions are also checked for databases that have already been opened.
  • Added: Password algorithms can be configured via AUTHALGORITHMS, including PBKDF2 encryption.
  • Removed: The unsalted digest (MD5) algorithm.

Transaction Management

  • Updated: Updating queries acquire read locks for databases that are only read.
  • Removed: FAIRLOCK option: Non-fair locking is always used.

Logging

  • Updated: Uniform notation of client addresses; IPv6 addresses behind proxies are recognized.

Node Storage

  • Updated: Updatable Indexes: Segmented layout of the value indexes, including the full-text index.
  • Updated: Compact storage of namespaces, incremental persistence of the ID-PRE mapping, parallel reading of the node table.

⚡Generated with XQuery