- From: John Boyer <boyerj@ca.ibm.com>
- Date: Tue, 23 Aug 2005 09:23:40 -0700
- To: Vincent Berger <vincent.berger@afp.com>
- Cc: www-forms@w3.org, w3c-forms@w3.org
- Message-ID: <OF5CCFB1A4.8FE3E00F-ON88257066.0058103D-88257066.005A0F1C@ca.ibm.com>
The XForms working group recently published an erratum that will help you
(the 1.0 second edition spec
is in the W3C publication process now).
The 1.0 spec said that if the nodeset of a delete was empty, the delete
action would no-op. The intent,
not stated, was that insert would have the analogous behavior for
consistency. The new version of the
spec states this.
The upshot, though, is that XPath predicates can be used to perform
conditional insertion.
A 'best practice' approach to designing repeat structures in XForms 1.0 is
to omit the last node of the nodeset
from the repeat, so that it can be used as the prototypical row. For
example, nodeset="blah/blah/row[position()!=last()]"
should appear as the nodeset binding of the repeat.
If you want your repeat to start out empty, then it will by virtue of this
setting. Since the user has no
controls to access the data, it won't change.
If you want the repeat to start out with one empty row of data, then use
an xforms-model-construct-done event
to "conditionally" insert a new row of data if there is the one
prototypical row (insert nodeset="blah/blah/row[last()='1']")
If you want to omit the prototypical row from the final submitted data,
use a bind to make it non-relevant.
If you wanted to start with a one row table, then chances are you want to
get back to a one row table when
the user deletes the last visible row of the table. Because the repeat is
not showing the prototypical row of
data, deleting the last visible row has not deleted the prototype.
Therefore, after your delete action, you can
run a conditional insert to add back a single empty row. It's the same
trick we did in xforms-model-construct-done.
The key issue here is that this methodology works for every repeat table
regardless of the data it is processing.
The method also extends to nested repeats in a straightforward fashion.
The only issue we have encountered is the following: if you do a repeat
in which each row has a delete trigger,
AND you want the repeat to be able to become empty (i.e. you don't enforce
the existence of a single empty
row in the manner described above), then the result of a deletion loses
the focus if the last visible row is deleted.
This is because XForms does not support conditionally setting the focus to
something other than the repeat when
the last row of the repeat disappears. To alleviate this problem, every
delete in the trigger would have to be
followed by an unconditional setfocus to a visible control.
For this reason, I hope to encourage the inclusion of attribute value
templates on the attributes of certain XForms elements.
As I see it, the most important ones are the
action of a submission, e.g. action="{xpath expression resulting in URI}"
the control of a setfocus action, e.g. control="{xpath expression
resulting in ID}"
the case of a toggle action, e.g. case="{xpath expression resulting in
ID}"
Best regards
John M. Boyer, Ph.D.
Senior Product Architect/Research Scientist
Workplace, Portal and Collaboration Software
IBM Victoria Software Lab
E-Mail: boyerj@ca.ibm.com http://www.ibm.com/software/
Vincent Berger <vincent.berger@afp.com>
Sent by: www-forms-request@w3.org
08/23/2005 05:13 AM
To
Allan Beaufour <abeaufour@novell.com>, www-forms@w3.org
cc
Subject
Re: XForms problem
Le mardi 23 août 2005 à 13:45 +0200, Allan Beaufour a écrit :
Tuesday 23 August 2005 12:05 skrev Vincent Berger:
> Le mardi 23 août 2005 à 16:16 +0700, Saran Toochinda a écrit :
> > We're planning to use XForms to collect XML data (currently using
Novell
> > XForms Explorer for IE). The data we're collecting is company data, 1
> > file per company. The schema is change from time to time which most of
> > the time is resulting in newly added data elements. The XForms
controls
> > need to be added accordingly to accept the new data elements. There is
no
> > problem on new file data entry so far but the problem arise when
dealing
> > with existing files. Because Xforms' controls bind to existance of
> > element in an instance document. The newly added controls don't get
> > display because no such data ever exists before. Do I missing
something?
> >
> > One other issue is about repeat control. Usually we provide a trigger
to
> > insert and delete repeated element. Once we delete all elements, we
have
> > way(s) to insert it back again?
>
> About repeat control, I keep an element in a section (called in an
> arbitrary way) "<patterns>" ,
> and use the xforms function "duplicate" when I want to populate an empty
> "container".
Unfortunately duplicate is an XForms 1.1 control.
Yes, but is working , in this case, on Novell Xforms Explorer for IE, as
specified by Saran.
--
Vincent Berger <vincent.berger@afp.com>
Agence France-Presse
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
This e-mail, and any file transmitted with it, is confidential and
intended solely for the use of the individ ual or entity to whom it is
addressed. If you have received this email in error, please contact the
sende r and delete the email from your system. If you are not the named
addressee you should not disseminate, distr ibute or copy this email.
For more information on Agence France-Presse, please visit our web site at
http://www.afp.com
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Received on Tuesday, 23 August 2005 20:45:23 UTC