- From: Norman Walsh <ndw@nwalsh.com>
- Date: Fri, 19 Oct 2007 08:00:36 -0400
- To: public-xml-processing-model-comments@w3.org
- Message-ID: <m2hckns49n.fsf@nwalsh.com>
/ Jeni Tennison <jeni@jenitennison.com> was heard to say: | 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. That seems better to me. |> 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. That certainly simplifies things, I guess. Are we all happy that the pipeline above isn't legal? | FWIW, I do think the <p:pipe> in the <p:option> should be able to | point to an *input* of the pipeline. Yes. Be seeing you, norm -- Norman Walsh <ndw@nwalsh.com> | Don't use the impudence of a beggar as http://nwalsh.com/ | an excuse for not helping him.--Rabbi | Shmelke of Nicolsburg
Received on Friday, 19 October 2007 12:00:49 UTC