[Bug 28154] New: [xslt 3.0] streamable templates: climbing body

https://www.w3.org/Bugs/Public/show_bug.cgi?id=28154

            Bug ID: 28154
           Summary: [xslt 3.0] streamable templates: climbing body
           Product: XPath / XQuery / XSLT
           Version: Last Call drafts
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XSLT 3.0
          Assignee: mike@saxonica.com
          Reporter: mike@saxonica.com
        QA Contact: public-qt-comments@w3.org

I can't see anything in the rules in 6.6.4 (Streamable templates) that
disallows the following:

<xsl:template match="*" mode="a-streamable-mode" as="xs:string">
  <xsl:sequence select="ancestor::section"/>
</xsl:template>

Clearly this isn't streamable: we can't atomize a node reached via the ancestor
axis. But the rules don't seem to say so.

We get the same issue with streamable stylesheet functions, so I propose to
define:

The *type-adjusted posture* of a construct C with respect to a U-type T is as
follows:

* If the intersection of T with U{N} is empty (that is, if T does not permit
nodes), the posture of a call to the fn:data function with C as an operand.
(Equivalently: it is the posture computed by the general streamability rules
for a construct that has C as its only operand, with operand usage absorption).

* Otherwise, the posture of C.

In 6.6.4 Rule 3 then changes to:

3. The sweep of the sequence constructor in the body of the xsl:template
element is either motionless or consuming

4. The type-adjusted posture of the sequence constructor forming the body of
the xsl:template element, with respect to the U-type that corresponds to the
declared return type of the template (defaulting to item()*), is grounded.


These rules solve the example case because data(..) is roaming, not grounded.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Friday, 6 March 2015 13:08:33 UTC