- From: Henry S. Thompson <ht@inf.ed.ac.uk>
- Date: Thu, 24 May 2007 14:44:15 +0100
- To: Jeni Tennison <jeni@jenitennison.com>
- Cc: public-xml-processing-model-wg@w3.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 So after thinking a bit more about this, I'm left with two things at least I don't like at all: 1) Parameter inheritance is now very complicated -- in the absence of any parameter ports, parameters are effectively inherited and shadowed on an individual basis, but in the _presence_ of explicit parameter port bindings, an individual parameter binding may be hidden even though no parameter of that name was presented to the relevant parameter port (see example A below). And parameter port bindings are shadowed on a whole-document basis, so that I have to explicitly join parameter documents by multiple references (see example B below), and parameters set by parameter port bindings are _not_ visible inside named pipes if they also happen to use parameter ports (see example C below). 2) In the case where both individual parameter binding and parameter port binding occur, in at least some cases the engine will have to compute and make available a synthetic c:parameters document (see example D below). I have an alternate proposal, which I believe is both much simpler to explain and to implement, and which provides all the functionality of the current 'alternative' [2]: To the _status quo_ (inherited, scoped, individual parameter bindings, per [1] as of 10 May), simply add a single new element, let's call it p:parameters, allowed once only in all steps (including containers), content model as of p:input, that is (p:inline|p:document|p:pipe)+ Contents should be a sequence of c:parameters documents, containing c:parameter*. Parameter semantics are unchanged from [1] except that we treat the c:parameter name-value pairs as if they were p:parameter name-value pairs on the step, occuring _before_ any explicit p:parameter elements there. That's it -- consistent inheritance and scoping, but the ability to construct, target and manipulate groups of parameter bindings. Jeni, Norm -- is there anything you _can't_ do with this mechanism that you could do with [2]? ht Examples (stipulate that we define our XSLT step with <p:input port="params" parameters="yes"/> Example A: <p:pipeline> <p:option name="debug"/> <p:parameter name="debug" value="$debug"/> . . . <p:xslt> <p:input port="params"> <p:inline> <c:parameters> <c:parameter name="diff" value="0"/> </c:parameters> </p:inline> </p:input> </p:xslt> </p:pipeline> There will be _no binding_ for the 'debug' parameter visible within the XSLT step. Example B: <p:pipeline> . . . <p:group name="g"> <p:input port="defaults" parameters="yes"> <p:document href="my-parms.xml"/> </p:input> . . . <p:xslt> <p:input port="transform">...</p:input> </p:xslt> <p:xslt> <p:input port="transform">...</p:input> <p:input port="params"> <p:document href="my-parms.xml"/> <p:inline> <c:parameters> <c:parameter name="diff" value="0"/> </c:parameters> </p:inline> </p:input> </p:xslt> </p:pipeline> I have to explicitly reference the my-parms.xml document a second time in the second XSLT step (but not in the first). Example C: <p:pipeline name="utility"> . . . Steps X . . . <p:group> <p:input port="defaults" parameters="yes"> <p:document href="my-parms.xml"/> </p:input> . . . Steps Y . . . </p:group> </p:pipeline> <p:pipeline> <p:option name="debug"/> <p:parameter name="debug" value="$debug"/> . . . <my:utility> . . . </my:utility> </p:pipeline> The 'debug' parameter will be visible to Steps X, but not to Steps Y. There is _nothing_ you can do in the outside pipeline to get parameters into Steps Y. Example D: <p:pipeline> . . . <p:group name="g"> <p:input port="defaults" parameters="yes"> <p:document href="my-parms.xml"/> </p:input> <p:parameter name="foo" value="baz"/> . . . <p:xslt> <p:input port="transform">...</p:input> <p:input port="params"> <p:pipe step="g" port="defaults"/> <p:inline> <c:parameters> <c:parameter name="diff" value="0"/> </c:parameters> </p:inline> </p:input> </p:xslt> </p:pipeline> The p:pipe in the "params" port must see a synthetic c:parameters document combining my-parms.xml and a binding for 'foo' to 'baz'. [1] http://www.w3.org/XML/XProc/docs/langspec.html [2] http://www.w3.org/XML/XProc/docs/alternate/ - -- 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) iD8DBQFGVZa0kjnJixAXWBoRAruyAJ9xnSFqXrmj5QJX0voeWbHsi9vJJACfWfUH TeQAsFqNYPIEvtLOWvWZ7pE= =0qxC -----END PGP SIGNATURE-----
Received on Thursday, 24 May 2007 13:44:43 UTC