- From: Norm Tovey-Walsh <ndw@nwalsh.com>
- Date: Wed, 22 Jan 2025 08:26:04 +0000
- To: David Birnbaum <djbpitt@gmail.com>
- Cc: XProc Dev <xproc-dev@w3.org>
David Birnbaum <djbpitt@gmail.com> writes: > It raises XD0030 with the message "No proper query document found: substring(.,2)". Try: <p:inline content-type="text/plain">substring(.,2)</p:inline> If you don’t specify a content type, the content is treated as XML. The p:xquery step has special rules regarding XML input and I expect that “no proper query document” is trying to tell you that the input doesn’t conform to expectations. My implementation doesn’t do much better with the error here: Fatal err:XD0030 at file://…/pipe.xpl:15:15 Step failed: “No root”. > 1. What would be a clean, idiomatic way of applying an arbitrary XPath function to a plain-text > document as part of an XProc 3 pipeline? I wrote a cx:xpath extension step to do this, but if you take XQuery as a rough approximation of XPath, I believe that fixing the content type would be enough. Here’s a five minute effort at constructing an XPath step: <p:declare-step type="ex:xpath"> <p:input port="source" sequence="true"/> <p:output port="result"/> <p:option name="expr" as="xs:string" required="true"/> <p:xquery> <p:with-input port="query"> <p:inline content-type="text/plain">{$expr}</p:inline> </p:with-input> </p:xquery> </p:declare-step> Then you can write: <p:if test="starts-with(., '')"> <ex:xpath expr="substring(.,2)"/> </p:if> > 2. Where in the spec or online tutorials or elsewhere should I have been able to find an answer to > this question? I’m compiling a list of “easy mistakes to make”. I’ll add this one :-) Be seeing you, norm -- Norm Tovey-Walsh <ndw@nwalsh.com> https://norm.tovey-walsh.com/ > In the end, we will remember not the words of our enemies, but the > silence of our friends.--Martin Luther King Jr.
Received on Wednesday, 22 January 2025 08:26:12 UTC