@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

Pull request #2586 created #created-2586

20 Apr at 08:26:55 GMT
2408 Misc editorial fixes

Fix #2408

Issue #2585 created #created-2585

20 Apr at 06:02:38 GMT
Limits (editorial)

Rules regarding limits are scattered around the specifications somewhat arbitrarily. I suggest that they be moved to a single place in the Data Model specification, and unified across XSLT, XPath, and XQuery.

Issue #2584 created #created-2584

16 Apr at 16:27:43 GMT
JNodes: legalize absolute path expressions

I think we should have another thought about JNodes and absolute path expressions. A simple XPath expression that starts with a slash should definitely succeed if a map or array is provided as context value, either externally or via declare context value:

declare context value := { 'data': 123 };
/data

Maybe we could also try to simplify the rules in the specification ([4.6.1 Absolute Path Expressions](https://qt4cg.org/2026-01-28/xquery-40/xquery-40.html#id-absolute-path-expressions)):

The expression consisting of / on its own is treated as an abbreviation for the path expression /..

An expression of the form /PP (that is, a path expression with a leading /) is treated as an abbreviation for the expression self::gnode()/(fn:root(.) treat as (document-node()|jnode())/PP. The effect of this expansion is that for every item J in the context value V:

  1. A type error occurs if J is not a GNode [err:XPTY0020].

This seems confusing to me. My assumption is that…

declare context value := { 'data': 123 };
data

…does not raise an error. Why would self:gnode() do so, which is also a single relative XPath step?

Related: #2359

Pull request #2583 created #created-2583

16 Apr at 13:02:55 GMT
Fix typo in example of map type declarations

declare type app:invoice as map("xs:string", element(inv:paid-invoice)); should not use "xs:string" but xs:string

Issue #2582 created #created-2582

15 Apr at 15:56:57 GMT
`bin:hex`: return `xs:hexBinary`?

Can we change the return type of bin:hex from xs:base64Binary to xs:hexBinary? This way, we could get rid of baffling constructs like:

'41' => bin:hex() => xs:hexBinary()

It would be a backward-incompatible change, but one that will hardly be noticed: thanks to the 4.0 coercion rules, xs:hexBinary and xs:base64Binary can now be used interchangeably.

QT4 CG meeting 160 draft minutes #minutes-04-14

14 Apr at 15:50:00 GMT

Draft minutes published.

Issue #2561 closed #closed-2561

14 Apr at 16:03:05 GMT

Definitions: methods and method calls

Issue #2578 closed #closed-2578

14 Apr at 16:03:03 GMT

2561 Explain and define methods and method calls

Issue #2574 closed #closed-2574

14 Apr at 15:40:30 GMT

2550 Shadow attributes in RELAX NG grammar (alt)

Issue #2575 closed #closed-2575

14 Apr at 15:38:04 GMT

xs:error function

Issue #2577 closed #closed-2577

14 Apr at 15:38:02 GMT

2575 Make xs:error available unconditionally

Issue #1584 closed #closed-1584

14 Apr at 15:37:46 GMT

Review the XML Schema and RELAX NG schemas for XSLT 4.0 for compatibility

Issue #2581 created #created-2581

14 Apr at 08:02:28 GMT
XSLT Match patterns for GNodes

The semantics of patterns in XSLT have been changed so that the patterns for XNodes and JNodes are completely distinct. However, this is not reflected in the prose, which still has a single section describing "GNodePatterns" implying that the same pattern can match both. Fixing this is largely editorial, though it may benefit from some refactoring of the grammar.

QT4 CG meeting 160 draft agenda #agenda-04-14

13 Apr at 11:00:00 GMT

Draft agenda published.

Issue #2580 created #created-2580

13 Apr at 11:11:35 GMT
XSLT Match patterns for records

Having dropped extensible record types, we are now left with no easy substitute for the convenient XSLT match pattern

match="~record(first, last, *)"

which would match anything having fields first and last.

I propose we fill the gap with a "map pattern" which might take the form

match="{first, last}"

or

match="{first: ~enum('John', 'Jane')}"

or

match="{r: ~xs:double[. ge 0], i: ~xs:double[. ge 0]}"

What follows the ":" is an optional SequencePattern, defined as a Pattern followed optionally by an OccurrenceIndicator.

Issue #2579 closed #closed-2579

10 Apr at 09:54:20 GMT

Accept narrative errors in generated tests

Pull request #2579 created #created-2579

10 Apr at 08:48:49 GMT
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

09 Apr at 20:44:03 GMT
2561 Explain and define methods and method calls

Fix #2561

Pull request #2577 created #created-2577

09 Apr at 18:37:32 GMT
2575 Make xs:error available unconditionally

Fix #2575

Issue #2576 created #created-2576

08 Apr at 09:51:14 GMT
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

07 Apr at 20:11:27 GMT
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-04-07

07 Apr at 15:55:00 GMT

Draft minutes published.

Issue #2553 closed #closed-2553

07 Apr at 15:50:40 GMT

File Module: delete empty directories

Issue #2570 closed #closed-2570

07 Apr at 15:50:39 GMT

2553 File Module: delete empty directories

Issue #2572 closed #closed-2572

07 Apr at 15:50:21 GMT

2312 Drop map:keys-where

Pull request #2574 created #created-2574

07 Apr at 13:44:00 GMT
2550 Shadow attributes in RELAX NG grammar (alt)

Attempt to tidy up the RELAX NG grammar

  1. Removed constraints on attributes vs. shadow attributes
  2. Generally removed co-constraints except for simple, required attributes
  3. 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

06 Apr at 14:50:00 GMT

Draft agenda published.

Issue #2573 created #created-2573

02 Apr at 17:11:45 GMT
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

02 Apr at 11:04:18 GMT
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

02 Apr at 10:59:41 GMT
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>

See 5332 more statuses in yearly archives.