Proposed resolution to bug 29472

ACTION 2016-04-14-002 (bug 29472) on MHK to propose detailed wording to implement comment #7.

1. xsl:stream/@streamable

xsl:stream acquires a new attribute @streamable, type boolean.

Change the paragraph:

The xsl:stream instruction is guaranteed-streamable if the contained sequence constructor is grounded, as assessed using the streamability analysis in 19 Streamability. The consequences of being or not being guaranteed streamable depend on the processor conformance level, and are explained in 19.10 Streamability Guarantees.

to

The xsl:stream instruction is declared-streamable if the streamable attribute is absent or is set to yes. (Note that the default differs from other elements having a streamable attribute). The xsl:stream instruction is guaranteed-streamable if (a) it is declared-streamable, and (b) the contained sequence constructor is grounded, as assessed using the streamability analysis in 19 Streamability. The consequences of being or not being guaranteed streamable depend on the processor conformance level, and are explained in 19.10 Streamability Guarantees.

Change 19.10 list item 2 to "Specifying streamable="yes" (or omitting the attribute) on xsl:stream declares that the contained sequence constructor is streamable.

2. Add an attribute streamability=strict | fallback | extended | optimistic to xsl:stylesheet / transform / package. The default is strict.

Reference section 19.10 for the explanation.

In 19.10, in the third numbered list, change list item 2 ("If a construct is declared as sttreamable but is not guaranteed streamable...." to read:

2. If a construct C is declared as streamable but is not guaranteed-streamable (that is, if it fails to satisfy the conditions for streamability defined in this specification), then the behaviour depends on the effective value of the streamability attribute in the outermost element of the stylesheet module containing C. 

(a) When streamability=strict is specified, the processor must signal a static error [see ERR XTSE3430].

(b) When streamability=fallback is specified, the processor must process the stylesheet as if it were a non-streaming processor (see below).

(c) When streamability=extended is specified, the processor must process the stylesheet with streaming if it is able to determine statically that it is able to do so, or signal a static error [see ERR XTSE3430] otherwise. (Note: this allows a conforming processor to apply its own extensions to the streamability rules. A conforming processor without such extensions may treat "extended" as equivalent to "strict"). The circumstances in which extended streaming determines that streaming is possible are implementation-defined, but must include all cases where the construct is guaranteed streamable; in addition, it is required that the analysis be sound, in the sense that the processor, having determined statically that the construct is streamable, must implement a strategy that is capable of handling any document, with the possible exception of documents having pathological features such as gigabyte-length element or attribute names.

(d). When streamability=optimistic is specified, the processor is not required to perform static streamability analysis (though it has the option to do so); instead, it may attempt streamed processing and may fail with a dynamic error (XTDEnnnn) if any construct is evaluated for which streaming is not possible. The circumstances in which optimistic streaming succeeds or fails are implementation-defined.

[ERR XTSE3430] 

It is a static error if a package contains a construct that is declared to be streamable and any of the following applies: (a) the construct appears in a stylesheet module that (explicitly or implicitly) specifies streamability="strict") but which is not guaranteed-streamable, or (b) the construct appears in a stylesheet module that specifies streamability="extended", and the construct is neither guaranteed-streamable nor streamable according to the extended streamability rules of the particular processor.

[ERR XTDEnnnn]

It is a dynamic error if a declared streamable construct is evaluated, and the construct appears in a module that specifies streamability="optimistic", and the evaluation is not possible because the construct, or the data it is processing, violates the implementation-defined streaming rules imposed by the processor.



Michael Kay

Received on Monday, 18 April 2016 15:37:52 UTC