QT4 CG Meeting 062 Minutes 2024-01-23

Table of Contents

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

Minutes

Approved at meeting 063 on 30 January 2024

Summary of new and continuing actions [0/7]

  • [ ] QT4CG-052-02: NW to consider how to schedule an “editor’s meeting”
  • [ ] QT4CG-056-04: MK to write a proposal for adding a select attribute to xsl:text
  • [ ] QT4CG-058-02: MK to consider providing more advice about the pitfalls of mixing decimal and double when sorting
  • [ ] QT4CG-061-01: MK to review the comments CG made on the PR #927.
  • [ ] QT4CG-062-01: CG to make an email proposal of a list of functions (re issue #843) to add
  • [ ] QT4CG-062-02: MK to check that the expansion of subsequence gives the correct result when neither from nor to match (INF - INF)
  • [ ] QT4CG-062-03: JK to revise the fn:hash function along the lines discussed at the meeting

1. Administrivia

1.1. Roll call [10/12]

Regrets: MSM, SF.

  • [X] Reece Dunn (RD)
  • [ ] Sasha Firsov (SF)
  • [X] Christian Grün (CG)
  • [X] Joel Kalvesmaki (JK)
  • [X] Michael Kay (MK)
  • [X] Juri Leino (JLO)
  • [X] John Lumley (JLY)
  • [X] Dimitre Novatchev (DN)
  • [X] Wendell Piez (WP)
  • [X] Ed Porter (EP)
  • [ ] C. M. Sperberg-McQueen (MSM)
  • [X] Norm Tovey-Walsh (NW). Scribe. Chair.

Welcome, Juri!

1.2. Accept the agenda

Proposal: Accept the agenda.

Accepted.

1.2.1. Status so far…

issues-open-2024-01-23.png

Figure 1: “Burn down” chart on open issues

issues-by-spec-2024-01-23.png

Figure 2: Open issues by specification

issues-by-type-2024-01-23.png

Figure 3: Open issues by type

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 Tuesday, 30 January 2024.

Any regrets for the next meeting? MSM.

1.5. Review of open action items [0/4]

  • [ ] QT4CG-052-02: NW to consider how to schedule an “editor’s meeting”
  • [ ] QT4CG-056-04: MK to write a proposal for adding a select attribute to xsl:text
  • [ ] QT4CG-058-02: MK to consider providing more advice about the pitfalls of mixing decimal and double when sorting
  • [ ] QT4CG-061-01: MK to review the comments CG made on the PR #927.

1.6. Review of open pull requests and issues

1.6.1. Blocked

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

  • PR #795: 655: fn:sort-with
  • PR #529: 528: revision of json(), and renaming to elements-to-maps()

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 #958: 951 Parameters with default values: fn:lang, fn:id, fn:idref, fn:element-id
  • MK asks for a quick discussion of the rationale.
  • CG attempts to explain. The PR is an attempt to resolve some special cases. In fn:lang for example, we can’t determine statically if the function is context dependent.
  • PR #952: 945 module import contradiction
  • PR #950: Minor edits (examples, rules)
  • PR #941: 939 Remove fn:numeric-compare
  • PR #936: 877 revised rules for op:binary-less-than
  • PR #927: 861 Rewrite spec of deep lookup operator

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 #818: Foxpath integration
  • Issue #693: QT4 Tests without counterpart in the specs
  • Issue #639: fn:void: Naming, Arguments

Proposal: close without action

Accepted.

2. Technical Agenda

2.1. Issue #843: Standard, array & map functions: Equivalencies

Christian Gruen proposed putting a discussion of issue 843 on today’s agenda as a supplement to further discussion of issue 872. I’m going to suggest we time box that to about 15 minutes unless we feel like we’re making very substantial progress. He also proposed a list of PRs for discussion this week which I’ve included below.

  • CG: Not one of the most exciting issues, but it’s about consistency. The issue lists all of the functions that are currently part of the specification. The question is, do we need array and map versions recently added functions?
  • JLO: observes that these functions are not all exactly comparable.
  • DN: What is the question, exactly? We’ve done this before. We should instead be trying to find a common collection type. We could avoid all these tables and the possibility of adding new columns. Automatically making array versions of sequence functions seems not very logical.
  • CG: The difference is that ideally, I only want to spend a few minutes on this summary and then not discuss it again. Finding a common collection type would be an interesting approach, but here we have some things we can do quickly.
  • DN: This isn’t going to be the best approach.
  • MK: If someone has a proposal for a collection type, worked out in detail, I look forward to reading it. In the meantime, it makes sense to try to make the case more uniform.
  • NW: Should someone just take an action to make a proposal?
  • RD: Sequences are a flat representation of items, arrays can contain nested arrays, and maps have key/value pairs and the value can be an sequence or an array. How would something like array:some or array:every even work?
  • CG: I completely agree with RD. It would be nice to go through the list.
  • WP: I think there’s a bit of a stress between long term goals and shorter-term goals. Some of DN’s concerns might be addressed by agreeing that the longer term goal is some sort of uniformity.
    • … If we’re publishing this table, what message does that send?
  • JLY: It strikes me that there are some of these that can be created from some and every expression over things like filters and selectors. For example fn:duplicate-members could be done that way. Which do you have to have, that can’t be easily constructed from existing functions.
  • MK: Procedurally, I think our time is much better spent discussing concrete proposals. It’s hard to get agreement on policy questions; we should encourage people to make concrete proposals.
  • JLO: I wonder if we could at least for the new functions already and make it work for the new functions?
  • DN: I totally agree with MK that we need a constructive approach. I think that array:every, array:some, etc. should be added so that it doesn’t appear that we’re favoring sequences.
  • RD: One of the challenges with creating a unified function even with the existing data types is that an array is an item. So it’s hard to distinguish them.

ACTION QT4CG-062-01: CG to make an email proposal of a list of functions (re issue #843) to add

2.2. PRs #940 and #874: 878 Add subsequence-where function

See PR #940 and PR #874.

  • MK introduces #940 as a replacement of his previous proposal to extend subsequence.
  • MK: The PR gets rid of the quartet of functions and replaces them with subequence-where that’s inclusive.
    • … MK explains the semantics of the function
    • … It’s defined in terms of fn:index-where
    • … Being inclusive at both end points makes a few use cases more difficult.
    • … It’s inclusive because it’s easier to get rid of an item than add one
    • … The only tricky case I’ve found is that it’s hard to tell if the last item was selected (as opposed to stopping at an item before the last).
  • JLY: In most cases, you can get to an exclusive result with head/tail.
  • MK: That use case inspired me to add a while close to for expressions that handles that case quite well.
  • DN: The use of INF in the description concerns me.
  • MK: The subsequence function handles INF so its fine.

Proposal: accept #940, discard #878

Accepted.

Some discussion of subtraction of INF values.

ACTION QT4CG-062-02: MK to check that the expansion of subsequence gives the correct result when neither from nor to match (INF - INF)

2.3. PR #937: 779 hash function

See PR #937

  • JK introduces the proposed hash function.
  • JK: The input is turned into a sequence of octets and fed to the algorithm
    • … There were comments about providing a salt function, but I was hoping to start with a basic building block.
    • … Two of the three algorithms have been cracked; caveat user.
  • RD: Should the algorithm names be matched in a case-insensitive manner. I note that sha-1 is lower case in one of my examples.
  • JK: Yes, that’s in the spec.
  • MK: Another minor point, the conversion from an octet sequence to a string is under-specified. It should say that it does it as if using the hexbinary to string cast.
  • DN: I this proposal a lot, what strikes me is that there are just three algorithms. I’d like to have more or make the list open-ended.
  • JK: Benito asked why we don’t have a hash function library, I don’t have an opinion on that.
  • MK: Why are we returning a string rather than a binary value?
  • JK: That’s what most people expect.

Some discussion of what kind of string representation might be wanted.

  • NW: I think it should have an options algorithm.
  • MK: Have a single required option
  • JK: Replace the second argument with a map.
  • JLO: I like the idea of an options map. The options map could also specify the desired output format.
    • … I would like to have a core function.
  • RD: On the question of implementing it in a library, the hash algorithms mutate the values so it’s hard to do in an XQuery or XSLT function.
  • MK: I think the question of what module and namespace this function goes in and whether it can be implemented in XQuery are completely orthogonal.

Some discussion of whether or not this should be an independent module.

  • MK: What about the name of the function? Is fn:hash the right name?
  • JK: It’s always a mystery to me where the dividing line is between hash and checksum.

Proposal: Accepted this PR

Accepted.

ACTION QT4CG-062-03: JK to revise the fn:hash function along the lines discussed at the meeting

2.4. PR #962: 946 fn:iterate-while → fn:while-do, fn:do-until

See PR #962

CG introduces the rational for creating while-do and do-until instead of iterate-while. It allows the user to check before or after the condition. This provides a broader set of semantics.

CG shows how do-until makes some use cases easier because the iteration always happens at least once.

  • DN: I think do-until is something that would be very handy. I think while-do should be renamed to just while.
  • CG: I thought of that. But we are considering a while clause on a FLOWR expression and that could lead to ambiguity if the beginning of the FLOWR clause is omitted.
  • MK: Choosing names that we might want to use as language keywords seems unwise.
  • DN: We want to avoid specifying order and ordering in functional programming as much as possible.
  • MK: Yes, but we also want names that are intuitive to users. I like the symmetry.
  • CG: There really is an order here.

Some discussion of the order of the arguments to the two functions.

  • RD: Would it be clearer if $seq in the first example was $value.
  • JL: If $p is the position, that would be better.
  • MK: Or $index
  • JLO: I thought we could rename them to apply-until, but I don’t know if that’s any better. But do-while is well known.

Accept this PR.

Accepted.

2.5. PR #956: 850-partial Editorial improvements to parse-html()

See PR #956

Some discussion of the semantics. RD suggests that the way that the HTML version and type work have changed but the names haven’t been changed in the record type.

MK proposes to look at it again, encourages RD to make his comments on the PR.

3. Any other business

None heard.

4. Adjourned