Re: A "processing model" proposal

Norman Walsh wrote:
 > / Erik Bruchez <ebruchez@orbeon.com> was heard to say:
 > | Richard & all,
 > | Here is how you do this with XPL [1]:
 > | <p:pipeline version = "1.0"
 > |             xmlns:p="http://www.orbeon.com/oxf/pipeline"
 > |             xmlns:xpl="http://www.orbeon.com/oxf/xpl/standard"
 > |             xmlns:my="http://www.example.org/xpl/my-components">
 > |     <p:input name="document-1"/>
 > |     <p:input name="document-2"/>
 > |     <p:output name="result" infosetref="diff"/>
 >
 > What's the significance of naming the result "result"? (I don't see it
 > referenced anywhere else in the pipeline.)

This is the name through which the result infoset can be accessed by
the caller of the pipeline. Input infosets are passed by name, and
output infosets are accessible by name as well. The choice of the name
"result" here is completely arbitrary.

In the case above I chose to return the resulting infoset as a
pipeline output. You could also choose to write it on disk from within
the pipeline. With XPL you use a "component" to do that, the "File
serializer", although you could certainly imagine a syntax using a
(writable) URL, but this is not in the XPL spec at the moment.

 > |     <p:processor name="xpl:xslt">
 > |         <p:input name="data" infosetref="#document-1"/>
 > |         <p:input name="stylesheet" infosetref="strip-ids.xsl"/>
 > |         <p:output name="data" infoset="stripped-1"/>
 > |     </p:processor>
 > |     <p:processor name="xpl:xslt">
 > |         <p:input name="data" infosetref="#document-2"/>
 > |         <p:input name="stylesheet" infosetref="strip-ids.xsl"/>
 > |         <p:output name="data" infoset="stripped-2"/>
 > |     </p:processor>
 > |     <p:processor name="my:diff">
 > |         <p:input name="doc1" infosetref="#stripped-1"/>
 > |         <p:input name="doc2" infosetref="#stripped-2"/>
 > |         <p:output name="diff" infoset="diff"/>
 > |     </p:processor>
 > | </p:pipeline>
 > | The syntax is straightforward, but feel free to ask questions. Note
 > | that the stylesheets are *not* "parameters", as there is no reason to
 > | make a difference between the stylesheet and the main input of the
 > | transformation: both are XML documents.
 >
 > Indeed. What about the case where I want to pass the parameter
 > "chunk-on-sections" with the value "1" to the XSLT processor?

XPL does not support parameters natively, so you don't do this
directly. However in the rare case we need this, we use a little
trick: the ability to embed an infoset directly in the <p:input>
element, and inheritance of parameters in XSLT. The result becomes:

   <p:processor name="xpl:xslt">
     <p:input name="data" infosetref="#document-1"/>
     <p:input name="stylesheet">
       <xsl:stylesheet version="1.0">
         <!-- This is the stylesheet to pass parameters to -->
         <xsl:import href="strip-ids.xsl"/>
         <!-- Here we assign a value to the "start" parameter -->
         <xsl:param name="chunk-on-sections" select="1"/>
       </xsl:stylesheet>
     </p:input>
     <p:output name="data" id="..."/>
   </p:processor>

We think that this mechanism is acceptable based on our personal use
cases which do not massively require passing parameters to
stylesheets, but we understand that people may think this is not
sufficient. Note that with this, you can pass any XML type you want as
parameters: you are not limited to strings or numbers.

In many cases, a stylesheet may require more configuration
information, in which case we have defined a URI scheme called "input"
which allows writing things, from withing an XSLT stylesheet, like:

   doc('input:my-input')

This allows the stylesheet to read a processor input called
"my-input", declared as:

   <p:input name="my-input" infosetref="#something"/>

This has also contributed to limiting the number of uses cases where
parameters are required. The same technique can be used from an
XInclude processor:

   <xi:include href="input:my-input"/>

-Erik

Received on Friday, 17 February 2006 19:52:33 UTC