QT4 CG Meeting 124 Minutes 2025-06-10

Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests

Table of Contents

Minutes

Approved at meeting 125 on 17 June 2025.

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.
  • [ ] QT4CG-124-01: MK to provide a copy of the slide deck for the minutes.

1. Administrivia

1.1. Roll call [8/12]

Regrets: BTW, DB

  • [ ] David J Birnbaum (DB)
  • [X] Reece Dunn (RD)
  • [X] Christian Grün (CG)
  • [X] Joel Kalvesmaki (JK)
  • [X] Michael Kay (MK)
  • [ ] Juri Leino (JLO)
  • [X] John Lumley (JWL)
  • [ ] Dimitre Novatchev (DN)
  • [X] Wendell Piez (WP)
  • [X] 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 17 June 2025.

JWL gives regrets.

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
  • [X] QT4CG-119-02: MK to add a note about how schema composition is done for multiple options
  • [ ] QT4CG-123-01: MK to do the set example in XQuery.

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

The following PRs are open but have merge conflicts or comments which suggest they aren’t ready for action.

  • PR #2019: 1776: XSLT template rules for maps and array
  • PR #1942: 37 Support sequence, array, and map destructuring declarations
  • PR #1283: 77b Update expressions
  • PR #1062: 150bis revised proposal for fn:ranks

RD suggests that #1942 is ready for discussion again.

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 #2033: 2032 Fix typo in example
  • PR #2026: 2022 Drop module feature

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

Proposal: close without further action.

Accepted.

2. Technical agenda

The following substantive PRs are scheduled for discussion this week.

2.1. PR #2031: 2025 JNodes

See PR #2031

MK reviews a presentation prepared about JNodes.

See also MK’s MarkupUK paper.

ACTION QT4CG-124-01: MK to provide a copy of the slide deck for the minutes.

(The scribe isn’t going to attempt to transcribe the slides.)

Slide 7:

  • JL: Are you saying that the child is implicit in the syntax but whether or not there’s a wrapper is open.
  • MK: Yes, but you get flattening if there’s a bare key on the right hand side.

Slide 10:

  • NW: What’s the significance of the ¶?
  • MK: It’s just to indicate the properties of JNodes.

MK wraps up his presentation.

  • JL: On slide 12, in template match ?name, I assume you can add predicates?
  • MK: Yes.
  • JL: You can get to an XNode tree from a JNode tree, but you can never get back. Is that right?
  • MK: If you have a map that points to nodes. The child access will give you a JNode that maps the XNode.
  • JL: That’s a leaf in the JTree.
  • JL: Can I do a composite path, so ?? through the JTree then / when it’s an XTree?
  • MK: Yes, though there might questions of priority.
  • RD: I like the general direction and approach. This is somewhat similar to how MarkLogic and JSoniq work. The difference with those is that they have specific nodes for maps and arrays. I wonder if would make sense to do something similar, rather than wrapping it in a JNode.
    • … Then every map would effectively be a map node, every array an array node, etc.
    • … Then you don’t need pin or unpin.
  • MK: I think the main problem is that you don’t want a “string” to have a parent.
    • … In the same way we distinguish a text node from a string, we want to distinguish the strings in an array.
  • RD: Don’t we have types in the hierarchy that are multiple types, so in effect you could have a string not part of a JSON structure be the existing string, but a string in a JSON structure be both an xs:string and a JSON string.
  • MK: We get benefits from the fact that maps and arrays don’t have identity that effects the semantics.
    • … We have an enormous cost making as small change to a big XTree because we have to make something that looks like a copy with new node identities everywhere.
    • … We don’t have that cost with maps. You don’t have that overhead.
    • … I’ve found it very hard to find an implementation of small updates that works with nodes.
  • RD: When pinning and unpinning the nodes to construct the JNodes, would it make sense there to differentiate, map, array, and value nodes?
  • MK: In the item type syntax the JNode is parameterized by the thing it contains.
    • … It’s more like a generic type.
  • RD: I’m wondering then if we can take advantage of the data model functions and define those on the specific JNodes.
  • MK: Which functions?
  • RD: When you look at the definition of elements and attributes, it maps them to things like dm:parent etc.
  • MK: Yes, I’m sure one can define as much aparatus as you like. It’s an open question how much is useful.
  • RD: If we define those on JNodes then a lot of the features that are derived from them come for free.
  • JK: As I expressed last night, this is fantastic.
    • … The slide on “benefits”, I would add that this potentially unifies the syntax that XPath uses on trees, arrays, and maps. They snap together.
  • MK: Yes, we get benefits and the users get different benefits.
  • JK: Thinking of arrays and maps as types of trees is very natural.
    • … We’ll have to review all the function signatures to see if the should or should not work with JNodes.
  • JK: Are predicate fair game?
  • MK: Yes, they’re applied to those just as they would be to any other items in the sequence. The JNode is the context item.
    • … I’m sure there are examples in the proposal somewhere.
  • JK: We need more examples of how to convert XPath
  • JK: If the ?? finds deeply embedded XNodes, do they fall into a trap?
  • MK: The ?? operator will give you a JNode, but it gets implicitly unpinned if you use an operator that doesn’t work on JNodes.
  • JK: So given a map that contains a bunch of book trees, ??book/title will return the titles.
  • JL: Was there a proposal where the right hand side of ? can be a variable binding?
  • MK: It can be a variable reference.
  • JL: Do we want to do the same for XNodes on XPath?
  • MK: Unfortunately, it has a different meaning.
  • JL: You can get higher order like functionality.
  • MK: This is why we can’t unify / and ??, there’s a deep difference.
  • CG: I really like it. It looks very intuitive.
    • … Referring to the backwards compatibility, I guess it will be difficult to fix it.
    • … There are instance of checks and other things that don’t do implicity coercion.
  • CG: One very general thought, how much time will it take to get this rather fundamental change finalized? People are asking when 4.0 will be finished.
  • MK: The time taken all depends on how many good ideas people come up with!
    • … It takes far less time to make things work if you have a good proposal.
  • NW: It’s going to be a fair bit of work…
  • JL: Might it go as far as influencing the serialization specs?
  • MK: There’s a minor impact in that if you serialize a JNode, it just gives you the serialization of its value.
  • WP: Briefly, I too am very impressed. I’d like to see conference papers and other explorations of this idea.
    • … The radical thing here is how it treats JSON.
    • … I’d like to see more attention drawn to it. If it’s as good as we think, maybe we need to air the idea more broadly.

What can we do?

  • MK: Please review the proposal in detail and make comments. I think it’s capable of being merged in roughly in its current state. I’d like to establish it as a baseline quickly, so we can build other things on top of it.

We’ll spend next week doing something else and come back to it in two weeks.

2.2. PR #2028: 2027 '#' syntax for computed PIs and namespaces

See PR #2028

MK reviews the PR.

  • MK: We added QName literals to element and attribute constructors.
    • … That left the question of what to do with PI and namespace constructors.
    • … This proposal says we should use a MarkedNCName that’s only used in this context.

Proposal: Merge this PR.

Accepted.

3. Any other business

None heard.

4. Adjourned