- From: Norm Tovey-Walsh <norm@saxonica.com>
- Date: Tue, 05 May 2026 17:49:44 +0100
- To: public-xslt-40@w3.org
Hello,
Here are the draft minutes from today:
https://qt4cg.org/meeting/minutes/2026/05-05.html
QT4 CG Meeting 163 Minutes 2026-05-05
[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/8]
* [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 [6/8]
+ [14]1.6. Review of open pull requests and issues
o [15]1.6.1. Blocked
o [16]1.6.2. Merge without discussion
* [17]2. Technical agenda
+ [18]2.1. PR #2614: 2613 make xsl:array-member create a JNode
+ [19]2.2. PR #2611: 2598 New function fn:regex
+ [20]2.3. PR #2610: 2584 Absolute path expressions starting at
map or array
+ [21]2.4. PR #2609: QT4CG-156-03 Revise text on JNode identity
+ [22]2.5. PR #2606: 2605 file:copy, file:move: define behavior
when target is inside source dir
+ [23]2.6. PR #2603: 2602 EXPath file and binary modules as
optional features
+ [24]2.7. PR #2601: 2568 Error code changes for dateTime
functions
+ [25]2.8. PR #2595: DM edits on XML Schema data types
* [26]3. Any other business
Summary of new and continuing actions [0/8]
* [ ] QT4CG-143-02: MK to try to recover the ability to extract
formal equivalences into tests
* [ ] QT4CG-160-02: NW to think about how to promote the dated drafts
for broader community feedback.
* [ ] QT4CG-165-01: NW to follow-up with the generator authors and
schedule another discussion
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 [27]the agenda.
Accepted.
1.3. Approve minutes of the previous meeting
Proposal: Accept [28]the minutes of the previous meeting.
Accepted.
1.4. Next meeting
The next meeting is planned for 12 May 2026.
Possible regrets from DB.
1.5. Review of open action items [6/8]
* [ ] QT4CG-143-02: MK to try to recover the ability to extract
formal equivalences into tests
* [X] QT4CG-144-01: MK to consider if any now lost value comparisons
should be added as examples.
+ Decided to make no further change. I reviewed the examples of
fn:atomic-equal and fn:compare and decided they are adequate.
* [X] QT4CG-156-01: MK: add reference to data model in F&O 9.2
+ Overtaken by events, already in F&O
* [X] QT4CG-156-03: MK to revise PR #2516 in light of the comments.
+ Done in PR #2609
* [X] QT4CG-158-01: MK to revisit the Conformance section to revise
in light of #2556 error changes
+ I decided to make no change. I don't think we need a
conformance feature for every aspect of processing that is
implementation-defined.
* [X] QT4CG-158-02: MK to add system-properties() keys for file and
binary support
+ Done in PR #2603
* [X] QT4CG-160-01: MK to fix the markup error in method/method call
in #2578
+ Done in PR #2604
* [ ] QT4CG-160-02: NW to think about how to promote the dated drafts
for broader community feedback.
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 [29]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 [30]#2019: 1776: XSLT template rules for maps and array
* PR [31]#2071: 77c deep update
* PR [32]#2160: 2073 data model changes for JNodes and Sequences
* PR [33]#2247: 716 Deferred Evaluation in XPath - the f:generator
record
* PR [34]#2350: 708 An alternative proposal for generators
ACTION QT4CG-165-01: NW to follow-up with the generator authors and
schedule another discussion
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 [35]#2608: 2312 Removal of Map/Array Filter (somewhat sigh)
* PR [36]#2607: 2314 fn:error: return type xs:error
* PR [37]#2604: Action QT4CG-160-01 Methods and Method Calls
MK reports that #2607 needs work. CG agrees to make a friendly change,
still plan to merge at the end of the meeting.
Proposal: merge these PRs without discussion with that change.
Accepted
2. Technical agenda
2.1. PR #2614: 2613 make xsl:array-member create a JNode
See PR [38]#2614
* MK introduces the PR; perhaps there hasn't been sufficient time for
review.
* MK: This is entirely XSLT.
+ ... The motivation for this is that xsl:array-member has been
through several iterations. The challenge is that we need a
sequence that doesn't get flattened.
+ ... One solution was a zero-arity function item to represent
that sequence.
+ ... This PR changes that to return a JNode who's value is the
sequence.
+ ... This allows you to combine the contents of an existing
array with newly constructed array members.
* NW: I think that's a real improvement.
* JWL: An xsl:array-member can only be under an xsl:array?
* MK: No, you can put it in a called template or return it from a
function.
* JWL: But it always returns a JNode
* MK: Yes
* JWL: But xsl:map-entry returns a map.
* MK: Yes; but I'm thinking of changing that.
Some discussion of the array concatentation example.
* JWL: On that example, if we replaced the sequence with
xsl:array-member/@select would we then get a nested array?
* MK: I'd have to think hard about that.
* JWL: I think we need an example of that.
* JLO: What happens if there's an arbitrary sequence, not a JNode?
* MK: No, what xsl:array does if you supply things that aren't JNodes
it adds them as individual items.
* WP: It might also be helpful in this context to show some more
examples, with nested arrays for example.
Proposal: accept this PR?
Accepted.
2.2. PR #2611: 2598 New function fn:regex
See PR [39]#2611
* MK: This is a now presented as a free-standing PR, not bundled with
anything else.
MK describes the semantics of the function and reviews the examples.
* MK: The matches, replace, and other functions become methods on the
regex record.
* MK: I've added an _implementation field for implementation-defined
extensions.
* MK: There are questions of encapsulation here; if you take these
methods out of the record, things may go badly wrong. So don't.
* JWL: In the example $regex ? replace(...) threw me a bit because we
usually don't have spaces.
* MK: I've played with both coding styles, it's not clear what the
best answer is.
* DB: Is the spec consistent about the spacing around that question
mark, or whether it should be.
* MK: The spacing doesn't effect the behavior just the readability.
* DB: But there's no recommendation and the spec isn't necessarily
going to be consistent.
* DB: What's an anticipated use of the _implementation field?
* MK: One way of implementing this would be for all the information
about the compiled regex to go into the functions themselves. I
felt that might lead replication. Another way of implementing it is
to make this a special object internally that behaves like a map or
record but has some hidden magic not exposed at all.
+ ... This makes it a little more explicit that there's magic;
that there's state.
+ ... It might be as simple as a checksum so that the
implementation can be sure it was one that it constructed.
* DB: Is that a slippery slope? Do we care?
* MK: Yes. We might learn from experience whether that's useful or
not.
* CG: It was the _implementation option that I first looked at. I
think we should drop it if we don't have a serious use case for it.
We don't use this syntax anywhere else. To me, everything in this
function looks like an implementation optimization, not something
for the user to use.
* MK: Well, obviously the alternative is caching; the problem is that
it imposes a cost and you don't know if that cost is going to
deliver a benefit.
* CG: It would be good to see some use cases. But my impressions are
personal.
* MK: One case is in XSLT pattern matching. You might want to use the
same match conditions against very many nodes.
+ ... You could say that there's an obvious case for an
optimizer to do the work there, but I don't know...I like to
give users the opportunity to be explict.
* JLO: My points have been covered; I'd like to drop _implementation.
I think if we do want something here, I'd like something more
symbol-like.
+ ... With respect to style, I'd put spaces around the ! never
the ?.
Some further discussion of the readability of the example.
* JK: Just a quick note that I'm greatful for the proposal. I
represent a kind of use case in that one of my applications is a
series of global changes to a large number of files and uses a lot
of regular expressions. If you're doing 200 regex replacements
against every text node in a large collection of documents, you
want it to be faster.
* MK: The current Saxon implementation pre-compiles regular
expressions if they're compile time constants. There are cases
where it's computed at runtime and still used repeatedly.
* JWL: The use of tokenize there is confusing.
* WP: I can see places where it would be very nice to have this. My
question isn't about the style, but how is ! different from ? in
that location. I think there might be more clarification needed
there.
MK agrees to take this feedback and make another pass.
* CG: We have functions like transform that have a cache option;
maybe that could be a useful approach here?
* WP: In general, I need an education in caching.
2.3. PR #2610: 2584 Absolute path expressions starting at map or array
See PR [40]#2610
MK introduces the topic. It was CG's issue, but it's MK's PR.
* MK: I've rewritten the grammar to allow a leading slash to start at
a JNode.
+ ... The amount of change isn't all that great.
* MK: There's a new section about what a path beginning / means.
+ ... / by itself is /.
+ ... It spells out the other possibilities for every item.
+ ... The case where we wrap a map or array in a jtree is the
one that concerned me. It's basically a no-op, but it's
allowed for generality.
* MK: There's a new section about what a path beginning // means.
+ ... It's much the same
* JWL: If you've got a map inside a map and you then go down, do a
select, get to the inner map, what does / mean then?
* MK: The complex cases are where you do a downward selection then
have a predicate that uses /.
MK illustrates a complex case: $map//name[//city='London']
* MK: You've got to think quite hard about whether or not //city
causes an upward naviagation and if it does, where it goes.
+ ... In this case JNodes are selected, so it's actually going
to go up to the $map which is the root of the tree.
+ ... But there are other cases I worry about where the root in
the predicate might be different.
MK proposes $map//name => jvalue(.)[//city='London']
* MK: That's different.
Some discussion of how you'd assign variables, make them JNodes, etc.
Lots of possibilities.
* JWL: It depends on whether or not you did type coercion in a
variable.
* CG: Thank you for the PR. One reason for creating the issue was
that many people tend to write a and /a and they use them in the
same way when the start at the root. It can be hard to explain the
differences to users. If you make it easy for the everyday user,
that will be an advantage.
* MK: One of my concerns is that static analysis is difficult when we
don't know if we're dealing with XNodes or JNodes. But that's an
implementation problem.
Proposal: accept this PR.
Accepted.
2.4. PR #2609: QT4CG-156-03 Revise text on JNode identity
See PR [41]#2609
MK proposes to skip this until next week.
2.5. PR #2606: 2605 [42]copy, [43]move: define behavior when target is inside
source dir
See PR [44]#2606
CG introduces the topic.
* CG: This is a special case for file:copy and file:move. You can
specify a source and target, when the target is located inside the
source, that can lead to cyclic behavior.
+ ... I decide to make this an error.
Proposal: accept this PR.
Accepted.
2.6. PR #2603: 2602 EXPath file and binary modules as optional features
See PR [45]#2603
MK proposes to skip this until next week; it's being revised to improve
clarity.
2.7. PR #2601: 2568 Error code changes for dateTime functions
See PR [46]#2601
MK reviews the PR.
* JWL: The error code for the timezone one has a formatting problem.
(-PT14H gets split between "-" and "P")
* JK: I would prefer to see something similer to 001 for values
outside an expected range. The complaint was that FORG001 already
covers a lot of problems. But as MK said, that's about casting and
the data type, not with whether it's in an expected value.
* MK: I think it was done this way because when you do casting we do
allow the value 24. But on this function we don't.
* JLO: I like JK's idea of having more general error codes here.
* MK: Let's get rid of FODT006 and use FORG001 there as well.
2.8. PR #2595: DM edits on XML Schema data types
See PR [47]#2595
* JK: This is really editorial; or it's intended to be.
+ ... It's motivated by checking on the data types. I was
curious to know if regexes could be a data type.
+ ... There was text in Predefined Types that was largely
repeated from Types adopted from XML Schema.
+ ... I've moved them and put them closer together.
* JK: I also took the opportunity to present items that hadn't got
formal definitions: in particular, xs:numeric
* JK: And I added a lot of cross references.
Proposal: accept this PR.
Accepted.
3. Any other business
None heard.
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-05.html#new-actions
7. https://qt4cg.org/meeting/minutes/2026/05-05.html#minutes
8. https://qt4cg.org/meeting/minutes/2026/05-05.html#administrivia
9. https://qt4cg.org/meeting/minutes/2026/05-05.html#roll-call
10. https://qt4cg.org/meeting/minutes/2026/05-05.html#agenda
11. https://qt4cg.org/meeting/minutes/2026/05-05.html#approve-minutes
12. https://qt4cg.org/meeting/minutes/2026/05-05.html#next-meeting
13. https://qt4cg.org/meeting/minutes/2026/05-05.html#open-actions
14. https://qt4cg.org/meeting/minutes/2026/05-05.html#open-pull-requests
15. https://qt4cg.org/meeting/minutes/2026/05-05.html#blocked
16. https://qt4cg.org/meeting/minutes/2026/05-05.html#merge-without-discussion
17. https://qt4cg.org/meeting/minutes/2026/05-05.html#technical-agenda
18. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2614
19. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2611
20. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2610
21. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2609
22. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2606
23. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2603
24. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2601
25. https://qt4cg.org/meeting/minutes/2026/05-05.html#pr-2595
26. https://qt4cg.org/meeting/minutes/2026/05-05.html#any-other-business
27. https://qt4cg.org/meeting/agenda/2026/05-05.html
28. https://qt4cg.org/meeting/minutes/2026/04-28.html
29. https://qt4cg.org/meeting/minutes/2026/05-05.html#technical-agenda
30. https://qt4cg.org/dashboard/#pr-2019
31. https://qt4cg.org/dashboard/#pr-2071
32. https://qt4cg.org/dashboard/#pr-2160
33. https://qt4cg.org/dashboard/#pr-2247
34. https://qt4cg.org/dashboard/#pr-2350
35. https://qt4cg.org/dashboard/#pr-2608
36. https://qt4cg.org/dashboard/#pr-2607
37. https://qt4cg.org/dashboard/#pr-2604
38. https://qt4cg.org/dashboard/#pr-2614
39. https://qt4cg.org/dashboard/#pr-2611
40. https://qt4cg.org/dashboard/#pr-2610
41. https://qt4cg.org/dashboard/#pr-2609
42. https://qt4cg.org/meeting/minutes/2026/copy
43. https://qt4cg.org/meeting/minutes/2026/move
44. https://qt4cg.org/dashboard/#pr-2606
45. https://qt4cg.org/dashboard/#pr-2603
46. https://qt4cg.org/dashboard/#pr-2601
47. https://qt4cg.org/dashboard/#pr-2595
Be seeing you,
norm
--
Norm Tovey-Walsh
CEO, Saxonica
Received on Tuesday, 5 May 2026 16:49:55 UTC