QT4 CG Meeting 173 Minutes 2026-07-21
Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests
Table of Contents
- Summary of new and continuing actions
[0/6] - Draft Minutes
- 1. Administrivia
- 2. Technical agenda
- 2.1. PR #2594: 2389 Adaptive Serialization: more freedom
- 2.2. PR #2696: 2695 Apply templates to maps, arrays, and JNodes
- 2.3. PR #2707: 1962 fn:map-to-element
- 2.4. PR #2712: 2702 Dynamic node tests
- 2.5. PR #2714: 2219 Generalize method calls to sequences
- 2.6. PR #2715: 2653 FLWOR, member/key/value clauses: allow sequences
- 2.7. PR #2719: 1234 Serialization Parameters: Indentation, Whitespace, Newlines
- 2.8. PR #2800: 2799 fn:slice: negative steps
- 3. Any other business
Summary of new and continuing actions [0/6]
[ ]QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests[ ]QT4CG-167-03: NW to make a PR for #2482, fallback on bin:decode-string[ ]QT4CG-167-05: MK to write a proposal to change #2393 so the functions return JNodes[ ]QT4CG-167-07: NW to review tests for interpolated strings with edge cases in mind[ ]QT4CG-167-09: NW to close all “nice to have” issues at the end of October if they haven’t progressed[ ]QT4CG-170-01: RD to draft a proposal that attempts to address the lexical issues differently.
Draft Minutes
1. Administrivia
1.1. Roll call [9/11]
BTW gives regrets.
[X]David J Birnbaum (DB)[ ]Reece Dunn (RD)[X]Christian Grün (CG)[X]Joel Kalvesmaki (JK)[X]Michael Kay (MK)[X]Juri Leino (JLO)[X]John Lumley (JWL)[X]Alan Painter (AP)[X]Wendell Piez (WP)[ ]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 next meeting is planned for 28 July. We will not meet on 4 August.
JLO gives regrets; possible regrets from JWL.
1.5. Review of open action items [3/9]
[ ]QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests[X]QT4CG-167-02: MK to make a PR for #2591, grammar for step?lookup is invalid- Overtaken by events.
[ ]QT4CG-167-03: NW to make a PR for #2482, fallback on bin:decode-string[ ]QT4CG-167-05: MK to write a proposal to change #2393 so the functions return JNodes[ ]QT4CG-167-07: NW to review tests for interpolated strings with edge cases in mind[X]QT4CG-167-08: MK to review the state of #1949 to see which items are still outstanding.- Overtaken by events
[ ]QT4CG-167-09: NW to close all “nice to have” issues at the end of October if they haven’t progressed[ ]QT4CG-170-01: RD to draft a proposal that attempts to address the lexical issues differently.[X]QT4CG-172-01: MK to check if the XSLT rules are consistent with the rules in #2757.- Nothing to do in XSLT.
g
2. Technical agenda
This week, I’ve put the oldest ones first, but we might decide to skip over some of them.
2.1. PR #2594: 2389 Adaptive Serialization: more freedom
See PR #2594.
CG reviews the changes based on feedback.
- CG: I changed the rules for strings to make it implementation defined how “&” is encoded. (So that it can be XPath or XQuery compatible.)
- CG: I made the rules for numerics more liberal.
- … Mostly for JSON.
- CG: Changed QName notation to allow prefixes for various statically known namespaces.
- … Added a rule that an implementation can include additional prefixes.
- CG: Implementation defined whether the enclosing quote characters need to be included.
- CG: In a nutshell, it allows processors to be more liberal.
- JWL: I like the approach. When I’m debugging, I use mixtures of arrays and maps and trees and I have to serialize them.
- AP: Why implementation-dependent instead of having options?
- CG: I think it would become too complex if you tried to add options for all of the possible choices.
- AP: I fear that this might get tricky.
- JLO: I like this. I see that an implementation is still allowed to output a top-level string unquoted, so it would be impossible to read it back in.
- CG: Yes.
- JLO: Why?
- CG: Maybe this is related to the options AP mentioned. We use this
kind of serialization for debugging and for copying and pasting
code. Strings for users other than XQuery users want the unquoted string!
- … We haven’t decided how to offer these options.
- DB: Is there a difference between implementation defined and implementation dependent.
- CG: Defined means that you need to document the choices.
Some discussion of how implementation-defined features sometimes fail to get documented.
Proposal: accept this PR.
Accepted.
2.2. PR #2696: 2695 Apply templates to maps, arrays, and JNodes
See PR #2696.
- MK: This is all XSLT.
- … It’s filling in the gaps about what apply-templates does when there’s no select attribute.
- … It’s a step along the journey to defining a complete story for applying templates to maps and arrays.
- MK: It doesn’t change the meaning of
xsl:apply-templatesif there is aselectattribute; only if its absent.- … If there’s no
select, then we change it so that it doesn’t only use the child axis.
- … If there’s no
MK reviews the changed prose.
- JWL: Looking at the rules, if it’s a JNode, then you go to the
children. If it’s a map or array that isn’t a JNode, you make a tree
from that point on.
- … Does that mean in one case you can reach into the ancestors and in the other case you can’t?
- MK: Yes. If you’re starting at a JNode, then the ancestors are available. If you’re starting at a map or array, then you start a new tree.
- JK: I don’t understand and I don’t really like the rule about what to do with atomic values. It invites infinite regression.
- … I’d prefer to have it do nothing in that case. Currently, that fourth rule is asymmetric with the others.
- MK: Yes. I share the concerns. I wrote some examples and found myself writing a lot of
select="."so why isn’t that the default?- … But it tended to be in a for each. But I can see the concern.
- WP: I share the concern too. It’s the kind of thing that can bite you when you don’t expect it, especially if you’re a little naive.
- … My question was about the rationale, but I think you’ve explained that.
- … This seems like a bad bug to have to debug as a beginner.
- … I’d think about reconsidering whether this should do nothing or be an error.
MK will reconsider.
2.3. PR #2707: 1962 fn:map-to-element
See PR #2707.
- CG: I think we should skip it today. It’s supposed to be the inverse
of
fn:element-to-map, but it could lead to a lot of discussion.
Everyone, please review.
2.4. PR #2712: 2702 Dynamic node tests
See PR #2712.
- MK: We had the syntax before, but we didn’t have a name for them. This gives them a name in the grammar and the prose.
- … And it refines the semantics.
- MK: In
NodeTest, we add a new nameDynamicNodeTestto hang semantics on.- … It’s an
EnclosedExprso there’s no substantive change to the grammar.
- … It’s an
MK reviews the revised semantics.
- MK: Typical usage is
child::{"date of birth"}. - MK:
child::{1 to 3}andchild::{3, 2, 1}are the same, you always get document order.
Proposal: accept this PR.
Accepted.
2.5. PR #2714: 2219 Generalize method calls to sequences
See PR #2714.
- CG: This one and the next PR are about sequences.
- … We’ve recently decided that a dynamic function call will work on sequences.
- … So now you can have a sequence of functions and invoke them.
- CG: This extension does the same thing for method calls (
=?>syntax).- … If the sequence is empty, it works like paths and lookups and returns the empty sequence.
- MK: I’m not enthusiastic, but I won’t stand in the way.
- JLO: Was there an example?
CG does an example interactively.
- JLO: I see a lot of foot gun potential.
- CG: Do we want to have a sequence of function items and invoke them.
- MK: This comes up when you have a path expression. Everything else works on sequences.
- …
a/b/calways allow sequences and apply the results across the sequence - … You don’t want to break that if you’re selecting functions.
- …
- JLO: Was this born out of JNodes?
- MK: In many ways its more related to the fact that maps are functions.
- JLO: But if
()()works, then I can call any key on a function? - CG: At least with a record, the key will be rejected according to the new rules.
- MK: Static type checking allows you to reject cases where you would be trying to invoke a function.
- CG:
{}?z()would be legal. - JLO: We could also say that a record method can only be a single function item.
- CG: True.
- MK: But then you’d have to look at the effect of that in a pipeline.
- … With multiple
/and->operators.
- … With multiple
Proposal: accept this PR.
Accepted.
2.6. PR #2715: 2653 FLWOR, member/key/value clauses: allow sequences
See PR #2715.
- CG: This one is about sequences. I claim this one is also about consistency.
- … It can happen that when you’re iterating over the keys and values in a map that you get an error because there’s an empty map so an empty sequence.
- MK: You’re processing all the entries in one map first, then all the entries in the second?
- CG: Yes.
Proposal: accept this PR.
Accepted.
2.7. PR #2719: 1234 Serialization Parameters: Indentation, Whitespace, Newlines
See PR #2719.
- CG: We’ve talked about this one before. I’ve tried to incorporate the latest comments.
- … We’ve already discussed the names and types of the options.
- … I should add some examples for
(\t|\\t)*| *. - … The same rules apply to line endings.
- CG: The remaining rules are the same.
CG reviews the questions in the PR.
- WP: I think this flashed by. We now support a line feed with no indent?
- CG: Yes.
- JLO: The zero indent is because you’re allowed to have nothing in the indent parameter.
- CG: Yes.
- MK: Observation about the XSLT end of things. The values get put in
attributes of
xsl:outputorxsl:result-document. It’s really not very practical to put newlines and tabs in attributes.- … In theory you can write them as entities, but it’s tricky.
- … What’s the best way to represent these in XSLT? Maybe limit it to the backslash forms.
- JWL: Echoing MK’s concern. What about if you put in spaces, could you use
\s? - MK: I think a visual representation is preferable.
Some discussion of when and where it’s helpful to have zero indentation but have line endings.
Further discussion of how it interacts with suppress-indentation.
- MK: That’s for inline markup where you don’t want any whitespace at all.
Proposal: accept this PR.
Accepted.
2.8. PR #2800: 2799 fn:slice: negative steps
See PR #2800.
- CG: A user observed that
fn:slicewith a negative step works like reverse. - CG: I added some rules to clarify that.
- MK: I had to think fairly hard but came to the conclusion that it worked.
Proposal: accept this PR.
Accepted.
3. Any other business
None heard.