- From: John Boyer <boyerj@ca.ibm.com>
- Date: Wed, 18 Apr 2007 18:03:43 -0700
- To: www-forms-editor@w3.org
- Message-ID: <OF6C93634D.67666C0B-ON882572C1.007D9CFA-882572C2.0005D74C@ca.ibm.com>
Once a binding expression on an element is evaluated, XForms uses the
identified node as the context node for other attributes on the same
element.
One example where that creates a limitation is given in the following last
call comment:
http://lists.w3.org/Archives/Public/www-forms-editor/2007Apr/0042.html
But other cases exist. For example, if an instance has three instance
nodes as follows:
<data>
<a>2</a>
<b>2</b>
<c>4</c>
</data>
then one must write the following to put the result of a+b into c:
<bind nodeset="c" calculate="../a + ../b"/>
The excessive dots are a nuisance, and when the novice writes what is
reasonable to expect-- calculate="a+b"-- the result is NaN. This is
because the calculate is interpreted relative to the node c, and the node
c has no child elements named a and b. The dots are needed to traverse up
to the parent of c so that its siblings may be obtained.
The problem becomes more acute in larger formulae, which occur often in
constraints.
It should be noted that fixing this problem might mean that the above bind
would no longer be equal to the following nested bind (because the outer
bind sets the evaluation context for the inner bind):
<bind nodeset="c">
<bind calculate="../a + ../b"/>
</bind>
It is a decision point as to whether preserving that equivalence between
the nested and non-nested bind is important. If not, then the nested bind
would give another way to get the old 1.0 behavior back for those who want
it. If so, then that might simply affect how the problem is solved.
Needless to say, it would be too problematic for the existing XForms
community to do away with the current method of determining the evaluation
context for attributes like @calculate on bind or @value on setvalue. So
we would need some kind of attribute for turning on a different method.
This attribute could *default* to the new method when the XForms model
@version attribute is set to 1.1.
Perhaps something like <model unifiedcontext="false" version="1.1" ...>
would suffice to keep the old context evaluation in 1.0, and one could
optionally write unifiedcontext="true" to make the change to having all
attributes of an element use the same eval context. And,
unifiedcontext="true" could be the default for version="1.1" XForms.
I don't have a good solution yet for how this could be done if the nested
bind and non-nested bind cases above must remain equivalent, but last call
rules say my proposal does not have to be complete, and in this case, I
call out this equivalence as a decision point, so we don't have to solve
it if the answer is no.
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
Received on Thursday, 19 April 2007 01:03:57 UTC