QT4 CG Meeting 154 Minutes 2026-03-03
Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests
Table of Contents
- Summary of new and continuing actions
[0/5] - Draft Minutes
- 1. Administrivia
- 2. Technical agenda
- 2.1. PR #2467: Harmonize the fn: and file: functions that read text
- 2.2. PR #2470: 1310 Functions fn:regex and ?matching-substrings
- 2.3. PR #2481: 1528 ambiguities in computed node constructors
- 2.4. PR #2483: 1479 XQuery: Default Namespace Clarifications
- 2.5. PR #2490: 2443 Naming: JNodes, selectors and contents
- 2.6. PR #2491: 2484 Subtyping: abstract types vs choice types
- 2.7. PR #2492: 2052 fn:collation-available: $usage
- 2.8. PR #2474: 272 Allow xsl:use-package to set parameters
- 2.9. PR #2478: 2476 guaranteed streamability
- 2.10. PR #2479: 2472 drop the term "potential visibility"
- 3. Any other business
Summary of new and continuing actions [0/5]
[ ]QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests[ ]QT4CG-143-03: JK to look for C14N test suites.[ ]QT4CG-144-01: MK to consider if any now lost value comparisons should be added as examples.[ ]QT4CG-149-01: CG to draft a new PR with the common rule note.[ ]QT4CG-150-01: NW to ask Jirka for a room at XML Prague for Tuesday/Wednesday[ ]QT4CG-150-04: NW to see about a status update on PR #2345; possibly schedule discussion[ ]QT4CG-151-01: MK to fix the typo in the build-dateTime function.[ ]QT4CG-151-03: NW to investigate why records are formatted incorrectly in XSLT[ ]QT4CG-152-01: MK to add a note about the new and old syntax for names in PR #2446[ ]QT4CG-153-01: MK to investigate the indentation problem.[ ]QT4CG-153-02: MK to turn my suggestions on #1949 into a PR.[ ]QT4CG-154-01: MK to review why anyAtomicType didn’t, in fact, become a square box![ ]QT4CG-154-02: MK to add a note about “tunneling” package parameters.[ ]QT4CG-154-03: NW to make sure that the streaming spec goes in the diff list
Draft Minutes
1. Administrivia
1.1. Roll call [9/10]
[X]David J Birnbaum (DB)[X]Reece Dunn (RD)[X]Christian Grün (CG)[X]Joel Kalvesmaki (JK)[X]Michael Kay (MK)[ ]Juri Leino (JLO)[X]John Lumley (JWL)[X]Alan Painter (AP[X]Wendell Piez (WP)[X]Norm Tovey-Walsh (NW) Scribe. Chair.
1.2. Accept the agenda
Proposal: Accept the agenda.
Accepted.
1.3. Approve minutes of the previous meeting
Proposal: Accept the minutes of the previous meeting.
Accepted.
1.4. Next meeting
The next meeting is planned for 10 March 2026.
Note: Daylight Saving Time begins in North America on Sunday, 8 March. It does not begin in the UK and Europe until Sunday, 29 March. The Invisible XML CG meets on UK and European civil time. The meetings of 10, 17, and 24 March will be one hour later in North America.
1.5. Review of open action items [1/10]
[ ]QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests[ ]QT4CG-143-03: JK to look for C14N test suites.[ ]QT4CG-144-01: MK to consider if any now lost value comparisons should be added as examples.[ ]QT4CG-149-01: CG to draft a new PR with the common rule note.[ ]QT4CG-150-01: NW to ask Jirka for a room at XML Prague for Tuesday/Wednesday[ ]QT4CG-150-04: NW to see about a status update on PR #2345; possibly schedule discussion[ ]QT4CG-151-01: MK to fix the typo in the build-dateTime function.[ ]QT4CG-151-03: NW to investigate why records are formatted incorrectly in XSLT[ ]QT4CG-152-01: MK to add a note about the new and old syntax for names in PR #2446[ ]QT4CG-153-01: MK to investigate the indentation problem.[ ]QT4CG-153-02: MK to turn my suggestions on #1949 into a PR.
1.6. Review of open pull requests and issues
This section summarizes all of the issues and pull requests that need to be resolved before we can finish. See Technical Agenda below for the focus of this meeting.
1.6.1. Blocked
1.6.2. Merge without discussion
The following PRs are editorial, small, or otherwise appeared to be uncontroversial when the agenda was prepared. The chairs propose that these can be merged without discussion. If you think discussion is necessary, please say so.
- PR #2493: 2408 Misc editorial corrections
- PR #2485: 2388 Adaptive serialization of anonymous functions
- PR #2480: 2465 Improve description of FODC0006
- PR #2479: 2472 drop the term "potential visibility"
- PR #2469: 2466 Adapt rules of format-number to new comparison rules
- PR #2468: 2448 Change title of XPath 4.0 specification
Proposal: merge without discussion.
Accepted.
1.6.3. Close without action
It has been proposed that the following issues be closed without action. If you think discussion is necessary, please say so.
- Issue #2018: Type-checking the result of xsl:apply-templates
- Issue #1702: Node Updates: Functions
- Issue #1506: Type declarations: Constructor functions?
- Issue #1251: Allow sequence constructor in extension instructions that are implemented with named templates
- Issue #1225: Generalization of Deep Updates
- Issue #1045: Functions to manage namespace usage
- Issue #641: Serialization fallback
Proposal: close with no further action.
Accepted.
1.6.4. Substantive PRs
The following substantive PRs were open when this agenda was prepared.
- PR #2492: 2052 fn:collation-available: $usage
- PR #2491: 2484 Subtyping: abstract types vs choice types
- PR #2490: 2443 Naming: JNodes, selectors and contents
- PR #2483: 1479 XQuery: Default Namespace Clarifications
- PR #2481: 1528 ambiguities in computed node constructors
- PR #2479: 2472 drop the term "potential visibility"
- PR #2478: 2476 guaranteed streamability
- PR #2474: 272 Allow xsl:use-package to set parameters
- PR #2470: 1310 Functions fn:regex and ?matching-substrings
- PR #2467: Harmonize the fn: and file: functions that read text
- PR #2350: 708 An alternative proposal for generators
- PR #2345: 2299 Expand pipeline to allow arrow expression in path expression
- PR #2313: 2298 XQFO rules: definition of default values
- PR #2247: 716 Deferred Evaluation in XPath - the f:generator record
- PR #2019: 1776: XSLT template rules for maps and array
2. Technical agenda
2.1. PR #2467: Harmonize the fn: and file: functions that read text
See PR #2467
I think the high-order question here is, do we want to add fallback to the
text functions, or leave them alone and add it to bin:decode-string?
NW attempts to outline the situation.
- MK: It’s generally true that if you use off-the-shelf decoding libraries, it’s hard to catch decoding errors.
- CG: I agree. It could be hard to do this properly.
- NW: There are three options…no, only on text, or on both text and ~bin:decode-string~f
- CG: We have permitted characters now.
- RD: Should we do what decode libraries do and insert a fallback character?
- MK: Is it meaningful to distinguish failure to decode from having a character that isn’t permitted?
- NW: I think we’re talking about unpermitted characters.
- JK: One other model to consider is instead of using a fallback function using a filter.
Straw poll: fallback function or fallback character?
In favor of a function: 1, in favor of a character: 2.
- RD: It appears that ICU allows a callback. https://unicode-org.github.io/icu/userguide/conversion/converters.html#error-callbacks
- … We should do some more investigation.
- NW: Let’s stop there and I’ll see what I can do about some research. This isn’t worth spending the whole call on.
2.2. PR #2470: 1310 Functions fn:regex and ?matching-substrings
See PR #2470
- MK: This proposal does two things which might have been a mistake based on comments.
- … In effect there’s a new function “matching substrings” that gives you more detail about the things that you matched.
- ML: The other thing it does is to make all the regex functions available as
methods on a regex object; there’s a function
fn:regexthat returns a record with functions as its members. That allows you to call matches, replace, etc. as “methods”.- … That makes it easier for the user to indicate that the compiled expression should be cached for reuse.
- MK: I’m interested in discussion; we should probably separate those.
- NW: I’m a little worried about the proliferation of using records as pseudo-objects.
- CG: I think adding the regex object is a bit redundant and may confuse users.
- … Regex isn’t too complex so you can use things like an LRU cache of the compiled objects.
- … It seems to me that there are harder things in the language to cache.
- JK: The motivating user story came from Liam Quin. Any word from him?
- MK: I think he indicated that matching-substrings exceeded his requirements.
- CG: I really like that function.
- MK: What I’ll do is progress matching-substrings as a free standing function and I’ll consider making fn:regex a separate proposal.
- WP: Does this fall into a class of such problems that are solvable by record structures?
- RD: The issue is caching the parsed regex object.
2.3. PR #2481: 1528 ambiguities in computed node constructors
See PR #2481
- MK: I think this is fairly straightforward. It reduces the number of keywords
we reserve.
- … The list basically includes all the spelled-out binary operators.
- … It includes the leading keywords of clauses in flower expressions.
- … And a couple of odd ones like
caseandelsethat are kind of pseudo-operators. - … Any keyword that can appear between two expressions becomes ambiguous.
- RD: That’s because in those case the right hand side will be an empty map.
- MK: Yes, the
{introduces a map or empty constructor.
Proposal: accep this PR.
Accepted.
2.4. PR #2483: 1479 XQuery: Default Namespace Clarifications
See PR #2483
- MK: This ended up being a very simple editorial proposal. I was thinking of doing more but came to the conclusion that the text is largely there.
- MK: Where we talk about namespace declaration attributes, it presents the rules in a more structured way. There aren’t any semantic changes.
Proposal: accept this PR.
Accepted.
2.5. PR #2490: 2443 Naming: JNodes, selectors and contents
See PR #2490
CG outlines the issue.
- CG: In discussion with users, it seems like JNodes are more complicated than they are.
- … We can rename some of the functions to make them clearer.
- RD: I like this. One of the advantages this has is that it reuses the names from maps.
- JWL: Is there a mechanism in the system we have that allows me to move back up from an XNode up to the root and then further up into a map or array.
- CG: Currently, no. The ancestors of XML nodes end at the XML root.
- JWL: I’m thinking of the case where the value of an array is an XML tree.
- … I’ll have to think about it.
Proposal: accept this PR.
Accepted.
2.6. PR #2491: 2484 Subtyping: abstract types vs choice types
See PR #2491
MK introduces the PR.
- MK: This recognizes that the type
nodeis equivalent to a choice of one of the seven node kinds.- … It generalizes to the other choice item types.
- MK: This picks up a few cases where it’s clearly equivalent and the subtyping rules now recognize that.
- RD: In the data model spec where we have the hierarchy diagrams have we included JNode and GNode in those?
- MK: Yes, that’s already done.
- RD: And those reflect these changes?
- MK: I’ve changed anyAtomicType into a square box to indicates it’s an abstract type.
MK reviews the diagram in the Data Model spec.
ACTION: QT4CG-154-01: MK to review why anyAtomicType didn’t, in fact, become a square box!
Proposal: accept this PR.
Accepted.
2.7. PR #2492: 2052 fn:collation-available: $usage
See PR #2492
- CG: From the rules, it wasn’t clear to me what was supposed to be done with
the
$usageparameter. - RD: If you do specify a collation, it can be used anywhere?
- MK: No, some can’t be used for substring matching for example.
- RD: Isn’t that what
$usagewas for? - MK: Yes, but it’s not clear that things are as clear cut as the argument proposed.
- RD: Would it then make sense to take a sequence of function references?
- MK: But it’s used in other contexts too.
Proposal: accept this PR.
Accepted.
2.8. PR #2474: 272 Allow xsl:use-package to set parameters
See PR #2474
- MK: The problem here is “what exactly do package parameters mean, and when can you set them?”
- … How do the answers impact what it means to pre-compile a package?
- MK: We now allow
xsl:with-paramas a child ofxsl:use-package - MK: There’s a new section 3.4.4 Supplying Package Parameters
- … Use package parameters must be known statically.
- … One could generalize it to allow global variables, but I decided not to.
- … It has to be a select attribute, not a sequence constructor
- … It’s not an error to provide a parameter that isn’t used.
- … You can set static or non-static parameters
- … But observe that some values may already be fixed from some earlier part of the compilation; that raises an error.
- MK: There’s an existing mechanism that you can override a parameter that’s still allowed.
- MK: There’s a little extra text on
xsl:exposeto tidy up some issues with visibility. - JK: I like being able to control the parameters this way.
- … Is it worth a note that this isn’t a “tunnel” parameter; they don’t go down to descendant packages.
ACTION: QT4CG-154-02: MK to add a note about “tunneling” package parameters.
- JWL: Can you do anything with the override mechanism that you can’t do with the new functionality, or vice-versa?
- MK: There were very old statements about whether stylesheet parameters were
public or private. I’ve clarified that they’re private. That means you can’t
override a parameter with a variable.
- … What you can do, but isn’t very useful, is override a variable with a parameter.
- … If the use-package declares a global variable, you can override it with a parameter that can be externally set.
- JWL: It might be worth contrasting them in the spec.
Proposal: accept this PR.
Accepted.
2.9. PR #2478: 2476 guaranteed streamability
See PR #2478
ACTION: QT4CG-154-03: NW to make sure that the streaming spec goes in the diff list
Leave this until that’s fixed.
2.10. PR #2479: 2472 drop the term "potential visibility"
See PR #2479
- MK: The term “potential visibility” was a hangover from an earlier draft.
- … It was used in two places. It obviously meant “declared visibility” in the figure caption
- … And it was used as a loose English adjective.
Proposal: accept this PR.
Accepted.
3. Any other business
Generators:
- AP: DN would like to know what in his current spec needs to change to make it acceptable.
- MK: My primary feeling is that the cost-benefit ratio is wrong; it’s too much extra functionality for the value that it delivers.
- CG: That’s my impression too.
- MK: That’s not to say it isn’t a useful feature; but as a value proposition, it’s too much effort.
- … It’s reminded me of things we’ve done in the past that were a lot of work and not widely used. Like packages. The effort is disproportionate.
- JK: I have no idea about the costs, but I do think it has a lot of benefit.
- … I think it would work better as a separate spec.
- NW: I think it would be good to ask DN what would prevent it from being a separate spec.
Default values:
- CG: We could talk about the definition of default values.
CG shows the PR.
- CG: The easy part was adding
(:empty:). The hard part was to examine all the functions!- … I also clarified the rulesin some places, like
fn:splice.
- … I also clarified the rulesin some places, like
- MK: I think the main comment is that the word “empty” doesn’t immediately convey what it means. It sounds more like what the default is.
- CG: I thought about “default-when-empty” but it’s better to have something short.
- NW: I used the word “note” to try not having semantics.
- RD: For a longer one, we could put it on a separate line.
- MK: We could also put it more closely to the question mark that indicates it’s a default.
Some discussion of options: on-empty, when-empty, default-if-empty
- CG: I also removed the rules about arguments with default values.
- MK: I think it’s a good idea to make as much of the semantics declarative as we possibly can.
- … The challenge is to combine that with readability.
- RD: Would parameter based annotations help?
- MK: Possibly…
- CG: Some specifications like XQDoc rely on how we do annotations.
Revisit next time.