@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 145 draft minutes #minutes-12-09
Draft minutes published.
Issue #2332 closed #closed-2332
2195 Misc XSLT editorial fixes
Issue #2330 closed #closed-2330
XSLT Pattern Syntax: in ArgumentP, generalize Literal to Constant
Issue #2331 closed #closed-2331
2330 In XSLT Patterns, allow Constants rather than Literals
Issue #2326 closed #closed-2326
xsl:text/@cdata edge cases and interactions
Issue #2328 closed #closed-2328
2326 Expand spec of new `cdata` attribute
Issue #2337 created #created-2337
XSLT xsl:mode/@typed attribute
The attribute xsl:mode/@typed needs to be extended (or at least clarified) to explain how non-nodes and JNodes are handled.
Pull request #2336 created #created-2336
2334 Revise XSLT pattern syntax and semantics
Fix #2330 Fix #2334 Fix #2336
Currently work-in-progress
This PR changes the syntax and semantics of JNode types, tests, and patterns, bringing them closer into line with each other and with the corresponding constructs for XNodes. It also fixes problems of grammar ambiguity.
JNode types are revised to take the form jnode(selector-value, content-type), mirroring the syntax of element and attribute types, and bringing them into line with JNode patterns. This also enables JNode patterns to be integrated with XNode patterns, using common syntax and semantics.
Subtyping rules for JNode types are added.
When types are used for selection in a JTree, the type must now be a JNode type, not the content type. For example, in place of $array/map(*), you need to write $array/jnode(*, map(*)). While more verbose, this syntax is more consistent with selection in XTrees, and is more powerful. (It also offers potential extensibility to eliminate the get(X) construct).
In XSLT patterns, union/except/intersect now apply only to node patterns (reverting a 4.0 enhancement which caused parsing difficulties). The semantics of except and intersect have also reverted to the 3.0 semantics.
XSLT type patterns are now uniformly written ~ItemType, rather than using the bare item type in some cases (such as record types), and the more verbose syntax type(ItemType) in other cases.
QT4 CG meeting 145 draft agenda #agenda-12-09
Draft agenda published.
Issue #2335 created #created-2335
Make `jnode()` like `element()`
Is it possible to make the JNodeType form similar to ElementTest and JNodePattern (in XSLT)?
ElementTest has the form:
ElementTest ::= "element" "(" (NameTestUnion ("," TypeName "?"?)?)? ")"
NameTestUnion ::= (NameTest ++ "|")
And JNodePattern currently has the form:
JNodePattern ::="jnode" "(" JNodePatternSelector "," JNodePatternContent ")" Predicate*
JNodePatternSelector ::= "*" | NCName | Constant
But JNodeType has the form:
JNodeType ::= "jnode" "(" SequenceType? ")"
I think, this introduces an inconsistency.
The expected forms are:
JNodePattern ::= JNodeType Predicate*
JNodeType ::= "jnode" "(" (JNodePatternSelector ("," JNodePatternContent )? )? ")"
JNodePatternContent ::= "*" | SequenceType
Probably, JNodePatternContent is not needed, since JNodePattern jnode() should be equal to jnode(*,*) in the current spec. Then, SequenceType should be used instead of JNodePatternContent in JNodeType:
JNodePattern ::= JNodeType Predicate*
JNodeType ::= "jnode" "(" (JNodePatternSelector ("," SequenceType )? )? ")"
This form is not only more consistent, but also it provides a more concise way to select GNodes by matching both their selector property and their jnode() type:
$g / jnode( foo )will be equivalent to$g / foo [ self::jnode() ]$g / jnode( foo, xs:integer )will be equivalent to$g / foo [ self::jnode() ][ jnode-content() instance of xs:integer ]$g / jnode( *, xs:integer )will be equivalent to$g / jnode() [ jnode-content() instance of xs:integer ]
Probably, JNodePatternSelector can be changed to JNodeSelectorUnion to support unions like NameTestUnion in ElementTest:
JNodeType ::= "jnode" "(" (JNodeSelectorUnion ("," SequenceType )? )? ")"
JNodeSelectorUnion ::= JNodeSelector ++ "|"
JNodeSelector ::= "*" | NCName | Constant
Side note: It appears that despite of the name ElementTest, an expression of the ElementTest production represents a type, the same as JNodeType.
This topic was also discussed a bit in #2099 (comment), and the analogy was mentioned in #2150: "An analogy with element(N, T) might suggest match="jnode(K, V)" where K constrains the selector property of the JNode, and V constrains its content property".
Issue #2334 created #created-2334
XSLT: Parenthesized subexpressions within Patterns
We seem to have a problem with parenthesized subexpressions / sub patterns within a pattern.
We have an extra-grammatical rule:
The content of any ParenthesizedPattern within an XNodePattern that contains a / or // operator (other than within a predicate) must itself parse as an XNodePattern.
This appears to rule out parenthesized sub-expressions that contain both a "/" and a "|" operator, for example a/(b/@x | c/@x)
The rule is obviously pretty bizarre, and the reason we have it is so that any XNodePattern is a syntactically valid XPath expression, which ensures that we can define the semantics of the pattern in terms of the semantics of XPath expressions.
Ideally we would have different productions for a parenthesised pattern at the top level, and a parenthesised expression within an XNodePattern, but we know that leads to ambiguities (or at any rate, a need for unbounded lookahead). But the current rule isn't an adequate solution.
Issue #2333 closed #closed-2333
Data Model: `dm:empty-sequence` signature
Issue #2333 created #created-2333
Data Model: `dm:empty-sequence` signature
In XQuery and XPath Data Model 4.0,
the section 3.2.1 empty-sequence Constructor defines dm:empty-sequence() as:
-
dm:empty-sequence() as item()*
Thedm:empty-sequenceconstructor returns a sequence containing no items.
Why is the return type specified as item()* and not empty-sequence()? Is this an oversight or intentional?
Note that 4.2 Type System mentions a sequence of exactly zero items (emphasis mine):
-
[Definition: A sequence type constrains the set of permitted sequences, by defining the permitted item types and the permitted number of items in the sequence (exactly zero, exactly one, zero-or-more, one-or-more, zero-or-one).]
Pull request #2332 created #created-2332
2195 Misc XSLT editorial fixes
Addresses issues raised in issue #2195
Pull request #2331 created #created-2331
2330 In XSLT Patterns, allow Constants rather than Literals
Fix #2330
Issue #2330 created #created-2330
XSLT Pattern Syntax: in ArgumentP, generalize Literal to Constant
In the XSLT pattern syntax, an ArgumentP is constrained to be either a variable reference or a Literal.
Elsewhere in the pattern syntax, we allow a Constant rather than a Literal. A Constant additionally allows (a) a negative number, and (b) true() and false().
ArgumentP is used where the pattern starts with a function call, which must be one of doc(), id(), element-with-id(), key(), or root(). Of these only key() can take a non-string argument, and it's unlikely that booleans or negative numbers will be useful very often, but it's worth making the change in the interests of consistency.
Pull request #2329 created #created-2329
2327 Rename sequence-join as intersperse
Reverts the function to its original name.
The name sequence-join seems to be based on a false analogy with string-join (which joins multiple strings with an optional separator) and array-join (which joins multiple arrays with an optional separator). The sequence-join function is quite different, it does not join multiple sequences. The name intersperse far better describes what the function actually does.
Pull request #2328 created #created-2328
2326 Expand spec of new `cdata` attribute
Fix #2326
Issue #2288 closed #closed-2288
XSLT implicit document nodes
Issue #2327 created #created-2327
Name of sequence-join() function
I had some trouble finding the sequence-join function because I couldn't remember what we ended up callling it.
The name seems very poorly chosen for a function that doesn't join sequences. It was chosen, I'm sure, by analogy with string-join(), but whereas string-join does actually join multiple strings, and array-join joins multiple arrays, sequence-join does not join multiple sequences. The old name intersperse seems better.
That's assuming we need the function at all -- it seems of fairly modest value.
Issue #2326 created #created-2326
xsl:text/@cdata edge cases and interactions
During review of the CDATA proposal today it was suggested that we should offer some rules or at least guidance on the interaction of xsl:text/@cdata with other features:
- Sequence normalization (esp merging of adjacent text nodes)
cdata-section-elements- Unicode normalisation
- character maps
QT4 CG meeting 144 draft minutes #minutes-12-02
Draft minutes published.
Issue #2256 closed #closed-2256
2216 All atomic types become ordered
Issue #2301 closed #closed-2301
2198 Add cdata attribute to xsl:text and xsl:value-of
Issue #2280 closed #closed-2280
Usability problems with xsl:array-member
Issue #2281 closed #closed-2281
2280 Usability of xsl:array-member
Issue #2311 closed #closed-2311
XSLT default priorities for patterns
Issue #2319 closed #closed-2319
2311 Change default XSLT pattern priorities
Issue #2317 closed #closed-2317
Arguments of fn:civil-timezone
Issue #2318 closed #closed-2318
2317 Correct signature of fn:civil-timezone
See 4776 more statuses in yearly archives.