@qt4cg statuses
This page displays recent status updates about the QT4CG project.
The are also captured in an RSS feed.
By year: 2025, 2024, 2023, 2022, 2021, 2020
QT4 CG meeting 133 draft minutes #minutes—08-19
Draft minutes published.
Issue #2139 closed #closed-2139
Binary comparisons
Issue #2168 closed #closed-2168
2139 Make hexBinary and base64Binary fully comparable
Issue #2162 closed #closed-2162
QT4CG-132-04 Expand the rectangle?area example
Issue #2143 closed #closed-2143
JNodes and Methods
Issue #1714 closed #closed-1714
sibling:: axis. Action Item QT4CG-097-03
Issue #350 closed #closed-350
CompPath (Composite-objects path) Expressions
Issue #119 closed #closed-119
Allow a map's key value to be any sequence
Issue #106 closed #closed-106
Decorators' support
Issue #34 closed #closed-34
Proposal to introduce the set datatype in XPath 4
Issue #2164 closed #closed-2164
Fix return type in `fn:parse-csv` signature
Issue #2072 closed #closed-2072
JNodes: accessing properties
Issue #2170 closed #closed-2170
The current "?>" method call operator is ugly, difficult to read, difficult to find and understand. We have much better alternatives.
Issue #2170 created #created-2170
The current "?>" method call operator is ugly, difficult to read, difficult to find and understand. We have much better alternatives.
The current "?>" method call operator is ugly, difficult to read, difficult to find and understand. We have much better alternatives.
One obvious big improvement is to have ==>
.
This is:
- Readable.
- Distinctly distinguishable.
- Understandable and intuitive for anyone who has used an OOP language (C++, C#, Java)
- Expresses the similarity with the
=>
operator. The same way=>
provide the LHS item as the first argument of the RHS function, the similar, and extended, in appearance==>
provides the LHS map/object as an implicit argument to the RHS method. - Because of 1, 2, 3, and 4 above, very little additional learning and understanding effort is required from the XPath user.
Proposed action: Replace the ugly, difficult to read, difficult to find and understand operator "?>" with ==>
.
QT4 CG meeting 133 draft agenda #agenda-08-19
Draft agenda published.
Issue #1938 closed #closed-1938
Invoking coerced methods
Issue #2169 created #created-2169
Longest-token rule incorrectly produces `StringInterpolation` delimiter
StringInterpolation
currently defines a two-character token, curly right brace + backtick, to follow Expr
as a terminator:
StringInterpolation ::= "`{" Expr? "}`"
On other occasions, Expr
is followed by a single right curly brace:
EnclosedExpr ::= "{" Expr? "}"
The following applies to tokenization (the "longest-token" rule):
If the current position is not the end of the input, then return the longest literal terminal or variable terminal that can be matched starting at the current position, regardless whether this terminal is valid at this point in the grammar.”
My concern is that input like
<a>{42}`</a>
is going to be mis-tokenized under the longest-token rule: after 42
, the next (longest) token is the two-character StringInterpolation
terminator, which however is not a valid terminator of the EnclosedExpr
serving as CommonContent
of the direct element constructor.
Proposed fix
My proposal is to replace the two-character tokens that introduce and terminate StringInterpolation
with single backticks around an EnclosedExpr
with no intervening whitespace:
StringInterpolation ::= "`" EnclosedExpr "`" /* ws: explicit */
This replaces both of the two-character delimiters of StringInterpolation
, while still describing the intended language, but without causing the longest-token rule to produce a token that cannot be handled afterwards.
Issue #1736 closed #closed-1736
Add option retain-order=false when constructing maps
Pull request #2168 created #created-2168
2139 Make hexBinary and base64Binary fully comparable
Fix #2139
hexBinary and base64Binary become mutually comparable under all comparison operators: which may affect backward compatibility.
Pull request #2167 created #created-2167
2166 Reinstate lost text for lookup expressions
Fix #2166
Issue #2166 created #created-2166
Lookup expressions: we have deleted too much text
In reverting many of the features previously added to lookup expressions (for example deep lookup and lookup modifiers) we seem to have accidentally lost text that actually defines what the different key specifiers mean; we're left with lots of examples but no actual specification.
I was reading to see what the current spec says about array bound checking: it appears to say nothing.
Issue #2165 created #created-2165
Treat expression: inconsistencies, questionable uses
Related: Michael’s observation in https://github.com/qt4cg/qtspecs/issues/2163#issuecomment-3185618064.
The current spec says for treat:
XPath 4.0 provides an expression called treat that can be used to modify the static type of its operand.
It further mentions the static analysis phase, which has been removed from the specs; maybe we should remove these references.
There are hardly any uses of the expression in the current spec. One is for Absolute Path Expressions:
An expression of the form
/PP
(that is, a path expression with a leading/
) is treated as an abbreviation for the expressionself::gnode()/(fn:root(.) treat as (document-node()|jnode())/PP
.
The use seems confusing, as in many cases self::gnode()
can only be evaluated at runtime. Maybe we could rewrite it to a variant that coerces the node? It would generally be easier for optimizers to rewrite paths when there is no need to differentiate between treat and coercion (and I have never seen code that catches XPDY0050
).
Indeed I think it would be helpful to have a coerce to
expression, even if people will rarely use it explicitly. It would allow us to remove all remaining uses of treat as
(except, of course, for the expression itself), and we could simplify various examples that use variable declarations only for coercing values.
Pull request #2164 created #created-2164
Fix return type in `fn:parse-csv` signature
In f2e1f48, fn:parse-csv
was changed to return an empty sequence, when its first argument is an empty sequence. This is however not reflected in the function's return type, which is here changed to parsed-csv-structure-record?
.
Issue #2163 created #created-2163
Method calls: `?>` or` =?>`
I propose using =?>
for method calls rather than ?>
(a) I lilke the association with =>
to call a function item with an implicit first argument; =?>
combines selection of an item from a map (?
) with function invocation (=>
)
(b) ?>
, while technically unambiguous, smells strongly of XML processing instructions
Issue #2100 closed #closed-2100
JNodes: functions
Issue #2149 closed #closed-2149
2100 Make innermost, outermost, has-children, path apply to JNodes
Pull request #2162 created #created-2162
QT4CG-132-04 Expand the rectangle?area example
Expands the explanation of the example of method chaining
QT4 CG meeting 132 draft minutes #minutes—08-12
Draft minutes published.
Issue #2132 closed #closed-2132
Error handling in and/or expressions
Issue #2133 closed #closed-2133
2132 error handling in logical expressions
See 4417 more statuses in yearly archives.