- From: John Boyer <boyerj@ca.ibm.com>
- Date: Tue, 9 Jun 2009 21:13:39 -0700
- To: Mark Birbeck <mark.birbeck@webbackplane.com>
- Cc: public-forms@w3.org
- Message-ID: <OFE3E988F9.A68AA30A-ON882575D1.0015D4B4-882575D1.001736A9@ca.ibm.com>
Hi Mark, I didn't like the name "using" myself either, though it was better than other options that came up at the time. However, I think the whole idea of using a child element for this is problematic, too, in part because it creates the temptation to use the value attribute. The value attribute can't implement a bidirectional single node binding, so if someone does use a toggle on a switch that contains <selected value="such and such"/>, then what should the behavior be? I feel the cleanest solution here is to use an xpath-bearing attribute on the switch itself. Other elements (e.g. submission) have xpath attributes beyond the single node binding. The attribute itself could certainly be called "selected". I like that suggestion the best so far, but it would be nice if it were an XPath. Something like this: <switch selected="my/case"> <case id="A"> ...</case> <case id="B"> ...</case> <case id="C"> ...</case> <case id="D"> ...</case> </switch> Other good names would be "caseref" or perhaps "state" (as in what state is the switch in?) John M. Boyer, Ph.D. STSM, Interactive Documents and Web 2.0 Applications 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 From: Mark Birbeck <mark.birbeck@webbackplane.com> To: John Boyer/CanWest/IBM@IBMCA Cc: public-forms@w3.org Date: 06/09/2009 03:21 PM Subject: Re: [FutureFeatures] Data-drive switch element Hi John, <using> is a little vague, since all controls are 'using' lots of instance data for all sorts of things. :) I realise that you are talking more about the functionality, rather than naming issues, and I agree with your analysis of how it should behave. So on the naming question, why not riff on @selected? I'm wondering if we could do what we've been doing increasingly in other places , where we replicate an attribute as an element, and then give it the whole @ref/@value/@bind treatment. In this case we don't quite have the attribute to replicate, but that would be an easy first step, and I think it would be quite useful in it's own right (it's easier to read than the whole "true" thing): <switch selected="A"> <case id="A"> ...</case> <case id="B"> ...</case> <case id="C"> ...</case> <case id="D"> ...</case> </switch> >From here, we replicate the attribute behaviour with an element; first, using @value: <switch> <selected value="if(name='John', 'B', 'A')" /> <case id="A"> ...</case> <case id="B"> ...</case> <case id="C"> ...</case> <case id="D"> ...</case> </switch> then with @ref, as in your example: <switch> <selected ref="my/case" /> <case id="A"> ...</case> <case id="B"> ...</case> <case id="C"> ...</case> <case id="D"> ...</case> </switch> and of course with @bind: <switch> <selected bind="bindMyCase" /> <case id="A"> ...</case> <case id="B"> ...</case> <case id="C"> ...</case> <case id="D"> ...</case> </switch> Other than that, I think the behaviour is pretty much as you describe it. Regards, Mark On Tue, Jun 9, 2009 at 5:48 PM, John Boyer<boyerj@ca.ibm.com> wrote: > > In and amongst the modularization efforts, we also made progress on > discussing some new features for future versions of XForms. > Some of those threads of discussion are coming back up now that we are > getting through the backlog of work that was needed to finish XForms 1.1. > > One that I have an action item to work on is a data-driven switch. > Although one can use group relevance to achieve the effect, it is not very > directly expressive because nothing in the markup really declares the > relationship among the groups of controls. > The switch with case elements declaratively binds together a collection of > groups of controls (cases) and directly expresses that they are working > together toward a single purpose. > > The limitation right now is that it is very hard to store the state of a > switch in data so that it can be persisted across application interaction > sessions. > One can store selected case on each xforms-select event and one can push the > selected case to the UI on xforms-ready, but this is a lot of effort > compared to a directly expressed two-binding to a node of data that selects > the switch case. Furthermore, the capturing of these events is insufficient > because it is non-reponsive to changes made to the underlying data node > where the selected case is stored. > > In the past, I advocated for this feature as it was really the main > shortcoming I could find in the application of XForms to documents like ODF > and to XForms applications that also involve digital signatures, where it > might be important to know which switch case is being presented to the user. > > Today, though, I hit yet another customer, this one very large, where the > efficiency of their forms has been substantially impacted by the use of > multiple toggle actions during xforms-ready. > > The forms at play are fairly large, and use xforms-ready "works", but it is > too slow in practice. The problem is that the run-time objects for the UI > of the default case of a dozen switches are created during default > xforms-model-construct-done default processing, and then the xforms-ready > happens. This toggles all the switches, which destroys the first set of > cases and creates the second set of cases according to the settings in data. > > Our product has an extension feature for data-driven switches using a > foreign-namespaced attribute. Using a data-driven switch, the form load > time was reduced from 22 seconds to 4 seconds, or better than a 5-fold > increase of performance. > > At the time the action item was assigned to me, we had decided to use a > child element of switch called "using" with a single node binding, like > this: > > <switch> > <using ref="my/case"/> > <case id="A"> ...</case> > <case id="B"> ...</case> > <case id="C"> ...</case> > <case id="D"> ...</case> > </switch> > > Whenever the node my/case is changed, the switch will change cases, and if a > toggle changes the switch case, then the data value is changed by an > implicit setvalue action. > There are edge cases to consider, of course, like what to do if my/node is > assigned a value that doesn't match any of the case ID's, but these are > similar to edges that we already have to handle for switch, and I'm not > trying to write the spec in this email. > > Rather, I'm just trying to renew awareness of this particular technical > issue, in part for its own sake, and in part to point out how it is related > to some of our emerging themes for the future: > 1) incremental refinement that eases authoring or optimizes performance of a > specific use case or pattern > 2) better alignment with XForms in documents > 3) better alignment with XForms across interaction sessions of a larger > application > > Cheers, > John M. Boyer, Ph.D. > STSM, Interactive Documents and Web 2.0 Applications > 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 > > -- Mark Birbeck, webBackplane mark.birbeck@webBackplane.com http://webBackplane.com/mark-birbeck webBackplane is a trading name of Backplane Ltd. (company number 05972288, registered office: 2nd Floor, 69/85 Tabernacle Street, London, EC2A 4RR)
Received on Wednesday, 10 June 2009 04:14:10 UTC