RE: xforms:copy binding query

Erik, John, Aaron,
 
Many thanks for your considered responses.
 
If I understand correctly, if should be possible to implement xforms:copy (and xforms:value for that matter) in such a way that any elements (or text) from another select control already in the target node are not lost when switching controls - and that this would meet the XForms standard (albeit with a warning to be handled by the implementation)
 
I take it that it should also be possible when initiating an XForm pre-populated with data from a database to make these same controls show the appropriate selections based on the nodes that match the items they contain (while ignoring the ones they don't).
 
Assuming I have this straight then I will discuss this with my colleague to see if we can acheive this behaviour in Chiba. If so I think my problem is resolved :-)
 
Thanks again.
Rob Walpole
Devon Portal Developer
Email robert.walpole@devon.gov.uk
Web http://www.devonline.gov.uk
 
 

________________________________

From: www-forms-request@w3.org on behalf of Erik Bruchez
Sent: Wed 24/10/2007 00:24
To: www-forms@w3.org
Subject: Re: xforms:copy binding query




All,

We had a related discussion during one of the last Forms WG calls
(John, in case this doesn't ring a bell, this was the rare meeting
which you did not attend).

This discussion was not directly related to xforms:copy but to
xforms:select with xforms:value. Here are the relevant issues for
XForms 1.1:

   http://tinyurl.com/2bgvot
   http://tinyurl.com/2bf4zv

What we decided during that call was that:

1. xforms:select should be non-destructive
2. xforms:select should show an out-of-bound condition

I think that the same behavior should apply to xforms:copy. If so, and
if I understand your initial issue well, what you want to do should be
possible if/once implementations follow this non-destructive logic.

-Erik

Robert Walpole wrote:
 > Hi John,
 >
 > Thanks for your reply. To avoid any further confusion I will stick to
 > the real world example of what I am trying to do.
 >
 > Basically, I have a target XML node which is a <metadata/> element. On
 > my form I want to have 2 select controls. One with accessibility options
 > and one with clientgroup options. Each of these controls is populated
 > with a different itemset. When the user selects options from the
 > controls I want the selected items to be placed in the same metadata
 > target node.
 >
 > In other words, if the user selects 2 options from the accessibiliy list
 > and 2 options from the clientgroup list I want the resulting XML to look
 > like something like this.
 >
 > <metadata>
 >         <accessibility>1</accessibility>
 >         <accessibility>2</accessibility>
 >         <clientgroup>a</clientgroup>
 >         <clientgroup>b</clientgroup>
 > </metadata>
 >
 > Previously I have attempted to handle this using xforms:select1 within
 > an xforms:repeat and an associated trigger to add additional form
 > controls and therefore multiple elements of the same name. However the
 > more complex the data model the more cumbersome this becomes and so I am
 > trying to use xforms:copy as a more elegant solution. The problem I am
 > having with this is that the bindings to the target node appear to be
 > mutually exclusive and in the implementation I am using (Chiba) I am
 > physically unable to select items from both lists. I can select multiple
 > items in one list and then as soon as I start selecting items in the
 > second list the items in the first list are deselected and do not show
 > in the submitted data.
 >
 > I am not sure what you mean by an "out of range event". I assume that
 > this is something handled by the implementation? In any event a
 > colleague of mine has added the xforms:copy functionality to Chiba so it
 > is possible we may be able to modify the behaviour, if appropriate.
 >
 > It may be that the only answer is to change my model so that each select
 > control has a different target node. The problem with this is that I am
 > working with a existing dataset and this kind of restructuring is not
 > desirable.
 >
 > Thanks again.
 > Rob Walpole
 > Devon Portal Developer
 > Email robert.walpole@devon.gov.uk
 > Web http://www.devonline.gov.uk
 >
 >
 > -----Original Message-----
 > From: John Boyer [mailto:boyerj@ca.ibm.com]
 > Sent: 23 October 2007 15:31
 > To: Robert Walpole
 > Cc: Aaron Reed; www-forms@w3.org; www-forms-request@w3.org
 > Subject: RE: xforms:copy binding query
 >
 >
 >
 > Hi Robert,
 >
 > It's not clear enough from your first message what you are actually
 > trying to do. This latest post involving use of insert surely seems to
 > be going in the wrong direction, though, as the point of copy is that
 > you don't need generalized insertion capabilities.
 >
 > I understood that you wanted two different controls to be able to
 > contribute to a test data result.
 >
 > OK, so that means the ref of the two controls points at the same node
 > "/test/data"
 >
 > But what is the itemset nodeset supposed to point at in the two
 > different controls?
 >
 > Are you thinking to have the two itemsets be different?
 >
 > If so, I think it is only slightly problematic.  However, it should be
 > possible to make it work, and in particular to do so without use of
 > insert, but there will be a minor hiccup in the fact that each of the
 > select controls will receive out of range error events for the subtrees
 > placed in "/test/data" that do not correspond to items in the union of
 > the item sets but not the complement of their intersection.
 >
 > In other words, if you have an item generated by control S1 but not S2,
 > and you select that item, the subtree will be copied into the node
 > referenced by S1, but S2 should then receive an out of range event
 > because it has no item to match that copied node.  But this is a
 > notification event, which could be ignored or cancelled.
 >
 > Finally, perhaps let us know what you really want to do at a higher
 > level, since a solution other than having two selects with non-identical
 > item sets might present itself.  But if it is exactly what you need, it
 > should in principle work, modulo the out of range notifications.
 >
 > Cheers,
 > John M. Boyer, Ph.D.
 > STSM: 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
 >
 >
 >
 >
 > "Robert Walpole" <robert.walpole@devon.gov.uk>
 > Sent by: www-forms-request@w3.org
 > 10/23/2007 04:01 AM To"Aaron Reed" <aaronr@us.ibm.com>,
<www-forms@w3.org>
 > cc
 > SubjectRE: xforms:copy binding query
 >
 >
 >
 >
 >
 >
 >
 > Hi Aaron,
 >
 > Thanks for your reply. I understand what you are saying about the
 > bindings although this does seem a bit of a limitation.
 >
 > I am interested in your suggestion of using the xforms-select event but
 > I am struggling to see how this would work.
 >
 > At present I am just trying to get it to work with one select control
 > and I have something like the following:
 >
 > <xforms:model>
 >                 <xforms:instance>
 >                                  <communitygroup>
 >                                                   <data/>
 >                             <metadata/>
 >            </communitygroup>
 >      </xforms:instance>
 >                 <xforms:bind id="data" nodeset="/communitygroup/data"/>
 >      <xforms:bind id="metadata" nodeset="/communitygroup/metadata"/>
 >      <xforms:instance id="accessibility-instance"
 > src="accessibility.xml"/>
 > </xforms:model>
 >
 > <xforms:select bind="data">
 >                 <xforms:label>Metadata</xforms:label>
 >                 <xforms:itemset
 > nodeset="instance('accessibility-instance')/accesstype">
 >                       <xforms:label ref="accessterm"/>
 >            <xforms:copy ref="accessibility"/>
 >            <xforms:action ev:event="xforms-select">
 >                  <xforms:insert bind="metadata" at="last()"
 > position="after"/>
 >                             <xforms:setvalue ref="."/>
 >                       </xforms:action>
 >                 </xforms:itemset>
 > </xforms:select>
 >
 > However this produces some pretty mangled results and I'm not at all
 > sure what the bindings should really look like in this case.
 >
 > Any pointers you (or anyone else) can offer would be much appreciated.
 >
 > P.S. accessibility.xml attached in case required.
 >
 > Many Thanks
 > Rob Walpole
 > Devon Portal Developer
 > Email robert.walpole@devon.gov.uk
 > Web http://www.devonline.gov.uk
 >
 >
 >
 >  > -----Original Message-----
 >  > From: www-forms-request@w3.org
 >  > [mailto:www-forms-request@w3.org] On Behalf Of Aaron Reed
 >  > Sent: 19 October 2007 21:53
 >  > To: www-forms@w3.org
 >  > Subject: Re: xforms:copy binding query
 >  >
 >  >
 >  >
 >  > Hi Rob,
 >  >
 >  > You can certainly bind two selects/select1s to the same node,
 >  > but when
 >  > you select items in a select/select1, it will replace the values
 >  > underneath it.  The only way you could mix and mingle them
 >  > are if both
 >  > selects had the same items and you use ctrl+<click> when
 >  > selecting items
 >  > (assuming your process uses a html:select type of control) but then
 >  > there isn't much reason to have both.  You could always try
 >  > to manage it
 >  > yourself with binding the two selects to different nodes and then
 >  > handling the xforms-select and xforms-deselect events and
 >  > inserting/deleting the nodes under the 'real' target node yourself.
 >  >
 >  > --Aaron
 >  >
 >  > Robert Walpole wrote:
 >  > > Hi,
 >  > >
 >  > > I am seeking some clarification about how the XForms copy element
 >  > > (http://www.w3.org/TR/2007/WD-xforms11-20070222/#ui-adv-copy) should
 >  > > work.
 >  > >
 >  > > My question is whether it should be possible to use xforms:copy on
 >  > > different xforms:select controls to copy different element
 >  > nodes into
 >  > > the same target node?
 >  > >
 >  > > For example, say I want to have 2 select controls that use use
 >  > > xforms:copy to populate the data node in the following...
 >  > >
 >  > > <test>
 >  > >                  <data/>
 >  > > </test>
 >  > >
 >  > > In this case I would bind both of my select controls to the
 >  > data nodeset
 >  > > and by selecting two values from both controls I would hope to get
 >  > > something like the following result...
 >  > >
 >  > > <test>
 >  > >                  <data>
 >  > >                                   <abc>123</abc>
 >  > >                                   <abc>456</abc>
 >  > >                                   <def>321</def>
 >  > >                                   <def>654</def>
 >  > >                  </data>
 >  > > </test>
 >  > >
 >  > > Is this allowable? It may be that I cannot bind two
 >  > different controls
 >  > > to the same target node. Any clarification of this would be much
 >  > > appreciated.
 >  > >
 >  > > Many Thanks
 >  > > Rob Walpole
 >  > > Devon Portal Developer
 >  > > Email robert.walpole@devon.gov.uk
 >  > > Web http://www.devonline.gov.uk
 >  > >
 >  > >
 >  > >
 >  > >
 >  >
 >  >
 >  >
 >  >
 >


--
Orbeon Forms - Web Forms for the Enterprise Done the Right Way
http://www.orbeon.com/

Received on Wednesday, 24 October 2007 13:52:28 UTC