- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Thu, 18 Oct 2007 21:12:26 +0100
- To: public-xml-processing-model-comments@w3.org
Norman Walsh wrote: > (This originally arose as part of another thread[1]) > > Consider the following pipeline: > > <p:pipeline> > <p:option name="a" value="1"/> > <p:option name="b" select="$a"/> > ... > > We decided that was not allowed. (Although I don't think the spec is > sufficiently clear on this point.) Did we? That seems like a mistake to me. I think we should say that the definition(-and-binding) of an option (eg a <p:option> that's a child of <p:pipeline>) defines a variable binding that's then visible to all following siblings and their descendants. On the other hand, the *binding* of an option (ie a <p:option> that's a child of a step element) doesn't set up a variable: it's only used to provide a binding for the invocation of the step. So you can do what you have above, but you can't do: <my:step> <p:option name="a" value="1" /> <p:option name="b" value="$a" /> </my:step> (unless, of course, there's an 'a' option in-scope during the step invocation). This is the same as in XSLT: when you declare a parameter, the parameter binding is visible to other parameter declarations; when you bind a parameter (with <xsl:with-param>) then that's not counted as a variable binding in the scope of the template invocation. > It does raise the problem that the *pipeline* no longer has an option > named "b". How should I write this pipeline so that it has two options > "a" and "b" where "b" gets the value of "a" by default if no value is > specified by the caller? That's precisely why an option should be able to refer to any previously-declared option. (Note that circularity isn't an issue if an option can only refer to one that appears earlier in its container step.) > Now consider this pipeline: > > <p:pipeline> > <p:option name="a" select="."> > <p:pipe step="uuid" port="result"/> > </p:option> > > <px:uuid name="uuid"/> > ... > > Does anyone think that's not a legal pipeline? Well, me. And the spec I think. In 5.11 (p:pipe) it says: "In all cases except the p:output of a compound step, it is a static error (err:XS0022) if the port identified by a p:pipe is not in the readable ports of the step that contains the p:pipe." The <p:option> here isn't the <p:output> of a compound step. The readable ports of the step that contains the <p:pipe>: the <p:pipeline> in the above. It's not clear from the spec what the readable ports are of a <p:pipeline>, but I don't think it includes the outputs of the steps that it contains. FWIW, I do think the <p:pipe> in the <p:option> should be able to point to an *input* of the pipeline. Cheers, Jeni -- Jeni Tennison http://www.jenitennison.com
Received on Thursday, 18 October 2007 20:12:38 UTC