- From: Rui Lopes <rlopes@di.fc.ul.pt>
- Date: Tue, 10 Jul 2007 14:58:31 +0100
- To: public-xml-processing-model-wg@w3.org
Norman Walsh wrote:
> / Rui Lopes <rlopes@di.fc.ul.pt> was heard to say:
> | I'd like to propose a more flexible way to handle errors, in comparison to the
> | status quo.
> |
> | My proposal is a small addition to the p:catch element: an optional @code
> | attribute with the same semantics of p:error's code option. This would allow a
> | pipeline author to catch just a specific error, instead of catching any error,
> | handling it appropriately in situ. Other errors would be caught by outer
> | p:try/p:catch blocks.
>
> This is almost just syntactic sugar for a p:choose inside a p:catch.
> What's different is that it would allow "other errors" to percolate
> up. We have no mechanism for doing that.
Allowing "other errors" to percolate up is the key factor. With @code, a
pipeline library author has the ability to control over which errors
should be handled by the library itself or by library users. Imho, it's
not a corner case.
With the status quo, the only way to emulate this would have to pass
through the following imperfect hack:
<p:try>
<p:group>
<!-- call a bunch of steps -->
</p:group>
<p:catch name="foo">
<p:choose>
<p:xpath-context>
<p:pipe step="foo" port="error" />
</p:xpath-context>
<p:when test="/err:errors/err:error[@code='err:XD0001']>
<!-- handle the error appropriately -->
</p:when>
<p:otherwise>
<p:error>
<p:option name="code" select="/err:errors/err:error/@code">
<p:pipe step="foo" port="error" />
</p:option>
<p:option name="description" select="/err:errors/err:error">
<p:pipe step="foo" port="error" />
</p:option>
</p:error>
</p:otherwise>
</p:choose>
</p:catch>
</p:try>
Assuming this excerpt is correct (i'm not even sure about it - can I do
that on the description option of p:error, i.e., multiple err:error
elements passed as option), and despite its ugliness, this hack doesn't
afford a transparent way to pass the same error to outter scopes, as
err:errors/@name and err:errors/@type attributes would reflect the
p:error, not the appropriate step that generated an error.
Again, with @code on p:catch, this could be specified as:
<p:try>
<p:group>
<!-- call a bunch of steps -->
</p:group>
<p:catch code="err:XD0001">
<!-- handle the error appropriately -->
</p:catch>
</p:try>
> I don't know. Someone's going to suggest p:finally if we do this.
> (Actually, it's already been suggested to me, but...)
I'm not sure if p:finally would be useful outside corner cases, but I'd
give it a chance. Maybe an example would clarify this.
> | On a side note, should we define error codes for each step (both required and
> | optional ones), or leave it as implementation defined? I think it would be
> | somewhat verbose to describe them (e.g., all errors for XSLT 2.0), but it would
> | provide us a thinner control of pipelines -
> | and interoperable - using my @code proposal.
>
> We should probably define codes for the "obvious" errors in our
> standard components. I don't think we want to enumerate all the
> possible user errors though (e.g., all the things that can go wrong in
> an XSLT stylesheet).
Yes, I agree.
Cheers,
Rui
Received on Tuesday, 10 July 2007 13:58:47 UTC