Re: Cardinality of inputs & outputs

Norman Walsh wrote:
> / Jeni Tennison <jeni@jenitennison.com> was heard to say:
> |> Do you have any use case in mind ?
> |
> | An optional pre/post-processing step. If the 'preprocess' step has a
> | document on it, use it to transform the source prior to the other
> | processing; if not, then just use the source as-is.
> 
> How do you do that?

Currently, I'd do:

<p:pipeline>
   <p:input port="source" />
   <p:input port="preprocess" sequence="yes" />
   <p:count name="nPreprocess">
     <p:input port="source">
       <p:pipe source="preprocess" />
     </p:input>
   </p:count>
   <p:choose name="preprocessed">
     <p:xpath-context>
       <p:pipe source="nPreprocessed" />
     </p:xpath-context>
     <p:when test=". = 1">
       <p:output port="result" />
       <p:xslt>
         <p:input port="source">
           <p:pipe source="source" />
         </p:input>
         <p:input port="stylesheet">
           <p:pipe source="preprocess" />
         </p:input>
       </p:xslt>
     </p:when>
     <p:otherwise>
       <p:output port="result" />
       <p:identity>
         <p:input port="source">
           <p:pipe source="source" />
         </p:input>
       </p:identity>
     </p:otherwise>
   </p:choose>
   ... processing of preprocessed/result ...
</p:pipeline>

I'm forced to specify the 'preprocess' port as a sequence despite the 
fact that I only want it to hold a maximum of one document.

> | Another example is
> | the 'source' input on the p:xslt2 step: not all transformations
> | require source documents.
> 
> I had expected the xslt2 step to require either exactly one source
> document or an initial template name, or both. I would have expected a
> source with no documents on it to be an error.
> 
> I'm not sure that's justified, but it's what I would have expected.

(In fact, the way p:xslt2 is specified is a lot better than either of 
our expectations, but let's pursue this...) It sounds like you agree 
that steps might have optional inputs. The problem is

(a) there isn't a required attribute allowed on <p:input>
(b) all inputs must be specified or the step no longer matches its signature

As I said to Mohamed, I think that using the cardinality of an input is 
a lot less disruptive than introducing the concept of non-required inputs.

Jeni
-- 
Jeni Tennison
http://www.jenitennison.com

Received on Tuesday, 22 May 2007 21:17:00 UTC