- From: Norman Walsh <ndw@nwalsh.com>
- Date: Fri, 23 Oct 2009 07:43:23 -0400
- To: public-xml-processing-model-comments@w3.org
- Message-ID: <m2ws2mmj38.fsf_-_@nwalsh.com>
"Toman_Vojtech@emc.com" <Toman_Vojtech@emc.com> writes: > +1 one from me. I have been facing exactly the same problems you > described. Especially explaining this to first time XProc users is not > easy. > > I believe the main motivation for the current behavior was indeed the > nonexistence of an undefined XPath context in 1.0 implementations. Ok. Good. Lots of positive feedback, no negative feedback. I'll add this to the draft. > 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). Because of that, you have to do: > > <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:input port="parameters"> > <p:empty/> > </p:input> > </p:xslt> > </p:declare-step> > > My feeling is that just the presence of one or more p:with-param for a > parameter port should be enough. Typically, I think you want to say: I > want to pass params A and B to the step, and that's it. More rarely you > want: pass params A and B, and whatever else was passed to as parameters > to the owner pipeline. I'm not sure I agree. The whole default parameter input port thing is there to allow users to pass in new parameters. For stylesheets that have dozens of parameters, I think it might still be the case that users would like to pass in others from the command line, even though the pipeline author has set a couple of them explicitly. Pipeline authors aren't necessarily going to remember to setup a binding for that. OTOH, your fix is to explicitly bind the port to p:empty, so you've prevented what we intended anyway. My fix is to add a parameter input port to the pipeline :-) > 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. > 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> > ... > > I guess I can live with the status quo (although I think it is a bit > confusing at times), but I would like to know what others think of such > a change. Indeed. Users and implementors, please weigh in! Be seeing you, norm -- Norman Walsh <ndw@nwalsh.com> | Birds are taken with pipes that imitate http://nwalsh.com/ | their own voices, and men with those | sayings that are most agreeable to | their own opinions.--Samuel Butler
Received on Friday, 23 October 2009 11:44:07 UTC