@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 170 draft agenda #agenda-06-30

29 Jun at 13:30:00 GMT

Draft agenda published.

Pull request #2739 created #created-2739

29 Jun at 12:09:40 GMT
2738 XSLT - tree terminology

Fix #2738

Gently improves the introductory sections of the XSLT spec to better reflect the introduction of JTrees and JNodes.

It could do with a more radical overhaul but this is a step in the right direction.

Issue #2738 created #created-2738

29 Jun at 08:51:39 GMT
XSLT Concepts: "tree", "document"

In the XSLT Concepts section and elsewhere, the terms "tree" and "document" are used without saying explicitly whether the terms include or exclude JTrees. Some of the statements that are made about trees are equally applicable to XTrees and JTrees, while others are specific to XTrees. Because the definitions are unclear, the use of these terms throughout the spec is also unclear. This extends to the XSLT Streaming spec.

Issue #2684 closed #closed-2684

29 Jun at 08:41:27 GMT

strip-space option in fn:doc vs fn:document

Issue #2737 created #created-2737

29 Jun at 07:47:17 GMT
context (or tunnel) parameters

I would like to propose an idea to introduce context parameters. The goal is to allow to pass parameter in a scope rather than globally or inside of a whole template.

The idea is like this:

<xsl:param name="my-var" as="xs:string" context="yes"/>

or even

<xsl:param name="my-var" as="xs:string" tunnel="yes"/>
...


<xsl:function name="t:my-function" as="xs:string">
...

   <xsl:sequence select="$my-var"/>
</xsl:function>
....

<xsl:context>
  <xsl:with-param name="my-var" select="'123'"/>

   ... do something, e.g.:
   <xsl:sequence select="t:my-function(...)"/>
</xsl:context>

This feature will closely resemble what java and node have with async scoped variables. See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/ScopedValue.html See https://nodejs.org/api/async_context.html

Pull request #2736 created #created-2736

29 Jun at 07:02:28 GMT
2169 Reformulate `StringInterpolation` to remove the `` `{ `` and `` }` `` literal terminals

Reformulates StringInterpolation as proposed and discussed in #2169.

Closes #2169

Issue #2735 created #created-2735

28 Jun at 21:36:04 GMT
JNodes: serialization

We should improve the representation of JNodes with the standard xml and json serialization methods. Keys are simply lost in the output, which is particularly troubling for newcomers:

(: query :)
<xml><city>Roma</city><name>Andrea</name></xml>/* ,
{ 'city': 'Roma', 'name': 'Andrea' }/*

(: result :)
<city>Roma</city>
<name>Andrea</name>
Roma
Andrea

My suggestion would be to output (non-root) JNodes as single-entry maps:

{ 'a': 1, 'b': 2 }/*
{ "a": 1 }
{ "b": 2 }

[ 'a', ('b', 'c') ]/*
[ 1: 'a' ]
[ 2: ('b', 'c') ]

An alternative for JNodes that result from arrays could be the representation as a single-member array (XML nodes don’t include indexes either):

[ 'a', ('b', 'c') ]/*
[ 'a' ]
[ ('b', 'c') ]

Pull request #2734 created #created-2734

26 Jun at 21:50:55 GMT
2733 A step too far

Fix #2733

Changes the rules for the path operator E1/E2 where E1 selects JNode and E2 evaluates to an atomic value. This now performs context-based mapping, in the normal style for "/", except in the case where E2 is a literal or variable reference, in which case it expands to E1/child::{E2}.

Issue #2733 created #created-2733

26 Jun at 17:22:03 GMT
A step too far: path expressions involving JNodes

It's really great to be able to write expressions like booklist/book[author='Mike']/price but there are usability traps. Consider this test case:

<test-case name="K2-Steps-40">
      <description> 
         RHS of "/" operator can be any PostfixExpr. 
         LHS of dynamic function call is coerced from JNode to function(*)* 
      </description>
      <created by="Michael Kay" on="2026-04-24"/>
      <dependency type="spec" value="XP40+ XQ40+"/>
      <test>{"A":1, "B":{"C":3, "D":4}}/B/.("C")</test>
      <result>
         <assert-eq>3</assert-eq>
      </result>
   </test-case>

The test is wrong: can you see why? The answer is that it successfully evaluates the final step .("C") to obtain the value 3, but it doesn't return 3 as the final result of the expression, rather it computes {"A":1, "B":{"C":3, "D":4}}/B/3 which returns nothing.

I'm coming to the view that this isn't acceptable. The semantics of G/A where G evaluates to a GNode and A evaluates to an atomic value are wildly different depending on whether G is an XNode or a JNode, and this is going to cause no end of confusion.

A possible solution is to allow the current semantics only in the case where the step is an NCName or a literal. If it's anthing else, for example a variable reference, you have to write G/child::{$i}. If A is any expression other than an NCName or a literal, then G/A works with JNodes the same as it does with XNodes - the "/" operator is essentially treated as "!".

We're still breaking referential transparency; writing 23 has a different effect from using a variable whose value is 23. That's essentially because "/" was never a pure operator in the first place, there have always been surprises in its semantics.

Pull request #2732 created #created-2732

26 Jun at 13:30:35 GMT
2708 Obsolete references to maps being unordered

Fix #2708

Pull request #2731 created #created-2731

26 Jun at 11:43:42 GMT
2709 Well-formed sub-documents (2nd attempt)

Fix #2709

(at least in part...)

In most of the parts making up the XPath and XQuery spec (with the exceptions of front and back matter), I have made the document well-formed by (a) adding a wrapper fascicle element where necessary (and declaring this in the DTD), and (b) eliminating external entity and character references that depend on the internal DTD subset.

The &language; entity reference is replaced by the processing instruction <?inject language?>

I have modified the assemble-specs stylesheet to:

  • shallow-skip the fascicle element
  • expand the <?inject?> processing instruction

Issue #2730 closed #closed-2730

26 Jun at 11:36:46 GMT

2709 Make well formed subdocuments

Pull request #2730 created #created-2730

26 Jun at 11:34:36 GMT
2709 Make well formed subdocuments

Fix #2709

(at least in part...)

In most of the parts making up the XPath and XQuery spec (with the exceptions of front and back matter), I have made the document well-formed by (a) adding a wrapper fascicle element where necessary (and declaring this in the DTD), and (b) eliminating external entity and character references that depend on the internal DTD subset.

The &language; entity reference is replaced by the processing instruction <?inject language?>

I have modified the assemble-specs stylesheet to:

  1. shallow-skip the fascicle element
  2. expand the <?inject?> processing instruction

Issue #2728 closed #closed-2728

26 Jun at 09:53:57 GMT

test-pr

Issue #2729 created #created-2729

26 Jun at 09:36:04 GMT
fn:replace: named capture groups

See https://github.com/qt4cg/qtspecs/pull/2717#issuecomment-4802675128:

In a replacement string, I suggest the syntax $<group-name>. In a replacement function (which is new in 4.0), I suggest we make the second argument a map of groups rather than a sequence of groups.

Issue #2723 closed #closed-2723

26 Jun at 09:05:21 GMT

Another PR test; don't merge this one either

Issue #2725 closed #closed-2725

26 Jun at 09:05:18 GMT

Moar testing

Issue #2726 closed #closed-2726

26 Jun at 09:05:15 GMT

Why aren't actions running for my other tests?

Pull request #2728 created #created-2728

26 Jun at 09:04:17 GMT

test-pr

Issue #2727 closed #closed-2727

26 Jun at 09:03:23 GMT

Switch back to previous trigger

Pull request #2727 created #created-2727

26 Jun at 09:02:10 GMT

Switch back to previous trigger

Pull request #2726 created #created-2726

26 Jun at 08:57:08 GMT

Why aren't actions running for my other tests?

Pull request #2725 created #created-2725

26 Jun at 08:55:26 GMT

Moar testing

Issue #2724 closed #closed-2724

26 Jun at 08:54:11 GMT

Never merge this, more testing

Pull request #2724 created #created-2724

26 Jun at 08:53:42 GMT
Never merge this, more testing

Is it not working because I did it wrong, or because GitHub infrastructure is collapsing? Who can tell?

Pull request #2723 created #created-2723

26 Jun at 08:12:13 GMT

Another PR test; don't merge this one either

Issue #2722 closed #closed-2722

26 Jun at 08:12:03 GMT

Pointless PR test; do not merge

Pull request #2722 created #created-2722

26 Jun at 08:02:49 GMT

Pointless PR test; do not merge

Issue #2721 closed #closed-2721

26 Jun at 08:01:09 GMT

Try pull_request instead of pull_request_target for PR builds

Pull request #2721 created #created-2721

26 Jun at 08:00:57 GMT
Try pull_request instead of pull_request_target for PR builds

See https://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/

See 5623 more statuses in yearly archives.