[Bug 24606] New: [xslt 3.0] Multi-pass streaming

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

            Bug ID: 24606
           Summary: [xslt 3.0] Multi-pass streaming
           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

This thread in the December archives remains unresolved.

See https://lists.w3.org/Archives/Member/w3c-xsl-wg/2013Dec/0028.html (member
only) and subsequent thread.

We do not really have a clean way of doing multi-pass streaming in the current
spec (other than relying on external frameworks like XProc to combine multiple
stylesheets, of course).

The classic way of defining a multi-pass transformation in XSLT is to use
variables:

<xsl:variable name="temp1">
 <xsl;stream href="input.xml">
   <some processing/>
 </xsl:stream>
</xsl;variable>
<xsl:apply-templates select="$temp1" mode="streamable"/>

But there is nothing here to say that $temp1 should be processed as a stream;
indeed we encourage the idea that streamed nodes are never bound to variables.

I would be tempted to suggest something like

<xsl:pipeline>
  <xsl;stream href="input.xml">
    ...
  </xsl:stream>
  <xsl;stream>
    ...
  </xsl:stream>
</xsl:pipeline>

where each xsl:stream in the pipeline after the first takes its input from the
result of the previous xsl:stream.

I'm trying to look around for a solution that doesn't involve new syntax, but
it's hard to find one. 

* Adding "streamable="yes" to xsl;variable is a possibility but it's still new
syntax, and the rules for what it means and how it can be used are potentially
quite tricky.

* Some kind of coupling of xsl:result-document and xsl:stream might be
possible:

  <xsl;result-document href="temp.xml" method="pipe">
    ...
  </xsl:result-document>
  <xsl;stream href="temp.xml">
    ...
  </xsl:stream>

* Or something like Saxon's next-in-chain:

<xsl:result-document next="mode2">
  <xsl:stream href="input.xml">
     ,,,
  </xsl:stream>
</xsl:result-document>

where the "next" attribute is a mode that is then used to process the result
document.

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

Received on Monday, 10 February 2014 19:40:36 UTC