- From: John Boyer <boyerj@ca.ibm.com>
- Date: Thu, 26 Oct 2006 09:44:27 -0700
- To: mark.birbeck@x-port.net
- Cc: "Francisco Monteiro" <monterro2004@tiscali.co.uk>, www-forms@w3.org, www-forms-request@w3.org, w3c-forms@w3.org
- Message-ID: <OFB0A77051.6DC2B4C9-ON88257213.005636DA-88257213.005BF71E@ca.ibm.com>
Hi Mark and Francisco, Well, first for Francisco, the use of id() does not work because the XPath data models we create are for instance data, whereas the IDs on the binds are not in instance data. So even with a <bind id="A" ... />, the function call id('A') would return empty nodeset. Moreover, the idea has the same problems as Mark's variable idea, and the two have at least one problem in common with the dot-dot problem. 1) We want authors to be able to type into expressions the names that they assigned. We don't want XForms processors to have to parse the XPath expressions, find all the node references in the location paths and add "../" or with "$" or id() or what have you to each. Mark argues that the form author would be asked to type the $. The problem there is that the first time they forget the $, it's just like forgetting "../". It doesn't work and they don't know why. 2) A second problem for the use of variables is that it will create naming conflicts with variables that authors want to create when we *do* add the xforms:variable construct to XForms. 3) A third problem with the variable approach is that it breaks at the first sight of a grouping. Suppose for example that you create an "address block" <group name="address"> <label>Ship to:</label> <input name="name" ... <input name="street" ... <input name="city" ... <input name="region" ... <input name="country" ... <input name="postalcode" ... </group> Nice. Now you want it again because you need a "Bill to" address: <group name="billto"> <label>Bill to:</label> <input name="name" ... <input name="street" ... <input name="city" ... <input name="region" ... <input name="country" ... <input name="postalcode" ... </group> Now, let's look at the identified binds created by this. Hmmm. I don't know whether to nest the binds for things like name into the address and billto binds, but either way I seem to have to create duplicate IDs! This is problematic because we need to be able to convert Forms Tiny into Canonical XForms. It is also problematic because duplicate IDs implies duplicate variables, which are not allowed in XPath. 4) Notice in problem #3 that I did not even have to touch a repeating construct to break the system. But the real problem is that we need to be able to solve the repeat problem in Forms Tiny. My prior post contained a completely working purchase order written in a proposed variant of Forms Tiny. In order to make the "identified binds+variables" proposal viable you need to be able to show how that purchase order form (the simplest of repetitions) can be expressed so that we can evaluate its authoring ease relative to the direct "name-to-data" proposal and so we can evaluate whether it transforms into a canonical XForm. 5) The X of AJAX is for XML! Preaching to the converted, I know, but the attention to AJAX right now is based on a property of XForms submission: You can exchange XML with the server. Given that the "name-to-data" proposal is capable of effortlessly implying structured XML, it would be a mistake to adopt another proposal that makes it difficult or impossible to let authors scale up smoothly to using the Forms Tiny XML data model with XForms submissions. For that matter, we need a system that allows authors to access the Forms Tiny data model period. In other words, there has to be a few steps along the way between Forms Tiny and canonical XForms. Those steps should include: a) allowing script authors access to the DOM suggested by the Forms Tiny model b) allowing author to take control of the XML instance at a time of their choosing to better control prepopulation results e.g. via JSP. In other words, let them specify the instance. c) allowing author to take control of submission to do instance replacement submissions as well as switching from urlencoded-post to XML data post d) allow authors to use XForms actions against the data model in a straightforward way to insert and delete nodes as well as set values. e) The ultimate in flexibility would be to allow authors the ability to add secondary instances for temporary variables, and to then add binds or use actions to manipulate that data and to move data between those instances and the primary instance generated by FormsTiny. This would be ideal for adding the ability to talk to a SOAP service to a Forms Tiny asset without converting it to canonical XForm. f) Next thing you know the form author has learned everything they need to know to write canonical XForms so their next project can start with a schema and a real data model. To conclude, there is nothing that you state below Mark as an advantage of the "identified binds + variables" proposal that is not also an advantage the "name-to-data" proposal. However, the name-to-data proposal has the advantages of solving all of the problems above with *no* changes other than a simple attribute for #1. By comparison, the "identified binds + variables" proposal has no answers for the above AND requires the addition to XForms of features like a bind function or variables that refer to bind nodesets that require an extensive overhaul of the XForms processing model to fully specify. You can make them work in limited use cases, but the language falls apart when the features are fully considered. Best regards, John M. Boyer, Ph.D. STSM: Workplace Forms Architect and Researcher Co-Chair, W3C Forms Working Group Workplace, Portal and Collaboration Software IBM Victoria Software Lab E-Mail: boyerj@ca.ibm.com http://www.ibm.com/software/ Blog: http://www.ibm.com/developerworks/blogs/page/JohnBoyer "Mark Birbeck" <mark.birbeck@x-port.net> Sent by: www-forms-request@w3.org 10/26/2006 04:56 AM Please respond to mark.birbeck@x-port.net To "Francisco Monteiro" <monterro2004@tiscali.co.uk> cc John Boyer/CanWest/IBM@IBMCA, www-forms@w3.org, www-forms-request@w3.org Subject Re: forms-lite and data models Hi Francisco, > what about > > <bind id="A" nodeset="whoKnowsA" /> > <bind id="B" nodeset="whoKnowsB" /> > <bind id="C" nodeset="whoKnowsC" calculate="power(id(A)*id(A)+id(B)*id(B), 0.5)"/> Nice thinking! It's much the same principle as my idea: <bind id="C" nodeset="whoKnowsC" calculate="power($A*$A+$B*$B, 0.5)"/> Either way we get a 'flat space', much like that in HTML forms (or HForms). All I've done in my proposal is to say that since in XForms a bind statement with an @id creates a named nodeset, why not just say that the named nodeset is an XPath variable? There's a general feeling that we'd like to introduce XPath variables at some point anyway, and this seems a pretty intuitive way of doing it. Also, there has been enthusiasm in the past ;) for a 'bind' function, which would allow authors to get at the nodesets created by bind statement. By making named nodesets into XPath variables there would no longer be a need for such a function. In short, what I'm proposing is that we add a feature to XForms that we could do with anyway (that named nodesets are XPath variables), and this feature would find a lot of use, not just in HForms. By adding this feature we ensure that the syntax for HForms is no different to that of full XForms. This is important since there have been suggestions that any extensions made to HTML forms to 'beef them up', would still require some kind of XSLT transformation if the author needs more power (i.e., XForms). This is counter-productive for an enormous number of reasons, and with the XPath variable proposal, I'm hoping that it's unnecessary. Regards, Mark -- Mark Birbeck CEO x-port.net Ltd. e: Mark.Birbeck@x-port.net t: +44 (0) 20 7689 9232 w: http://www.formsPlayer.com/ b: http://internet-apps.blogspot.com/ Download our XForms processor from http://www.formsPlayer.com/
Received on Thursday, 26 October 2006 16:45:27 UTC