- From: Erik Bruchez <erik@bruchez.org>
- Date: Tue, 15 Oct 2013 23:08:20 -0700
- To: Nick Van den Bleeken <Nick.Van.den.Bleeken@inventivegroup.com>
- Cc: "<public-forms@w3.org>" <public-forms@w3.org>, "public-xformsusers@w3.org" <public-xformsusers@w3.org>
- Message-ID: <CAAc0PEVdsUHRUxFd0b24MNyA6=6XsT9jWK5QoE61CCPY_Zgrzw@mail.gmail.com>
All, A bit more progress on this action item: - added xforms-action-error [1] - added error-message info to xforms-action-error - clarified that xforms-expression-error/xforms-binding-error are dispatched when the error is not within an action handler - removed xforms-script-exception and xforms-script-language-not-supported-exception and replaced with xforms-action-error - a few fixes to the script action [2] Here is the diff: http://www.w3.org/MarkUp/Forms/wiki/index.php?title=XForms_2.0&diff=3852&oldid=3843 Feedback welcome. -Erik [1] http://www.w3.org/MarkUp/Forms/wiki/XForms_2.0#The_xforms-action-error_Event [2] http://www.w3.org/MarkUp/Forms/wiki/XForms_2.0#The_script_Element On Tue, Oct 8, 2013 at 6:09 PM, Erik Bruchez <erik@bruchez.org> wrote: > All, > > I have made a bit of progress on "ACTION-1957 - Write spec text for error > handling", but I am not done yet. > > I have a few comments/questions for the group: > > 1. With xforms-action-error, we don't need xforms-script-exception and > xforms-script-language-not-supported-exception. I suggest removing these > two events. Possibly, we can add context information to xforms-action-error > to specify that the error is with a script or the script language. > > 2. Instead of xforms-xpath-error, which I had suggested, I now suggest > xforms-expression-error, as that is expression language-independent. > > 3. I had said that an incorrect instance attribute on xf:submission would > dispatch xforms-submit-error, but XForms 1.1 dispatches > xforms-binding-exception. Unsure which one to pick here. Wouldn't you want > to have xforms-submit-error for any error with the submission? > > 4. XForms 1.1 is contradictory for xf:send/@submission: > - the action says "If this attribute is given but does not identify a > submission element, then the send action has no effect" > - xforms-binding-exception event says: "a submission attribute that > fails to point to the ID of a submission element" > - I suggest ignoring, as the action says (could also do an action > error) > > As a first step I have added the two new events here: > > http://www.w3.org/MarkUp/Forms/wiki/XForms_2.0#Error_Indications > > http://www.w3.org/MarkUp/Forms/wiki/index.php?title=XForms_2.0&diff=3843&oldid=3842 > > Comments welcome, > > -Erik > > > On Tue, Oct 8, 2013 at 5:30 PM, Erik Bruchez <erik@bruchez.org> wrote: > >> Nick, >> >> Thanks for the feedback. That makes sense. I suppose we still need to >> *not* switch models, as we probably cannot have no current model, but in >> addition we must change the context to the empty sequence. So I am adding >> this. >> >> -Erik >> >> >> On Mon, Oct 7, 2013 at 3:13 AM, Nick Van den Bleeken < >> Nick.Van.den.Bleeken@inventivegroup.com> wrote: >> >>> Hi Erik, >>> >>> I think that the specified behaviour is overall quite consistent and >>> makes some kind of recovery possible. I don't know if the recovery is >>> powerful enough, but you can at least prevent a 'crash' of the form. I >>> think that it will be hard to get the form in a consistent state after the >>> error though... >>> >>> I have one small remark. I would have expected an empty sequence for a >>> model switch to a non-existing model (just like other error conditions fall >>> back to an 'empty' evaluation context) instead of the current specified >>> behaviour (keeping the current evaluation context). >>> >>> Kind regards, >>> >>> Nick Van den Bleeken >>> R&D Manager >>> >>> Phone: +32 3 425 41 02 >>> Office fax: +32 3 821 01 71 >>> nick.van.den.bleeken@inventivegroup.com >>> www.inventivedesigners.com >>> >>> >>> >>> On 02 Oct 2013, at 00:05, Erik Bruchez <erik@bruchez.org> wrote: >>> >>> All, >>> >>> ## Introduction >>> >>> This action item dates back to February 2012 and was revived in our last >>> call: >>> >>> >>> http://lists.w3.org/Archives/Public/public-forms/2012Feb/att-0027/2012-02-15.html >>> >>> ## Error handling with XForms 1.1 >>> >>> First, let's summarize the error handling issues in XForms. >>> >>> A number of things can go wrong in an XForms page. For most >>> attributes, we define a default behavior. For example: "If the src >>> attribute is omitted, then…". However errors that happen in XPath >>> expressions are handled with the dispatching of two events: >>> >>> - `xforms-binding-exception` when on bindings (`ref`) >>> - `xforms-compute-exception` when somewhere else >>> >>> Note that `xforms-compute-exception` is also dispatched when there are >>> circular dependencies in the model, and that >>> `xforms-compute-exception` is used more generally to indicate issues >>> with bindings, even when no XPath expression is involved. >>> >>> This is what XForms 1.1 says: >>> >>> "At the time of evaluation, an XPath expression must be syntactically >>> correct. In addition, the namespaces the expression references must be in >>> scope and the functions and variables it references must be defined. If any >>> of these conditions is not satisfied, an exception (4.5.2 The >>> xforms-compute-exception Event) is raised, except for binding expressions, >>> which produce a different exception (4.5.1 The xforms-binding-exception >>> Event)." >>> >>> >>> Both these events are not cancelable. This means that the default >>> action always runs, and thus always halts XForms processing >>> completely. In short, it is never possible to recover from an XPath >>> error with XForms 1.1 (or 2.0 in its present state). >>> >>> This is a problem, because for author have no control over what to do >>> in case such errors happen. In particular there is a chance that data >>> loss will occur due to a typo in an XPath expression or some >>> unexpected dynamic condition. >>> >>> Better error handling can help alleviate that (for example, by asking >>> the user to try to save a draft of the data to recover it later). >>> Also, all systems I know have at least one mechanism to recover from >>> errors. >>> >>> ## What we do in our implementation >>> >>> Since about two years agao, our implementation specifies a different >>> behavior, documented here: >>> >>> http://wiki.orbeon.com/forms/welcome/xforms-error-handling >>> >>> and in this blog post: >>> >>> >>> http://blog.orbeon.com/2011/11/more-resilient-error-handling-in-xforms.html >>> >>> After about two years of experience, we are quite happy with the >>> solution. >>> >>> ## The new error handling philosophy in short >>> >>> The XForms processor: >>> >>> - attempts to recover from errors occurring with XPath expressions, >>> bindings, and actions >>> - but also dispatches recoverable error events in these cases >>> >>> The default action of the recoverable errors, for backward >>> compatibility, could still be to halt processing. But we could decide >>> otherwise. >>> >>> Because the error events are cancelable, it is always possible to >>> recover when desired. >>> >>> (Although there is no guarantee of being able to recover *meaningfully*.) >>> >>> The two exception XForms 1.1 events are no longer dispatched: >>> >>> - `xforms-binding-exception` >>> - `xforms-compute-exception` >>> >>> ## Recovery outside of actions >>> >>> The XForms processor, when encountering an error with an XPath >>> expression (static or dynamic, in XPath 2 terms), or an error with a >>> binding, determines a recovery value for the expression. >>> >>> Here are all the cases that we have identified: >>> >>> 1. For control bindings, model bindings, values, variables >>> - Upon XPath errors, a default value is chosen: >>> - the empty sequence for bindings and variable values >>> - the empty string for string values >>> - `xforms-xpath-error` is dispatched >>> - Upon binding errors with the `bind` attribute >>> - the binding resolves to the empty sequence >>> - `xforms-binding-error` is dispatched >>> - Upon binding errors with the `model` attribute >>> - the model doesn't change, as if the model attribute was missing >>> - `xforms-binding-error` is dispatched >>> 2. For XPath MIP values >>> - Upon XPath errors for `calculate` >>> - the destination value is set to blank >>> - `xforms-xpath-error` is dispatched >>> - Upon XPath errors for other MIPs >>> - the MIP is not modified, as if the attribute specifying the >>> property was missing >>> - `xforms-xpath-error` is dispatched >>> - Upon binding errors with complex or readonly content (`calculate` >>> only) >>> - the instance value is not modified >>> - `xforms-binding-error` is dispatched to the model >>> 3. For the submission `instance` attribute >>> - Upon incorrect instance id >>> - `xforms-submit-error` is dispatched (as in the case of a >>> target error with the `targetref` attribute) >>> - Upon binding errors with complex or readonly content >>> - `xforms-submit-error` is dispatched >>> >>> ## Recovery within actions >>> >>> - Any error taking place during action processing stops the outermost >>> action handler, including: >>> - XPath errors >>> - binding errors with the `bind` or `model` attribute >>> - binding errors with complex or readonly content >>> - missing attributes or unsupported attribute values on action >>> elements >>> - `xforms-action-error` event is dispatched to the observer of the action >>> - this includes: controls, `model`, `instance`, and `submission` >>> - NOTE: Some actions silently ignore some error conditions, including: >>> - `<setvalue>` pointing to an empty sequence or to an atomic item >>> (such as a string) instead of a node >>> - `<delete>` with an empty sequence or an empty overridden context >>> - `<insert>` with an empty or non-element insert context, an empty >>> overridden context, or an empty origin >>> - actions with AVTs evaluating to the empty sequence >>> - `<dispatch>`, `<send>`, `<setfocus>`, `<setindex>`, `<toggle>` >>> when the target element is not found >>> >>> ## User-friendliness >>> >>> Implementations are allowed, if not encouraged, especially at >>> development time, to provide informative error messages to the >>> developer when errors occur, for example by logging to a console or >>> inspector. >>> >>> ## Summary of new events >>> >>> The following events are added to XForms: >>> >>> - `xforms-xpath-error` to indicate a general error with an XPath >>> expression >>> - `xforms-binding-error` to indicate a general error with a binding >>> - `xforms-action-error` to indicate an error in an action handler >>> >>> Feedback on this appreciated! >>> >>> -Erik >>> >>> >>> >>> >>> >>> ------------------------------ >>> >>> Inventive Designers' Email Disclaimer: >>> http://www.inventivedesigners.com/email-disclaimer >>> >> >> >
Attachments
- image/png attachment: image001.png
- image/png attachment: image002.png
- image/png attachment: image003.png
Received on Wednesday, 16 October 2013 06:09:09 UTC