QT4 CG Meeting 133 Minutes 2025-08-19

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

Table of Contents

Draft Minutes

Summary of new and continuing actions [0/11]

  • [ ] QT4CG-116-01: Add a specific error code for unsupported options on doc and doc-available
  • [ ] QT4CG-118-01: MK to make an incorrect type raise an error in #1906
  • [ ] QT4CG-127-01: NW to diagram the JTree representing arbitrary XDM content.
  • [ ] QT4CG-128-03: NW to compare the file: module against the equivalent XProc 3.1 steps
  • [ ] QT4CG-131-01: MK to add a non-schema aware result.
  • [ ] QT4CG-131-02: MK to expand on the $E := <e A="p q r"… example
  • [ ] QT4CG-131-03: MK to change “invert” to “transpose” in the matrix example.
  • [ ] QT4CG-133-01: MK to correct the use of “Expr” in examples for get()

1. Administrivia

1.1. Roll call [7/11]

  • [X] David J Birnbaum (DB)
  • [X] Reece Dunn (RD)
  • [X] Christian Grün (CG)
  • [ ] Joel Kalvesmaki (JK)
  • [X] Michael Kay (MK)
  • [ ] Juri Leino (JLO)
  • [X] John Lumley (JWL)
  • [X] Wendell Piez (WP)
  • [ ] Ed Porter (EP)
  • [ ] Bethan Tovey-Walsh (BTW)
  • [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 CG will take a short recess in late August. We will not meet on 26 August, 2 September, or 9 September.

The next meeting is planned for 16 September 2025.

1.5. Review of open action items [4/11]

(Items marked [X] are believed to have been closed via email before this agenda was posted.)

  • [ ] QT4CG-116-01: Add a specific error code for unsupported options on doc and doc-available
  • [ ] QT4CG-118-01: MK to make an incorrect type raise an error in #1906
  • [ ] QT4CG-127-01: NW to diagram the JTree representing arbitrary XDM content.
  • [ ] QT4CG-128-03: NW to compare the file: module against the equivalent XProc 3.1 steps
  • [ ] QT4CG-131-01: MK to add a non-schema aware result.
  • [ ] QT4CG-131-02: MK to expand on the $E := <e A="p q r"… example
  • [ ] QT4CG-131-03: MK to change “invert” to “transpose” in the matrix example.
  • [X] QT4CG-132-01: MK to add more examples for innermost, outermost, has-children and path with JNodes
  • [X] QT4CG-132-02: MK to double-check the signature of innermost
  • [X] QT4CG-132-03: MK to double-check stray text in h.i. in path
  • [X] QT4CG-132-04: MK to add resize to the rectangle in the example of chaining method calls and flesh out the example.

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.

  • PR #2124: 573 Functions to Construct Trees
  • PR #2120: 2007 Revised design for xsl:array
  • PR #2019: 1776: XSLT template rules for maps and array

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 #2164: Fix return type in fn:parse-csv signature
  • PR #2162: QT4CG-132-04 Expand the rectangle?area example

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 #2143: JNodes and Methods
  • Issue #1714: sibling:: axis. Action Item QT4CG-097-03
  • Issue #350: CompPath (Composite-objects path) Expressions
  • Issue #119: Allow a map's key value to be any sequence
  • Issue #106: Decorators' support
  • Issue #34: Proposal to introduce the set datatype in XPath 4

Accepted.

2. Technical agenda

2.1. PR #2168: 2139 Make hexBinary and base64Binary fully comparable

See PR #2168

  • MK: The history of this is that we’d changed the eq operator to allow mutual comparisons.
    • … But we balked at the idea of making them equal for keys in maps because of compatibility implications.
    • … Basically, we’re being braver now: this is a more rational and consistent approach, and we assume that the number of users hit by the backwards compatibility issue will be small.
  • JWL: We have no operator that says “is this the same type”?
    • … We’ve got castable which would allow you to infer one way.
    • … In the situations where you’d want to have a difference between the two, what could you do.
    • … The types are still distinct.
  • MK: You could maniuplate the value if you wanted to keep them distinct.

Proposal: Accept this PR.

Accepted.

2.2. PR #2167: 2166 Reinstate lost text for lookup expressions

See PR #2167

  • MK: We had a load of machiner that we added to lookup expressions (modifiers, type predicates, etc.)
    • … The JNodes proposal replaced all of that and I accidentally deleted more text than I should have done.
  • MK reviews the PR
  • MK: The text that’s being restored has been lightly updated to deal with JNodes.
    • … Added a note about out of bounds conditions.

Proposal: Accept this PR.

Accepted.

2.3. PR #2160: 2073 data model changes for JNodes and Sequences

See PR #2160

  • MK: This is the first half the work, but I don’t think we can accept it yet.
  • MK: It only addresses the data model changes.
  • MK: The position property of a JNode is discarded (replaced by the selector property, effectively)
    • … It has a parent, selector, or kind property.
    • … If a JNode represents a sequence of two or more items, an array or map that’s a sequence, then you have a children property, one child per item.
    • … If you’re a singleton, you don’t. So there’s an asymmetry there.
    • … That keeps the tree finite.
    • … That asymmetry is unfortunate, but less so than the current situation where sequences of more than one item are pretty unmanagable.

MK continues through the PR.

  • MK: I reworked the second example as a table. I propose to do the same thing for the first example.
  • MK: That’s my current thinking; there’s been a fair bit of discussion on the proposal.
    • … One of the ideas is that a sequence of length 1 should have children provided that you only go one level deep.
    • … An atomic value would have a child that contains the value, but that child wouldn’t also have a child.
  • MK: One of the questions here is what is the consequence on the descendant axis. You want that axis to select each descendant exactly once.
  • CG: I can’t give real comments, but I think this way forward is a good one. All the other approaches we’ve tried were much more inconsistent.
  • MK: Okay, I’ll try to push forward.

2.4. PR #2116: 2112 Refine/revise the rules for get() in node tests

See PR #2116

  • JWL: We changed it so that the argument to the get is an ExprSingle but in some of the examples we still use Expr.
  • MK: Okay, let’s take a look at that one.

MK reviews the XQuery diffs.

  • MK: Yes. I see the places where Expr is still used in the examples.
    • … It’s probably best to use a variable in the get() to avoid the implication that it’s the same thing as the grammar rule.

ACTION QT4CG-133-01: MK to correct the use of “Expr” in examples for get()

  • MK: The main subject is about the focus of the expression. There’s been a fair bit of discussion.
    • … The focus could be the thing to either the left or right of the slash. In both cases semantics that sort of make sense could be defined. But it’s so easy to get wrong, that I think it’s better to make the expression context-free.
  • CG: I don’t think it’s that important, but I think one reason to support the context is that in all right-hand-side expressions, you can use the “.” and it doesn’t make any sense. This exception for the pseudo-function get() when it’s allowed everywhere else doesn’t make sense.
  • MK: If the focus is on the right-hand-side, then you’d have to evaluate it for everything on the left hand side.
    • … It’s like “.” in a predicate; you end up with a lot of tests that aren’t very useful.
    • … I think the analogy with array:get is sort of a false one. Doing array:get on the right is applying the function to every item on the left. The get() pseudo-function is much more like using element() or node().
    • … We could restrict it to a constant, but that seemed like going too far.
  • CG: There are lots of places where it doesn’t make sense, but maybe users will have uses for it. So many basic constructs in XPath that can be used to write weird things. It’s always up to the developer.
  • MK: I don’t think we’re losing any functionality because you can use a predict.
  • CG: But that’s true if we don’t have the get() pseudo-function at all.

Proposal: Accept this PR.

Accepted.

MK will merge this after completing his action.

2.5. PR #2155: 2150 Define patterns for JNodes

See PR #2155

  • MK: This has a technical flaw, there’s an ambiguity in the grammar.
    • … I’ve asked John Lumley for advice.
    • … I think it’s probably solvable with some subtlety.
  • MK: The issue is to do with parenthesized expressions.

MK reviews the PR.

  • MK: Patterns are now part of the section on template rules.
    • … Although path expressions between XNodes and JNodes look much the same, match patterns are distinct and can only match one kind of node.
  • MK: The ambiguity is in how union, intersect, and except operators are applied.
    • … They’re not defined in terms of node sets anymore.
  • MK: The text for XNode patterns is largely unchanged, but reorganized a bit.
  • MK: JNode patterns are new.
    • … Always introduced by jnode(
    • … Both operands are currently required.
    • … It sort of mirrors the way that element() with two arguments works.
  • MK: The default priorities broadly parallel elements and other things.

JWL demonstrates the grammar in his jwiXML processor.

  • JWL: The inside and outside are the same, but the path from XNodePattern->ParentehsizedExpreP or ParentesizedPattern->XNode pattern is ambiguous.
  • MK: Defining patterns for JNodes is the first part of a piece of work to talk about doing template rules on a tree of maps and arrays.

2.6. PR #2123: 2051: XSLT group by cluster

See PR #2123

Wait for JK.

2.7. PR #2071: 77c deep update

See PR #2071

2.8. PR #2019: 1776: XSLT template rules for maps and array

See PR #2019

Needs to be rewritten.

3. Any other business

JWL and JLO are doing a 4.0 tutorial at Declarative Amsterdam.

4. Adjourned