AW: QT4CG meeting 080 draft minute, 4/5 June 2024, Prague, CZ

Thanks, Norm, for the exhaustive 2-days minutes; very appreciated.

________________________________
Von: Norm Tovey-Walsh
Gesendet: Donnerstag, 06. Juni 2024 09:56
Bis: public-xslt-40@w3.org
Betreff: QT4CG meeting 080 draft minute, 4/5 June 2024, Prague, CZ

Hello folks,

Here are the minutes from the face-to-face. The decisions are all recorded and I hope a useful amount of the discussion.

   https://qt4cg.org/meeting/minutes/2024/06-04.html

QT4 CG Meeting 080 Minutes 2024-06-04

Table of Contents

     * [1]Draft Minutes (day 1 of 2)
     * [2]Summary of new and continuing actions [0/15]
     * [3]1. Administrivia
          + [4]1.1. Roll call [4/12]
          + [5]1.2. Accept the agenda
          + [6]1.3. Approve minutes of the previous meeting
          + [7]1.4. Next meeting
          + [8]1.5. Review of open action items [1/6]
     * [9]2. Technical Agenda
          + [10]2.1. Make the agenda
          + [11]2.2. Review the issues
     * [12]3. End-of-day wrapup
          + [13]3.1. Roll call [3/3]
          + [14]3.2. Notes
     * [15]Draft Minutes (day 2 of 2)
          + [16]Review the issues
          + [17]Review of PRs
          + [18]Closely related issues
          + [19]Planning?
     * [20]4. End-of-day wrapup
          + [21]4.1. Roll call [4/4]
          + [22]4.2. Notes
     * [23]5. Thank our host
     * [24]6. Any other business
     * [25]7. Adjourned

   [26]Meeting index / [27]QT4CG.org / [28]Dashboard / [29]GH Issues /
   [30]GH Pull Requests

Draft Minutes (day 1 of 2)

Summary of new and continuing actions [0/15]

     * [ ] QT4CG-063-06: MK to consider refactoring the declare item type
       syntax to something like declare record
     * [ ] QT4CG-077-03: MK to add a note about document order across
       documents
     * [ ] QT4CG-077-04: MK to review inconsistencies discovered in review
       of #1117
     * [ ] QT4CG-078-01: MK to make the default for normalize-newlines
       backwards compatible.
     * [ ] QT4CG-079-01: WP to seek expert advice on hashing functions.
     * [ ] QT4CG-080-01: NW to add what the DocBook stylesheets do for
       this function
     * [ ] QT4CG-080-02: NW to fix issue classification so PR #1181 isn't
       misclassified as an XSLT issue
     * [ ] QT4CG-080-03: MK to make a separate issue for @as on
       xsl:value-of
     * [ ] QT4CG-080-04: NW to revise p:invisible-xml
     * [ ] QT4CG-080-05: NW to add absolute property to the parse-uri
       output
     * [ ] QT4CG-080-06: NW to investigate the cross-spec reference errors
       in the build
     * [ ] QT4CG-080-07: NW to update the build instructions in the README
     * [ ] QT4CG-080-08: MK to work out what happened to his next-match PR
     * [ ] QT4CG-080-09: MK to address comments made on PR #832
     * [ ] QT4CG-080-10: NW to find out if we can change the community
       group name

1. Administrivia

1.1. Roll call [4/12]

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

1.2. Accept the agenda

   Proposal: Accept [31]the agenda.

   Accepted.

1.2.1. Status so far...

   issues-open-2024-06-04.png

   Figure 1: "Burn down" chart on open issues

   issues-by-spec-2024-06-04.png

   Figure 2: Open issues by specification

   issues-by-type-2024-06-04.png

   Figure 3: Open issues by type

1.3. Approve minutes of the previous meeting

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

   Accepted.

1.4. Next meeting

   The next meeting is scheduled for tomorrow.

   The meeting after that is 11 June.

   EP may give regrets.

1.5. Review of open action items [1/6]

     * [ ] QT4CG-063-06: MK to consider refactoring the declare item type
       syntax to something like declare record
     * [ ] QT4CG-077-03: MK to add a note about document order across
       documents
     * [ ] QT4CG-077-04: MK to review inconsistencies discovered in review
       of #1117
     * [ ] QT4CG-078-01: MK to make the default for normalize-newlines
       backwards compatible.
     * [X] QT4CG-078-02: MK to update the prose of transient{} to use the
       word "should".
     * [ ] QT4CG-079-01: WP to seek expert advice on hashing functions.

2. Technical Agenda

2.1. Make the agenda

     * Triage the open issues
     * Discuss open PRs
     * Planning

2.2. Review the issues

     * NW: Triage into groups:
          + easy/hard
          + required/optional

   Optional = if we don't get a PR, it doesn't stop us from finishing

   In the course of review, we found several clusters of issues. We mostly
   marked those "revisit". They appear at the end of the minutes along
   with any discussion we actually had about them.

2.2.1. 37, support sequence, array, and map destructuring

     * MK: The devil is in the details and there are a lot of details
          + ... Including in the grammar
     * JLO: I'd like to have this

   Some discussion of whether this is mostly about maps.
     * MK: I'm unsure about doing this for arrays
          + ... It just saves a few keystrokes

   Some discussion of how it would work with maps.
     * MK: This capability is for the use case where the keys are known at
       compile time.
     * JLO: We could limit it to record destructuring?
     * MK: Yes, but that's not really a datatype
          + ... You could restrict it to just keys that are NCNames or
            QNames...but which is it?

   "Hard"/"Optional"

2.2.2. 46, xsl:sequence: @as #46

     * MK: I'm torn about whether this is desirable or not

   "Easy"/"Optional"

2.2.3. 69, fn:document, fn:function-available: default arguments #6

     * MK: I think this is a bit out of date.
          + ... Generally, I think there's a need to reflect some of the
            changes we've made to the standard function library to make
            corresponding changes for the XSLT defined functions.

   There's no conceptual difficulty, it's just legwork.

   "Optional"/"Easy"

2.2.4. 75, Support processing HTML 5 template element content

   We wish RD was here to explain HTML templates.
     * JLO: The content of the template element isn't visible in the DOM.
       It's used for instantiating something

   Some attempt to understand the meaning of a template element.
     * JLO: It's used when creating new instances.
     * MK: If this is an HTML feature, users will want to be able to
       create them through the HTML serialization method.
          + ... If the parse-html function does something special, does it
            round-trip?

   "Revisit"

2.2.5. 76, non-deterministic time

     * MK: It's fairly easy if you just wave your hands about the
       implementation
          + ... My anxiety is that someone is going to use it for timing
            things, then it gets tied in with things like lazy evaluation.
     * NW: Or have some functions that you aren't allowed to lazily
       evaluate?
     * MK: The xsl:message instruction is like that, it just leaves it to
       implementations to do what makes sense
          + ... But at the XPath level, it's a lot more complicated
     * MK: You could do it in pure code by having a monitor function
       (scribe: as shown in the comment in the issue)
          + ... No, that won't work! It would evaluate the function before
            it started!
     * MK: The other way to do it is just with a system date-time function
       with a note to implementors that it's useful to evaluate this
       eagerly.

2.2.6. 77, Allow manipulation of maps and arrays

   PR pending.

2.2.7. 92, Simplify rule for attribute values on Extension Instructions used
to invoke named templates

     * MK: I don't think I want to do this. I prefer the spec as written.
          + Extension elements generally have boolean attributes, string
            attributes (usually AVTs), or expressions (typically @select).

   "Revisit"

2.2.8. 105, Maps with Infinite Number of Keys: Total Maps and Decorated maps

     * MK: This is a hybrid of sorts between maps and functions.
          + ... I think this is too difficult.

   "Hard"/"Optional"

2.2.9. 106, Decorators' support

   One angle here is dynamic function calls taking keyword arguments
   that's popped up in several places.

   After half an hour spent reviewing the proposal, the chair proposed we
   mark it hard and optional.

   "Hard"/"Optional"

2.2.10. 108, Template match using values of [tunnel] parameters

   "Hard"/"Optional"

2.2.11. 111, FLWOR tracing

   Close with no action.

2.2.12. 148, Get the type of a value

     * JLO: The biggest problem seems to be "what is the type of a value"?
       Is it integer or decimal?
     * MK: The type system is such a mess
          + But atomic values clearly have a type label. A function can
            return that.
               o There's one complication, what to do if it is an
                 anonymous type.
                    # (If you evaluate against a schema with an anonymous
                      type.)
                    # One solution would be the nearest type up the
                      hierarchy that has a name
          + Nodes have a well defined kind. There's also a "content
            annotation", an element validated against a type might be a
            "part number", for example.
               o We could define a function that returned "element and
                 part number"

   Some discussion of nodes. You might also want to get the element name.
     * MK: Not many people write schema-aware XSLT or XQuery code.
          + It's just a pain to start with.

   Returning to the discussion.
     * MK: The real problem is what to do with functions, and arrays, and
       maps. They don't have an intrisic type. An empty map belongs to an
       infinite number of types.
     * JLO: But an empty map is "map(*)"!
     * MK: For all maps, arrays, and functions, you could say all you get
       back is that it's one of those.
     * JLO: That would be good, but you could also look into the map or
       array.
          + Both BaseX and in my own hack of that function, do
            introspection.
     * MK: I've no problem that it's useful. It was defined by EXSLT for
       1.0 very quickly.
          + ... There's plenty of evidence that it's needed, it's just the
            detail.
     * MK: The other question is what kind of result do you return?
          + Type, in principle, should be first class objects, but that's
            a big step in terms of the data model.
     * JLO: All of the existing versions get you strings. But it could be
       an enum.
     * MK: I think you want it to be a structured result.
     * NW: A record with an optional qname type and an option node kind?
     * MK: Yes, I think that would be more useful than a string you have
       to parse.

   If we limit the scope to just saying map, array, or function does that
   make it easy?

   "Hard"/"Optional"

2.2.13. 150, fn:ranks: Produce all ranks in applying a function on the items
of a sequence

   PR pending.

2.2.14. 158, Support optional parameters on dynamic functions

   There are a bundle of things in this area that we keep coming back to
   by other routes.
     * MK: We've done some of this in the function coercion rules.

   "Revisit"

2.2.15. 168, XSLT Extension Instructions invoking Named Templates

     * MK: I think we've made this part of the status quo, but we don't
       want to lose Jirka's proposal for an extension.

   We've asked Jirka to open a new issue for his extension.

   Close this issue without further action.

2.2.16. 266 Add an option on xsl:copy-of to copy a subtree with a change of
namespace

     * MK: Back in the age of 4GLs this was called a stereotype. There's a
       general feature but it's too complex for this use case. How do you
       define the boundaries?
          + ... One of the motivations for this is that
            copy-namespaces="no" doesn't do what users expect.
          + ... There are all sorts of degrees of elaboration possible.
     * JLO: If I wanted tei:p output as html:p what would I do?
     * MK: You'd have to write a mode with a single template rule that
       matches all elements and changes the namespace.
     * NW: It's certainly optional, do we want to keep it?
     * MK: Let's abandon it.

2.2.17. 269, Function for URI relativization

     * NW: It looks like defining the behavior is the tricky part.
     * MK: Nothing to do with URIs is easy!

   ACTION: QT4CG-080-01: NW to add what the DocBook stylesheets do for
   this function

   "Optional"/"Easy"

2.2.18. 272, Setting parameter values in xsl:use-package

     * MK: There are a number of issues with packages introduced in 3.0.
          + ... There are only a few people using them in anger, but
            they're the one's finding issues.
          + ... It would be nice to have more feedback.
          + ... Certainly one issue is that packages can take parameters
            (particularly static parameters). If you write a package that
            has a parameter that's the localization attributes and you
            then want to versions of that package in a stylesheet with
            different localization attributes, there's no way to do that.

   "Required"/"Hard"

2.2.19. 285, Stability of collections

   There are a group of issues related to transiency

   "Revisit"

   (We've come back to this issue on the afternoon of the second day).
     * JLO: CG has a point about collection and doc being different.
     * MK: Yes, except pragmatically, in our experience, people read the
       same document many times but rarely read the same collection more
       than once.
          + ... But maybe that's not the case in other environments
          + ... CG says he imagines doing collections over database and
            filestores differently.

   Is it a database or filestore is one dimension. What's the duration of
   an execution scope is another. If an execution scope is republishing a
   suite of documents, then you really don't want be holding onto the
   whole collection.
     * MK: A common use case is to process the documents in the collection
       one at a time. It's such horrible overhead to hold all of the
       documents just in case you come back to that collection again.
     * NW: It sounds like we might get consensus to relax the requirement.

   This is related to the question of transiency because a transient block
   or something like that would give the user the appearance of control.

   Some discussion of how database and filesystem access differs.
     * MK: The issue quotes the existing text. The transient proposal
       doesn't change that. The transient proposal gives the user an
       interoperable way of switching that off but it doesn't change the
       default.
          + ... For our user base, I think the default is wrong.
     * JLO: So what we want is an interoperable way to specify that.
     * EP: Would it be reasonable to change the default for XPath and not
       XQuery?
     * MK: We could say that the implementation must provide an option for
       it to be deterministic but that doesn't have to be the default.

   Some discussion of the use of an options parameter. That's not
   necessarily something you can know statically, but certainly the 99%
   case is that it will be a literal!

2.2.20. 296, Default namespace for elements; especially in the context of
HTML

   ACTION: QT4CG-080-02: NW to fix issue classification so PR #1181 isn't
   misclassified as an XSLT issue

   Some discussion of [33]PR #1181 which addresses this issue.

   PR pending

2.2.21. 305, parse-xml() and whitespace stripping

     * MK: The whole implicit context dependencies of some functions is
       very worrying. The fact that strip-space and preserve-space apply
       globally is very unsatisfactory.

   Some discussion
     * MK: These need to be options parameters on the functions
       (parse-xml, doc, etc.)

   "Required"/"Hard"

2.2.22. 322, Map construction in XSLT: xsl:record instruction

     * NW: Looks useful to me.

   "Optional"/"Easy"

2.2.23. 323, add select attribute to xsl:text

   Some discussion of the fact that xsl:sequence isn't intuitive but
   xsl:value-of returns a text node.

   MK's response in this issue is a separable issue. It's a tangent.

   ACTION: QT4CG-080-03: MK to make a separate issue for @as on
   xsl:value-of

   With respect to @select on xsl:text, it's hard to argue against.

   "Optional"/"Easy"/

2.2.24. 332, Add a namespace uris option to fn:path

   This seems to have garnered some support.

   "Optional"/"Easy"/

2.2.25. 350, CompPath (Composite-objects path) Expressions

   We've done some of this in other ways, or in other open PRs. Needs to
   be revised in light of the current language.

   "Optional"/"Hard"

2.2.26. 366, Support xsl:use-package with xsl:package-location

     * MK: One school of thought says that locating packages should be
       outside the core language. You should be able to configure where
       they come from without changing your source code. OTOH, we know
       from Query and Schema that it's much more convenient to say where
       they come from inline.

   "Optional"/"Easy"

2.2.27. 374, Can't view the XSD for XSLT in the browser

   Build issue. Let NW fix it.

2.2.28. 379, Namespace handling in parse-html

   Duplicate of 296, close with no further action.

2.2.29. 402, XSLT patterns: intersect and except

     * MK: I think the proposal is to break the way it's currently
       defined.
          + ... In the cases where it's changing it, the existing behavior
            is almost certainly not what the user intended.

   "Optional"/"Easy"

   Some consideration of what it means in stylesheets with other versions.
   Might we just consider it a bug fix?

2.2.30. 407, XSLT-specific context properties used in function items

     * MK: We have a catch-all issue that streamability of 4.0 hasn't been
       addressed.

   "Required"/"Easy"

2.2.31. 421, Make sure the build system syntax checks the syntax of examples

   Build issue.
     * MK: In the 3.x builds, we had a role for examples that caused them
       to be syntactically validated.

2.2.32. 451, Multiple Schemas

     * MK: We allow modules to use different schemas if they're compatible
          + ... And the spec is clearer about error conditions
          + ... We don't have the ability to import incompatible schemas
            and validate against them separately.

   "Optional"/"Hard"

   MK observes that part of this is now possible, you can have
   incompatible schemas in use provided you don't refer to them from your
   query.

2.2.33. 490, Control over schema validation in parse-xml(), doc(), etc.

   Like #305, this is about options on parse-xml, doc, etc.

   "Required"/"Hard"

2.2.34. 501, Error handling: Rethrow errors; finally block

     * MK: Not too difficult now that we have error maps.

   "Required"/"Hard"

2.2.35. 523, Dealing with component name conflicts with library packages

     * MK: Override with visibility hidden seems to be the same as accept
       with visibility hidden.
          + ... Perhaps this is "existing callers, use this version, but I
            don't want to call it from my package."
          + Java doesn't give you private overrides, do we really need
            this?
     * MK: I can see the need for accept with alias, but is that really
       needed often enough to justify?
     * JLO: That seems sensible enough to me, it's "import as".

   "Optional"/"Hard"

2.2.36. 528, fn:elements-to-maps (before: Review of the fn:json() function)

   PR pending, but the PR is out of date and there are open actions to
   change it.

2.2.37. 540, Add fn:system-property() to XQuery

   This seems to have garnered some support.

   "Optional"/"Easy"

2.2.38. 557, fn:unparsed-binary: accessing and manipulating binary types

   Superseded by #1127, close without further action

2.2.39. 564, Sorted maps

     * MK: Might involve a data model change, that's always difficult.

   "Optional"/"Hard"

2.2.40. 566, fn:parse-uri, fn:build-uri: Feedback

   PR pending

2.2.41. 573, Node construction functions

     * MK: I wanted to do it for two reasons: it's useful to be able to
       use functions, and also to make it possible in XPath rather than
       only XSLT and XQuery.
          + ... CG asks why not move the XQuery syntax into XPath
          + ... I don't like that partly because it only solves one of the
            problems, not the other
          + ... From an XSLT perspective, wanting to keep the XPath
            grammar small
     * NW: I predict it will be difficult to get consensus

   Some discussion of whether it should be an extension; but users don't
   tend to use extensions if there's another way.

   "Revisit"

2.2.42. 576, JSON serialization: Sequences, INF/NaN, function items

     * NW: It does seem bad that serialization and items-to-json behave
       differently.

   Some discussion of the streamability consequences of serializing a
   sequence as an array.
     * MK: We're revisiting items-to-json anyway.

   "Revisit"

2.2.43. 583, (array|map):replace -> *:substitute or *:change

     * MK: My last comment is to scrap the functions and go with the
       update syntax

   "Revisit" after the PR on update syntax.

2.2.44. 641, Serialization fallback.

   Related to #576, marked revisit.

   "Revisit".

   (We've come back to this issue on the afternoon of the second day).
     * MK: A common error is that you can't use a map in document content.
       The proposal is that instead of telling you that, it gives you a
       document that contains a representation of that map.
     * NW: What about the streaming problem?
     * MK: We could have an extra serialization parameter "serialize
       sequence as array".
     * NW: And what's the default?

   Some discussion of streaming. This isn't specifically about XSLT
   streaming, it's about the fact that serializers often work "on the
   fly".
     * MK: A JSON serializer would have to look ahead to find out if the
       top-level item was a sequence. So it'd have to buffer the whole
       thing.

   With respect to serializing +Inf, -Inf, NaN, using null per the
   standards is probably the right thing to do.

2.2.45. 657, User-defined functions in main modules without `local` prefix

     * MK: The whole point here is to avoid conflicts with system
       functions. You don't want a query to fail just because we added a
       new function to the static context.

   "Optional"/"Hard"

2.2.46. 670, The trouble with XPath`s fn:fold-right. A fix and Proposal for
fn:fold-lazy

   Consensus: we need an actual PR for fold-lazy.

   "Optional"/"Hard"

2.2.47. 675, XSLT streaming rules for new constructs

   "Required"/"Hard"

2.2.48. 689, fn:stack-trace: keep, drop, replace with $err:stack-trace ?

   Consensus: provide the stack trace on error, but not as a function.

   "Required"/"Easy"

2.2.49. 708, Toward a design for generators

   See #716

   "Optional"/"Hard"

2.2.50. 714, Function annotations in XSLT

     * MK: I think I proposed this for neatness.

   "Optional"/"Easy"

2.2.51. 716, Generators in XPath

   See #708

   "Optional"/"Hard"

2.2.52. 729, xsi:schemaLocation

   "Required"/"Easy"

2.2.53. 735, Local functions in XSLT

     * MK: My preferred is named local functions.
          + ... Putting all the functions first avoids hoisting and other
            problems.

   See #745

   "Optional"/"Hard"

2.2.54. 745, Support for inline (anonymous) xslt functions

   See #735.

   Close with no action.

2.2.55. 748, Parse functions: consistency

   "Required"/"Easy"

2.2.56. 755, Expression for binding the Context Value

   "Required"/"Hard"

2.2.57. 760, Serialize functions: consistency

   What's the proposal?

2.2.58. 767, parse-html(): case of SVG element names

     * MK: I think we determined that the case should be preserved.

   "Required"/"Easy"

2.2.59. 774, What should be percent-encoded in a URI?

   Addressed by recent changes.

2.2.60. 814, XSLT: Rules for on-no-match=\"shallow-copy-all\"

   Superseded by #1238

2.2.61. 826, Arrays: Representation of single members of an array

     * MK: Some of the comments here are superseded by more recent work.
     * MK: We could get rid of array:members and array:split as
       user-visible functions.

   "Required"/"Hard"

2.2.62. 835, Review names of record types

     * MK: The names are local to the spec, they don't have any effect on
       queries.
          + ... So it is purely editorial.

   "Optional"/"Easy"

2.2.63. 850, fn:parse-html: Finalization

   PR pending.

2.2.64. 854, Need more discussion and explanation of deep-lookup operator

   PR Pending (#832)

2.2.65. 868, fn:intersperse -> fn:join, array:join($arrays, $separator)

     * JLY: It's now or never.

   "Required"/"Easy"

2.2.66. 877, Inconsistency in XQFO comparator functions/operators with
recursive rules

   "Optional"/"Easy"

2.2.67. 882, fn:chain or fn:compose

     * MK: In some ways, this is like the discussion we had about
       transitive closure. We decided there that what most people would
       want and need is something that applies the transitive closure.
          + ... What DN has pointed out here is that fn:chain is similar.
          + ... I think I probably want the composition function more
            often.

   "Optional"/"Easy"

2.2.68. 885, fn:uuid

     * MK: To do random numbers properly, we decided we need to have
       something more complicated.
          + ... The same arguments apply to UUID.
          + ... One thing that occurs to me is to add UUID as a
            subfunction of random number generator.

   Some discussion of which flavors of random UUID require access to the
   time, and if that could compromise the output of the random number
   generator.
     * NW: MK is right that we'd need fn:uuid-generator ...

   "Optional"/"Hard"

2.2.69. 910, Introduce a Kollection object with functions that operate on all
types of items that can be containers of unlimited number of \"members\"

   "Optional"/"Hard"

2.2.70. 917, Better support for typed maps

   "Optional"/"Hard"

2.2.71. 920, The rules for the \"tail position\" of a sequence constructor
need to take account of xsl:switch

   PR pending

2.2.72. 938, Canonical serialization

   "Optional"/"Easy"

2.2.73. 954, Establish a default value for the XSLT fixed-namespaces
attribute

   Close without further action

2.2.74. 955, Options parameters as record types

   Close without further action

2.2.75. 959, Milliseconds <-> xs:dayTimeDuration, Unix time <-> xs:dateTime

   "Optional"/"Easy"

2.2.76. 967, XPath Appendix I: Comparisons

   "Required"/"Easy"

2.2.77. 981, Identify optional arguments in callback functions

   "Optional"/"Easy"

2.2.78. 982, Add position argument to scan-left and scan-right

     * MK: We have to do this, we can't leave one function that's
       different from all the others.

   "Required"/"Easy"

2.2.79. 986, Numeric Comparisons

   This is roughly a duplicate of #967.

   "Required"/"Easy"

2.2.80. 991, Invisible-xml - missing details

   ACTION: QT4CG-080-04: NW to revise p:invisible-xml

2.2.81. 998, regular expression addition - lookbehind assertions and
lookahead assertions

   "Optional"/"Hard"

2.2.82. 1006, regular expression addition - word boundaries

   "Optional"/"Hard"

2.2.83. 1011, fn:transform() improvements

   "Required"/"Hard"

2.2.84. 1013, [XSLT] Need to say what happens when a capturing accumulator
rule matches a non-element node

   PR pending

2.2.85. 1014, Predicates, sequences of numbers: Feedback

     * MK: Under CG's proposal, an untyped atomic is problematic. If you
       say, if the first thing in the sequence is a number, then
       everything else is coerced to a number, you get some quite strange
       results.

   "Required"/"Easy"

2.2.86. 1021, Extend `fn:doc`, `fn:collection` and `fn:uri-collection` with
options maps

   Related to other issues about having options arguments for these
   functions.

   "Required"/"Hard"

2.2.87. 1026, XSLT match patterns on pinned maps and arrays

   "Optional"/"Hard"

2.2.88. 1035, Add default values for parameters in constructor functions for
records

   "Optional"/"Hard"

2.2.89. 1045, Functions to manage namespace usage

   "Required"/"Hard"

2.2.90. 1048, fn:format-number: relax restrictions on exponent-separator
(possibly minus-sign, percent, per-mille)

   PR pending

2.2.91. 1055, xsl:variable/@as - simplifying the language - attempt 2

   We just don't think this is something we are prepared to do.

2.2.92. 1065, fn:format-number: further notes

     * MK: The fn:format-number function has always been context
       independent.

   "Optional"/"Hard"

2.2.93. 1069, fn:ucd

   Useful functionality. But will it be hard to implement efficiently?

   "Optional"/"Hard"

2.2.94. 1085, Parameters to fn:sort

   "Optional"/"Hard"

2.2.95. 1096, Effect of atomization on array:index-of()

   "Required"/"Easy"/

2.2.96. 1103, CSV Parsing - handling line ending normalization

   "Revisit", CG isn't present.

2.2.97. 1111, xsl:pipeline

   "Optional"/"Hard"

2.2.98. 1114, Partial function application: Keywords and placeholders

   "Revisit", CG isn't present.

2.2.99. 1119, Declare namespace bindings in XPath

   Some discussion of the issue; making the XPath prolog a separable part
   of the language might be useful.

   Close without action.

2.2.100. 1124, Formatting XPath/XQuery: Preferences, Conventions

   Editorial. Not discussed at the f2f.

2.2.101. 1127, Binary resources

   "Required"/"Easy"

   (Doing the easy parts is easy!)

2.2.102. 1136, Defining names for parameters on typed function tests

   Part of the nexus of issues about arguments to dynamic functions.

   "Revisit"

2.2.103. 1153, XSLT: debugging template rule selection

   "Optional"/"Easy"

2.2.104. 1158, Simple mapping operator for arrays

   "Required"/"Easy"

2.2.105. 1160, fn:is-collation-available

   "Optional"/"Easy"

3. End-of-day wrapup

3.1. Roll call [3/3]

   Face-to-face participants and:
     * [X] Christian Gr¸n (CG)
     * [X] Joel Kalvesmaki (JK)
     * [X] Dimitre Novatchev (DN)

3.2. Notes

     * DN: I'm waiting on records to finish my proposals for fold-lazy,
       kollections, and generators
     * MK: I think what we have for records is complete and consistent,
       but there are some ideas for enhancements that are still open.
          + Adding defaults for constructors
          + The most difficult issue raised is whether to promote records
            from purely a predicate applied to maps to being some kind of
            labeled item type.
          + It's a fairly substantive data model change and could be
            disruptive.

   (MK's audio was hard to hear on the phone, apologies.)
     * DN: Look at how Python deals with variadic options for anonymous
       functions.
     * NW: We didn't make progress on that issue because it's part of a
       cluster.
     * ED: We could review the close without action group.

   NW projects the list.
     * MK: Some of these are covered by other issues.
     * DN: What about adding milestones?
     * NW: If that seems practical
     * JK: I can't make tomorrow's meeting. I'm looking at the list of
       PRG-required.

Draft Minutes (day 2 of 2)

   Present: MK, JLO, EP, NW, and Jirka Kosek.

Review the issues

1161, More changes to drop the requirement for document-uri() uniqueness

   "Required"/"Easy"

1169, Maps & Arrays: Consistency & Terminology

   "Required"/"Hard"

1175, XPath: Optional parameters in the definition of an inline function

   "Revisit"

1176, Use fn:parse-uri to check whether a filepath is relative or absolute

   "Optional"/"Easy"

   ACTION: QT4CG-080-05: NW to add absolute property to the parse-uri
   output

1179, Editorial: `array:values`, `map:values`

   See issue #1169 and PR #1185.

   "Revise"

1183, transient() - a function to make functions nondeterministic

   "Revise"

1187, Decimal rounding

     * MK: We have half-to-even but we don't have the other modes.
          + You can usually wangle it by negating, rounding, etc. But it's
            a kludge.
     * NW: This is preventing real users from getting the results they
       need.

   "Required"/"Easy"

1193, Parsing Functions: Empty input

     * MK: I think the last time we looked at this in 3.x, we agreed that
       most functions have a "principle argument", the first argument, and
       it makes sense to allow that and return an empty sequence.
          + ... There are other conflicting positions, for example that
            empty sequences to string functions give the empty string.

   PR pending

1194, New function fn:query()

   "Optional"/"Hard"

1202, XQFO: Rendering of new/updated functions

   "Required"/"Easy"

1216, Detailed comments on math:e, sinh(), cosh(), tanh()

   PR pending

1224, Attribute priority for xsl:accumulator-rule

     * MK: I think I'm persuaded.

   "Optional"/"Easy"

1225, Generalization of Deep Updates

     * JLO: There's an extension to XQuery Update in eXist DB that looks
       like the new map and array syntax.
     * MK: It's obviously desirable, but the prospect of taking on XQuery
       Update is daunting.
          + ... Partly because of issues of consensus on the 3.x
            specifications.
          + ... You could decide that it was a false start and go back to
            the 1.0 spec.

   "Optional"/"Hard"

1234, Seralization Parameters: Indentation, Whitespace, Newlines

   "Optional"/"Easy"

1235, Function Identity: Treating function items with identical bodies

     * MK: This has always been a pretty sore area. If you call a function
       that calls a function that calls a function that calls generate-id,
       are you allowed to pull that function out of a loop?
          + ... It's hard to maintain function identity in all case.

   "Required"/"Hard"

1236, QT4CG-078-01 fn:unparsed-text-lines, normalize newlines

   "Optional"/"Easy"

1238, XSLT on-no-match=\"shallow-copy-all\" - revised rules

   "Required"/"Easy"

1239, XSLT xsl:next-match with select attribute

     * MK: It needs working through. I hit it with arrays, where I wanted
       to sort the array and then carry on.

   "Optional"/"Hard"

1240, $sequence-of-maps ? info()

     * NW: Does the presence of this ugly gotcha raise this to the level
       of required?
     * MK: I think so.

   "Required"/"Hard"

1241, Node constructor vs. otherwise/map constructor

   "Required"/"Easy"

1245, fn:format-dateTime: Properties

   "Required"/"Easy"

1246, fn:json-to-xml: `number-parser` option

   "Required"/"Easy"

1247, `??type(T)` in lookup expressions - shortcuts

   "Optional"/"Easy"

1248, for member allowing empty

   PR prending

1251, Allow sequence constructor in extension instructions that are
implemented with named templates

     * MK: That's not the only possible interpretation, but it seems a
       reasonable default.

   "Optional"/"Easy"

Review of PRs

   Two are tagged "merge without discussion", we'll merge those. Any that
   we agree should be merged we'll mark as "propose to merge without
   discussion" for the next meeting. That'll give the whole group an
   opportunity to see what's planned before we do it.

1233 Major edits to fn:chain, clarification only

   Merged without discussion.

1230 1216 Detailed comments on math:e, sinh(), cosh(), tanh()

   Merged without discussion.

1250 1048 Extended decimal format properties

   Agreed.

1249 31 Introduce "for key $k value $v in $map"

     * MK: There are some sections that have been moved around so that we
       can align the grammar between XPath and XQuery.
     * MK: We're a bit looser these days about what it means to compare
       two QNames, we used to spell it out very precisely everywhere.

1244 566-partial Rewrite parse-uri

   Wait until NW and CG agree that the prose and the tests are consistent
   and correct.

1231 1193 Parsing Functions: Empty input

   Blocked. (The build failed.)

1228 - Adding the BLAKE3 hashing algorithm to fn:hash

     * MK: We have a responsibility because it will seen as an
       endorsement.

   Wait for WP to provide more background information.

1227 150 PR resubmission for fn ranks

     * MK: Having two different collations seems impractical. Either
       that's unnecessary or I don't understand what the function is for.
     * NW: I took that to mean just what it appears to say, that you have
       a collation for the keys and a different collation for the items.
     * JLO: I thought we said that the collations could be made part of
       the functions.

   Some discussion of how the use case (the football scores) could be done
   today.
     * MK: My mental model is you sort by the key and the partition. It's
       a variant of sort that delivers a partitioned result.
          + ... So why on earth do you need two collations?
     * JLO: Could this be done with fn:sort and fn:partition?
     * MK: Yes, but you might have to evaluate the sort key twice.

   Some discussion of whether that could be avoided by passing in tuples.

   Some discussion about whether or not the Swedish collation in the
   language example is doing anything.

   Finding anagrams doesn't appear to require fn:ranks, you could just
   group on the constructed character/frequency string.

   We look briefly at MK's formulation.
     * MK: It's basically sort followed by partition.
     * EP: The only difference is that you don't have two collations?
     * MK: I'm not sure because I haven't tried to address the boolean
       parameter about duplicates.

   Some discussion of dealing with duplicates. For simple cases, you could
   remove them from the input. Where that wasn't possible, you'd have to
   post-process.
     * MK: What is missing from this formulation that is in DN's
       presentation?
     * JLO: The ability to make distinct values.
     * MK: Then maybe that should be added to sort?
          + ... Why should the way fn:ranks behave differently than
            fn:sort with respect to duplicates?

   Unclear how to proceed.

1209 1183 Add transient mode and the transient{} expression

   MK made the requested change. Needs to be reviewed again.

1185 1179 array:values, map:values -> array:get, map:get

     * MK: Are we sure this isn't recursive? That ?* isn't defined in
       terms of map:get()?

   No, that's not the case. (We checked.)
     * MK: Okay, the design works. But do we like it? It means there's one
       function that does two very different things.
     * NW: I'm not a huge fan, I think it hinders discoverability. I go
       looking for functions to get the keys and values out of a map, I'll
       find map:keys but not map:values. So I have to write that myself?
       It might be a while before I thought of having map:get(()) do it.
     * JLO: If I'm using an expression for the argument to map:get and I
       accidentally use an empty sequence, I'm going to get wildly
       different results.
          + ... Why is values so bad?
     * MK: In many ways I prefer the status quo.

   We don't seem to have consensus for this change.

1181 296 Allow default-namespace=##any

     * JLO: Why ##any?
     * MK: Following the convention for XSD, using a string with ## in it
       shouldn't be used as a namespace.

   In the XSLT spec:
     * MK: We've reverted the change that made element and type namespaces
       different. There's a change here that corrects an error where we
       failed to do that.

1062 150bis - revised proposal for fn:ranks

   See discussion of fn:ranks above.

1015 1013 [XSLT] Clarify effect of accumulator capture on non-element nodes

   Accepted.

0956 850-partial Editorial improvements to parse-html()

   It appears that there might be a rebasing problem.

   (MK rebased and pushed.)
     * NW: Looks fine to me.

   Some discussion of the (dis)similarity of JSON parsing mandated by the
   fact that unparsed-text must reject non-XML characters.
     * JLO: Is there an HTML version of html-doc?
     * MK: No.

   Agreement that it should be raised, JLO will do so.

   ACTION: QT4CG-080-06: NW to investigate the cross-spec reference errors
   in the build

   ACTION: QT4CG-080-07: NW to update the build instructions in the README

   Accepted.

0921 920 Allow xsl:break and xsl:next-iteration within branch of xsl:switch

   Accepted.

0871 Action qt4 cg 027 01 next match

   ACTION: QT4CG-080-08: MK to work out what happened to his next-match PR

0832 77 Add map:deep-update and array:deep-update

     * NW: In this note:
       These rules affect the way an xs:untypedAtomic key value is
       handled. Given the shallow lookup expression $A?$x, if $A is an
       array and $x (after atomization) is xs:untypedAtomic then the value
       of $x is converted to an integer (by virtue of the coercion rules
       applying to a call on array:get). With a deep lookup expression
       $A??$x, by contrast, the semantics are defined in terms of a map
       lookup, in which xs:untypedAtomic values are always treated as
       strings.
       Is the reference to array:get correct? (Is the note correct
       overall?)
     * NW: fn:selection:path should be fn:selection-path
     * MK: Allowing a sequence in UpdateExpr causes a grammar ambiguity
     * JLO: ExtendClause is missing from the definition of UpdateClause

   Some discussion of the ambiguity. For a single clause leave out the
   curly braces:
  update map $data ...

   For multiple clauses use the curly braces but precede by do.
     * MK: Needs another pass, but we're getting there.
          + ... What I quite like about it is that most users won't need
            to worry about most complexities. The syntax is reasonably
            intuitive. Users will be able to use the expressions without a
            deep understanding of the semantics.

   ACTION: QT4CG-080-09: MK to address comments made on PR #832

0529 528 fn:elements-to-maps

   Needs revision, come back to later.

Closely related issues

Variable arity dynamic functions

     * 158, Support optional parameters on dynamic functions
     * 1136, Defining names for parameters on typed function tests
     * 1175, XPath: Optional parameters in the definition of an inline
       function

   MK observes that the primary obstacle is argument names.
     * MK: If you declare a function with keyword arguments x, y, z, and
       you pass it to a another function as an argument where the expected
       names are p, q, and r, what happens?
          + ... There have been lots of suggestions that we'd like the
            names of the parameters to be a lot more visible. Perhaps
            starting in the function type.
          + ... The purpose is for the caller of the function to call
            arguments by name.
          + ... Where does that come from? If it's in the author's
            declaration then you can't pass x, y, z if p, q, and r, are
            expected.
          + ... I don't want to constrain the caller of the function to
            use the same name as the recipient.
          + ... If function coercion changes the names, how does that
            work.

   Some discussion of what's different here. It's about dynamic
   evaluation, not whether or not the function was declare statically.

   (Note to readers: the code examples were constructed on the fly while
   being projected. It's likely that intermediate stages have been lost.)
declare local:add($v1, $v2, $rounding-mode:="normal") {...}
declare local:sub($a, $b) {...}

add(v2:=3, v1:=1)
add(1,3)

let $partial := local:add(1, ?)
$partial(v2=3) (: error :)

declare local:higher-order($op, $f as function(xs:double, xs:double)) {
  $f(2, 3) (: ok :)
  $f(v1=2, v2=3)  (: wat? :)
}

local:higher-order(3, local:add#2)
local:higher-order(3, local:sub#2)

declare local:higher-order($op, $f as function($x as xs:double, $y as xs:double)
) {
(:  $f(2, 3) (: ok :)
  $f(x=2, y=3)  (: ok :)

  let $g := $f(y=?, x=3)
:)
  $op => $f(x=2)
}

add(v2=7, v1=14)

     * MK: Keyword arguments allow you to change the argument order in
       dynamic function calls.
          + ... Optional parameters can only be called with keywords, and
            keyword parameters must be optional. They are always
            implicitly passed through by names.
          + ... If you declare a function with an optional, keyword based
            $collation parameter, it passes through silently and can be
            called by its original name.
     * JLO: But then you can't ask "does this function have a collation
       argument?"
     * MK: You could provide an interogative to ask.
          + ... But then you can't pass an option statically because you
            can't know statically!
     * MK: It's much more like passing an options map where the names are
       dynamic.

declare local:add($v1, $v2, $rounding-mode:="normal") { ... }
declare local:sub($v1, $v2) { ... }

declare local:higher-order($op, $f as function($x as xs:double, $y as xs:double)
) {
  $f(1, 2)
  $f(1, 2, rounding-mode:="special")
}

local:higher-order(3, local:add#2) (: function works :)
local:higher-order(3, local:sub#2) (: dynamic error in the second call to $f in
higher-orde: :)

     * MK: Instead of binding $rounding-mode to it's default when you
       create the closure, you allow it to be passed through by name.
     * NW: I don't think we're making improvements...

   Looking at the example from issue #1175:

   Let's extend it so that data flow analysis won't answer the question
   "is increment correct"?
let $incr := if ($random)
             then fn($arg1, $increment := 1) {$arg1 + $increment }
             else fn($arg1, $decrement := 1) {$arg1 - $decrement }
 return
  (
   $incr(5),
   $incr(5, increment := 2),
   $incr(5, increment := 3)
 )

   Presumably this raises a dynamic error when $random is false. It's
   impossible to know statically what will happen.
     * MK: It's very much like an options argument on every function and
       the binding of keyword parameters was creating a binding for that
       option. In which case it might not be an error. You'd just be
       supplying an option the function doesn't use.

   Consensus in the room is that keyword arguments on dynamic function
   calls doesn't work.

Terminology: map and array functions

     * 1169, Maps & Arrays: Consistency & Terminology
     * 1179, Editorial: `array:values`, `map:values`

Terminology: parse functions

     * 748, Parse functions: consistency
     * 1021, Extend `fn:doc`, `fn:collection` and `fn:uri-collection` with
       options maps
     * 1252, Add a new function fn:html-doc

Transiency

     * 285, Stability of collections
     * 1183, transient() - a function to make functions nondeterministic
     * 1209, 1183 Add transient mode and the transient{} expression

Planning?

     * When will we be done?
          + Unclear. This is probably the first step.
     * What will we publish?
          + W3C community group final reports
     * Do we want an umbrella page?
          + Yes, probably
     * Do we want to change the name of the community group?
          + XSLT and XQuery Extensions Community Group
          + Update the group abstract

   ACTION: QT4CG-080-10: NW to find out if we can change the community
   group name
     * Do we need to manage completion of the test suite?
          + Probably. Even if the W3C doesn't require it, we want to know
            we have good coverage and a couple of implementations of every
            feature.
     * We'll do all the specifications at once
     * Do we have a contact at the W3C?
          + Not a specific individual, but NW has found sysreq and webreq
            to be responsive.

4. End-of-day wrapup

4.1. Roll call [4/4]

   Face-to-face participants and:
     * [X] Christian Gr¸n (CG)
     * [X] John Lumley (JLY)
     * [X] Dimitre Novatchev (DN)
     * [X] C. M. Sperberg-McQueen (MSM)

4.2. Notes

   Some discussion of serializing JSON. Would implementing json-lines help
   with the case of serializing a top-level sequence of JSON items?
     * CG: Would using item separator help?
     * MK: Item separator is incredibly troublesome. The introduction of
       item separator changes the boundary between what the query outputs
       and what the serializer does. We certainly found it disruptive in
       implementation terms.

   Some discussion of how this might interact with other options and
   whether you'd get multiple newlines sometimes?

4.2.1. 1181 discussion

   CG points us to [34]his comment about using an any keyword in XQuery.
     * MK: I don't feel strongly about it one way or the other.
     * MK: We're very fuzzy about what strings are acceptable as
       namespaces.

4.2.2. Variadic functions

   DN asserts that we need support for map-variadic functions.

   MK says that the it isn't the case because function items can't be
   variadic, so you can't pass them to apply.
     * DN: Right now, I think fn:apply can take any function. But that's
       not the case?
     * MK: No, at the moment, you can pass any function item to fn:apply
       and function items can't be variadic currently!
     * DN: I think we see the problem here, we need to do something about
       it.

5. Thank our host

   Thank you, Jirka.

6. Any other business

   None heard.

7. Adjourned

References

   1. https://qt4cg.org/meeting/minutes/2024/06-04.html#minutes-1
   2. https://qt4cg.org/meeting/minutes/2024/06-04.html#new-actions
   3. https://qt4cg.org/meeting/minutes/2024/06-04.html#administrivia
   4. https://qt4cg.org/meeting/minutes/2024/06-04.html#roll-call
   5. https://qt4cg.org/meeting/minutes/2024/06-04.html#agenda
   6. https://qt4cg.org/meeting/minutes/2024/06-04.html#approve-minutes
   7. https://qt4cg.org/meeting/minutes/2024/06-04.html#next-meeting
   8. https://qt4cg.org/meeting/minutes/2024/06-04.html#open-actions
   9. https://qt4cg.org/meeting/minutes/2024/06-04.html#technical-agenda
  10. https://qt4cg.org/meeting/minutes/2024/06-04.html#h-9EF69C1E-BBCD-440B-991A-BD648D96FF3F
  11. https://qt4cg.org/meeting/minutes/2024/06-04.html#issues-1
  12. https://qt4cg.org/meeting/minutes/2024/06-04.html#wrap-up-1
  13. https://qt4cg.org/meeting/minutes/2024/06-04.html#roll-call-wrapup
  14. https://qt4cg.org/meeting/minutes/2024/06-04.html#wrap-up-notes-1
  15. https://qt4cg.org/meeting/minutes/2024/06-04.html#minutes-2
  16. https://qt4cg.org/meeting/minutes/2024/06-04.html#issues-2
  17. https://qt4cg.org/meeting/minutes/2024/06-04.html#review-prs
  18. https://qt4cg.org/meeting/minutes/2024/06-04.html#closely-related
  19. https://qt4cg.org/meeting/minutes/2024/06-04.html#h-872DD948-C3D3-42C0-9958-B67FD5CA55B7
  20. https://qt4cg.org/meeting/minutes/2024/06-04.html#wrap-up-2
  21. https://qt4cg.org/meeting/minutes/2024/06-04.html#roll-call-wrapup
  22. https://qt4cg.org/meeting/minutes/2024/06-04.html#wrap-up-notes-2
  23. https://qt4cg.org/meeting/minutes/2024/06-04.html#thank-you-jirka
  24. https://qt4cg.org/meeting/minutes/2024/06-04.html#any-other-business
  25. https://qt4cg.org/meeting/minutes/2024/06-04.html#adjourned
  26. https://qt4cg.org/meeting/minutes/
  27. https://qt4cg.org/
  28. https://qt4cg.org/dashboard
  29. https://github.com/qt4cg/qtspecs/issues
  30. https://github.com/qt4cg/qtspecs/pulls
  31. https://qt4cg.org/meeting/agenda/2024/06-04.html
  32. https://qt4cg.org/meeting/minutes/2024/05-28.html
  33. https://github.com/qt4cg/qtspecs/pull/1181
  34. https://github.com/qt4cg/qtspecs/pull/1181#pullrequestreview-2035405118

                                        Be seeing you,
                                          norm

--
Norm Tovey-Walsh
Saxonica

Received on Thursday, 6 June 2024 09:11:16 UTC