QT4CG meeting 163 draft minutes, 5 May 2026

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