QT4 CG Meeting 144 Minutes 2025-12-02
Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests
Table of Contents
- Minutes
- Summary of new and continuing actions
[0/5] - 1. Administrivia
- 2. Technical agenda
- 2.1. PR #2247: Deferred Evaluation in XPath - the f:generator record
- 2.2. PR #2256: 2216 All atomic types become ordered
- 2.3. PR #2324: 2278 bin:infer-encoding, bin:decode-string
- 2.4. PR #2313: 2298 XQFO rules: definition of default values
- 2.5. PR #2301: 2198 Add cdata attribute to xsl:text and xsl:value-of
- 2.6. PR #2281: 2280 Usability of xsl:array-member
- 2.7. PR #2319: 2311 Change default XSLT pattern priorities
- 3. Any other business
Minutes
Approved at meeting 145 on 9 December 2025.
Summary of new and continuing actions [0/5]
[ ]QT4CG-143-01: CG to make another attempt at binary functions.[ ]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-144-02: MK to add notes about edge cases: sequence normalization and character maps for example.
1. Administrivia
1.1. Roll call [7/10]
Regrets: DB, CG
[ ]David J Birnbaum (DB)[ ]Reece Dunn (RD)[ ]Christian Grün (CG)[X]Joel Kalvesmaki (JK)[X]Michael Kay (MK)[X]Juri Leino (JLO) [x:19-][X]John Lumley (JWL)[X]Wendell Piez (WP)[X]Ed Porter (EP)[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 9 December 2025.
The CG will meet on 9 and 16 December, then recess for the end-of-year holidays, with the following meeting on 6 January 2026.
1.5. Review of open action items [0/3]
[ ]QT4CG-143-01: CG to make another attempt at binary functions.[ ]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.
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
The following PRs are open but have merge conflicts or comments which suggest they aren’t ready for action.
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 #2320: 2310 Reinstate spec for infix // operator
- PR #2318: 2317 Correct signature of fn:civil-timezone
Proposal: merge without discussion
Accepted.
1.6.3. Substantive PRs
The following substantive PRs were open when this agenda was prepared. Only some of these will be discussed, as shown below.
- PR #2324: 2278 bin:infer-encoding, bin:decode-string
- PR #2323: 2322 Generalize simplified stylesheets
- PR #2319: 2311 Change default XSLT pattern priorities
- PR #2313: 2298 XQFO rules: definition of default values
- PR #2301: 2198 Add cdata attribute to xsl:text and xsl:value-of
- PR #2283: 2276 Relax XSLT rules on Extension Attributes
- PR #2282: 2278 Add function bin:infer-encoding; simplify bin:decode-string
- PR #2281: 2280 Usability of xsl:array-member
- PR #2274: 407 Function items capturing XSLT context components
- PR #2266: 540 system-property equivalent for XQuery
- PR #2256: 2216 All atomic types become ordered
- PR #2019: 1776: XSLT template rules for maps and array
2. Technical agenda
2.1. PR #2247: Deferred Evaluation in XPath - the f:generator record
See PR #2256.
DN and LQ (Liam Quin) have indicated that this PR is now ready for discussion. It’s on the agenda this week only as a heads-up. I propose that we discuss it next week. DN and LQ will join the call.
2.2. PR #2256: 2216 All atomic types become ordered
See PR #2256.
MK introduces the PR.
- MK: The motivation was to get rid of exception cases and to better align
comparison and equality.
- … In the status quo, you can’t use
compare()to compare things that might be unordered (like QNames) - … Sometimes the ordering is arbitrary (
true()andfalse()), but they are ordered. - … The ordering for durations is perhaps most problematic; it remains as it was, but it’s not an error to attempt to sort them.
- … The data model impact is quite small, it just says they’re all ordered
- … We introduce families of atomic types
- … The XPath impact is largely the value comparison operators.
- … The main change is that we remove a great table of comparison functions.
- … Value comparisons are defined in terms of
fn:compare().- … There’s a special case for
NaN.
- … There’s a special case for
- … We’ve lost a lot of examples with the table; I tried to make sure we have a reasonable set.
- … We could add more.
- … In the status quo, you can’t use
ACTION QT4CG-144-01: MK to consider if any now lost value comparisons should be added as examples.
- MK: F&O now begins with an apology that it no longer defines any operators!
- MK: I’ve introduced the term
contextually equaliffn:compare()returns zero (with the appropriate dynamic context)- …
fn:atomic-equal()is now defined in terms of compare for numerics. - … Editorial changes to
fn:compare(). - …
fn:deep-equal()now refers tofn:compare()returning zero. - …
fn:distinct-value()refers tocontextually equal. - …
fn:index-ofnow uses the samecontextually equalcomparison; that is a technical change.- … It compares
NaNas equal toNaN.
- … It compares
- … Lots of textual change to
fn:min()andfn:max(), but not significant - …
fn:highest()andfn:lowest()get some editorial changes - … In
fn:substring(), the arithmetic no longer refers to numeric-less-than operator. - … Arithmetic is still only defined on the duration subtypes.
- … All the other changes are about removing the operators.
- …
- NW: Why did we do it the way we did in 2.0?
- MK: I don’t know. Someone thought it was a good idea. But now that we’ve introduced the general
fn:comparefunction so that’s just a lot of duplication. - JWL: Are there any serious backwards incompatibilities?
- MK: The only one I’m aware of is
NaNinfn:index-of().
Proposal: accept this PR.
Accepted.
(MK believes that CG agreed in principle.)
2.3. PR #2324: 2278 bin:infer-encoding, bin:decode-string
2.4. PR #2313: 2298 XQFO rules: definition of default values
See PR #2313.
Wait until CG is present.
2.5. PR #2301: 2198 Add cdata attribute to xsl:text and xsl:value-of
See PR #2301.
- MK: We had an external requirement to support this feature.
- … I tried with a PI, but NW observed that was problematic.
- … Here, I’ve added a
cdataattribute toxsl:textandxsl:value-of. - … It’s expressed as an intent, and may be ignored.
- NW: Much better. It’ll still get lost across successive transformations.
- … Is there any potential here for annotating the actual
text()node?
- … Is there any potential here for annotating the actual
- MK: We could, but then you’d have to define what happens to anything that operates on text nodes, for example what do you do with adjacent text nodes?
- JWL: If a text node is in a variable, you’re saying anything could happen.
- MK: An implementation could potentially store text nodes with a bit that
indicates if
cdatais requested.- … But I’m saying it’s only really likely to work if you pass it directly to a serializer.
- JK: Looks good and interesting. Where there any updates needed for what to do with serialization?
- MK: No, we haven’t made this a property of the text node. Sequence normalization will merge text nodes. I’ve basically left that largely unspecified.
- JK: So if you have three text nodes that are adjacent, and only the middle has
the
cdataattributes, what should I expect? - MK: At the moment, I’m honoring that and only putting the middle one in a CDATA section.
- … There’s still complexity here, what to do with combining characters.
- … I don’t think we want to specify all that.
- WP: I like this a lot. I think it’s okay that this is like disable-output-escaping.
- … There’s a bit of adjacency here with character mapping.
Some discussion of character mapping.
- MK: I wouldn’t expect the CDATA tags themselves to be subject to character mapping!
- … Maybe we need a bit more detail, but I’d like to keep it a bit hand wavy.
ACTION QT4CG-144-02: MK to add notes about edge cases: sequence normalization and character maps for example.
Proposal: accept this PR.
Accepted.
2.6. PR #2281: 2280 Usability of xsl:array-member
See PR #2281.
- MK: These changes came from attempts to write tests and finding cases where it produced the wrong answer. I made spec changes in response to the usability experience of writing test cases. It’s also in response to comments on the original proposal.
- MK: I’ve introduced the term
parcelagain.- … The parcel simplifies the polymorphism in the array instruction.
- … It’s now a dynamic error if you mix ordinary items and
xsl:array-memberinstructions.
MK walks through the examples.
- JWL: In the for-each example that has apply-templates inside it:
<xsl:array for-each="*"> <xsl:apply-templates select="."/> </xsl:array>
- MK: There are two things it can do is create ordinary nodes or a single array member.
- JWL: But it can’t produce two array members.
- MK: That’s right.
- JWL: The heterogenous problem only applies when you use for-each.
Proposal: accept this PR.
Accepted.
2.7. PR #2319: 2311 Change default XSLT pattern priorities
See PR #2319.
- MK: When I wrote the issue, I thought there was a simple typo. But I
discovered that for type patterns there was previous work that attempted to
make the type patterns depend on the placement of the type in the hierarchy.
- … But that makes
xsl:next-matchreally complex.
- … But that makes
MK reviews the priorities in the current proposal, section 6.3.3.2.
- MK: The conflict resolution rules are simplified.
- WP: I like it too. I wonder if there are any edge cases where we need to be able to find the default priority values?
- MK: It would be useful for writing tests!
- … I XSLT, you have to bracket it with priorities above and below and make
sure
xsl:next-matchdoes the right thing.
- … I XSLT, you have to bracket it with priorities above and below and make
sure
Proposal: accept this PR.
Accepted.
3. Any other business
None heard.