@qt4cg statuses

This page displays recent status updates about the QT4CG project.

The are also captured in an RSS feed.

By year: 2026, 2025, 2024, 2023, 2022, 2021, 2020

Pull request #2682 created #created-2682

10 Jun at 17:30:15 GMT
2681 Clarifications for map-for-key() function

Fix #2681

Issue #2681 created #created-2681

10 Jun at 15:35:15 GMT
Refine specification of map-for-key() in XSLT

map-for-key() was introduced by PR #1622.

  • Since the second argument of map-for-key() is optional, it should allow an empty sequence for consistency.

  • The current spec does not define the order of entries in the resulting map. It should specify that the order is implementation-dependent.

  • In the third paragraph of the Errors section, the reference to the key function should be a reference to map-to-key.

  • The spec says: The returned map contains one entry (K, V) for every atomic item K where the result of key($key-name, K, $top) is not empty, with V set to the result of key($key-name, K, $top). But there can be an infinite number of items that satisfy this condition, for example, QNames with different prefixes. We should only return one key for each "equality group" in the underlying index. That's a slightly slippery concept, but essentially we should return the entries with distinct keys, on a suitable definition of "distinct".

  • Underlying this is a slight implementation difficulty: the spec for xsl:key and the key() function does not actually require us to hold the "real" key for an entry, in the sense of the result of the use expression. We can instead hold some kind of internal "collation key" used for matching. It's not always possible to reconstruct the original atomic value from the collation key. In most cases (given that we require the key to use codepoint collation) we can construct an equivalent key, and I think that's all that the spec should require. For example, this means we aren't required to deliver the original type annotation, the original timezone, or with QNames, the original prefix.

I think we can say something like:

Let UU be the set of atomic items U for which the result of key($key-name, U, $top) is not empty, and let KK be the result of eliminating duplicates from UU according to the rules of the atomic-equal function. (Note, the set UU is potentially infinite: for example in the case of QNames, there is an infinite set of prefixes that can be chosen for a QName. The set KK, however, is always finite, and contains one value for each set of equivalent values obtained by evaluating the use expression in the key definition. The particular choice of atomic item from the set of candidate values is implementation-dependent; for example, with QNames, the item chosen might be one that has no prefix. The chosen key is not necessarily one that actually arose from evaluation of the use expression: for example, it might have the type annotation xs:string when all the original keys were instances of xs:untypedAtomic.) Then for each atomic item K in the set KK, the returned map contains an entry (K, V) where V is the reuslt of fn:key($key-name, K, $top).

Issue #2680 closed #closed-2680

10 Jun at 06:09:16 GMT

XSLT Draft and fn:system-property/fn:system-properties syntax

Issue #2680 created #created-2680

09 Jun at 13:50:48 GMT
XSLT Draft and fn:system-property/fn:system-properties syntax

XSL Transformations (XSLT) Version 4.0 W3C Editor's Draft 26 May 2026

In sections

  • 27.6 Binary Library Feature, points 4 and 5 in both conformant/non-conformant sections
  • 27.7 File Library Feature, points 4 and 5 in both conformant/non-conformant sections

Is it a copy/paste error that fn:system-property and fn:system-properties use what I think is XQuery syntax?

4. must return "yes" as the result of the expression fn:system-property(#xsl:supports-file-library).
5. must return true as the result of the expression fn:system-properties()?#supports-file-library.

Issue #2679 created #created-2679

09 Jun at 10:33:27 GMT
List of recent pull requests is not useful

I'm not finding the information at "Available pull requests" (https://qt4cg.org/available-prs.html) useful.

I thought that the idea was to publish a minimised diff showing the effect of the PR on the spec, so that we could easily go back and see what changes the PR had made. But what we get appears to be a complete version of the spec (all the specs) with no indication of changes.

Issue #2019 closed #closed-2019

03 Jun at 09:59:46 GMT

1776: XSLT template rules for maps and array

Pull request #2678 created #created-2678

03 Jun at 09:54:27 GMT
2581 XSLT Patterns

A thorough revision of the section on patterns, based on the whiteboarding done in Prague. The main technical changes are:

  • GNodePatterns become XNodePatterns, and apply to XNodes only
  • Revise map patterns to distinguish extensible from non-extensible patterns
  • Add array patterns
  • Reintroduce JNode patterns (which still had a ghostly presence in the spec....)

There's a fair bit of editorial rearrangement as well, so the diffs probably won't be too helpful.

Issue #2677 created #created-2677

31 May at 16:35:28 GMT
fn:transform statement about serialization-params and fn:serialize

On fn:transform, the description for the 'serialization-params' option says:

Serialization parameters for the principal result document. The supplied map follows the same rules that apply to a map supplied as the second argument of fn:serialize.

Then it describes how an unnamed xsl:output is used as default parameters. But fn:serialize does not describe the use of xsl:output, because I don't think it's supposed to, so saying that it follows the same rules is misleading to me.

Pull request #2676 created #created-2676

29 May at 09:10:15 GMT
2672 FLWOR trace clause

Fix #2672

Pull request #2675 created #created-2675

29 May at 08:29:32 GMT
2664 Allow element-to-map(doc())

Implements one of the suggestions in #2664, allowing element-to-map() to accept a well-formed document node.

I'm not in favour of pursuing the other suggestion in that issue, namely atomizing a map (or a JNode) to extract its string-value (as the concatenation of the map entries).

Fix #2664

QT4 CG meeting 167 draft agenda #agenda-06-02

27 May at 15:40:00 GMT

Draft agenda published.

Issue #2674 created #created-2674

27 May at 16:15:18 GMT
Editorial notes (to be continued)

A sequel, starting with Gunther’s observation in the last comment of #2590:

  • [ ] XQuery: A.1.2 Constraint: reserved-function-names uses the term "unprefixed" as one of the characteristics of disallowed function names. This may lead one to believe that a URIQualifiedName without a prefix might possibly qualify for being restricted. However, this seems unlikely to be intended: the Q{...}... syntax is unambiguous and cannot be mistaken for a KindTest or similar construct. I thus propose to clarify this in the constraint, by dropping "prefixed"/"unprefixed" from it, or adding a remark about URIQualifiedName.

Pull request #2673 created #created-2673

27 May at 15:51:10 GMT
2590 Editorial Omnibus

Fix #2590

Issue #2672 created #created-2672

27 May at 14:42:01 GMT
Debugging FLWOR expressions

I want to revive Mike’s idea of introducing a trace clause (#111):

Despite the recent spec including fn:message, it remains cumbersome to output intermediate results or provide progress information inside FLWOR expressions. I think that a message clause with one expression and an optional label expression…

for $item in //items
message $item/@id, 'ID: '
return string($item)

…would be a good drop-in replacement for clumsy temporary let clauses…

for $item in //items
let $_ := message($item/@id, 'ID: ')
return string($item)

The clause would be evaluated once for every tuple reaching that clause. It seems sensible to me to stick with the value/label structure, as existing trace code can build on it without further changes.

Since the evaluated value is swallowed, I have chosen message as keyword, but trace may work similarly well.

PS: I promise I’ll hold off on sharing new ideas for the upcoming weeks…

Pull request #2671 created #created-2671

27 May at 11:11:54 GMT
2668 Drop number-parser option of json-to-xml

Fix #2668

Pull request #2670 created #created-2670

27 May at 10:47:22 GMT
2669 Add option to ignore empty entries when comparing maps

Fix #2669

Issue #2669 created #created-2669

26 May at 19:50:50 GMT
deep-equal() - option to treat empty map entry as absent map entry

Given the debates we've been having about empty entries in a record versus absent entries, it would be useful to have an option on the deep-equal function to treat these as equivalent.

Perhaps "empty-as-absent" - treats map entries whose value is an empty sequence as if the entry were absent. Default false.

QT4 CG meeting 166 draft minutes #minutes-05-26

26 May at 17:00:00 GMT

Draft minutes published.

Issue #2659 closed #closed-2659

26 May at 16:42:29 GMT

Binary Module: `bin:count-ones` for counting bits (population)

Issue #2662 closed #closed-2662

26 May at 16:42:28 GMT

2659 bin:count-ones, bin:rotate, bin:is-bit-set, bin:sets-bits

Issue #2617 closed #closed-2617

26 May at 16:39:15 GMT

Duration multiplied or divided by numeric

Issue #2628 closed #closed-2628

26 May at 16:39:14 GMT

2617 Duration multiplied or divided by number

Issue #2642 closed #closed-2642

26 May at 16:37:15 GMT

Allow xsl:analyze-string to use the results of fn:regex

Issue #2646 closed #closed-2646

26 May at 16:37:14 GMT

2642 Add compiled-regex attribute to xsl:analyze-string

Issue #2654 closed #closed-2654

26 May at 16:35:11 GMT

2652 Clarify lax validation

Issue #2651 closed #closed-2651

26 May at 16:33:01 GMT

Editorial, for/let: range variables

Issue #2656 closed #closed-2656

26 May at 16:32:59 GMT

2651 Use termdefs for range variables

Issue #2655 closed #closed-2655

26 May at 16:32:58 GMT

`fn:matching-segments`: empty input

Issue #2658 closed #closed-2658

26 May at 16:32:56 GMT

2655b matching segments empty

Issue #2663 closed #closed-2663

26 May at 16:31:12 GMT

Use standard coercion rules for the name expression in a computed node constructor

See 5516 more statuses in yearly archives.