@qt4cg statuses
This page displays recent status updates about the QT4CG project.
The are also captured in an RSS feed.
By year: 2026, 2025, 2024, 2023, 2022, 2021, 2020
QT4 CG meeting 172 draft minutes #minutes-07-14
Draft minutes published.
Issue #2769 closed #closed-2769
Repeatability of $rng?next() and $rng?permute()
Issue #2771 closed #closed-2771
2769 Clarify repeatability of random-number-generator() results
Issue #2641 closed #closed-2641
[Feature] Comments and parse-csv()
Issue #2778 closed #closed-2778
2641b Add support for CSV comments
Issue #2750 closed #closed-2750
`fn:unparsed-text`, `fn:unparsed-binary`: make them nondeterministic?
Issue #2767 closed #closed-2767
2750 Make fn:unparsed-text, ... nondeterministic
Issue #2761 closed #closed-2761
2758 Add rules for visibility of named types across packages
Pull request #2788 created #created-2788
Reversion of PR 2747 which allowed `A/B?C`
Fix #2774
This PR reverts the effect of PR 2747, which introduced the ability to write the expression A/B?C, with the lookup ?C being part of the step (B?C).
As discussed in the issue, the problem is the interaction with the rules on sorting nodes into document order and deduplication. The expression "feels like" it should evaluate (A/B) ? C - typically searching a JTree to obtain a JNode that wraps a map, and then extracting the entry C from that map; but that's not the actual semantics, because assuming that ?C doesn't select JNodes) it disrupts the deduplication and sorting that (A/B) would otherwise undertake.
Issue #2569 closed #closed-2569
Inconsistent rules for unprefixed function calls with explicit default function namespace
Issue #2757 closed #closed-2757
2569 Rules for unprefixed function calls with explicit default function ns
Issue #2783 closed #closed-2783
Padding strings
Issue #2784 closed #closed-2784
2783 fn:pad-string
Issue #2257 closed #closed-2257
Record declarations without namespace
Issue #2713 closed #closed-2713
2257 Record declarations without namespace
Issue #2779 closed #closed-2779
2781a Fix parsing errors in F&O and XQuery specs
Issue #2781 closed #closed-2781
XQFO: outdated examples
Issue #2782 closed #closed-2782
2781b XQFO: outdated examples
Issue #2299 closed #closed-2299
Make the pipe-like operators left associative and have the same precedence
Issue #2315 closed #closed-2315
Optimization of the workflow action checkout
Issue #2776 closed #closed-2776
2769 repeatability of rng next
Issue #2787 created #created-2787
Constructor functions for record types
Following acceptance of PR #2759, if declare item type is used to define a name for a record type, then the record type acquires a constructor function. The spec for "declare item type" at §5.19 refers to §4.21.5 constructor functions, but that section does not define any semantics for a constructor function for instances of a record type.
Now that item types have constructor functions, it is increasingly hard to justify having both named item types and named record types as separate features. I think we should merge them. Specifically:
- allow all named item types to be recursive
- allow all record declarations to define default values for fields (these can be used when coercing a map to a record type). But I would suggest that the default value must be a constant
- allow all record declarations to define methods.
Also: do we get a constructor function if the field names are not NCNames?
QT4 CG meeting 172 draft agenda #agenda-07-14
Draft agenda published.
Issue #2786 created #created-2786
Clarify interoperability of fragment identifiers
The current specs take the position that fragment identifiers are implementation defined:
The effect of a fragment identifier in the supplied URI is implementation-defined. One possible interpretation is to treat the fragment identifier as an ID attribute value, and to return a document node having the element with the selected ID value as its only child.
I think this is an interoperability problem. Ignoring, or failing to correctly interpret, a fragment identifier can have a profound impact on the document processed. If the processor silently ignores fragment identifiers, I may get wildly incorrect results. In a workflow involving many documents or large documents, or both, this could be difficult to catch.
I think it would be better to say:
- The fragment identifier schemes supported by a processor are implementation-defined. (So, technically, implementations must enumerate the schemes they support.)
- Processors must report an error if they encounter a fragment identifier that uses a scheme that they do not recognize or cannot cannot be processed (because of implementation limits, or syntactic errors in the scheme, etc.)
- Implementations should support the xmlns and element schemes for XML documents and RFC 5147 for text resources. Obviously, they may support other schemes as well.
Issue #2785 created #created-2785
Make XSLT tunnel parameters available dynamically as a map
I propose that the current set of tunnel parameters should be available dynamically via a new XSLT-only function tunnel-parameters(), returning a map indexed by QName.
The main benefits are:
(a) it becomes possible for an instruction to test whether a tunnel parameter exists (declaring it with required="no" and a default value is a messy and unsafe way of achieving this)
(b) it becomes possible to write template match patterns that use tunnel parameters as part of the template despatch mechanism (see issue #108)
This proposal was influenced by the discussion on #2737, though it eventually emerged from that discussion that the proposer had something rather different in mind
Pull request #2784 created #created-2784
2783 fn:pad-string
Closes #2783
Issue #2783 created #created-2783
Padding strings
A simple one:
XPath can format numbers and dates, but it cannot pad a string to a fixed width, although it would often be helpful when creating textual output (reports, log lines, etc.). That’s something most other languages provide.
Users must write it themselves, and the usual workarounds are easy to get wrong. substring($s || ' ', 1, 5) only works if the literal is long enough, and it truncates. $s || string-join(replicate(' ', 5 - string-length($s))) needs two functions and does not feel very intuitive.
The signature, as I would draft it:
fn:pad-string(
$value as item()?,
$length as xs:integer,
$options as map(*)? := {}
) as xs:string
The options could be fill (default " ") and side (end by default, start, both). Examples:
pad-string('abc', 10) (: "abc " :)
pad-string(42, 6, { 'fill': '0', 'side': 'start' }) (: "000042" :)
pad-string('Chapter 1', 20, { 'fill': '.' }) (: "Chapter 1..........." :)
Pull request #2782 created #created-2782
2781b XQFO: outdated examples
I tagged this with »Propose Merge without Discussion« as I believe it’s safe to merge. Feedback is always welcome, though.
Issue #2781 created #created-2781
XQFO: outdated examples
Many XQFO examples need to be fixed to be compliant with the latest changes in the spec.
Part 1: #2779 Part 2: #2782
Issue #2780 created #created-2780
Comments on 'Functions on CSV Data' in XPath and XQuery Functions and Operators 4.0
I have some comments on 17.5 Functions on CSV Data
The paragraph starting:
The other two functions recognize column names.
There are 3 other functions not 2.
17.5.4 fn:csv-to-arrays
In the examples, the results are sometimes shown as sequence of arrays enclosed in () and sometimes not. I know it's not that important, but is it a deliberate decision?
17.5.6 Record fn:parsed-csv-structure-record
columns description says:
The sequence of strings will potentially be truncated if the number-of-columns option is specified, and it will potentially be reordered if the filter-columns option is specified.
I assume this is left over from a previous version and should talk about select-columns?
17.5.4 fn:csv-to-arrays and 17.5.7 fn:parse-csv Rules section says:
The input supplied in $value is CSV data, as defined in [RFC 4180].
Should this refer to the extended grammer defined in 17.5, or just not have this sentence at all. Section 17.5.10 doesn't have it.
17.5.7 fn:parse-csv
trim-whitespace section:
If you have {'header':true(),'trim-whitespace':false()} the 'header' fields are trimmed but not the data fields.
The description of trim-whitespace needs to say something about this case.
trim-rows section:
It might be better if the false part started 'No padding or trimming of fields in the rows takes place' so that it is explicit this is about field padding/trimming.
17.5.11 Illustrative examples of processing CSV data Example: Converting a CSV into an HTML-style table using fn:parse-csv I have to say that it doesn't look like anyone has tested this. Some comments are:
- For the
$crlfvariable could you make the value XSLT/XQuery agnostic by just having the part after ':='? - No data is output because the default option for
header,false()applies tofn:parse-csvandfn:csv-to-xml. - In the XSLT versions some
<xsl:template>elements have a closing tag of</xsl:function>. - In the first example the code doesn't reflect the record structure.
- In the first example why is the namespace prefix
egdeclared and excluded when it isn't used. - In the second XQuery example it would help if the references to the CSV XML elements used the correct namespace.
See 5751 more statuses in yearly archives.