Re: ACTION-1868 - Bruchez to summarize problems with error handling and three options for variable type handling

All,

I have now written the details of the error handling. Here is the diff:

http://www.w3.org/MarkUp/Forms/wiki/index.php?title=XForms_2.0&diff=3858&oldid=3857

And here is the text:

http://www.w3.org/MarkUp/Forms/wiki/XForms_2.0#Error_Handling

I have:

- renamed the section "Error handling" as it no longer only lists events
- added "10.5.1 Error Recovery Outside Actions"
- added "10.5.2 Error Recovery Inside Actions"

Comments welcome,

-Erik


On Tue, Oct 29, 2013 at 5:52 PM, Erik Bruchez <erik@bruchez.org> wrote:

> All,
>
> Yet more progress on this, see the diff:
>
>
> http://www.w3.org/MarkUp/Forms/wiki/index.php?title=XForms_2.0&diff=3857&oldid=3852
>
> - updated the part about errors raised when expressions are incorrect
> - updated AVT text
> - removed dispatch of xforms-binding-exception for xf:submission/instance
> - xf:submission/instance instead causes xforms-submit-error w/ target-error
> - fixed invalid reference to xforms-compute-exception instead of
> xforms-submit-serialize
> - updated summary of events to include new errors
> - updated text for targets of xforms-expression-error
>
> I still need to:
>
> - search for all uses of xforms-compute-exception /
> xforms-binding-exception and update accordingly
> - write the text specifying fallback behavior when errors occur
>
> -Erik
>
>
> On Tue, Oct 15, 2013 at 11:08 PM, Erik Bruchez <erik@bruchez.org> wrote:
>
>> 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
>>>>>
>>>>
>>>>
>>>
>>
>

Received on Wednesday, 6 November 2013 01:41:23 UTC