- From: Norman Walsh <ndw@nwalsh.com>
- Date: Thu, 21 Feb 2008 12:41:47 -0500
- To: public-xml-processing-model-comments@w3.org
- Message-ID: <m27igydx5w.fsf@nwalsh.com>
This whole option situation is ugly. On the one hand, I want options on pipelines to work like parameters in XSLT: <p:pipeline type="px:mypipe"> <p:option name="key" value="my-default-key"/> <p:option name="token" select="concat('stuff',$key,'more stuff')"/> .... </p:pipeline> So that if I pass in a different key value, I get a different token value automatically. On the other hand, I want options on atomic steps to work like with-param in XSLT: <p:option name="match" value="MATCHSTUFF"/> <p:add-attributes> <p:option name="match" value="//a[@foo]"/> <p:option name="attribute-value" select="$match"/> </p:add-attributes> So that the value of the attribute-value option is "MATCHSTUFF" not "//a[@foo]". Maybe the simplest thing to do is use p:with-option on atomic steps and p:option on compound steps and declare-step. Now that makes me think that if we want these things to be just like param and with-param in XSLT, maybe the kindest thing we can do is name them p:param and p:with-param. But we can't do that because we've already got this great big ball of complexity under the rubric parameters; having p:parameter and p:param is just insane, we can all agree, I hope. We've got this other related wrinkle that we use p:option in places where "option" doesn't make a lot of sense: <p:group> <p:option name="uuid" select="px:uuid()"/> ... </p:group> There's no way to "call" a group, so that's really a p:variable. I note also that because we don't have any way of distinguishing between options and variables, it's impossible to write: <p:pipeline> <p:option name="cannot-be-changed-by-the-caller" value="magictoken"/> ... </p:pipeline> We could fix this with p:variable, if we wanted to introduce another concept into the mix. Actually, thinking about it a little more, I guess we don't have to use p:with-option. We could finesse the problem and say that the options that are in scope are all of those *declared* by preceding-siblings or *declared* by ancestors. This relies on the terribly subtle distinction that a p:option with a select attribute on a compound step is simultaneously a declaration *and* the association of a default value. Whereas on an atomic step, it's only the assignment of a value to an option declared elsewhere. That does the least violence to the spec, I guess, but...all this option/parameter subtlety is a little scary. Be seeing you, norm -- Norman Walsh <ndw@nwalsh.com> | Everything should be made as simple as http://nwalsh.com/ | possible, but no simpler.
Received on Thursday, 21 February 2008 17:42:18 UTC