QT4 CG Meeting 129 Minutes 2025-07-15
Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests
Table of Contents
- Minutes
- Summary of new and continuing actions
[0/9]
- 1. Administrivia
- 2. Technical agenda
- 2.1. JNodes/Generalized path expressions
- 2.2. PR #2094: 2003 Generalize Map Constructors
- 2.3. PR #2014: QT4CG-122-01 Add notes, examples, and rationale for xsl:select
- 2.4. PR #2019: 1776: XSLT template rules for maps and array
- 2.5. PR #2037: 2036 Add rule for streamability of xsl:map
- 2.6. PR #2043: 2038 Tweak the rules for fn:apply-templates references to modes
- 2.7. PR #2011: 675(part): Add XSLT static typing rules for new kinds of XPath expression
- 3. Any other business
- 4. Adjourned
Minutes
Approved at meeting 130 on 22 July 2025.
Summary of new and continuing actions [0/9]
[ ]
QT4CG-082-02: DN to work with NW to come to agreement on the fn:ranks proposal[ ]
QT4CG-112-01: JLO to propose a concrete example that uses “.” in a ~%method~s.[ ]
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-123-01: MK to do the set example in XQuery.[ ]
QT4CG-127-01: NW to diagram the JTree representing arbitrary XDM content.[ ]
QT4CG-128-01 CG to consider using “standard” or some other term instead of “regular” in the file: module.[ ]
QT4CG-128-02 CG to investigate what to say about permissions.[ ]
QT4CG-128-03 NW to compare the file: module against the equivalent XProc 3.1 steps[ ]
QT4CG-129-01: MK to fix the remaining prose references to MapKeyExpr and MapValueExpr
1. Administrivia
1.1. Roll call [9/12]
Regrets: DB, BTW.
[ ]
David J Birnbaum (DB)[X]
Reece Dunn (RD)[X]
Christian Grün (CG)[X]
Joel Kalvesmaki (JK)[X]
Michael Kay (MK)[X]
Juri Leino (JLO)[X]
John Lumley (JWL)[ ]
Dimitre Novatchev (DN)[X]
Wendell Piez (WP)[X]
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 next meeting is scheduled for 22 July 2025.
DB gives regrets.
1.5. Review of open action items [0/6]
(Items marked [X] are believed to have been closed via email before this agenda was posted.)
[ ]
QT4CG-082-02: DN to work with NW to come to agreement on the fn:ranks proposal[ ]
QT4CG-112-01: JLO to propose a concrete example that uses “.” in a ~%method~s.[ ]
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-123-01: MK to do the set example in XQuery.[ ]
QT4CG-127-01: NW to diagram the JTree representing arbitrary XDM content.[ ]
QT4CG-128-01 CG to consider using “standard” or some other term instead of “regular” in the file: module.[ ]
QT4CG-128-02 CG to investigate what to say about permissions.[ ]
QT4CG-128-03 NW to compare the file: module against the equivalent XProc 3.1 steps
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 #2096: 2035 Drop unworkable example of recursive record types
Discussion ensued.
- JLO: Does it mean that recursive record types are impossible in general?
- MK: No record types can be recursive, but you can’t instantiate them with
something that’s cyclic.
- … Type A can refer to type B, but you can instantiate an A-B-A cycle, even with functions.
- CG: I proposed an example, is that legal?
declare record local:a(b as local:b?); declare record local:b(a as local:a?); () => local:a() => local:b()
- MK: You’ve instantiated both record types, but there’s no cycle between references.
- CG: Oh, I see.
- MK: You can’t make an A that points to a B that points back to the same A.
Some discussion of how updating works.
- JWL: Is this case that can be determined statically, or is it impossible to write it syntactically?
- MK: It won’t have the effect you think.
- WP: I think this is fine.
- MK: It seems to be a fairly well known problem in functional languages. They do have some constructs to get around the problem. But they’re fairly convoluted.
- RD: Might be worth adding a note that says you can’t create cyclic instances.
Proposal: merge this PR.
Accepted.
1.6.3. Close without action
1.6.4. Substantive PRs
The following substantive PRs were open when this agenda was prepared.
- PR #2011: 675(part): Add XSLT static typing rules for new kinds of XPath expression
- PR #2014: QT4CG-122-01 Add notes, examples, and rationale for xsl:select
- PR #2019: 1776: XSLT template rules for maps and array
- PR #2031: 2025 JNodes
- PR #2037: 2036 Add rule for streamability of xsl:map
- PR #2043: 2038 Tweak the rules for fn:apply-templates references to modes
- PR #2071: 77c deep update
- PR #2083: 2054 Generalized Path Expressions
- PR #2094: 2003 Generalize Map Constructors
2. Technical agenda
2.1. JNodes/Generalized path expressions
Last week, we agreed to return to this with an eye towards accepting it unless there are objections.
See PR #2083: 2054 Generalized Path Expressions and PR #2031: 2025 JNodes
(I believe that #2083 subsumes #2031, so accepting #2083 should also close #2031.)
- MK: Just want to draw your attention to the fact that I responded to several comments.
- … The mixed case names are now all lowercase
- … Gunther Radamacher’s comment about needing to reserve more function names;
we had both a type and a function called
jnode()
. I’ve renamed the type asjnode-type()
but we may want to resolve that differently. - … The property names now use “..” instead of “¶”.
- CG: I think it’s a good idea to merge this PR; but it’s so huge.
- … I think that transitive closure functions might need some revisions.
- NW: I think we should merge it.
- JK: I’d like to merge it, but I think we need to have a discussion about how definitions are worded.
Proposal: merge this PR.
Accepted.
This obsoletes #2031.
- JWL: Is it worth putting something on Slack that we’re making this big change.
2.2. PR #2094: 2003 Generalize Map Constructors
See PR #2094
MK introduces the PR.
- MK: This is confined to a fairly small part of the XPath spec.
- … I’ve moved things around a bit.
- … The section begins with an example of something you didn’t used to be able to do.
- … The new case is that an
ExprSingle
can be written without a:
and it must return zero or more map items.
The example with employee has an error, it should be: { //employee ! {@id : .} }
.
- JWL: Can you use a predicate?
- MK: Yes, I’ll add an example.
- JLO: One thing that struck me: the map key expression and map value expression are no longer used by the map constructor expression but are referenced elsewhere.
- MK: I thought I’d dropped all reference to them.
- … Oh, you’re right. There are.
ACTION: QT4CG-129-01: MK to fix the remaining prose references to MapKeyExpr and MapValueExpr
Some discussion of why it was dropped. Avoiding lookahead was the goal.
- RD: With the key, if you have a sequence of values, are we handling the semantics of that?
- MK: The result of atomizing must be a single atomic item otherwise it’s a type error.
- JLO: I’d like to be able to put in a variable into a map and have it expand into key and value.
- … Previously we said this shouldn’t be allowed because of substitutability
- … But we’re so close now. Wouldn’t it be possible?
- MK: I’m not sure I understand the example.
- JLO: I want:
let $a := 1 let $m := { $a }
to return {"a": 1}
- MK: Substitutability certainly means you should be able to rename variables without changing expressions.
- CG: In this example,
$a
will be allowed and if it returns a map that will become a map.
Proposal: accept this PR.
Accepted.
2.3. PR #2014: QT4CG-122-01 Add notes, examples, and rationale for xsl:select
See PR #2014
MK introduces the PR starting with the general rules about where XPath expressions occur in XSLT.
- MK: There is some reordering of sections.
- … “Creating nodes and sequences” has moved into “Callable components”.
- … Some examples have been added.
Proposal: accept this PR.
Accepted.
2.4. PR #2019: 1776: XSLT template rules for maps and array
See PR #2019
Not ready yet.
2.5. PR #2037: 2036 Add rule for streamability of xsl:map
See PR #2037
Needs to be reviewed.
2.6. PR #2043: 2038 Tweak the rules for fn:apply-templates references to modes
See PR #2043
MK introduces this PR.
- MK: We introduced
fn:apply-templates()
largely so that we could use XPath array and map constructors and do apply templates in the middle.- … In implementing it, I realized there was a complication that wasn’t really adding any value: you could make it use the default mode from the static context.
- … I don’t think we want to keep the default mode around in every dynamic context.
- … Let’s make it compulsory to say what mode you want to apply templates in if you’re using the functional form.
- … The effect is to remover
#default
from the list of available modes.
- JWL: Would this apply in an XPath expression that’s in an enclosed mode?
- MK Yes.
Proposal: accept the PR.
Accepted.
2.7. PR #2011: 675(part): Add XSLT static typing rules for new kinds of XPath expression
See PR #2011
MK introduces the PR.
- MK: This just updates the current table of rules to add some new constructs.
- … The U-type of a choice item type is defined.
- … The table and its description have been expanded.
- … OtherwiseExpr has been added.
- … Some notational changes have been made.
- … StringTemplate has been added.
- … ContextValueRef becomes a bit more complicated as a consequence of generalizing the context item.
- … Partial Function Application has been added (with a TODO).
- … Deep Lookup needs to be examined again
- MK: It doesn’t address streamability, it just updates the relevant static type information.
- JWL: Is adding jnodes going to be about adding map types?
- MK: No, they’re a new type.
Proposal: accept the PR.
Accepted.
3. Any other business
Summer vacation?
- NW: Does the group want to take a vacation?
- CG: I’ll be gone the last week of August and the first two weeks of September.
- NW: Let’s revisit this next week.
- MK: I think we should plan to produce a stable working draft.
- NW: I think that’s a good idea. As soon as we feel like the JNodes proposal is bedded in, perhaps that’s the time.
Some discussion of this in the context of Mike’s Balisage paper.
- NW: I think the question of stable draft for reference from papers is easier. I don’t think we need any sort of group consensus to say “here’s what the draft was on such-and-such a date.” URIs are cheap.