Re: Initializing a variable using an output port

Mmm... interestingly it seems that a workaround is to pipe the store  
result with a p:identity just before the p:group:

<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
   xmlns:c="http://www.w3.org/ns/xproc-step"
   version="1.0">
   <p:output port="result"/>
   <!-- get a UUID -->
   <p:uuid match="root/text()" name="uuid">
     <p:input port="source">
       <p:inline>
         <root>@@</root>
       </p:inline>
     </p:input>
   </p:uuid>
   <!-- store a doc, using the UUID in the file name -->
   <p:store name="store">
     <p:input port="source">
       <p:inline>
         <doc/>
       </p:inline>
     </p:input>
     <p:with-option name="href" select="
       concat('/tmp/', normalize-space(.), '.txt')">
       <p:pipe step="uuid" port="result"/>
     </p:with-option>
   </p:store>
   <p:identity name="identity">
     <p:input port="source">
       <p:pipe port="result" step="store"/>
     </p:input>
   </p:identity>
   <!-- store the file name in a var, and create a nw doc -->
   <p:group>
     <p:variable name="file" select="/xs:string(c:result)">
       <p:pipe step="identity" port="result"/>
     </p:variable>
     <p:add-attribute match="hello" attribute-name="a">
       <p:input port="source">
         <p:inline>
           <hello/>
         </p:inline>
       </p:input>
       <p:with-option name="attribute-value" select="$file"/>
     </p:add-attribute>
   </p:group>
</p:declare-step>


It definitely looks like a bug in Calabash, probably related to the  
p:store's output port not being primary...

Romain.

Le 20 déc. 10 à 14:34, Florent Georges a écrit :

> On 20 December 2010 13:44, Florent Georges wrote:
>
>> I will try to make a proper standalone repro then.
>
>  Interesting, I got a repro, and the problem only shows up when
> I compute the file name (the href of p:store) using a UUID got
> from p:uuid.  So with a working pipeline using:
>
>    <p:store name="store" href="/tmp/xproc-store.xml">
>       <p:input port="source">
>          <p:inline>
>             <doc/>
>          </p:inline>
>       </p:input>
>    </p:store>
>
> if I change that bit by:
>
>   <p:uuid match="placeholder" name="uuid">
>      <p:input port="source">
>         <p:inline>
>            <root>
>               <placeholder/>
>            </root>
>         </p:inline>
>      </p:input>
>   </p:uuid>
>
>   <p:store name="store">
>      <p:input port="source">
>         <p:inline>
>            <doc/>
>         </p:inline>
>      </p:input>
>      <p:with-option name="href" select="
>          concat('/tmp/', normalize-space(.), '.xml')">
>         <p:pipe step="uuid" port="result"/>
>      </p:with-option>
>   </p:store>
>
> then it fails later on, when evaluating the p:variable.  Well, I
> thought that was during evaluating p:variable, but because no
> file is produced at all in that case, it seems that's a static
> error.
>
>  Here is a complete repro (the first one fails as described, the
> second one works as expected):
>
>    <p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
>                    xmlns:c="http://www.w3.org/ns/xproc-step"
>                    version="1.0">
>       <p:output port="result"/>
>       <!-- get a UUID -->
>       <p:uuid match="placeholder" name="uuid">
>          <p:input port="source">
>             <p:inline>
>                <root>
>                   <placeholder/>
>                </root>
>             </p:inline>
>          </p:input>
>       </p:uuid>
>       <!-- store a doc, using the UUID in the file name -->
>       <p:store name="store">
>          <p:input port="source">
>             <p:inline>
>                <doc/>
>             </p:inline>
>          </p:input>
>          <p:with-option name="href" select="
>              concat('/tmp/', normalize-space(.), '.txt')">
>             <p:pipe step="uuid" port="result"/>
>          </p:with-option>
>       </p:store>
>       <!-- store the file name in a var, and create a nw doc -->
>       <p:group>
>          <p:variable name="file" select="/xs:string(c:result)">
>             <p:pipe step="store" port="result"/>
>          </p:variable>
>          <p:add-attribute match="hello" attribute-name="a">
>             <p:input port="source">
>                <p:inline>
>                   <hello/>
>                </p:inline>
>             </p:input>
>             <p:with-option name="attribute-value" select="$file"/>
>          </p:add-attribute>
>       </p:group>
>    </p:declare-step>
>
>  The following repro works well:
>
>    <p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
>                    xmlns:c="http://www.w3.org/ns/xproc-step"
>                    version="1.0">
>       <p:output port="result"/>
>       <!-- store a doc -->
>       <p:store name="store" href="/tmp/xproc-store.xml">
>          <p:input port="source">
>             <p:inline>
>                <doc/>
>             </p:inline>
>          </p:input>
>       </p:store>
>       <!-- store the file name in a var, and create a nw doc -->
>       <p:group>
>          <p:variable name="file" select="/xs:string(c:result)">
>             <p:pipe step="store" port="result"/>
>          </p:variable>
>          <p:add-attribute match="hello" attribute-name="a">
>             <p:input port="source">
>                <p:inline>
>                   <hello/>
>                </p:inline>
>             </p:input>
>             <p:with-option name="attribute-value" select="$file"/>
>          </p:add-attribute>
>       </p:group>
>    </p:declare-step>
>
>  So maybe I made a mistake, but more and more it looks like a
> bug.  I wanted to test with Calumet, but I don't have it on this
> machine and the EMC community site seems to be down.
>
>  Regards,
>
> -- 
> Florent Georges
> http://fgeorges.org/

Received on Monday, 20 December 2010 14:29:02 UTC