- From: Norman Walsh <ndw@nwalsh.com>
- Date: Mon, 08 Nov 2010 09:33:44 -0500
- To: XProc Dev <xproc-dev@w3.org>
- Message-ID: <m2d3qf996f.fsf@nwalsh.com>
Philip Fennell <Philip.Fennell@marklogic.com> writes:
> What would happen if I had chosen to in-line an XQuery main module
> in the document template thus (completely arbitrary example but
> illustrates the problem):
>
> <p:pipeline xmlns:p="http://www.w3.org/ns/xproc"
> xmlns:c="http://www.w3.org/ns/xproc-step"
> name="main" version="1.0">
> <p:option name="param" required="true"/>
>
> <p:in-scope-names name="vars"/>
>
> <p:document-template>
> <p:input port="template">
> <p:inline>
> <c:query>
> xquery version "1.0" encoding "utf-8";
>
> let $foo as xs:string := 'bar'
> return
> element {$foo} {$param}
> </c:query>
> <p:/inline>
> </p:input>
> ...
The template isn't evaluated as an XQuery module, it's simply passed
through with curly-brace delimited expressions evaluated. So that example
would raise an error when {$foo} was encountered, because there's no variable
(from p:in-scope-names) that's named "foo".
> Here I have two XPath expressions containing variable names, one of
> which is bound to the XQuery let declaration and the other to the
> XProc pipeline option.
The p:document-template step knows from nothing about the XQuery
declaration.
Two of the alternatives to p:document-template are to use an XQuery
step, but that requires all sorts of escaping in the general case, and
to use an XSLT step (with a simplified stylesheet).
Be seeing you,
norm
--
Norman Walsh
Lead Engineer
MarkLogic Corporation
www.marklogic.com
Received on Monday, 8 November 2010 14:34:21 UTC