p:output and connections

Latest editor's draft, 3 November 2009

1) 5.4 p:output says

"It is a static error (err:XS0029) to specify a connection for a p:output
inside a p:declare-step for an atomic step."

How is a step supposed to produce an output then? Especially one where the
result comes from a non-primary port of a step, or where it comes from the
primary output port of a step other than the latest one. Consider the very
first example:

<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
                name="xinclude-and-validate"
                version="1.0">
  <p:input port="source" primary="true"/>
  <p:input port="schemas" sequence="true"/>
  <p:output port="result">
    <p:pipe step="validated" port="result"/>
  </p:output>

  <p:xinclude name="included">
    <p:input port="source">
      <p:pipe step="xinclude-and-validate" port="source"/>
    </p:input>
  </p:xinclude>

  <p:validate-with-xml-schema name="validated">
    <p:input port="source">
      <p:pipe step="included" port="result"/>
    </p:input>
    <p:input port="schema">
      <p:pipe step="xinclude-and-validate" port="schemas"/>
    </p:input>
  </p:validate-with-xml-schema>
</p:declare-step>

Doesn't the above sentence mean this creates a static error? Or am I wrong
in assuming that "connection" is equivalent to "binding"?

2) What happens if a connection is provided upon a call to an atomic step?
Is this a static error, and if not, does the connection get used if the
returned output is empty (and/or simply not populated by the step), or does
it completely abolish whatever the step may have produced on that port?

In other words, what happens if I have, say:

<p:pipeline xmlns:p="http://www.w3.org/ns/xproc" version="1.0"
name="pipeline">
  <p:xslt>
    <p:input port="stylesheet">
      <p:document href="stylesheet.xsl"/>
    </p:input>
    <p:with-option name="version" value="2.0"/>
    <p:output port="secondary">
      <p:pipe step="pipeline" port="source"/>
    </p:output>
  </p:xslt>
</p:pipeline>

Personally, I think this should either be explicitly stated as a static
error OR be used as a *default* connection in case the step produces an
empty sequence on that port. In the case of the above example, it could mean
that the source document will be provided on the secondary port if the
stylesheet didn't produced a second document, but if the stylesheet did
produced one or more secondary documents, they'll be seen there.

3) Is p:empty the default connection for the non-primary outputs of steps? I
assume yes, but that doesn't seem to be clarified. An acceptable
alternative, I think, is to disallow non-primary outputs in step
declarations without a connection of some kind (completely in contrast with
the 5.4 sentence at the start).

Regards,
Vasil Rangelov

Received on Friday, 6 November 2009 22:46:54 UTC