- From: Toman, Vojtech <vojtech.toman@emc.com>
- Date: Mon, 30 Sep 2013 10:36:15 -0400
- To: "public-xml-processing-model-wg@w3.org" <public-xml-processing-model-wg@w3.org>
Hi Norm,
Trying to get closer to xsl:variable. Nice.
I am not sure about the need for rule 4, though. The moving of steps is an internal detail. In your last example, the two ex:foo variables have the same name, but they are actually two *different* variables (as I infer from the text of rule 4). With that in mind, I can imagine an implementation that assigns variables internal unique ids which makes it then possible to move steps and/or variables around (with restrictions given by the dependency graph, of course) without introducing lexical scoping problems. A less sophisticated implementation might be more conservative when reordering steps that depend on variables - but that is fine.
Regards,
Vojtech
--
Vojtech Toman
Consultant Software Engineer
EMC | Information Intelligence Group
vojtech.toman@emc.com
http://developer.emc.com/xmltech
> -----Original Message-----
> From: Norman Walsh [mailto:ndw@nwalsh.com]
> Sent: Monday, September 30, 2013 3:39 PM
> To: public-xml-processing-model-wg@w3.org
> Subject: Relax p:variable restrictions
>
> Hi folks,
>
> In line with our focus on usability, I think we should relax the
> restriction that p:variable can only occur at the top a subpipeline. We
> did it so that implementors would not have to analyze every XPath
> expression for variable references. I propose new rules:
>
> 1. p:variable can go anywhere a step can go 2. p:variables are
> lexically scoped in the obvious way 3. It's an error if the xpath-
> context of a p:variable relies, directly
> or indirectly, on the output from any step that uses the variable 4.
> It's an error if reordering the steps in the pipeline moves any step
> into the "shadow" of a different variable with the same name
> (breaks the lexical scoping)
> 5. p:variables are invisible for the purposes of computing the default
> readable port
>
> Assume for the moment that p:identity has a 'ref' option. Consider:
>
> <p:variable name="ex:foo" select="1">
> <p:xpath-context><p:empty/></p:xpath-context>
> </p:variable>
>
> <p:identity name="one" ref="{$ex:foo}"/>
>
> <p:variable name="ex:foo" select="2">
> <p:xpath-context><p:empty/></p:xpath-context>
> </p:variable>
>
> <p:identity name="two" ref="{$ex:foo}"/>
>
> The identity named 'one' sees ref=1, the identity named 'two' sees
> ref=2.
>
> <p:variable name="ex:foo" select="1">
> <p:xpath-context><p:pipe name='two'/></p:xpath-context>
> </p:variable>
>
> <p:identity name="one" ref="{$ex:foo}"/>
>
> <p:variable name="ex:foo" select="2">
> <p:xpath-context><p:empty/></p:xpath-context>
> </p:variable>
>
> <p:identity name="two" ref="{$ex:foo}"/>
>
> Error: The first ex:foo indirectly depends on the output of the
> identity step that uses it.
>
> <p:variable name="ex:foo" select="1">
> <p:xpath-context><p:empty/></p:xpath-context>
> </p:variable>
>
> <p:identity name="one" ref="{$ex:foo}">
> <p:input port="source">
> <p:pipe step="two"/>
> </p:input>
> </p:identity>
>
> <p:variable name="ex:foo" select="2">
> <p:xpath-context><p:empty/></p:xpath-context>
> </p:variable>
>
> <p:identity name="two" ref="{$ex:foo}">
> <p:input port="source">
> <p:inline><doc/></p:inline>
> </p:input>
> </p:identity>
>
> Error. Step 'one' has to be "moved" to after 'two'. That moves it into
> an area with a different lexical $ex:foo.
>
> Be seeing you,
> norm
>
> --
> Norman Walsh
> Lead Engineer
> MarkLogic Corporation
> Phone: +1 512 761 6676
> www.marklogic.com
Received on Monday, 30 September 2013 14:36:57 UTC