@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 186 draft agenda #agenda-10-27
Draft agenda published.
Pull request #3013 created #created-3013
PR #2985 rebased (by hand) on top of PR #3009
This resolves the merge conflicts between my reworking of the build scripts for Gradle 9.x and @ChristianGruen 's updates for serialization parameters.
Close #2985 Close #2984
Per the description in #2985, #2981 will have to be rebased. It’s not immediately clear to me how straightforward that will be
Pull request #3012 created #created-3012
3011 Reinstate handling of NaN in order by clause
Fix #3011
Changes the handling of NaN in XQuery order by clauses to be sensitive to "empty greatest", as it was in 3.1.
Issue #3011 created #created-3011
Effect of "empty greatest" on ordering of NaN
A number of new tests have been committed in test set EmptyOrderDecl demonstrating that XQuery 4.0 produces different sort results from 3.1 in the case of a sequence that includes NaN values. These changes are attributed to a change in the spec consequent on PR #2256.
When I wrote that PR, and when we reviewed it, I don't think we were conscious that we were introducing an incompatible change, and the change is not highlighted in the list of incompatibilities. I'm therefore raising the issue for discussion: do we actually want to make this incompatible change?
To be clear: Sorting the values (), NaN, 1, 4, 7
- In 3.1 with empty least, the result is
(), NaN, 1, 4, 7 - In 3.1 with empty greatest, the result is
1, 4, 7, NaN, () - In 4.0 with empty least, the result is
(), NaN, 1, 4, 7 - In 4.0 with empty greatest, the result is
NaN, 1, 4, 7, ()
Now, I think the 3.1 rules are pretty bizarre (the rationale is probably that SQL has a similar capability if you equate () with SQL's null). I can't imagine that many people use "empty greatest", but if they do, I see no particular reason to impose an incompatible change on them. The bar for an incompatible change should be very high (the fact that we think the new rules are better is not a strong enough reason), and I don't think the justification here is strong enough.
Issue #2302 closed #closed-2302
Bad links in EXPath binary spec
Issue #3008 closed #closed-3008
2302b - Stylesheeet change, Fix bad EXPath error links
Pull request #3010 created #created-3010
Add change metadata (PR numbers and dates)
Pull request #3009 created #created-3009
Upgrade to Gradle 9.8.2
This should resolve some warnings and support modern versions of Java. This PR also switches from Groovy to Kotlin for the build scripts. A few plugins have been added and there’s been a small amount of reorganization to simplify the tasks. Using plugins required "unpacking" some multi-step tasks into several top level tasks. These new tasks have names that begin with "_" in an attempt to indicate that they’re "internal".
(I have no idea if this will build successfully as a PR. The PR certainly isn't going to test the new build scripts.)
I've tried to carefully check that the build produces the same output. It appears to:
- The
index.htmlfile ingrammar-exploreris different because I added a meta charset element to it. - The top-level index file is different because I added a link to the grammar explorer.
- The
xslt-streaming.xmlfile present in the old build was an accident, I think.
(If you try to reproduce this comparison, set the Saxon version in gradle.properties to 12.9. I've updated to 12.10, but that changes all of the HTML files by a few bytes in the comment at the end.)
@Arithmeticus if you pull this branch you should be able to build with Java 25.
@michaelhkay and/or @ChristianGruen I'd appreciate it if you could smoke test this before we merge it and confirm that it "works for you".
Pull request #3008 created #created-3008
2302b - Stylesheeet change, Fix bad EXPath error links
#Fix 2302
Issue #3007 closed #closed-3007
2302 Stylesheet change to fix bad expath errorref links
Pull request #3007 created #created-3007
2302 Stylesheet change to fix bad expath errorref links
Fix #2302
Issue #2787 closed #closed-2787
Constructor functions for record types
Pull request #3006 created #created-3006
2973 Clarify effect of minimal match
Adds notes to substring-(before|after)[-last] explaining the effect of the "minimal match" rule when the collation includes ignorable characters.
Fix #2973
Issue #3005 created #created-3005
`fn:build-uri`: UNCs
The URI functions currently break the UNC round trip:
let $options := { 'unc-path': true() }
return 'file:////uncname/path' => parse-uri($options) => build-uri($options)
…returns file://////uncname/path.
A plain :// already gives the right URI, so maybe it suffices to drop the ://// rule?
Issue #3004 created #created-3004
`fn:rename`: renaming nodes
With the just added fn:update function it is tedious to rename nodes: existing entries need to rebuilt. We could simplify with an fn:rename function, which could also be used standalone:
fn:rename(
$node as gnode(),
$name as xs:anyAtomicType
) as gnode()
Examples:
rename(<item id="1">A</item>, 'entry')
rename(<a b="1"/>/@b, QName('urn:x', 'x:b'))
(: XNodes today :)
update($doc, fn { //item }, fn($item) { element entry { $item/@*, $item/node() } })
(: XNodes with rename :)
update($doc, fn { //item }, rename(?, 'entry'))
update($doc, fn { //@class }, rename(?, 'role'))
(: JNodes today :)
update($json, fn { //customer-id }, fn { { 'customerId': jvalue() } })
(: JNodes with rename :)
update($json, fn { //customer-id }, rename(?, 'customerId'))
Issue #3003 closed #closed-3003
Fixed paths for generating tests from specs
Pull request #3003 created #created-3003
Fixed paths for generating tests from specs
Moving the EXPath specs broke generating tests. It's not at all clear to me how or why but this seems to fix it.
Pull request #3002 created #created-3002
2994 File Module: editorial, minor revisions
Some more minor changes (some of them made explicit):
file:resolve-path: normalizes all paths (native separators, ./.. removed) and keeps a trailing separator.$basecounts as a directory only if it ends with a separator.file:write-binary:$offsetnow defaults to(). Without it, the file is replaced; with an explicit0, bytes are overwritten in place.file:base-dir: returns the base URI itself if it points to a directory.file:copy/file:move: missing parent directories are created, and copying or moving into the source's own directory does nothing.- Renamed parameters:
file:write-text-lines($values)is now$lines;file:children/file:descendants$pathis now$dir.
…and editorial trivia.
Issue #2473 closed #closed-2473
Rearrange the EXPath specifications
Issue #3001 closed #closed-3001
Refactor specs out of EXPath/
Pull request #3001 created #created-3001
Refactor specs out of EXPath/
Fix #2473
I'm pretty sure they still build correctly. It's possible some links will need fixing on qt4cg.org; I'll look at those in a few minutes. I'm also working on a more substantial update to the Gradle build scripts to account for modern versions of Java. That should be coming today as well, so I'm going to wait until after that to look at tidying qt4cg.org.
(This is a "build-only" PR so I'm just going to merge it optimistically.)
Pull request #3000 created #created-3000
2982 Updated Unicode references for case folding
Fix #2982
Issue #2999 created #created-2999
Update: $replacement argument
As I commented during the review of fn:update, I feel the rules for fn:update handling of the $replacement argument are rather complex and not very intuitive. I propose to experiment with an alternative in which $replacement is always a function that returns a record consisting of an action such as "delete", "replace", "rename" etc, and a value whose interpretation depends on the action.
Pull request #2998 created #created-2998
2991 Rules for Untrusted Functions
QT4 CG meeting 185 draft minutes #minutes-10-20
Draft minutes published.
Issue #2993 closed #closed-2993
2991 Rules for Untrusted Functions (part 1)
Issue #2849 closed #closed-2849
xs:integer vs. restricted subtypes
Issue #2885 closed #closed-2885
2849 xs:integer vs. restricted subtypes
Issue #77 closed #closed-77
Allow manipulation of maps and arrays
Issue #2873 closed #closed-2873
`fn:update`: another attempt
See 6230 more statuses in yearly archives.