@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 160 draft agenda #agenda-04-14
Draft agenda published.
Issue #2579 closed #closed-2579
Accept narrative errors in generated tests
Pull request #2579 created #created-2579
Accept narrative errors in generated tests
If an fos:result contains errorref elements, allow those errors to be accepted as a pass.
Pull request #2578 created #created-2578
2561 Explain and define methods and method calls
Fix #2561
Pull request #2577 created #created-2577
2575 Make xs:error available unconditionally
Fix #2575
Issue #2576 created #created-2576
parse-json() option to match record types
I propose adding an option to parse-json and json-doc whose value is a list of named record types that might occur within the JSON; if a JSON object is read during parsing, it will be matched against these named record types, and if it matches, the result is a record (with type annotation) rather than an ordinary map.
This should make it easier to process the parsed JSON using XSLT match patterns (or XQuery typeswitch).
Issue #2575 created #created-2575
xs:error function
F+O §22.4 says
In the case of an implementation that supports XSD 1.1, there is a constructor function associated with the built-in union type
xs:error.
We should make the existence of this function unconditional.
QT4 CG meeting 159 draft minutes #minutes-07-04
Draft minutes published.
Issue #2553 closed #closed-2553
File Module: delete empty directories
Issue #2570 closed #closed-2570
2553 File Module: delete empty directories
Issue #2572 closed #closed-2572
2312 Drop map:keys-where
Pull request #2574 created #created-2574
2550 Shadow attributes in RELAX NG grammar (alt)
Attempt to tidy up the RELAX NG grammar
- Removed constraints on attributes vs. shadow attributes
- Generally removed co-constraints except for simple, required attributes
- Added a few more data types
I’m thinking about trying to translate the XSD asserts into Schematron rules, but I guess that can be a separate PR if I make it work
QT4 CG meeting 159 draft agenda #agenda-04-07
Draft agenda published.
Issue #2573 created #created-2573
Generated test case for codepoints-to-string(0)
This test case is marked as having a "narrative" result, but the narrative result allows a dynamic error, and the generated test case doesn't allow for this.
Pull request #2572 created #created-2572
2312 Drop map:keys-where
I propose dropping the map:keys-where function.
One of the suggestions in issue #2312.
The function isn't needed very often, and it's easily achieved in other ways. For example, to find all the keys of entries that are non-empty, you could use map:keys-where($map, fn($k, $v){exists($v)}), but it's just as easy to use
map:filter($map, fn($k, $v){exists($v)}) => map:keys()
or
map:for-each($map, fn($k, $v){$k[exists($v)]})
or
for key $k value $v in $map where exists($v) return $k
or
map:keys($map)[exists($map(.))]
Issue #2571 created #created-2571
generate-qt3-test-set.xsl: examples with narrative results
With having looked at the details, I assume that example with narrative results should be excluded from the generated tests.
For example, a test is generated for system-properties()?#schema-aware (which is: true for a schema-aware processor, otherwise false.):
<test-case name="fo-test-fn-system-properties-002">
<description>Test case for fn:system-properties</description>
<created by="Michael Kay using generate-qt3-test-set.xsl" on="2026-03-31"/>
<environment ref="global"/>
<test>
system-properties()?#schema-aware
</test>
<result>
<assert>true()</assert>
</result>
</test-case>
Pull request #2570 created #created-2570
2553 File Module: delete empty directories
Clarification for empty directories (which should always be deleted, as defined earlier).
Closes #2553
Issue #2569 created #created-2569
Inconsistent rules for unprefixed function calls with explicit default function namespace
The spec appears to give conflicting rules for resolving unprefixed function calls when an explicit default function namespace is declared.
Example:
declare default function namespace "urn:test";
declare function f() { "namespace" };
declare function Q{}f() { "no-namespace" };
f()
Two readings seem possible:
- from 5.14.2 Default Function Namespace Declaration and the 2.2.1 Static Context component "default function namespace":
f()refers to the function in "urn:test", yielding "namespace" - from the default function namespace rule: the no-namespace function is preferred, yielding "no-namespace"
Issue #2568 created #created-2568
Error codes for fn:build-dateTime
Is err:FODT0006 really necessary? Why does it need to be distinct from the existing err:FORG0001, Invalid value for cast/constructor? Other error codes make it possible to distinguish between a date/time formatting error (err:FOFD1340, err:FOFD1350), an invalid combination of date/time components (err:FODT005) and other date-related errors. If the purpose of err:FODT0006 is to be more targeted, dedicated to an invalid value for a component of a date/time, then shouldn't it be general to the same circumstances in all date/time constructor functions rather than specific to fn:build-dateTime?
Similarly, if the invalid value is for the timezone component, then I'd like to propose that err:FODT0003 invalid timezone value should be re-used instead of the more generic err:FODT0006.
Issue #2567 created #created-2567
Allow one named record type to extend another
In both XQuery and XSLT, it would be useful to allow one named record type to be declared as an extension of another, to avoid duplication between the definitions.
QT4 CG meeting 158 draft minutes #minutes-03-31
Draft minutes published.
Pull request #2566 created #created-2566
1979 Records with type annotations
First cut for review: the PR probably needs further passes before it is ready for acceptance.
We introduce the idea of records, being maps that have a type annotation which is a specific record type. A map acquires the type annotation when it is coerced to the record type. A map that has a record type annotation (a "record") throws a type error if map:get() (or a lookup expression) requests a key that is not one of the declared field names for that type. The type error can be raised statically.
map:put() applied to a record is constrained to produce a record with the same type annotation. (I've no objection to the "with" operator for this, but that can be done separately.)
Optional fields in record types are dropped; in a record, there is no distinction between an absent field and a field whose value is the empty sequence. There is no longer any need for this distinction, and eliminating it simplifies things a lot. (But we will need to decide whether to treat the fields as present or absent when serialising to JSON).
Fix #1979
Issue #2551 closed #closed-2551
2550 Shadow attributes in RelaxNG schema
Issue #2556 closed #closed-2556
Add an error code indicating no invisible XML processor is available
Issue #2215 closed #closed-2215
XQFO xref from xml-to-json() to element-to-map()
Issue #2555 closed #closed-2555
2215 Add "see also" links between functions
Issue #2433 closed #closed-2433
`fn:jtree`: Identity
Issue #2516 closed #closed-2516
2433 JTree function: Discuss JNode identity more fully
Issue #2531 closed #closed-2531
QT4CG-154-02 Revise rules for setting stylesheet parameters
Issue #2528 closed #closed-2528
RFC 7159 has been obsoleted
See 5318 more statuses in yearly archives.