@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 174 draft agenda #agenda-07-28

27 Jul at 14:56:00 GMT

Draft agenda published.

Pull request #2815 created #created-2815

24 Jul at 09:20:59 GMT
2567 Extended and restricted record types

Fix #2567

Needs finalizing when #2787 is agreed.

Pull request #2814 created #created-2814

24 Jul at 07:46:54 GMT
2393 array:members and array:of-members using JNodes

Fix #2351 Fix #2393

Changes the array:members() and array:of-members() functions to use JNodes to represent array members rather than using value records.

Generalizes the jtree() function so it can wrap any value as a JNode, not only a map or array -- useful when constructing the input to array:of-members.

Makes corresponding changes to XSLT examples. This is generally a simplification because xsl:array and xsl:array-members already use JNodes for this purpose.

Satisfies action QT4CG-167-05

Issue #2810 closed #closed-2810

23 Jul at 21:07:38 GMT

fn:parse-uri examples still expect sparse maps after #2566 record semantics

Issue #2813 created #created-2813

23 Jul at 19:01:13 GMT
Clarify xsl:result-document without href?

In the context of XProc, I learned that an xsl:result-document element without any href attribute writes to the principal result port, not the secondary output port. Can the XSLT specification clarify that the body of xsl:result-document without @href becomes a principal result instead of a secondary result?

The definition at https://qt4cg.org/specifications/xslt-40/Overview.html#dt-secondary-result doesn’t address this point.

[Definition: Zero or more secondary results: each secondary result can be any sequence of items (as defined in [XDM 4.0]).] A secondary result is the value returned by evaluating the body of an xsl:result-document instruction.

Also, in https://qt4cg.org/specifications/xslt-40/Overview.html#result-trees the paragraph that begins with “The href attribute is optional.” might be a good place to describe the behavior (not just the URI) if you omit @href.

If you think these clarifications belong in the XProc specification instead of the XSLT specification, that is fine with me. I actually looked in the XProc specification first. Maybe the part of https://spec.xproc.org/3.1/steps/#c.xslt that says “the principal result(s) will appear on output port result while secondary result(s) will appear on output port secondary” can say how you know which results are considered principal vs. secondary.

Pull request #2812 created #created-2812

23 Jul at 11:26:30 GMT
2811 fn:decode-from-uri: to +, or not to +

Closes #2811

Issue #2811 created #created-2811

23 Jul at 11:04:19 GMT
fn:decode-from-uri: to +, or not to +

We decided that fn:decode-from-uri should turn a plus character into a space, so that a+b.xml is decoded as a b.xml.

That rule actually comes from HTML form data (as I was noted), not from URIs, so the function does not really do what its name promises. It does not match its own counterpart fn:encode-for-uri either, which writes + as %2B. In addition, it seems to break fn:parse-uri, which reuses the same decoding for path segments.

We could add an option to control the behavior for +, but it may be over the top.

Issue #2810 created #created-2810

23 Jul at 08:41:57 GMT
fn:parse-uri examples still expect sparse maps after #2566 record semantics

Summary

The generated F&O examples for fn:parse-uri appear to conflict with the current record semantics introduced by qt4cg/qtspecs#2566 and with the dedicated fn:parse-uri tests in qt4tests.

Details

The dedicated test set:

https://github.com/qt4cg/qt4tests/blob/master/fn/parse-uri.xml

expects the result map to contain the complete set of declared fields. Components that are not present in the input URI are represented by fields whose values are empty sequences.

This was updated in:

https://github.com/qt4cg/qt4tests/commit/7df0076630e11b49f94e4a9d7d85ed955a44cf1e

That appears consistent with the record semantics described by https://github.com/qt4cg/qtspecs/pull/2566.

In particular, a record contains all of its declared fields, although the value of a field may be an empty sequence.

However, the generated F&O example tests here still expect sparse maps for fo-test-fn-parse-uri-001 through fo-test-fn-parse-uri-027: fields corresponding to absent URI components are omitted from the expected map.

Thus, an implementation returning the complete record-shaped map passes the dedicated fn:parse-uri tests but fails the generated F&O examples. Returning sparse maps has the opposite result. Satisfying both seems impossible.

Both sets of tests appear to target the current XPath/F&O 4.0 specifications.

Expected resolution

Could the fn:parse-uri examples in the F&O specification, or the mechanism that generates their assertions, be updated so that absent URI components are represented consistently with the record semantics from #2566?

The generated qt4tests/app/fo-spec-examples.xml file says it should not be edited directly, so I believe the correction belongs in qtspecs.

Issue #2809 created #created-2809

21 Jul at 23:01:18 GMT
fn:deep-equal, debug option

If the debug option is enabled, fn:deep-equal should be treated as nondeterministic function. Otherwise, debugging may be skipped.

Issue #2808 created #created-2808

21 Jul at 21:48:14 GMT
strip-space option: fn:doc vs. fn:parse-xml
  • The function fn:doc has the option strip-space with the enum values all, none, and conditional.
  • The functions fn:parse-xml and fn:parse-xml-fragment have an option with the same name, but a Boolean value.

Proposal:

  • unify on enum("all", "none", "conditional") for all four (including fn:doc-available), defining conditional as none for fn:parse-xml(-fragment).
  • If we prefer to keep different types, we should add an explanatory note.

QT4 CG meeting 173 draft minutes #minutes-07-21

21 Jul at 16:30:00 GMT

Draft minutes published.

Issue #2807 created #created-2807

21 Jul at 16:57:40 GMT
Dynamic node tests: static errors?

Copied from https://github.com/qt4cg/qtspecs/pull/2712#pullrequestreview-4615985800, something we should at least discuss:


The rules of this PR combined with #2734 have the potential to break ordinary XML paths. A parser may rewrite <xml/>/data() to:

<xml/>/(
  if (. instance of node()) then name() else (
    if (. instance of node()) then (
      let $A as ... := fn(){ data() }() return ...
    ) else (
      let $A as ... := fn(){ data() }() return ...
  )
)

As XPTY0004 can be raised statically, fn(){ data() } may result in a static error, and the full query will be rejected although the paths in question would never be executed.

Maybe we should stress that the presented equivalent code is to be understood as equivalent code that cannot be simply pasted by the parser (?). Or we simply drop the equivalent representation and liimt ourselves to formal rules.

Issue #2799 closed #closed-2799

21 Jul at 16:13:07 GMT

`fn:slice`: negative step with default start/end returns empty sequence

Issue #2800 closed #closed-2800

21 Jul at 16:13:06 GMT

2799 fn:slice: negative steps

Issue #2653 closed #closed-2653

21 Jul at 16:10:01 GMT

FLWOR, member/key/value clauses: allow sequences

Issue #2715 closed #closed-2715

21 Jul at 16:10:00 GMT

2653 FLWOR, member/key/value clauses: allow sequences

Issue #2219 closed #closed-2219

21 Jul at 16:06:45 GMT

Generalize method calls to sequences

Issue #2714 closed #closed-2714

21 Jul at 16:06:44 GMT

2219 Generalize method calls to sequences

Issue #2806 created #created-2806

21 Jul at 16:05:01 GMT
Serialization `indent-unit`, `line-ending`: allowed characters

Adopted from https://github.com/qt4cg/qtspecs/pull/2719#issuecomment-4904849541:

I think that allowing spaces, tabs, and newlines as literal characters representing themselves is hopelessly error prone, partly because it's not distinguishable to the human reader, and partly because serialization parameter values can be written as XML attributes, which are subject to attribute value normalization. Backslashes are less error prone (though when the spec says that the value must match \\t, the spec gets confusing). I would suggest making it simpler: indent-unit="SSS" for three spaces, or indent-unit="T" for one tab, and use newline="NL | CR | CRLF"

Issue #2702 closed #closed-2702

21 Jul at 16:03:55 GMT

Dynamic selectors: focus-dependency

Issue #2712 closed #closed-2712

21 Jul at 16:03:54 GMT

2702 Dynamic node tests

Issue #2389 closed #closed-2389

21 Jul at 16:00:35 GMT

Adaptive Serialization: more freedom?

Issue #2594 closed #closed-2594

21 Jul at 16:00:34 GMT

2389 Adaptive Serialization: more freedom

Pull request #2805 created #created-2805

20 Jul at 13:28:30 GMT
2802 Function identity removed

The attempt… which closes #2802 if accepted. Much of the prose is derived from the original version of the spec.

I revived the strict type error for fn:deep-equal($fn1, $fn). I believe we shouldn’t re-introduce implementation-dependent behavior; I don’t think it would have enough added value.

Pull request #2804 created #created-2804

20 Jul at 11:19:16 GMT
2780 Functions on CSV Data: comments

…and other editorial fixes.

Closes #2780

Pull request #2803 created #created-2803

20 Jul at 10:31:28 GMT
2773 fn:hash: wording

Closes #2773

QT4 CG meeting 173 draft agenda #agenda-07-21

20 Jul at 09:30:00 GMT

Draft agenda published.

Issue #2802 created #created-2802

20 Jul at 10:21:07 GMT
Remove function identity?

I think we should reconsider whether it was a good idea to give functions public identities:

  • It’s a feature you can see but are told not to trust: The result of fn:function-identity will depend completely on the implementation.
  • If we keep it, all built-in functions that create functions will need to become non-deterministic (see #1920), with the drawback that the effects of nondeterminism again depend on the implementation. Among others, this includes fn:parse-json, fn:apply, or fn:op.
  • It could simplify the prose of fn:jtree. The current notes revolve alot around the function identity, but it is not clear why: Since the identity is unpredictable, the behavior of fn:jtree will be too.

fn:deep-equal could be equipped with an option to ignore functions other than maps and arrays.

I may need a memory refresher: Are there are language features that would suffer from the reversal?

Issue #2801 created #created-2801

20 Jul at 10:03:10 GMT
Align the output of matching-segments() and regex-groups()

The result of matching-segments() includes for each match, a map containing information about the captured groups for that match.

The result of regex-groups() provides a map containing information about the current match being processed by xsl:analyze-string.

I propose to align the definition of these two maps, which are currently needlessly different.

Pull request #2800 created #created-2800

20 Jul at 08:49:13 GMT
2799 fn:slice: negative steps

Closes #2799

See 5791 more statuses in yearly archives.