- From: John Boyer <boyerj@ca.ibm.com>
- Date: Sat, 2 Feb 2008 10:33:50 -0500
- To: Erik Bruchez <ebruchez@orbeon.com>
- Cc: public-forms <public-forms@w3.org>
- Message-ID: <OFA09D1B71.10265D25-ON852573E3.00514A35-852573E3.00557F36@ca.ibm.com>
Hi Erik,
Most of my response to this email appears in my response to Nick's earlier
post. Here I would add the following:
Let's look again at the sensibility of attaching the MIP attributes to the
UI control as a decoration on the control, rather than as a convenience
for attaching MIPs to the underlying data.
As you saw in my note to Nick, readonly on input does not make sense
because that's an output, and wanting an output to look like a readonly
input is a styling issue, not an XForms abstract UI issue.
Similarly, it makes no sense to attach relevant to a particular control;
if you want to hide a particular control, you can use the XPath predicate
trick in the UI binding, or more appropriately, style it to display:none
or visibility:off. Again, per control properties like this look like
styling to me, and should not be confused with MIP attributes.
Attaching constraint to a particular control and not meaning for it to be
applicable to the underlying data makes even less sense. If you do have
two controls bound to the same data node, but you only attach the
constraint to one control, then if you add bad data in the other control,
you are guaranteed to show invalidity in the control bearing the extra
constraint. What kind of user experience is that?
For required, it similarly makes no sense to have one UI control requiring
data entry and another not requiring it for the same node of data. The
only way it makes sense is if you plan to sometimes hide the control where
the data is required. But in that case, you're really setting up a
*condition* on whether or not the data is required (it's the same
condition that would show or hide the control that would bear the required
attribute). So again, with proper use of the feature, you could still
attach required MIPs to the controls and actually intend for the attribute
to be a *model item* property.
Anyway, your point is well-taken about forms being easier to author by
putting the MIPs on the controls if they are used to *imply* MIP bindings
on data associated with the controls.
Cheers,
John M. Boyer, Ph.D.
Senior Technical Staff Member
Lotus Forms Architect and Researcher
Chair, W3C Forms Working Group
Workplace, Portal and Collaboration Software
IBM Victoria Software Lab
E-Mail: boyerj@ca.ibm.com
Blog: http://www.ibm.com/developerworks/blogs/page/JohnBoyer
Blog RSS feed:
http://www.ibm.com/developerworks/blogs/rss/JohnBoyer?flavor=rssdw
Erik Bruchez <ebruchez@orbeon.com>
Sent by: public-forms-request@w3.org
02/01/2008 01:58 PM
To
public-forms <public-forms@w3.org>
cc
Subject
Re: Add model item properties to UI level (Action 2008-01-23.2)
I agree with Nick, but I see even more reasons to do this beyond lazy
authoring and implicit models/instances.
I think that in general, it is counter-intuitive (and a pain) to
*always* have to create special instances and binds just for the sake
of specifying things as simple as relevance, read-onliness, or types.
Many of us resort to creating separate instances just to hold MIPs for
triggers or to define relevance, for example. This does not bring
particularly clear benefits, but it certainly does make writing forms
much heavier than it could be. This realization of course 100% in line
with the 1.2 goal to make form authoring easier.
As a form author, and whether I have models and instances or not, I
wonder why I can't just write (I know we have a hack to work around
this [1]):
<xforms:trigger relevant="/my/foo = bar">
I also want to be able things like:
<xforms:input type="xs:date" readonly="/my/foo = bar">
and especially the following:
<xforms:input ref="/foobar" relevant="instance('type') =
'input'">...</xforms:input>
<xforms:textarea ref="/foobar" relevant="instance('type') =
'textarea'">...</xforms:textarea>
In other words, specifying properties independently from the node to
which the control is bound.
I know we have a desire to map this to models/instances/MIPs, and
there are talks about mapping UI properties to MIPs. But I think that
this is not the right approach. With the current state of things, MIPs
are somehow communicated to controls upon refresh. We should keep this
unidirectional and have local properties defined in the UI be combined
with MIPs at the control level, without otherwise impacting instance
data.
The alternative doesn't seem to work as it prevents controls bound to
the same instance data to specify different properties without
impacting each other, preventing my last example above to work.
It also seems to me that it will be very confusing to think in terms
of implicit binds to implicit data within implicit instances within
implicit models ;-) I say we should pick the simplest architecture
that does the job.
My bottom line: I think we should leave MIPs (as in *model* item
properties) as they are and add UI-only properties, which are defined
to be local to controls. We should not bother trying to map these UI
properties back to binds.
-Erik
[1] Note that the hack we all use, i.e.:
<xforms:trigger ref=".[/my/foo = bar]">
is a neat one, but newcomers to XForms do find it difficult because
you have to explain that 1) controls not bound to nodes are non-
relevant and 2) the XPath syntax to achieve this. I think this does
remains a hack and should be replaced by a clearer notation.
On Feb 1, 2008, at 5:47 AM, Nick_Van_den_Bleeken@inventivegroup.com
wrote:
>
> As most of you know there are two main reasons why I (and I hope,
> we) want to allow model item properties on form controls :
>
> 1. For the easy of authoring when creating simple forms and you
> are using an implicit instance. When you created your form using
> lazy creation but want to add some model item properties (for
> example types, constraints, ...) it would be nice that you just
> could add those model item properties to the form controls without
> the need to create a model element nor a bind element.
> 2. When you have a separate model and form UI designer there are
> cases where the UI designer can add extra model item properties to
> certain controls that don't need to be enforced by the model (for
> example extra constraint, stricter type, UI control is read only)
>
> Both these use cases could be solved by creating an implicit model
> with implicit binds. Treating them as implicit binds will allow a
> smooth transition when the need arises for explicit binds (e.g.:
> bind the id-type to all attributes with name id, ...), we can then
> just merge the implicit and explicit binds, the question about if it
> is allowed and what happens when the same MIP is specified multiple
> times for the same node, should be treated separately I think
> because the same problem can arise when only using explicit binds[1].
>
> I can write up some spec ready text for this but I think it would be
> better to talk about at the f2f and see if people agree with those
> implicit binds and that the same MIP specified multiple times on the
> same data node is another feature (this feature may be a requirement
> to solve use case 2).
>
> Regards,
>
> Nick Van den Bleeken - Research & Development Manager
> Inventive Designers
> Phone: +32 - 3 - 8210170
> Fax: +32 - 3 - 8210171
> Email: Nick_Van_den_Bleeken@inventivegroup.com
>
> [1] :
http://www.w3.org/MarkUp/Forms/wiki/Same_model_item_property_on_the_same_node
> Inventive Designers' Email Disclaimer:
> http://www.inventivedesigners.com/email-disclaimer
>
>
--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/
Received on Saturday, 2 February 2008 15:34:09 UTC