- From: Norman Walsh <ndw@nwalsh.com>
- Date: Tue, 10 Jul 2007 09:11:45 -0400
- To: public-xml-processing-model-wg@w3.org
- Message-ID: <87vecsmmi6.fsf@nwalsh.com>
/ Jeni Tennison <jeni@jenitennison.com> was heard to say: | Hi, | | That looks pretty good to me. Just a few of comments: | | First, I don't think we should be making any distinction between how | pipelines are invoked "from outside" or "by name". In both cases, | the pipeline needs to be provided with bindings for its inputs | (parameter and non-parameter) and bindings for its options. In the | case of invocation "from outside", it has to be | implementation-defined exactly how that's done. It's useful to | consider how implementations *might* do it, but we're not going to | put that in the spec. (I'd hope implementations would try to do it | in a similar way to how steps are invoked by XProc itself, rather | than having different rules about what gets done with anonymous | parameter ports, but we can't legislate that either way.) Yes, I agree. We can't really tell implementors how to deal with the command line or API they provide. | Second, I think that giving <p:parameter> an optional port attribute | would help. Specifically, it would mean that <p:parameter> could be | used even if a pipeline accepted more than one parameter port. For | example: | | <p:pipeline type="my:pipe"> | <p:input port="params1" kind="parameter" /> | <p:input port="params2" kind="parameter" /> | ... | </p:pipeline> | | <my:pipe> | <p:parameter port="params1" name="x" value="$x" /> | <p:parameter port="params2" name="y" value="$y" /> | </my:pipe> | | would work. This would make life a lot easier for people who do need | to use more than one parameter port, without making it any harder | for people who don't: the port attribute can default to the name of | the (only) parameter port (which might be anonymous) when there's | only one. I considered this briefly, but rejected it as creeping featurism. But maybe it's the right thing. | Third, I wonder if we can place some sensible restrictions on when | an anonymous parameter port is implicitly declared, along the same | lines as for inputs and outputs. So a pipeline only has an implicit | declaration for an anonymous parameter port added if (a) there are | no other parameter port declarations and (b) one of its contained | steps has a parameter port. This would have the advantage of better | error reporting when a pipeline user mistakenly passes in parameters | rather than options. I suppose we could. Thoughts? |> Open questions: |> |> A) Should <p:input kind='parameter' .../> as a child of p:pipeline be |> purely a declaration, i.e. be necessarily empty, or should we |> allow it to have content, in which case how do we treat that |> content -- merge it with external input, ignore it if there's any |> external input, . . .? | | I can see arguments all ways: | | i) Pro empty: As the pipeline author, you're not supposed to know | the names of parameters (this being what distinguishes them from | options), so you (should) never be able to provide a sensible set of | defaults. Therefore it should always be empty. | | ii) Pro mass override: Parameter inputs should work in just the same | way as ordinary inputs. Users should be able to provide a default | that is entirely overridden if a binding is specified on invocation. | | iii) Pro individual override: The most common situation is where you | have a bunch of default values for parameters which should be | overridden individually. It's excessively hard for invocations to | specify all parameter values: they should be able to just supply | values for parameters that don't take the default value. | | I think I just about favour (i), with (iii) a close second, and I'm | not so keen on (ii) but could live with it. I think I favor (i) for V1. I could live with (ii). I'd resist (iii). If the functionality of (iii) is important enough, I think I'd prefer to allow p:parameter directly inside the p:pipeline instead as a mechanism for achieving it. In fact, it may be a bug that p:parameter is currently not allowed since parameter inputs are. I don't see much value in allowing one but not the other. |> Finally question (3) above becomes, in the terms of the proposal in |> (1) and (2) above, "Under what circumstances should the runtime |> deliver the anonymous parameter set when a step implementation asks |> for its parameters?" |> |> Possible answers: |> a) Always; |> b) Only if a parameter port has been explicitly bound to it (as |> in the final example under (1) above) (and that port is asked |> for); |> c) If a parameter port has been explicitly bound to it (and is |> asked for), or if some parameter ports have not been bound at |> all (and all parameters are asked for? and any unbound |> parameter port is asked for? and there is only one parameter |> port declared and unbound?). | | If I can turn the language round, I think the question is "when | should the anonymous parameter set passed to a pipeline get passed | on to a contained step in that pipeline?" Certainly it should when | it is explicitly bound to a parameter port with an empty <p:input>. | | Can we use the notion of a primary parameter port, just as we have a | primary standard port? If there's only one parameter port, that's | the primary one; otherwise one of the parameter ports can be marked | with primary="yes". Then we can say that the anonymous parameter set | gets passed in to the primary parameter port. That would, at least, | mirror the way normal inputs work. Sigh. Yet more concepts, but yes, that does sound like the right answer. Be seeing you, norm -- Norman Walsh <ndw@nwalsh.com> | Faith makes many of the mountains which http://nwalsh.com/ | it has to remove.--W. R. Inge
Received on Tuesday, 10 July 2007 13:11:51 UTC