QT4 CG Meeting 125 Minutes 2025-06-17
Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests
Table of Contents
Draft Minutes
Summary of new and continuing actions [0/7]
[ ]
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.
1. Administrivia
1.1. Roll call [7/12]
Regrets: BTW, DB, JWL
[ ]
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)[ ]
John Lumley (JWL)[ ]
Dimitre Novatchev (DN)[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 next meeting is scheduled for 24 June 2025.
1.5. Review of open action items [1/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.[X]
QT4CG-124-01: MK to provide a copy of the slide deck for the minutes.- Attachd to issue or PR in Github
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 #2044: Hide `MarkedNCName` from XPath spec
- PR #2042: 2041 Correction to xsl:namespace-alias example
Proposal: merge without discussion.
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 #1127: Binary resources
Closed because we completed it.
- JK: Can someone put a cross reference into #1127?
2. Technical agenda
The following substantive PRs were open when this agenda was prepared.
2.1. PR 1942: 37 Support sequence, array, and map destructuring declarations
See PR #1942
RD walks through the PR.
- RD: The scope is to add destructuring support for sequences, maps, and arrays.
- … Currently it’s done for XPath, but there’s more work for XQuery
- … Also changed the inline examples to the example markup in a few places for consistency.
- …
LetBinding
is renamed toLetValueBinding
- … There’s a new
LetSequenceBinding
,$( … )
- … And equivalent array and map bindings to destructure them.
- … The let binding has been rewritten to a style similar to
for
binding.
- MK: You can have a type declaration both inside and outside the brackets?
- RD: Yes.
- MK: Okay. I missed that.
- RD: The idea behind that is that you might want to check that the map is a specific record type and then check the items inside it.
- MK: I think the fact that clauses A and B are referring to different type declarations needs to be made clearer.
- MK: The substantive point is, do we coerce the sequence to the type first and
then decompose it, or do we decompose it and then coerce?
- … If the expression evaluates to a node and the node produces five atomics when you atomize it, which way is the binding done?
- RD: I assume that depends on whether the
let
expression itself has a type declaration.- … My understanding is that if the
let
expression has a type declaration then the value of the temporary variable would get coerced to that type.
- … My understanding is that if the
- MK: So you coerce to the outermost type, then decompose, then coerce each of the items.
- RD: Yes.
- MK: Okay. That’s technically coherent.
- JL: We only have to coerce if there’s something to coerce to.
- … It could become expensive to do two steps of coercion. And how do we
tackle things if the sequence is a string but it contains an
NCName
. - … Do we need to consider incompatible type declarations?
- … It could become expensive to do two steps of coercion. And how do we
tackle things if the sequence is a string but it contains an
- RD: In that case, the coercion on the outer scope will succeed and coerce it to the specified type but the inner type coercion will fail. So you’ll get a type error.
- MK: Yes, it will carry a cost to do the coercion twice, but that’s not something users are likely to do. And if they do, the types are probably going to be consistent and the optimizer can return them.
- RD: There’s a similar structure for
LetArrayBinding
.- … It returns an empty sequence if there’s no element.
- MK: Where’s the error if you ask for a type that isn’t an array type?
Some discussion of how the type declarations are used to handle the array case.
- RD: We should say that the type declaration must also be coerceable to array.
- … The current wording doesn’t verify that the type is an array but it should.
- JL: More generally, if I don’t care about some values, can I just use
$_
in several places? - RD: Yes. The idea is that this works exactly as it would if you expanded it out.
- RD: There’s a similar process for
LetMapBinding
.- … There is a similar issue here, there should be a note that the type must be coerceable to a map.
- … Again, an empty sequence is returned if the key is missing.
- RD: And we have a description of the result of the
ForLetExpr
.
Turning to the XQuery spec…
- RD: There’s the change from example text to example block again.
- … And the nonterminal name changes.
- RD: The rest is hard to read because it’s diffing off an older branch.
- JL: Great to see it come to life, finally. Thank you.
- … I think it would be useful to have a note that you can reuse a variable several times.
- CG: Thank you. It’s really great. Do we have specific reasons for allowing repeated variable names, beyond the fact that they’re allowed in FLOWR expressions in general?
- RD: It’s useful because you can’t mutate a variable; if you have a complicated
expression structure, it can be useful to have things like an accumulator
variable or something like that. And also, if you’ve got a nested expression,
it can be useful to have variables named
$i
or$node
or something generic. - MK: There have definitely been cases where I’ve reused
$temp
in a FLOWR expression. - MK: I suggest that if we have technical consensus, I can take over a redrafting.
- RD: Yeah, that’s fine.
- JL: Is it necessary to have a
$
in front of the brackets? - RD: In the case of parenthesis, you can’t distinguish the parens from a function call.
Some discussion of declaring the default function namespace and the consequences thereof.
Proposal: accept this technically, let MK take an editorial pass.
Some discussion of reserved function names.
- RD: There may have been an issue with
[
as well. - MK: Yes, ~let [ … ~ requires unbounded look ahead.
Proposal: accept this technically, let MK take an editorial pass.
Accepted.
2.2. PR 2030: 2029 xsd validator notes and examples
See PR #2030
- MK: This started as an editorial exercise, but I discovered I was replicating
text that was already replicated.
- … I decided to move the whole discussion of validation into F&O and remove common text from XQuery and XSLT.
MK reviews the PR.
- MK: In F&O, there’s a new section on XSD validation. It shows as all new, but it’s not intended to be substantively different from the descriptions currently in the XQuery and XSLT specifications.
- MK: Then the validation function refers to that section.
- … The function also goes into a lot more detail about how a schema is constructed.
- MK: In the XQuery spec, there’s a cross reference to the F&O section and some
detail is removed. The validate expression is no defined in terms of a call to
the validate function.
- … XQuery and XSLT define different error codes, so there’s a bit of a fudge.
- MK: The XSLT spec has analagous changes.
- WP: I think this is definite improvement. Is this necessary because the XSD spec is “soft” on some of these options?
- MK: Yes. XSD gives a whole range of ways to do it, but this makes it more concrete.
- JLO: I was wondering why there are different error codes in XQuery and XSLT?
- MK: Just for backwards compatibility.
Some discussion of what it means for a schema to be invalid.
Proposal: accept this PR.
Accepted.
2.3. PR 1888: 366 xsl:package-location
See PR #1888
JK introduces the PR.
- JK: We first discussed this about a month ago and I got good feedback which
I’ve incorporated.
- … Brief recap: the use-package instruction doesn’t give the developer access to the resources directly in the code.
- … The idea here is to make configuration easier by giving that access.
JK walks through the prose of the new version.
- JK: Priority is just a boolean now, not an integer.
- … First match wins.
- JK: I’ve posted five “Hello world” examples for the XSLT test suite.
- MK: I think that looks viable.
- JLO: There is already a package format that is used in the wider ecosystem, defined by EXPath. What about using xar packages?
- JK: It’s allowed, but I don’t know if it should be required.
Some discussion of the changes to priority.
- JK: A boolean combined with first one wins, seemed simpler.
Proposal: accept this PR.
Accepted.
3. Any other business
None heard.