@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 188 draft agenda #agenda-11-10

09 Nov at 11:10:00 GMT

Draft agenda published.

Issue #3050 created #created-3050

09 Nov at 09:15:14 GMT
Static inferencing with `xs:error`

Transferred from https://github.com/qt4cg/qt4tests/issues/505

Type inferencing with type xs:error is a mess.

In principle, xs:error is a subtype of every other type (because its value space, being empty, is a subset of every other value space), so the substitutability rule should mean that an expression with type xs:error is substitutable for any other type, which would mean that a call on fn:error() never results in a type error.

But we also say that a type error can be raised statically if the intersection of the supplied type and the required type is empty, and if the supplied type is xs:error then its intersection with any other type is always empty (there are no values that are instances of both types), so a statically inferred type of xs:error is therefore a type error wherever it occurs, which can't make sense because it would make every call on fn:error() statically reportable.

Issue #3049 created #created-3049

08 Nov at 22:55:33 GMT
Make $err:map into a record

It would make sense for the $err:map variable available in a try/catch to be a labeled record rather than a simple map.

Pull request #3048 created #created-3048

05 Nov at 19:40:41 GMT
3047 Clarify Rules for JNode selectors

Fix #3047

Issue #3047 created #created-3047

05 Nov at 17:52:30 GMT
Atomization of JNode selectors

Test case PathExpr-J-020 does

let $x := (validate type xs:integer {<x>1</x>}, validate type xs:integer {<y>2</y>}) return
        (['a', 'b', 'c'], ['b', 'c', 'd'], ['e', 'f', 'b'])[./$x = 'b']

and expects the result (['a', 'b', 'c'], ['b', 'c', 'd'])

I think this is a reasonable expectation, but it depends on something that isn't in the spec. The big question is: in the path expression ./$x, given that . is a JNode, and that the selector interpretation applies to $x, is $x atomised? In this case $x holds an sequence of two XNodes which, when atomized, return (1, 2).

The spec doesn't say that $x is atomised, and I think that it should.

Note that atomisation affects the outcome not only when $x is an XNode, but also when it is (say) an array or a JNode.

If $x isn't atomized, then §4.6.3 says "the result is those children of N whose ·jkey· property matches its value." where matches is nowhere defined.

Pull request #3046 created #created-3046

05 Nov at 14:56:56 GMT
2999 Update: $replacement argument

Closes #2999

Tests: https://github.com/qt4cg/qt4tests/pull/504

Issue #3045 created #created-3045

05 Nov at 12:21:04 GMT
`fn:serialize`: understanding the defaults

I wanted to write a proposal for #2846 (to tweak the serialization of file:write and file:append), but I noticed I need to start with fn:serialize, and I failed to understand how the rules are meant to work.

I believe it is easy to misinterpret following sentence, which has already been added in 3.1:

If the second argument is omitted, or is supplied in the form of an output:serialization-parameters element, then the values of any serialization parameters that are not explicitly specified is ·implementation-defined·, and may depend on the context.

I am tempted to carefully read it as…

  • if I omit the options argument, the values of all parameters are implementation-defined (no matter what the spec names as default);
  • if I supply it, maybe by just using an empty options argument {}, all default values will apply;
  • all values of the parameters that I omit as children of output:serialization-parameters element will again be implementation-defined; and
  • only those default option values that are listed in the spec will ever apply when I specify an options argument that does not override the defaults.

It also includes a minor typo (“is” → “are”).

I am pretty sure it wants to say something different, but I lack the historical knowledge:

  1. what exactly was meant to be implementation-defined in 3.1 (possibly earlier), and
  2. which implementation liberties must/should we preserve in 4.0?

Issue #3004 closed #closed-3004

05 Nov at 11:29:33 GMT

`fn:rename`: renaming nodes

Pull request #3044 created #created-3044

04 Nov at 16:45:39 GMT
3043 `coerce as`: explicit coercion

Closes #3043

Issue #3043 created #created-3043

04 Nov at 09:50:57 GMT
`coerce as`: explicit coercion

See https://github.com/qt4cg/qtspecs/issues/2576#issuecomment-6627158408 and older issues:

A coerce as expression will be helpful to make coercions explicit. For example, it will allows us to write…

{ 'a': 1 } coerce as record(a)

…instead of…

let $a as record(a) := { 'a': 1 }
return $a

Similar as fn:distinct-ordered-nodes, it will only be fully understood and used by expert users, but it won’t harm anyone else (and it’s much more useful today than treat as).

Pull request #3042 created #created-3042

03 Nov at 23:49:21 GMT
2848 Improve Discussion of Determinism

Attempts to resolve #2848 by fairly small amendments to the essay on determinism. Note that the text has been moved into a new section (and partitioned into subsections), so the change is much smaller than the diff might imply. Hopefully these changes are enough to resolve the issue.

Fix #2848

Pull request #3041 created #created-3041

03 Nov at 23:02:08 GMT
2884 Fixes to schema for XSLT (and element catalog)

Fix #2884

Pull request #3040 created #created-3040

03 Nov at 22:38:53 GMT
2996 Drop XQUery MIME-type Appendix

Fix #2996

Pull request #3039 created #created-3039

03 Nov at 21:29:33 GMT
3021 Change keyword %static to %fixed

Fix #3021 -- change keyword %static to %fixed

Fix #3038 -- move semantic constraints into the grammar

I combined these proposals because there would otherwise be conflicts

Issue #2933 closed #closed-2933

03 Nov at 20:30:37 GMT

Validation of records

Issue #3016 closed #closed-3016

03 Nov at 20:30:35 GMT

2933 Integrity Constraints for Records

Issue #3035 closed #closed-3035

03 Nov at 19:32:24 GMT

Regex formalism does not account for group nesting

Issue #3036 closed #closed-3036

03 Nov at 19:32:22 GMT

3035 Clarify rules for nesting of groups in fn:analyze-string

Issue #2897 closed #closed-2897

03 Nov at 18:05:38 GMT

Namespace Axis

Issue #2986 closed #closed-2986

03 Nov at 18:05:37 GMT

2897 Namespace Axis

QT4 CG meeting 187 draft minutes #minutes-11-03

03 Nov at 17:45:00 GMT

Draft minutes published.

Issue #3014 closed #closed-3014

03 Nov at 17:24:01 GMT

`fn:collection`: defaults

Issue #3026 closed #closed-3026

03 Nov at 17:24:00 GMT

3014 fn:collection: defaults

Issue #2983 closed #closed-2983

03 Nov at 17:22:19 GMT

Inconsistency in definition of regular expression assertions

Issue #2988 closed #closed-2988

03 Nov at 17:22:18 GMT

2983 Expand and Extend Regex Formalism

Issue #2944 closed #closed-2944

03 Nov at 17:20:53 GMT

Editorial Notes (October 2026 edition)

Issue #3022 closed #closed-3022

03 Nov at 17:20:51 GMT

2944 Editorial Notes (October 2026 edition)

Issue #2994 closed #closed-2994

03 Nov at 17:19:13 GMT

File Module: editorial, minor revisions

Issue #3002 closed #closed-3002

03 Nov at 17:19:11 GMT

2994 File Module: editorial, minor revisions

Issue #3018 closed #closed-3018

03 Nov at 17:15:55 GMT

Add "but with" to the set of operators accepted by fn:op()

See 6323 more statuses in yearly archives.