- From: Florent Georges <fgeorges@fgeorges.org>
- Date: Mon, 27 May 2013 19:51:10 +0100
- To: Jostein Austvik Jacobsen <josteinaj@gmail.com>
- Cc: XProc Dev <xproc-dev@w3.org>
Hi, Makes a lot of sense to me as a user. The difficult bit here is probably to define what means "using the context". What about the following XPath expression?: if ( false() ) then string(.) else 'xxx' This would require static analysis to detect the usage of the context, even though I expect must of the processors to reduce it to simply 'xxx' after optimization. As XD0008 is already a dynamic error, it makes sense to me to change the following sentence at the end of "§5.7.3 p:with-option": It is a dynamic error (err:XD0008) if a sequence of more than one document appears on the connection for a p:with-option. by something like the following: It is a dynamic error (err:XD0008) if evaluating the select expression of the p:with-option ever refers to the context node, size, or position, and if a sequence of more than one document appears on the connection for the same p:with-option. By the way, the XProc spec contains the phrase "context node, size, or position" in several places, even though those 3 components of the dynamic context are the exact definition of the "focus" (yeah, indeed, only starting in XPath 2.0). Regards, -- Florent Georges http://fgeorges.org/ http://h2oconsulting.be/ On 27 May 2013 14:34, Jostein Austvik Jacobsen wrote: > In XProc vNext; could it be allowed to have more than one document in the > context of a p:with-option, p:with-param and p:variable as long as you don't > refer to the context? > > I have a step with this signature: > > <p:declare-step xmlns:p="http://www.w3.org/ns/xproc" > xmlns:pxi="http://www.daisy.org/ns/pipeline/xproc/internal" > type="pxi:daisy202-to-epub3-content" version="1.0"> > <p:input port="content-flow" primary="true" sequence="true"/> > <p:input port="resolve-links-mapping"/> > <p:input port="ncc-navigation"/> > <p:output port="content" sequence="true" primary="true"/> > <p:output port="fileset" primary="false"/> > > <p:option name="publication-dir" required="true"/> > <p:option name="content-dir" required="true"/> > <p:option name="daisy-dir" required="true"/> > </p:declare-step> > > As you see, the primary input is a sequence. So when I call it, I have to > do: > > <pxi:daisy202-to-epub3-content> > <p:with-option name="publication-dir" select="$publication-dir"> > <p:empty/> > </p:with-option> > <p:with-option name="content-dir" select="$content-dir"> > <p:empty/> > </p:with-option> > <p:with-option name="daisy-dir" select="$daisy-dir"> > <p:empty/> > </p:with-option> > </pxi:daisy202-to-epub3-content> > > As a script author I would expect that as long as I don't refer to the > context in a select expression, it wouldn't matter what is in the context. > (I didn't realize this until I encountered an input fileset resulting in > that multiple documents appeared on the steps input port, which means this > has been a bug in my script for a long time.) > > This should have been sufficient: > > <pxi:daisy202-to-epub3-content> > <p:with-option name="publication-dir" select="$publication-dir"/> > <p:with-option name="content-dir" select="$content-dir"/> > <p:with-option name="daisy-dir" select="$daisy-dir"/> > </pxi:daisy202-to-epub3-content> > > I find it strange that if there is no documents in the context it is only an > error if you try to refer to the context, while if there is multiple > documents in the context it is an error even if you don't refer to the > context. > > What do you think? > > Jostein
Received on Monday, 27 May 2013 18:52:00 UTC