@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

QT4 CG meeting 168 draft minutes #minutes-06-16

16 Jun at 16:30:00 GMT

Draft minutes published.

Issue #2664 closed #closed-2664

16 Jun at 16:17:13 GMT

JNodes symmetry: atomization, element-to-map

Issue #2675 closed #closed-2675

16 Jun at 16:17:12 GMT

2664 Allow element-to-map(doc())

Issue #2587 closed #closed-2587

16 Jun at 16:14:51 GMT

Generalization of Context Item to Context Value impacts streamability analysis

Issue #2589 closed #closed-2589

16 Jun at 16:14:50 GMT

2587 Streamability of context value expressions

Issue #2458 closed #closed-2458

16 Jun at 16:12:39 GMT

NodeTests: Unify jnode(X) and get(X)

Issue #2667 closed #closed-2667

16 Jun at 16:12:38 GMT

2458 replacement for get() selectors

Issue #2668 closed #closed-2668

16 Jun at 16:10:00 GMT

`fn:json-to-xml`: drop `number-parser` option

Issue #2671 closed #closed-2671

16 Jun at 16:09:59 GMT

2668 Drop number-parser option of json-to-xml

Issue #2672 closed #closed-2672

16 Jun at 16:06:46 GMT

Debugging FLWOR expressions

Issue #2676 closed #closed-2676

16 Jun at 16:06:45 GMT

2672 FLWOR trace clause

Issue #2678 closed #closed-2678

16 Jun at 16:03:44 GMT

2581 XSLT Patterns

Issue #2039 closed #closed-2039

16 Jun at 16:01:11 GMT

Generalize context item to context value in XSLT

Issue #2518 closed #closed-2518

16 Jun at 16:01:02 GMT

Type Safety

Issue #2681 closed #closed-2681

16 Jun at 16:00:25 GMT

Refine specification of map-for-key() in XSLT

Issue #2682 closed #closed-2682

16 Jun at 16:00:24 GMT

2681 Clarifications for map-for-key() function

Issue #2689 created #created-2689

16 Jun at 11:22:25 GMT
Couple of comments on XSLT Spec and version="3.0"

Locating Packages

In the example at the end of 3.4.3 Locating Packages there is a version attribute on the xsl:use-package element. I initially thought it was the XSLT version value but on looking closer that was wrong. So shouldn't it be a package-version attribute?

Also, I would expect the package-location elements to be xsl:package-location.

Examples of Stylesheet Functions

In the first example in 10.3.8 Examples of Stylesheet Functions the XSLT version is '3.0' but the xsl:if is using the then and else attributes from '4.0'. I would expect the XSLT version to be '4.0'.

General question about XSLT version in the examples

Generally the XSLT version is still set to '3.0' in most of the examples. Should it be uplifted to '4.0'?

Pull request #2688 created #created-2688

15 Jun at 15:32:50 GMT
1949 Refine rules for element-to-map() handling of atomic types

Fix #1949

Refines the rules for inferring boolean and numeric data types.

Pull request #2687 created #created-2687

15 Jun at 14:10:33 GMT
CSS changes for XSLT options tables (copied from F+O)

Fix #2685

Pull request #2686 created #created-2686

15 Jun at 11:55:53 GMT
2684 strip-space - align fn:doc and fn:document

Proposes that the strip-space option should work the same way across fn:doc and fn:document, with the option strip-space="conditional" taking account of xsl:strip-space declarations when running in XSLT, for compatibility.

Issue #2685 created #created-2685

15 Jun at 11:33:29 GMT
Inferior rendition of function options in XSLT spec

The way in which function options are rendered for the fn:document function in XSLT is different from (and inferior to) that for the fn:doc function in F&O.

QT4 CG meeting 168 draft agenda #agenda-06-16

15 Jun at 10:00:00 GMT

Draft agenda published.

Issue #2684 created #created-2684

15 Jun at 09:27:29 GMT
strip-space option in fn:doc vs fn:document

The strip-space option is defined as a boolean in both the fn:doc and fn:document functions, but

  • The meaning of strip-space:true() differs between the two specs. In fn:doc() it means strip all whitespace text nodes (subject to various conditions), in fn:document() it means "do what the stylesheet says", i.e. follow xsl:strip-space and xs:preserve-space declarations.

  • The default value is also different.

In XPath 3.1, fn:doc didn't mention whitespace stripping as a possibility, but XSLT 3.0 said that the whitespace stripping process (controlled by xsl:strip-space) applied to "any source tree", which was defined as including documents read using fn:doc() or fn:collection().

I suggest that for both fn:doc() and fn:document() (and for fn:collection when we define the options for that function), strip-space should have three values: all, none, and conditional. The value all corresponds to true as currently defined for fn:doc; none corresponds to false as defined by fn:doc; conditional means "as determined by the host language, or false by default" with a note pointing to xsl:strip-space. The default for both functions should be conditional.

Issue #2683 created #created-2683

14 Jun at 22:42:11 GMT
Can casting return a subtype of the requested type?

Can casting to type T return a value whose type annotation is a subtype of T?

Section 23.1 says explicitly that it can:

Where the target type TT is a primitive type, the result TV [of casting to TT] will always be an instance of TT. The result may also be an instance of a type derived from TT: for example casting an xs:NCName SV to xs:string may return SV unchanged, with its original type annotation.

Section 23.3.4 says explicitly that it can't:

The result will have the same value as the original, but will have a new type annotation:

  • If T is an atomic type, then the type annotation of the result is T.

There are arguments both ways; we need to make a decision.

The argument in favour is substitutability: any expression should be able to return a subtype of the required static type. For example given abs(X), if X is of type xs:positiveInteger then it should be permitted to return the argument unchanged, rather than changing its type annotation.

The argument against is that this can affect interoperability. If different implementations return values with different type annotations, that can affect the result of "instance of" and "typeswitch" expressions, and of XSLT pattern matching. But this argument would apply to all expressions, not only to casts and constructor functions.

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

See 5540 more statuses in yearly archives.