- From: Richard Tobin <richard@inf.ed.ac.uk>
- Date: Fri, 22 Jun 2007 16:01:23 +0100 (BST)
- To: public-xml-processing-model-wg@w3.org
Further to discussion during yesterday's telcon, herewith a proposal
about input and output defaulting for pipelines.
It basically adopts Richard's suggestion that a pipeline's inputs/outputs
default if there is a need for them to do so, because their first
component needs an input/final component produces an output.
Here's how this works in detail:
1) We make defaulting more symmetrical for p:input and p:output, by
adding a 'default' attribute to p:input, allowed only in
declaration contexts (as there already is one on p:output). An
input to a step is _the_ default input iff
a) it is the only declared input and it was not declared with
default='no';
or
b) it is declared with default='yes'.
It is an error to declare more than one input as default='yes'.
It is _not_ an error to have no default inputs.
It is _not_ an error to have no default outputs (this is a change).
The default input of a step is bound to the default readable port if
it is not otherwise bound;
Non-default inputs are only bound to the default readable port if
you call for that to happen by writing
<p:input port="not-the-default-input-port"/>
2) Pipelines w/o a declared default input get an un-named default
input iff their first contained step has an unbound default input.
3) Pipelines w/o a declared default output get an un-named default
output iff their last contained step has an unbound default output.
This means that not only does
<p:pipeline>
<p:identity/>
</p:pipeline>
do the obviously right thing, but so does
<p:pipeline name='top'>
<p:input port='stylesheet' default='no'/>
<p:xslt>
<p:input port='stylesheet'>
<p:pipe step='top' port='stylesheet'/>
</p:input>
</p:xslt>
</p:pipeline>
To construct a pipeline which has no input, just start it with a step
which needs no default input, e.g.
<p:pipeline>
<p:identity>
<p:input port='source'>
<p:document href="http://www.example.org/fixedInput.xml"/>
</p:input>
</p:identity>
. . .
</p:pipeline>
This is the obvious case for a pipeline with no input, that is, a
pipeline with a fixed input.
Exactly parallel, to construct a pipeline which produces no output,
just end it with a step which produces no default output.
We currently don't have an easy way to do this, but by analogy with
the previous (pipeline with fixed input) example, a pipeline with
fixed output _ought_ to be such a case:
<p:pipeline>
. . .
<p:store href="http://www.example.org/fixedOutput.xml"/>
</p:pipeline>
To accomplish this, we propose two additional related changes:
4) The declaration for p:store should change to look like this:
<p:declare-step type="p:store">
<p:input port="source"/>
<p:output port="result" default="no"/>
. . .
</p:declare-step>
That is, p:store _has_ no default output.
5) It _is_ an error for the _default_ output of a step to fall on the
floor.
We believe that making these changes actually cleans up a number of
minor glitches, and overall makes the spec.
-- Richard and Henry
Received on Friday, 22 June 2007 15:01:35 UTC