See also: IRC log
Regrets from Norm, Michael, Mohamed, Andrew
Henry to chair
Register and report your plans to Murray
A-13-01: MSM to draft a complete table; ETA: 15 June 2006
<scribe> Continued; new ETA: 20 July 2006
A-23-02: Richard to write a syntax proposal
A-23-03: Norm to write a syntax proposal
Richard summarizes his message.
Richard: The end of that message
shows a description of components that a processor could use to
check that the pipeline was connected together correctly.
... Rather than making up names for each output of each step, I use the name of the step and the name of input or output from that component.
... There's a single param named xslt-params that would use a small syntax that we'd have to make up.
<MSM> Richard, are you particularly attached to using '.' as the separator?
Norm: Taking some of these ideas in reverse order, I hope we can do better with the parameters to for example XSLT
Richard: I agree it's not very nice, we can certainly do it better. However, we'll need something like this in general for other components, even if we do something special for XSLT.
Henry: I thought we had an emerging consensus that we'd have some parameter that could take a bag of name/value pairs.
<ht> Not what I said, Norm
Richard: The fact that there are things in XSLT that are called parameters and that they coincide with pipeline parameters is something of a coincidence.
<ht> <with-param name="foo" value="baz"/>
Henry: Not what I said. I thought there would never be a constraint on how many of these you'd include in a step.
<alexmilowski> I've been thinking the same way too...
Henry: Any component that had a notion of parameters could use that
Richard: It's possible that there would be program parameters and stylesheet parameters that could have name collisions.
<MoZ> where do we put, for example java parameters (-Xmx) ?
Richard: Some XSLT processors have an "input" parameter for the input document. What if the stylesheet also has a parameter named "input"?
Henry: It seems to me that the 80/20 point is to say that a parameter that has a signature in the component definition, then that's what it is. But if you find another parameter, then that's passed to the application.
<MSM> Richard, in your example that seems to be handled / handleable by passing the *pipeline* input (pipeline stdin, so to speak) using 'with-input' rather than 'with-parameter' -- so I'm not sure I grok the problem
Richard: I'm not sure I'm happy with having those two things completely undistinguished. If you mistype a name, the compiler can't tell.
Henry: It sounds like maybe we should have two element names.
Richard: Yes, we should try to devise a more user-friendly syntax.
Alex: A general rule of saying
that there's an arbitrary number of parameters works for XSLT.
The same is likely to be true for the pipeline itself. It's a
good general mechanism.
... I don't see the harm in having extra parameters.
Norm observes that we might easily be able to do better.
Henry: I think we do indeed need to use the signature to specify required/expected parameters
Norm: Richard's example also gives us an easy starting point for a discussion of how inputs and outputs are named.
<ht> ... And we could put in the signature whether or not a component supports arbitrary name/value parameters, as e.g. XSLT
Richard: It's a notable feature that you don't list anything about the outputs of a component. Which is a bit asymetrical.
<MSM> [msm likes both the flexibility of passing unexpected parameters without an error and the cleanliness of getting a warning if you do so by accident, likes a --pedantic flag for that reason]
Richard: but it probably has to
... Henry wants to be able to not specify any inputs or outputs in a simple pipe. We can do that by having a component definition mark one input and one output as the primary inputs and outputs.
Michael: Richard, are you saying that the reason it looks asymetric is the example?
Richard: No. The mention of the inputs is to connect them to the outputs. There's no point connecting the outputs to the inputs if you've already connected the inputs to the outputs.
Michael: Yes. An arc can be specified from either end and you don't need to do both.
<MSM> (of course, some people wear a belt with their suspenders)
Norm: The only part of this that bothers me a little bit is that you can't tell what the pipeline is doing if you don't also have in hand the component vocabulary.
Richard: That's sort of true.
<MSM> can you expound? not sure what 'having the component vocabulary in hand' means
<MoZ> +1 for being explicit
Norm: There's a fairly
straightforward choice to be made here. We can name the inputs
and outputs individually in each step or we can use an approach
like Richard has outlined.
... Does anyone feel strongly about what is the right answer?
Henry: "Strong" might be too strong,
but I'm inclined to do it Richard's way.
... There's probably not much support for a real two-level proposal with two syntaxes. The alternative, which is a medium level language with lots of defaulting, is probably more likely. Richard's approach is well suited to that story.
Richard: Imagine taking my syntax
and adding with-output to it.
... Then imagine that this with-output is optional, and a default name is generated for you but you can specify a different one i fyou'd like.
Henry: I would like to perform s/with-// on Richard's example
Norm: I think it would make two different variants and we should avoid that if we can.
Richard: I'm inclined to agree
with HST that we should remove "with-"
... In the components, you just say what the inputs and outputs are.
<MoZ> we must have distinction between calling of step and definition of step
Richard: But consider the
pipeline program itself. Where it says <output
name="result"> it's both defining that it has such an output
and declaring what it's connected to. This will happen also in
conditional and switch expressions.
... Given that, the distinction between input and with-input is slightly less meaningful because of that. Unless you make people specify both, which would be unnaturally verbose.
... We should just call them "input" and "output" in both places, and accept that sometimes it serves one, sometimes the other, and sometimes both purposes.
Norm agrees, after some exploration of his own difficulties with conditionals.
Richard: Another thing raised by
that is that if we allow conditionals to do XPath tests against
their inputs, we can no longer list all the inputs to the "if"
... And if we allow "param" to evaluate XPath expressions, that becomes true of all the components.
... It's rather analagous to the parameter case we were discussing earlier.
<choose> <when test="/root/@version < 3.0"> <step process="xsdValidate"> <input name="schemaDoc" href="stale.xsd"/> </step> </when> <otherwise> <step process="xsdValidate"> <input name="schemaDoc" href="current.xsd"/> </step> </otherwise> </choose>
Henry: Those difficulties with conditionals makes me think we shouldn't allow those things in V1
Alex: This is related to my concept of a straight-through "pipe"
Norm asks about how to do HSTs example with two inputs.
Henry: I'd write this instead:
<ht> <input name="schemaDoc" from="foo.result"/>
<alexmilowski> With <choose><input ref="foo.result"/> ...</choose>
Richard: Norm's point is that this allows the choose step to refer to arbitrary parts outside the step.
Henry: Choose is a language construct not a component.
Richard: There are much more
substantial problem with outputs from the choose. If things
outside can reach back into the choose, then it becomes
... Allowing inputs inside a choose to reach out but not allowing things outside reach in might work.
Henry: All the branches of a choose have to have the same output cardinality.
Richard: In my example, you'd
have to have exactly one output.
... OTOH, if you say that choose is like pipeline, and declares its own inputs and outputs, then you can do more.
Norm: My inclination is to have choose declare its inputs and outputs and then for the processor to make sure every branch produces the right outputs.
Henry: Choose is a language construct, parallel with pipeline and not with component.
Richard: I think there's much to be said for saying that it's equivalent to a pipeline in some way.
Henry: The way a pipeline works in
Richard's syntax, the pipeline output names a step output to
hook up to.
... That won't work for the choose.
Richard: Each branch is like a pipeline in that respect. But perhaps the surrounding choose is also like a pipeline.
Henry: I don't think the inputs buys us anything.
Richard: I see your point, and it
would be more convenient from the users point of view, but I
would still like the choose to be equivalent to the
... The "choose" somehow has to define that all the branches have the same outputs. For each branch, you have to connect the output of branch to the output of the conditionals.
Henry: They're going to be pushing not pulling.
Richard: What you could say is that a conditional construct declares the pipelines that must be in it. Then the branches are like pipelines that have already been declared.
Norm: I'm not sure I followed
... Are we coming to consensus on the naming?
Michael: It depends on the separator.
I think the answer is yes.
Richard: I thought there was
... If we imagine that with-output is optional, then we could change our minds later without having any pervasive effect.