QT4 CG Meeting 149 Minutes 2026-01-20

Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests

Table of Contents

Draft Minutes

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-148-02: NW to publish a dated draft after QT4CG-148-01 is complete.
  • [ ] QT4CG-149-01: CG to draft a new PR with the common rule note.
  • [ ] QT4CG-149-02: MK to update the PR #2372 so that the “?” are part of the comment.

1. Administrivia

1.1. Roll call [8/10]

Regrets: JWL, JK.

  • [X] David J Birnbaum (DB)
  • [X] Reece Dunn (RD)
  • [X] Christian Grün (CG)
  • [ ] Joel Kalvesmaki (JK)
  • [X] Michael Kay (MK)
  • [X] Juri Leino (JLO)
  • [ ] 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 27 January 2026.

JWL gives regrets for 27 January.

1.5. Review of open action items [2/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.
  • [X] QT4CG-148-01: NW to draft a PR that marks #2351 items as “at risk” with appropriate definitions at the top of the document
  • [ ] QT4CG-148-02: NW to publish a dated draft after QT4CG-148-01 is complete.
  • [X] QT4CG-148-03: NW to revise his attempt at #2313 by using the text “node” and a link to the appropriate text

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. 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 #2383: Attempt to resolve action QT4CG-148-01
  • PR #2364: 2088 File Module: Feedback, Observations

Proposal: merge these PRs without further discussion.

Accepted.

1.6.2. 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 #2185: Request for an fn:xproc function

Proposal: close this issue without further action.

Accepted.

2. Technical agenda

2.1. PR #2313: 2298 XQFO rules: definition of default values

See #2313.

(To briefly discuss CG’s comment.)

CG introduces his comment.

  • CG: In my original PR, I tried to unify all the function calls, and on the other hand I fixed a few small bugs. I’d like to get rid of all the special rules. I’d like to have one general rule.
  • CG: A general rule that says whenever the input is empty, the default is applied. Then we could avoid having to write all the detailed cases.
  • CG: With this rule, we could possibly generate test cases for absent vs default.
  • MK: For the text example where we say that the value is 0, empty, or absent. In the XSLT spec, we talk about the value after applying defaults.
    • … We could also have markup for noting that omitting the parameter is the same as setting it to empty. But I couldn’t find a good notation for it.
  • CG: But if we have one specific rule, that might be enough.
  • JLO: Is this about optional parameters?
  • CG: It’s about the cases when an empty sequence is supplied but it should be replaced by the default value.
    • … The original purpose of the PR was to distinguish between an absent argument and an argument that’s present but is the empty sequence.
  • JLO: That sounds great, but sometimes we want to say that you want to use the empty sequence and not the default value.
  • RD: If I understand correctly, you’ve changed the type signature of the defaults so that the “?” is removed from the type signature and replaced it with a default.
    • … I’m kind of hesitant with that because the empty sequence means “zero”.
    • … Even if we do have this rule, specifying a zero-item object can be passed to the function.
  • CG: That’s what NW’s (: Note :) markup is for.
  • RD: But in the function signatures, the types have changed.
    • … I’m not happy with start as xs:integer := 0 if you can pass an empty sequence.
  • CG: I think we can discard my proposal to change the signatures.
  • NW: So we’ll close this PR and CG will make another?

ACTION QT4CG-149-01: CG to draft a new PR with the common rule note.

  • NW will merge the markup changes for the note.

2.2. PR #2387: 641 NaN/Infinity in JSON

See #2387.

  • MK: This was a suggestion from CG. Rather than failing when you have a number that’s Infinity or NaN we output some fallback representation.

MK reviews the PR and the fallback representations.

  • RD: So those will be xs:decimal types?
  • MK: No, they’re double or float because that’s how you get Infinity.
    • … They’re legitimate JSON numbers, but they’re out of range for IEEE.
  • JLO: It’s good that we begin this up again. Last time we talked about out, there were several options. I’m not sure I like the null for NaN.
  • MK: The only other alternative is a string. Anything is a bit arbitrary. This seems like the closest approximation to me.
  • JLO: What happens if you put these into JSON tools, like jq?
  • MK: I haven’t tested any.
  • WP: This is just the way the thing gets written out.
  • MK: This is the way we serialize the JSON if it contains an Infinity.

Proposal: Accept this PR.

Accepted.

2.3. PR #2376: 2337 Extend xsl:mode/@typed to handle JNodes etc

See #2376.

MK introduces the PR.

  • MK: The main problem with this is that it overloads an attribute that was originally designed to be a boolean and is becoming more complex.
    • … The @typed data started as a boolean; then it was extended to “strict”, “lax”, and “unspecified”.
    • … We’ve never really covered the case of what typed means if you are matching things that aren’t element nodes.
    • … The relevant section is now extended to cover them.

Proposal: Accept this PR.

Accepted.

2.4. PR #2373: 2359 No conversion to JNode in absolute paths

See #2373.

  • MK: This fixes a bug or inconsistency about whether or not a path starting with “/” triggers conversion to a JNode. I chose not.

Proposal: Accept this PR.

Accepted.

2.5. PR #2372: 2344 Change rendition of PIs in HTML5

See #2372.

  • MK: Issue raised by CG. The rules we have for PIs in HTML are meaningless with HTML 5 which doesn’t recognize processing instructions.
  • RD: Does this only apply to the HTML serialization?
  • MK: Yes.
  • CG: I was a bit surprised to have the new comment; I’d have expected the PI to be omitted.
    • But that’s just one of many ways.
  • RD: That depends if you’re using the HTML based parser or the XML based parser. (Some discussion of the HTML DOM and variations in parsers.)
  • MK: Leaving it in is purely for diagnostics.
  • RD: Or you could have an XHTML document that you load as XML and serialize as HTML5.
  • JLO: Why is it a must be maintained as a comment.
  • MK: Because on the whole we’re prescriptive unless there’s a good reason not to be.
  • JLO: Would it warrant a serialization option to drop them.

(Oh goodness no.)

  • WP: As an XSLT person, we can do it all in a pipeline.
    • … What are HTML5 parsers instructed to do with processing instructions?
  • RD: The parser parses them into comments.

Some discussion of why we need to do this: because we ought to produce things that are consistent with the HTML5 grammar.

RD displays the relevant part of the WHAT WG specification. Discussion ensues.

ACTION: QT4CG-149-02: MK to update the PR #2372 so that the “?” are part of the comment.

2.6. PR #2379: Use exported schema to validate function catalogs

See #2379.

Everyone is happy with NW or MK having to update the generated schema.

3. Any other business

Update from JLO about teaching XSLT at the CHAOS Communications Congress.

  • JLO: Some people were intrigued by the idea of XSLT
    • … I made a proposal to do a self-organized session
    • … I got mixed reactions; “someone unironically proposed an XSLT talk at the conference, has hell frozen over?”
    • … I boiled down the talk that JWL and I did at Declarative Amsterdam
    • … Talked briefly about the suggestions to remove XSLT from the browser
    • … (Got to talk to the researcher who made the suggestion to rescind XSLT.)
  • MK: Is this because people don’t perceive it as a programming language?
    • … Anything about security here you can say about Java or JavaScript
  • WP: I think it’s worse than that; they just think it’s what was 20 years ago.
    • … Perhaps we need a better story about some of the vulnerabilities.
  • JLO: I specifically pointed out that this is a declarative programming language.
    • … One person really, really stressed that if we have trusted resources, that set should be empty by default.
    • … I met someone who learned XSLT on their own and liked it.
    • … I also got a good question from them about mixed GTrees; why can’t have a JTree inside an XNode?
    • … I think there’s maybe a way to do that.