- From: Norm Tovey-Walsh <norm@saxonica.com>
- Date: Thu, 06 Jun 2024 09:56:07 +0200
- To: public-xslt-40@w3.org
- Message-ID: <m25xumzeqw.fsf@33.200.102.146.nbk.vse.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 07:56:18 UTC