QT4CG meeting 130 draft minutes, 22 July 2025

Hello,

Here are the minutes for today’s meeting:

   https://qt4cg.org/meeting/minutes/2025/07-22.html

QT4 CG Meeting 130 Minutes 2025-07-22

   [1]Meeting index / [2]QT4CG.org / [3]Dashboard / [4]GH Issues / [5]GH
   Pull Requests

Table of Contents

     * [6]Draft Minutes
     * [7]Summary of new and continuing actions [0/5]
     * [8]1. Administrivia
          + [9]1.1. Roll call [8/12]
          + [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 [5/10]
          + [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. Close without action
               o [18]1.6.4. Substantive PRs
     * [19]2. Technical agenda
          + [20]2.1. PR #2109: 2103 Allow operand of JNode accessors to be
            omitted or empty
          + [21]2.2. PR #2110: 2098 Clarify when jnode() is called
            implicitly
          + [22]2.3. PR #2111: 2095 Point out places where jnode-content
            is called implicitly
          + [23]2.4. PR #2071: 77c deep update
          + [24]2.5. PR #2037: 2036 Add rule for streamability of xsl:map
          + [25]2.6. PR #2019: 1776: XSLT template rules for maps and
            array
     * [26]3. Any other business
     * [27]4. Adjourned

Draft Minutes

Summary of new and continuing actions [0/5]

     * [ ] QT4CG-082-02: DN to work with NW to come to agreement on the
       fn:ranks proposal
     * [ ] 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-127-01: NW to diagram the JTree representing arbitrary
       XDM content.
     * [ ] QT4CG-128-03: NW to compare the file: module against the
       equivalent XProc 3.1 steps

1. Administrivia

1.1. Roll call [8/12]

   Regrets: DB, BTW.
     * [ ] David J Birnbaum (DB)
     * [X] Reece Dunn (RD)
     * [X] Christian Gr¸n (CG)
     * [X] Joel Kalvesmaki (JK) [:03-]
     * [X] Michael Kay (MK)
     * [X] Juri Leino (JLO)
     * [X] 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 [28]the agenda.

   Accepted.

1.3. Approve minutes of the previous meeting

   Proposal: Accept [29]the minutes of the previous meeting.

   Accepted.

1.4. Next meeting

   This meeting is planned for 22 July 2025. The following meeting is
   scheduled for 29 July 2025.

   The CG will not meet 5 August. Does the CG wish to take a longer
   "summer holiday"?

   The CG will take a short recess in late August. We will not meet on 26
   August, 2 September, or 9 September.

1.5. Review of open action items [5/10]

   (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
     * [X] QT4CG-112-01: JLO to propose a concrete example that uses "."
       in a ~%method~s.
          + Overtaken by PR [30]#2108: QT4CG-123-01 Add example of library
            module using methods
     * [ ] 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
     * [X] QT4CG-123-01: MK to do the set example in XQuery.
     * [ ] QT4CG-127-01: NW to diagram the JTree representing arbitrary
       XDM content.
     * [X] QT4CG-128-01: CG to consider using "standard" or some other
       term instead of "regular" in the file: module.
     * [X] 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
     * [X] QT4CG-129-01: MK to fix the remaining prose references to
       MapKeyExpr and MapValueExpr

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 [31]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 [32]#2063: 1996 Lookups, KeySpecifier: Literal, ContextValueRef
     * PR [33]#2019: 1776: XSLT template rules for maps and array
     * PR [34]#1062: 150bis revised proposal for fn:ranks

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]#2108: QT4CG-123-01 Add example of library module using
       methods
     * PR [36]#2107: QT4CG-129-01: Actions from review of PR2094
     * PR [37]#2106: Add note on the impossibility of cyclic instances
     * PR [38]#2105: Fix type of `fn:schema-type-record` field
       `constructor`

   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 [39]#2097: `jnode` as a subtype of `node`
     * Issue [40]#2089: JNode properties: Presentation

   Proposal: close without further action.

   Accepted.

1.6.4. Substantive PRs

   The following substantive PRs were open when this agenda was prepared.
     * PR [41]#2109: 2103 Allow operand of JNode accessors to be omitted
       or empty
     * PR [42]#2110: 2098 Clarify when jnode() is called implicitly
     * PR [43]#2111: 2095 Point out places where jnode-content is called
       implicitly
     * PR [44]#2071: 77c deep update
     * PR [45]#2037: 2036 Add rule for streamability of xsl:map
     * PR [46]#2019: 1776: XSLT template rules for maps and array

2. Technical agenda

2.1. PR #2109: 2103 Allow operand of JNode accessors to be omitted or empty

   See PR [47]#2109

   MK introduces the PR.
     * MK: It makes the argument optional and defaults it to "."
          + ... The usual error conditions apply.
          + ... This brings them all in line with things like name() and
            local-name() on nodes.
     * JLO: Do we have examples for those?
     * MK: Yes, I've modified some of the existing examples to use it.

   Proposal: accept this PR.

   Accepted.

2.2. PR #2110: 2098 Clarify when jnode() is called implicitly

   See PR [48]#2110
     * MK: This is a purely editorial change.
          + ... In an absolute path expression, you don't get implicit
            conversion of the context item to a JNode
          + ... I've tried to keep implicit conversions to a JNode to a
            minimum.
     * JWL: There's a typo there "itemss"
     * MK: 4.6.4 Steps has more discussion of when jnode conversions are
       performed automatically.

   MK moves to the F&O spec.
     * MK: More discussion of implicit conversion to JNodes.
     * JLO: I would like to discuss if would if it would be better to do
       an implicit cast in the case of absolute path expressions.
     * MK: The main reason I didn't was that it would cause a surprise. If
       you think you're deep within a tree of maps and arrays, you imagine
       that "/" is going to take you to the top, but it isn't.
          + ... Instead, you'll get a root node for the subtree, which
            would not be what's expected.
     * MK: If you start with a map, it doesn't have a parent, so it can't
       navigate upwards.

   Some discussion of how "/" is evaluated. (See 4.6.1, Absolute Path
   Expressions, in XQuery)
     * CG: Maybe we should change the type error to a specific error code
       then we could explain to the user why it doesn't make sense to use
       the "/"
          + ... I can understand why it doesn't make sense.
     * MK: It occurred to me that we could forbid the leading "/" even if
       the context was a map or array.
          + ... An expression starting with "/" would then always be an
            XNode.
     * NW: That makes sense to me.
     * JLO: I'm still trying to process the information about "/". I have
       something in my context item; it must be in an XQuery main module.
     * MK: Consider a/b/c/d[//x/y='2']. That selects "d" in the curren
       tree if the document that contains "d" also contains an x/y=2
          + ... With JNodes, that "//" would take you to the root of the
            tree.
          + ... But consider ?a?b?c[//x=2]. Here "c" might be a map, if
            that leading slash implicitly created a JNode, that would be
            JNode around the "c" map, it wouldn't navigate up because
            there are no parent pointers to follow.

   Some discussion of what the spec currently says.
     * JK: Would there be a similar kind of error condition of the user
       used root()?

   Some discussion of the distinctions between the lookup operator and
   navigation upward.
     * MK: You can only navigate upwards if you navigate down with JNodes
       so that there are pointers to follow.
     * CG: Examples

{'a': 1 }/a[/]  ... X
{ 'a': 1 }?a[/]  ... Nv
{ 'a': 1 }[/]  ... Nv

     * JK: I think we need more explanation here.
     * WP: Why wouldn't we always use slashes?
     * MK: Partly, it's historic, but it's also very simple if you're just
       doing a single-level lookup in a map.
     * CG: I think there are many use cases where you don't want to
       traverse, you just want to lookup.
     * JK: I think the main thing we need to be reminded of is that "?" is
       breaking.

   MK reviews what we current say about the lookup operator.

   Proposal: accept this PR.

   Accepted.

2.3. PR #2111: 2095 Point out places where jnode-content is called implicitly

   See PR [49]#2111
     * MK: This is the other half of it. Where do we call jnode-content
       implicitly?
     * MK: In XQuery...
          + ... Arrays and maps are coerced in FLOWR expressions.
          + ... In an expression that must return a map, we allow it to be
            JNode.
          + ... For filter expressions for maps and arrays, we allow you
            to supply a JNode.
     * MK: In F&O...
          + ... The coercion rules apply to JNodes where maps or arrays
            are expected.
          + ... More examples under fn:jnode-content.
          + ... But not for EBV or for functions like count or deep equal
            that accept arbitrary sequences.
     * CG: It looks good. I think this PR should reference 2104 instead of
       2095.
     * JLO: Should we raise an error if you try to put a JNode in JNode?
     * MK: I think that's paternalism. Like forbidding multiplying by zero
       because it's useless.
     * CG: There's an existing issue on that discussion; #2086.
          + ... I think there's also a question of performance. Checking
            for errors in a large structure could be expensive.
          + ... I'm not sure how to forbid it easily.
     * JWL: Do we have an "instance of" JNode test?
     * MK: Yes.

   Proposal: accept this PR.

   Accepted.

2.4. PR #2071: 77c deep update

   See PR [50]#2071
     * MK: I've been doing some work on it, but it's not ready to present
       yet.

   Not ready for discussion.
     * MK: The more I do examples of it, the more I find a need for the
       callback functions that do the local updates to create nodes.
          + ... Doing a deep update in XPath really needs functions that
            create nodes in XPath.
          + ... Do we want to bite that bullet?
     * CG: I think it would be easy to create them in XQuery or XSLT
       contexts.
          + ... It might be harder to do in a pure XPath case.
     * JK: I'd love to have them. How much work would it be?
     * MK: I don't think it's actually that excessive. The complications
       come with all the options for namespace inheritance and that sort
       of stuff.
     * JLO: We explored this before, didn't we.
     * MK: Yes, but it was only a sketch, not a full proposal.
     * JLO: I'd like to see it.
     * WP: I'm with JK. Is this a clean subset of XQuery or what are we
       talking about?
     * MK: I'd do it with functions rather than syntax.
     * CG: Could we use the existing text(), element() etc. keywords as
       functions to make nodes?
     * RD: As far as I'm aware, yes. The current tests don't occur in a
       normal expression.
          + The other places where we have the names are text { }.
     * MK: We'd have to refine the rules about reserved function names.
     * RD: Do we have to?
     * MK: Yes.

   CG offers <a/>/text() vs <a/>/text('text') as an example.

2.5. PR #2037: 2036 Add rule for streamability of xsl:map

   See PR [51]#2037
     * MK: I haven't tackled the big issues with streamability, just
       knocking off bugs as I find them.
          + ... This is saying that the special rule of multiple
            consumable operands does not apply if duplicate keys are
            permitted.
          + ... Just because that makes it a bit more difficult.
     * JLO: Can xsl:map contain duplicate keys?
     * MK: No, the result can't, but you can define an action for what you
       do with duplicate keys.

   Some discussion of why it's harder to deal with duplicate keys.
     * JWL: It's highly unlikely anyone would try it, unless you were
       writing tests!

   Proposal: accept this PR.

   Accepted.

2.6. PR #2019: 1776: XSLT template rules for maps and array

   See PR [52]#2019

   Not ready yet.

3. Any other business

     * CG: There are a lot of JNode issues; it would be great if we could
       get some feedback on them.

4. Adjourned

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/2025/07-22.html#minutes
   7. https://qt4cg.org/meeting/minutes/2025/07-22.html#new-actions
   8. https://qt4cg.org/meeting/minutes/2025/07-22.html#administrivia
   9. https://qt4cg.org/meeting/minutes/2025/07-22.html#roll-call
  10. https://qt4cg.org/meeting/minutes/2025/07-22.html#agenda
  11. https://qt4cg.org/meeting/minutes/2025/07-22.html#approve-minutes
  12. https://qt4cg.org/meeting/minutes/2025/07-22.html#next-meeting
  13. https://qt4cg.org/meeting/minutes/2025/07-22.html#open-actions
  14. https://qt4cg.org/meeting/minutes/2025/07-22.html#open-pull-requests
  15. https://qt4cg.org/meeting/minutes/2025/07-22.html#blocked
  16. https://qt4cg.org/meeting/minutes/2025/07-22.html#merge-without-discussion
  17. https://qt4cg.org/meeting/minutes/2025/07-22.html#close-without-action
  18. https://qt4cg.org/meeting/minutes/2025/07-22.html#substantive
  19. https://qt4cg.org/meeting/minutes/2025/07-22.html#technical-agenda
  20. https://qt4cg.org/meeting/minutes/2025/07-22.html#pr-2109
  21. https://qt4cg.org/meeting/minutes/2025/07-22.html#pr-2110
  22. https://qt4cg.org/meeting/minutes/2025/07-22.html#pr-2111
  23. https://qt4cg.org/meeting/minutes/2025/07-22.html#pr-2071
  24. https://qt4cg.org/meeting/minutes/2025/07-22.html#pr-2037
  25. https://qt4cg.org/meeting/minutes/2025/07-22.html#pr-2019
  26. https://qt4cg.org/meeting/minutes/2025/07-22.html#any-other-business
  27. https://qt4cg.org/meeting/minutes/2025/07-22.html#adjourned
  28. https://qt4cg.org/meeting/agenda/2025/07-22.html
  29. https://qt4cg.org/meeting/minutes/2025/07-15.html
  30. https://qt4cg.org/dashboard/#pr-2108
  31. https://qt4cg.org/meeting/minutes/2025/07-22.html#technical-agenda
  32. https://qt4cg.org/dashboard/#pr-2063
  33. https://qt4cg.org/dashboard/#pr-2019
  34. https://qt4cg.org/dashboard/#pr-1062
  35. https://qt4cg.org/dashboard/#pr-2108
  36. https://qt4cg.org/dashboard/#pr-2107
  37. https://qt4cg.org/dashboard/#pr-2106
  38. https://qt4cg.org/dashboard/#pr-2105
  39. https://github.com/qt4cg/qtspecs/issues/2097
  40. https://github.com/qt4cg/qtspecs/issues/2089
  41. https://qt4cg.org/dashboard/#pr-2109
  42. https://qt4cg.org/dashboard/#pr-2110
  43. https://qt4cg.org/dashboard/#pr-2111
  44. https://qt4cg.org/dashboard/#pr-2071
  45. https://qt4cg.org/dashboard/#pr-2037
  46. https://qt4cg.org/dashboard/#pr-2019
  47. https://qt4cg.org/dashboard/#pr-2109
  48. https://qt4cg.org/dashboard/#pr-2110
  49. https://qt4cg.org/dashboard/#pr-2111
  50. https://qt4cg.org/dashboard/#pr-2071
  51. https://qt4cg.org/dashboard/#pr-2037
  52. https://qt4cg.org/dashboard/#pr-2019

                                        Be seeing you,
                                          norm

--
Norm Tovey-Walsh
Saxonica

Received on Tuesday, 22 July 2025 16:27:42 UTC