- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 23 Oct 2009 20:14:06 +0100
- To: public-xml-processing-model-comments@w3.org
On 23 Oct 2009, at 12:43, Norman Walsh wrote:
> "Toman_Vojtech@emc.com" <Toman_Vojtech@emc.com> writes:
>> Now, ehm, there is one more thing, sort of similar, that I find
>> equally
>> confusing/annoying. Consider this pipeline:
>>
>> <p:declare-step>
>> <p:output port="result"/>
>>
>> <p:xslt>
>> <p:input port="source">...</p:input>
>> <p:input port="stylesheet">...</p:input>
>> <p:with-param name="foo" select="...">...</p:with-param>
>> </p:xslt>
>> </p:declare-step>
>>
>> The example is invalid because the pipeline does not have a primary
>> parameter input port (and the "parameters" port of p:xslt is
>> therefore
>> unconnected).
Am I correct that:
<p:declare-step>
<p:output port="result" />
<p:xslt>
<p:input port="source">...</p:input>
<p:input port="stylesheet">...</p:input>
</p:xslt>
</p:declare-step>
is invalid for the same reason? (With the possible fixes being to
explicitly indicate that the 'parameters' input port for <p:xslt> is
empty, or to create a primary parameter input port for the declared
step.)
[snip]
>> What I am proposing is something like this:
>>
>> If there is a p:with-param for a parameter input port, that port gets
>> *never* connected to the primary parameter input port of the owner
>> pipeline automatically; if you want that, you can always use an
>> explicit
>> binding. If there is no p:with-param for a parameter port, the port
>> gets
>> connected to the primary parameter input port of the owner pipeline.
>
> I guess I could live with that, but it's much more of a coin toss to
> me. Parameters are pretty confusing, I really don't know if making the
> rules more complex helps or hurts with respect to users figuring out
> what they need to do.
FWIW, what I'd expect is, in:
<p:pipeline>
<p:xslt>
<p:input port="source">...</p:input>
<p:input port="stylesheet">...</p:input>
<p:with-param name="foo" select="..." />
</p:xslt>
</p:pipeline>
for the parameters passed to the pipeline to get passed through to the
XSLT, with the $foo parameter always provided with the default value
that's specified on the <p:with-param>.
And in:
<p:declare-step>
<p:output port="result" />
<p:xslt>
<p:input port="source">...</p:input>
<p:input port="stylesheet">...</p:input>
<p:with-param name="foo" select="..." />
</p:xslt>
</p:declare-step>
for the XSLT to be passed only the $foo parameter and nothing else
because the step declaration has no primary parameter input port.
In other words, I agree with Vojtech that the presence of the <p:with-
param> should mean that the lack of connection to the XSLT steps
primary parameter input port doesn't matter; but I don't agree with
him that the presence of the <p:with-param> should cancel out the
implicit connection between the primary parameter input port on the
step and the one from its container.
>> I often find myself adding p:empty bindings to parameter input ports,
>> especially in pipelines that contain multiple steps that take
>> parameters. In virtually all cases, only one of these steps reads the
>> parameters from the owner pipeline; the other steps typically take
>> the
>> parameters from somewhere else:
>>
>> <p:xslt>...</p:xslt>
>> ...
>> <p:xquery>...</p:xquery>
>> ...
What I've suggested above wouldn't completely solve this problem, but,
with those suggestions in place, if you made the parameter input port
on the owner pipeline non-primary then you could connect that port to
only the relevant XSLT or XQuery step without needing to explicitly
bind the primary parameter input ports of the other steps (so long as
they were passed parameters with p:with-param). So it would help a bit.
Cheers,
Jeni
--
Jeni Tennison
http://www.jenitennison.com
Received on Friday, 23 October 2009 19:14:35 UTC