- From: <Toman_Vojtech@emc.com>
- Date: Tue, 17 Mar 2009 11:41:05 -0400
- To: <xproc-dev@w3.org>
- Message-ID: <6E216CCE0679B5489A61125D0EFEC7870EE3D773@CORPUSMX10A.corp.emc.com>
Hi,
The pipeline seems correct to me. I have tested it with our XProc
processor (I had to play with the paths a bit), and it seems to work.
For both valid and invalid documents, the pipeline creates c:result
documents with proper content.
My guess is that there is a p:for-each/p:try/p:catch bug in Calabash.
What happens if you try to run this pipeline (a simplified version of
yours):
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
xmlns:c="http://www.w3.org/ns/xproc-step">
<p:output port="result" sequence="true"/>
<p:for-each>
<p:iteration-source>
<p:inline><doc1/></p:inline>
<p:inline><doc2/></p:inline>
</p:iteration-source>
<p:output port="result" sequence="true">
<p:pipe port="result" step="last"/>
</p:output>
<p:try>
<p:group>
<p:load href="i-do-not-exist.xml"/>
</p:group>
<p:catch>
<p:identity>
<p:input port="source">
<p:inline><bang/></p:inline>
</p:input>
</p:identity>
</p:catch>
</p:try>
<p:identity name="last"/>
</p:for-each>
</p:declare-step>
Do you get the same error? If so, does anything change if you remove the
p:output element inside p:for-each?
This is just guesswork from my side that may help to isolate the
problem. But you will need to wait for a response from Norm; I don't
really know Calabash code.
Regards,
Vojtech
________________________________
From: xproc-dev-request@w3.org [mailto:xproc-dev-request@w3.org]
On Behalf Of Paul Hermans
Sent: Tuesday, March 17, 2009 4:03 PM
To: xproc-dev@w3.org
Subject: trouble with port in iteration
Using Calabash.
I have following try/catch which works both for valid and
non-valid docs.
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
xmlns:c="http://www.w3.org/ns/xproc-step">
<p:try>
<p:group>
<p:validate-with-xml-schema assert-valid="true"
mode="strict">
<p:input port="source">
<p:document
href="file:///Users/paul/Desktop/R&D/xmlschema/msData/simpleType/stE
056.xml"
/>
</p:input>
<p:input port="schema">
<p:document
href="file:///Users/paul/Desktop/R&D/xmlschema/msData/simpleType/stE
055.xsd"
/>
</p:input>
</p:validate-with-xml-schema>
<p:identity>
<p:input port="source">
<p:inline><c:result>valid</c:result></p:inline>
</p:input>
</p:identity>
</p:group>
<p:catch>
<p:identity>
<p:input port="source">
<p:inline><c:result>invalid</c:result></p:inline>
</p:input>
</p:identity>
</p:catch>
</p:try>
<p:store
href="/Users/paul/Desktop/R&D/xmlschema/msData/simpleType/stE055.res
"
name="store"/>
</p:declare-step>
Now I'm doing the same within a loop
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc"
xmlns:wts="http://www.w3.org/XML/2004/xml-schema-test-suite/"
xmlns:c="http://www.w3.org/ns/xproc-step"
xmlns:xlink="http://www.w3.org/1999/xlink"
xpath-version="2.0">
<p:output port="result" sequence="true">
<p:pipe port="result" step="loop"/>
</p:output>
<p:load
href="/Users/paul/Desktop/R&D/xmlschema/msMeta/SimpleType_w3c.xml"/>
<p:for-each name="loop">
<p:iteration-source
select="/wts:testSet/wts:testGroup[wts:instanceTest/wts:instanceDocument
]"/>
<p:output port="result" sequence="true">
<p:pipe port="result" step="write2file"/>
</p:output>
<p:variable name="xsd"
select="substring-after(/wts:testGroup/wts:schemaTest/wts:schemaDocument
/@xlink:href,'/')"/>
<p:variable name="xml"
select="substring-after(/wts:testGroup/wts:instanceTest/wts:instanceDocu
ment/@xlink:href,'/')"/>
<p:load name="schema">
<p:with-option select="$xsd" name="href"
xml:base="/Users/paul/Desktop/R&D/xmlschema/"/>
</p:load>
<p:load name="instance">
<p:with-option select="$xml" name="href"
xml:base="/Users/paul/Desktop/R&D/xmlschema/"/>
</p:load>
<p:try name="try">
<p:group>
<p:validate-with-xml-schema assert-valid="true"
mode="strict">
<p:input port="source">
<p:pipe port="result" step="instance"/>
</p:input>
<p:input port="schema">
<p:pipe port="result" step="schema"/>
</p:input>
</p:validate-with-xml-schema>
<p:identity>
<p:input port="source">
<p:inline>
<c:result>valid</c:result>
</p:inline>
</p:input>
</p:identity>
</p:group>
<p:catch name="catch">
<p:identity>
<p:input port="source">
<p:inline>
<c:result>invalid</c:result>
</p:inline>
</p:input>
</p:identity>
</p:catch>
</p:try>
<p:store name="write2file">
<p:with-option name="href"
select="concat('/Users/paul/Desktop/R&D/xmlschema/',$xml,'.err')"/>
</p:store>
</p:for-each>
</p:declare-step>
As long as all files are valid, I do get the required output.
Once I encounter a non-valid file, I get following error:
Pipeline failed: err:XD0007: null If sequence is not specified
on p:output, or has the value false, then it is a dynamic error if the
step does not produce exactly one document on the declared port.
Something related to the error output on the catch?
Kind Regards,
Paul Hermans
-------------------------
Received on Tuesday, 17 March 2009 15:42:06 UTC