- From: Norm Tovey-Walsh <norm@saxonica.com>
- Date: Tue, 26 May 2026 18:19:05 +0100
- To: public-xslt-40@w3.org
Hello,
Here are today’s minutes.
https://qt4cg.org/meeting/minutes/2026/05-26.html
QT4 CG Meeting 166 Minutes 2026-05-26
[1]Meeting index / [2]QT4CG.org / [3]Dashboard / [4]GH Issues / [5]GH
Pull Requests
Table of Contents
* [6]Summary of new and continuing actions [0/2]
* [7]Draft Minutes
* [8]1. Administrivia
+ [9]1.1. Roll call [9/10]
+ [10]1.2. Accept the agenda
+ [11]1.3. Approve minutes of the previous meeting
+ [12]1.4. Next meeting
+ [13]1.5. Review of open action items [1/3]
+ [14]1.6. Review of open pull requests and issues
o [15]1.6.1. Blocked
o [16]1.6.2. Merge without discussion
o [17]1.6.3. Substantive PRs
* [18]2. Technical agenda
+ [19]2.1. PR #2628: 2617 Duration multiplied or divided by
number
+ [20]2.2. PR #2646: 2642 Add compiled-regex attribute to
xsl:analyze-string
+ [21]2.3. PR #2649: 2647 file:descendants: recursion, filtering
+ [22]2.4. PR #2654: 2652 Clarify lax validation
+ [23]2.5. PR #2656: 2651 Use termdefs for range variables
+ [24]2.6. PR #2658: 2655b matching segments empty
+ [25]2.7. PR #2662: 2659 bin:count-ones, bin:rotate,
bin:is-bit-set, bin:sets-bits
+ [26]2.8. PR #2665: 2663 Change computed node constructors to
use standard coercion rules
+ [27]2.9. PR #2666: 2661 Add content-key option for
fn:element-to-map
+ [28]2.10. PR #2667: 2458 replacement for get() selectors
* [29]3. Any other business
Summary of new and continuing actions [0/2]
* [ ] QT4CG-143-02: MK to try to recover the ability to extract
formal equivalences into tests
* [ ] QT4CG-165-02: NW to draft an agenda for the face-to-face
meeting
Draft Minutes
1. Administrivia
1.1. Roll call [9/10]
* [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)
* [X] Norm Tovey-Walsh (NW) Scribe. Chair.
1.2. Accept the agenda
Proposal: Accept [30]the agenda.
Accepted.
1.3. Approve minutes of the previous meeting
Proposal: Accept [31]the minutes of the previous meeting.
Accepted.
1.4. Next meeting
The next meeting is the face-to-face colocated with XML Prague. I
propose that we skip 9 June and that our first regular meeting after
the face-to-face will be on 16 June.
CG gives regrets for 2, 9, and 16 June.
1.5. Review of open action items [1/3]
* [ ] QT4CG-143-02: MK to try to recover the ability to extract
formal equivalences into tests
* [X] QT4CG-165-01: NW to attempt to draft an AI policy.
+ Completed,
[32]https://lists.w3.org/Archives/Public/public-xslt-40/2026Ma
y/0016.html
* [ ] QT4CG-165-02: NW to draft an agenda for the face-to-face
meeting
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 [33]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 [34]#2594: 2389 Adaptive Serialization: more freedom
* PR [35]#2350: 708 An alternative proposal for generators
* PR [36]#2247: 716 Deferred Evaluation in XPath - the f:generator
record
* PR [37]#2160: 2073 data model changes for JNodes and Sequences
* PR [38]#2071: 77c deep update
* PR [39]#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 [40]#2650: 2648 File Module: editorial notes
* PR [41]#2645: 2565 Absent-vs-Empty fields in dateTime-record
* PR [42]#2643: 2631 Drop scan-left and scan-right
JK questions whether we should discuss removing scan-left and
scan-right.
* NW: It's a simple enough proposal, editorially.
* MK: We have no tests for it.
* CG: I think it would also need further editorial work.
Proposal: Merge without further discussion.
Accepted.
1.6.3. Substantive PRs
The following substantive PRs were open when this agenda was prepared.
* PR [43]#2667: 2458 replacement for get() selectors
* PR [44]#2666: 2661 Add content-key option for fn:element-to-map
* PR [45]#2665: 2663 Change computed node constructors to use
standard coercion rules
* PR [46]#2662: 2659 bin:count-ones, bin:rotate, bin:is-bit-set,
bin:sets-bits
* PR [47]#2658: 2655b matching segments empty
* PR [48]#2656: 2651 Use termdefs for range variables
* PR [49]#2654: 2652 Clarify lax validation
* PR [50]#2649: 2647 [51]descendants: recursion, filtering
* PR [52]#2646: 2642 Add compiled-regex attribute to
xsl:analyze-string
* PR [53]#2638: 2632-6: cross-cutting consistency
* PR [54]#2637: 2632-5: refresh stale 4.0 content
* PR [55]#2636: 2632-4: logic and semantics
* PR [56]#2635: 2632-3: typos and grammar
* PR [57]#2634: 2632-2: fix broken examples in expressions.xml
* PR [58]#2633: 2632-1: fix critical bugs and DTD-validity issues
* PR [59]#2628: 2617 Duration multiplied or divided by number
* PR [60]#2589: 2587 Streamability of context value expressions
* PR [61]#2019: 1776: XSLT template rules for maps and array
2. Technical agenda
MK proposes to do the items in reverse order of what was proposed in
the agenda.
2.1. PR #2628: 2617 Duration multiplied or divided by number
See PR [62]#2628
* MK: There's an unnecessary restriction on what you can multiply by.
+ ... The PR replaces the four opertions about multiplying by a
number with two operations.
* MK: The other influence was to get rid of converting the number two
a double.
+ ... The number of seconds in a duration is a decimal, so you
could get strange rounding behavior.
* MK: It effects the mapping tale for arithemetic in the XPath spec,
but only trivially.
* MK: The error conditions were weird, which is another reason why I
looked at this
Proposal: accept this PR.
Accepted.
2.2. PR #2646: 2642 Add compiled-regex attribute to xsl:analyze-string
See PR [63]#2646
* MK: This is by request when we looked at the new regex function.
+ ... This fills that gap. And explains its semantics in terms
of existing semantics.
Proposal: accept this PR.
Accepted.
2.3. PR #2649: 2647 [64]descendants: recursion, filtering
See PR [65]#2649
* CG: This function can get very slow or memory intensive. If you
have a lot of subdirectories to parse, the challenge is that the
filesystem is nondeterministic.
+ ... You can either recurse or filter.
+ ... Filter can be used to limit the number of values returned.
* CG: The most important option is recurse which lets you skip some
directories when doing recurse.
* JLO: I do think this is a valuable addition; it would be nice if a
predicate could automatically do the right thing.
+ ... Is this something we want to add to other functions as
well?
+ ... Especially, since these are callbacks, this is a harder
sell than just "yes/no" for the options.
* CG: I haven't added a filter to file:children because it's a much
simpler function.
+ ... With respect to other functions, do you have some other
functions in mind?
* JLO: Well, fn:collection() seems like a similar sort of function.
+ ... What about globbing parameters for filter and recurse
instead of callbacks?
* CG: We could use a choice item type and also allow strings.
+ ... We have the glob pattern for file:list.
* NW: You couldn't exclude things with the glob patterns.
* JLO: You could use ! in front.
* MK: The way the position argument is described, "counts the number
of times the callback has been called". I wonder how that interacts
with multithreading and what about order?
* CG: We won't have any guarantee about what the first ten items are.
+ ... We could remove the position argument. It's not as
valuable here.
* MK: I think that would be better.
* JLO: An even broader question: what is the justification to have
file:descendants and file:list?
* CG: Yes, but file:list existed before I started working on this. We
noticed that file:children would be useful and file:descendants was
added after that.
+ ... They're all useful, but you can do everything you need
with just some of the functions.
* JLO: I would always use file:list.
* CG: That's interesting, we never do.
CG will review and submit an updated PR.
2.4. PR #2654: 2652 Clarify lax validation
See PR [66]#2654
* MK: This is purely editorial. There are inconsistent error codes
when you request lax validation with a processor that doesn't
support validation. Should you ignore it, or is it an error?
* MK: The basic text on validation is now in the Functions and
Operators specification.
MK reviews the text.
* MK: For compatibility reasons, XSLT still behaves differently.
+ ... There are clarifications that requesting lax validation on
fn:doc raises a dynamic error.
* MK: There's a note explaining why an empty schema can be useful.
Switching to the XSLT specification.
* MK: In XSLT, we add a note about validation against an empty
schema.
+ ... We note that backwards compatibility is retained but other
constructs raise an error.
Switching to XQuery
* MK: The note about an empty schema is added.
Proposal: accept this PR.
Accepted.
2.5. PR #2656: 2651 Use termdefs for range variables
See PR [67]#2656
* MK: When we did the expanding of for and let expressions in XPath,
there's now duplicated text in the spec between the XPath and
XQuery specs.
+ ... There sufficiently different, but they do have duplicated
text.
+ ... But the IDs of everything have to be unique in the
combined and separated specifications.
+ ... That's a problem, which I initially resolved by not making
them defined terms.
* MK: There's a question of why we introduced the term range
variable. But regardless, it's a term of art now.
* MK: It comes up a bit diffferently in XPath and XQuery.
In XPath:
* MK: A bunch of new defined terms are added, but nothing changes
about the semantics.
In XQuery:
* MK: It's similar; there are new definitions and tries to use them
consistently.
+ ... Also, I moved a pargraph that was in completely the wrong
place.
Proposal: accept this PR.
Accepted.
2.6. PR #2658: 2655b matching segments empty
See PR [68]#2658
* MK: This was a request to make the new fn:matching-segments
function behave more consistently with other regex functions.
+ ... If the value is the empty sequence, we treat it as the
empty string, and don't return an empty sequence.
* JWL: In almost the last example, where you have matching segments
with an empty string as the value.
+ ... So the empty sequence is equivalent to the empty string?
* MK: Yes.
Proposal: accept this PR.
Accepted.
2.7. PR #2662: 2659 bin:count-ones, bin:rotate, bin:is-bit-set, bin:sets-bits
See PR [69]#2662
* CG: This is about the binary module. We used it in a project where
we wanted to compute the Hamming distance.
+ ... That turned out to be surprisingly difficult. These
functions improve that.
+ ... The name count-ones is a comprimise.
* CG: After adding that, I also added is-bit-set, set-bits, and
rotate (as an alternative to shift).
* CG: In set-bits, it's a sequence to simplify use when you want to
set more than one bit.
+ ... Obviously, we didn't invent this module to do bit
operations, but in practice this works fairly well.
* JLO: I believe that all of this is necessary, how about
count-set-bits since we have is-bit-set and set-bits?
Some discussion of the difference between shift and rotate.
* JWL: The bit shift when it was original done shifted zeros in from
the end. I don't know why we didn't think about rotate.
* JWL: I think we should name it count-bits-set to avoid some
ambiguity.
Proposal: rename count-ones to count-bits~set then merge.
Accepted.
2.8. PR #2665: 2663 Change computed node constructors to use standard
coercion rules
See PR [70]#2665
* MK: This is another one that came out of Sheila's work
* MK: The current logic for computed node constructors where you
specify the name of the constructor has special rules for the name
+ ... This is different from the standard rules, at least with
respect to xs:anyURI.
+ ... That means the implementation can't use the same code, so
there are different error codes.
* MK: This PR changes them so they use the standard coercion rules.
+ ... The rules get a little simpler for each of the node types.
* MK: The only observable effect of this change is that the error
codes are different (and xs:anyURI is accepted, which requires
changing some tests).
Proposal: accept this PR.
Accepted.
2.9. PR #2666: 2661 Add content-key option for fn:element-to-map
See PR [71]#2666
* MK: The specification for element-to-map allows you to customize
the @ symbol for attributes, but not the #content magic string.
+ ... This just adds another option that allows you to control
that.
Some discussion of how setting attribute-marker and content-key to the
same string would be problematic.
* MK: That's where the rule for inserting additional "#" to make a
unique string applies.
Proposal: accept this PR.
Accepted.
2.10. PR #2667: 2458 replacement for get() selectors
See PR [72]#2667
* MK: This is a fairly significant change. Let's begin with an
introduction.
+ ... The use of get() selectors has never sat very well.
* MK: Just overloading "/" does quite different things.
* MK: The NodeTest in an AxisStep now allows a computed name or key
ancestor::{$name}.
+ ... And it changes what happens if you have atomic values on
the right if you have JNodes on the left.
* MK: So how do we evaluate the "/" operator?
+ ... We split the cases for XNodes and JNodes
+ ... Any maps or arrays on the left are converted to JNodes
+ ... The left hand side must be all XNodes or all JNodes.
+ ... The semantics for XNodes are the same as they have been.
+ ... But for a sequence of JNodes, there are new rules.
MK reviews the new rules.
* MK: The JNodes are always returned in document order.
* MK: The grammar change is that a node test can include an enclosed
Expr. The Selector can't. ... You can only use the replacement if
you have an explicit axis (because a free-standing expression
beginning with braces already has a specified meaning).
* MK: On the JNode side, you can now do things like $map/$key.
+ ... There are lots of examples of selecting from maps and
arrays.
MK reviews the equivalence to JSONPath.
* JWL: If we're running in XSLT, are we going to get conflicts with
value templates?
* MK: No, it's just another thing with curly braces.
* JWL: But this is the first time they occur in a slector.
* MK: Yes, we probably need to look at the impact on patterns.
* CG: With regard to the curly braces, I wonder if we could use
parenthesis instead.
+ ... That would make things more similar to the lookup
expression.
+ ... The semantics are fairly different if you remove the axis.
* MK: I like the curly brackets. It is indicative of substituting a
value.
+ ... There's some overlap with the union syntax that needs
investigating.
3. Any other business
References
1. https://qt4cg.org/meeting/minutes/
2. https://qt4cg.org/
3. https://qt4cg.org/dashboard
4. https://github.com/qt4cg/qtspecs/issues
5. https://github.com/qt4cg/qtspecs/pulls
6. https://qt4cg.org/meeting/minutes/2026/05-26.html#new-actions
7. https://qt4cg.org/meeting/minutes/2026/05-26.html#minutes
8. https://qt4cg.org/meeting/minutes/2026/05-26.html#administrivia
9. https://qt4cg.org/meeting/minutes/2026/05-26.html#roll-call
10. https://qt4cg.org/meeting/minutes/2026/05-26.html#agenda
11. https://qt4cg.org/meeting/minutes/2026/05-26.html#approve-minutes
12. https://qt4cg.org/meeting/minutes/2026/05-26.html#next-meeting
13. https://qt4cg.org/meeting/minutes/2026/05-26.html#open-actions
14. https://qt4cg.org/meeting/minutes/2026/05-26.html#open-pull-requests
15. https://qt4cg.org/meeting/minutes/2026/05-26.html#blocked
16. https://qt4cg.org/meeting/minutes/2026/05-26.html#merge-without-discussion
17. https://qt4cg.org/meeting/minutes/2026/05-26.html#substantive
18. https://qt4cg.org/meeting/minutes/2026/05-26.html#technical-agenda
19. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2628
20. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2646
21. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2649
22. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2654
23. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2656
24. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2658
25. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2662
26. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2665
27. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2666
28. https://qt4cg.org/meeting/minutes/2026/05-26.html#pr-2667
29. https://qt4cg.org/meeting/minutes/2026/05-26.html#any-other-business
30. https://qt4cg.org/meeting/agenda/2026/05-26.html
31. https://qt4cg.org/meeting/minutes/2026/05-19.html
32. https://lists.w3.org/Archives/Public/public-xslt-40/2026May/0016.html
33. https://qt4cg.org/meeting/minutes/2026/05-26.html#technical-agenda
34. https://qt4cg.org/dashboard/#pr-2594
35. https://qt4cg.org/dashboard/#pr-2350
36. https://qt4cg.org/dashboard/#pr-2247
37. https://qt4cg.org/dashboard/#pr-2160
38. https://qt4cg.org/dashboard/#pr-2071
39. https://qt4cg.org/dashboard/#pr-2019
40. https://qt4cg.org/dashboard/#pr-2650
41. https://qt4cg.org/dashboard/#pr-2645
42. https://qt4cg.org/dashboard/#pr-2643
43. https://qt4cg.org/dashboard/#pr-2667
44. https://qt4cg.org/dashboard/#pr-2666
45. https://qt4cg.org/dashboard/#pr-2665
46. https://qt4cg.org/dashboard/#pr-2662
47. https://qt4cg.org/dashboard/#pr-2658
48. https://qt4cg.org/dashboard/#pr-2656
49. https://qt4cg.org/dashboard/#pr-2654
50. https://qt4cg.org/dashboard/#pr-2649
51. https://qt4cg.org/meeting/minutes/2026/descendants
52. https://qt4cg.org/dashboard/#pr-2646
53. https://qt4cg.org/dashboard/#pr-2638
54. https://qt4cg.org/dashboard/#pr-2637
55. https://qt4cg.org/dashboard/#pr-2636
56. https://qt4cg.org/dashboard/#pr-2635
57. https://qt4cg.org/dashboard/#pr-2634
58. https://qt4cg.org/dashboard/#pr-2633
59. https://qt4cg.org/dashboard/#pr-2628
60. https://qt4cg.org/dashboard/#pr-2589
61. https://qt4cg.org/dashboard/#pr-2019
62. https://qt4cg.org/dashboard/#pr-2628
63. https://qt4cg.org/dashboard/#pr-2646
64. https://qt4cg.org/meeting/minutes/2026/descendants
65. https://qt4cg.org/dashboard/#pr-2649
66. https://qt4cg.org/dashboard/#pr-2654
67. https://qt4cg.org/dashboard/#pr-2656
68. https://qt4cg.org/dashboard/#pr-2658
69. https://qt4cg.org/dashboard/#pr-2662
70. https://qt4cg.org/dashboard/#pr-2665
71. https://qt4cg.org/dashboard/#pr-2666
72. https://qt4cg.org/dashboard/#pr-2667
Be seeing you,
norm
--
Norm Tovey-Walsh
CEO, Saxonica
Received on Tuesday, 26 May 2026 17:19:11 UTC