- From: Graham Seaman <graham@theseamans.net>
- Date: Tue, 15 Apr 2014 11:48:13 +0100
- To: xproc-dev@w3.org
Hi,
I'm in the 'initial 5 minutes' stage of learning xproc, and floundering.
I have a series of xslt templates intended to validate files in
different ways. If validation fails at any point, the xslt terminates
with an error message (ie. using xsl;message with terminate='yes'). I'm
hoping to persuade xproc to catch and display the message produced in
the xslt, and would ideally like the xproc pipeline also to terminate at
that point. However, I haven't even been able to get try/catch working
yet. Below is a (clearly non-working) attempt with some toy xml/xslt. I
think in general the biggest problem I'm having is with the scope of the
various ports (for example, I don't understand why the global pipeline
source port is not visible to the p:xslt stage without adding a 'dummy'
parameter).
Thanks for any advice
Graham
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="1.0">
<p:input port="source" primary="true" sequence="false">
<p:document href="test.xml"/>
</p:input>
<p:output port="result" primary="true" sequence="false"/>
<p:try name="try-test">
<p:group>
<p:xslt name="tester">
<p:input port="stylesheet">
<p:document href="test.xslt"/>
</p:input>
<p:with-param name="dummy" select="''"/>
</p:xslt>
</p:group>
<p:catch>
<p:identity>
<p:input port="source">
<p:pipe step="tester" port="error"/>
</p:input>
</p:identity>
</p:catch>
</p:try>
<p:identity>
<p:input port="source">
<p:pipe step="try-test" port="result"/>
</p:input>
</p:identity>
</p:declare-step>
-------------------
<?xml version="1.0" encoding="UTF-8"?>
<words>
<phrase>Hallo world</phrase>
<phrase>and it's goodbye from me</phrase>
</words>
-----------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="phrase">
<xsl:if test="text() = 'and it''s goodbye from me'">
<xsl:message terminate="yes">test.xml matched
phrase</xsl:message>
</xsl:if>
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
Received on Tuesday, 15 April 2014 20:45:38 UTC