- From: Henry S. Thompson <ht@inf.ed.ac.uk>
- Date: Fri, 06 Jul 2007 11:17:40 +0100
- To: public-xml-processing-model-wg <public-xml-processing-model-wg@w3.org>
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 We've got several gaps in this area at the moment. 1) The current draft doesn't say anything about how you get access to parameters passed to pipelines 'from outside'; 2) The current draft doesn't say anything about how you get access to parameters passed to pipelines when invoking them by name; 3) There is an ednote in the current draft [1] raising the question of whether steps which declare no parameter inputs get the pipeline parameters by default. Here are some suggestions about how we deal with this, based in part on IRC discussion with Norm (but don't assume he agrees with any of this): 1) Sets of parameter name/value pairs may be externally specified in two ways, which I'll call 'named' and 'anonymous': named: a named collection of name/value pairs anonymous: an un-named collection of name/value pairs For example > xproc -params xslt1 x=1 y=1 -params xslt2 x=2 y=2 -params debug=no pipe.xpl might be one way to produce two named sets and one anonymous set p:pipeline allows parameter inputs (a parameter input is a static error on any other container). It's a dynamic error if a named parameter set is specified externally for a pipeline which does not have a parameter input of the same name. An unnamed parameter set is always allowed. Steps can access named parameter sets in the obvious way, e.g. <p:input name='foo' kind='parameter'> <p:pipe step='pipe' port='xslt1'/> </p:input> Steps can access the unnamed parameter set using defaulting: <p:input name='bar' kind='parameter'/> 2) A pipeline invoked by name gets its parameters in an analogous way: 2a) Iff the pipeline was defined with one or more parameter input ports, the invocation may include a binding for those ports: <p:pipeline type='my:pipe'> . . . <p:input port='xslt1' kind='parameter'/> . . . </p:pipeline> <my:pipe> . . . <p:input port='xslt1'> <p:inline> <c:parameter name='x' value='3'/> </p:inline> </p:input> . . . </my:pipe> 2b) Explicit use of p:parameter in a named pipeline invocation produces anonymous parameters for the invoked pipeline: <p:pipeline type='my:pipe'> . . . <p:xquery> <p:input name='baz' kind='parameter'/> . . . </p:xquery> . . . </p:pipeline> <my:pipe> <p:parameter name='forXQuery' value='17'/> . . . </my:pipe> Open questions: A) As specified above there is no way to pass the anonymous set from the top-level pipeline down anonymously to a pipeline invoked by name, which is either a bug or a feature. . . B) 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, . . .? C) There's a covert assumption in the current spec., unchanged by any of the above, that the API from the runtime to step implementations will have a way of accessing parameters. Since parameters aren't declared, this access will have to be undifferentiated as to port name, that is, it's just "give me all the parameter bindings you have for this instance of this step". So 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 them (as in the 'bar' example under (1) above); c) If a parameter port has been explicitly bound to them, or if no parameter ports have been bound at all. I believe Alessandro favours (b), and I favour (c). The difference is manifested in the case of a simple p:xslt step -- if the pipeline is minimal, i.e. <p:pipeline> <p:xslt> <p:input port="transform"> <p:document href="..."/> </p:input> </p:xslt> </p:pipeline> and I invoke it with some parameters (either 'from outside', or by invoking it by name), does the XSLT step see the parameters? I think users will expect it to, and I think they're right. On proposal (c) above, if you want to _protect_ a step from parameters, you would write e.g. <p:pipeline> <p:xslt> <p:input port='mum' kind='parameter'> <p:empty/> </p:input> </p:xslt> </p:pipeline> thereby forestalling the delivery of the anonymous set. ht [1] http://www.w3.org/XML/XProc/docs/WD-xproc-20070706/#default-params - -- Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh Half-time member of W3C Team 2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440 Fax: (44) 131 650-4587, e-mail: ht@inf.ed.ac.uk URL: http://www.ltg.ed.ac.uk/~ht/ [mail really from me _always_ has this .sig -- mail without it is forged spam] -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) iD8DBQFGjhbFkjnJixAXWBoRAhWuAJ9ztlaeG1QMIf55VdyGUASrKu0rQACdEdB3 j0eliSE6kCHNCxx2GKpJMVM= =gHcj -----END PGP SIGNATURE-----
Received on Friday, 6 July 2007 10:17:52 UTC