- From: John Boyer <boyerj@ca.ibm.com>
- Date: Tue, 26 Feb 2008 20:50:23 -0500
- To: Nick_Van_den_Bleeken@inventivegroup.com
- Cc: XForms <public-forms@w3c.org>
- Message-ID: <OF7640B7CD.1BCA0ED1-ON852573FC.00069174-852573FC.000A1BAF@ca.ibm.com>
Hi Nick,
We can discuss on the call, as it is actually orthogonal to the issue of
unified context. This is just something we could do, or not do, while
we're in the neighborhood, so to speak.
But from the form author perspective, the boolean-from-string()
interpretation seems better because it directly maps to the *content* of a
node of type xsd:boolean, and forms are more often about content than
structure.
For example, if I have some node kicking around like this:
<isChild>true</isChild>
using it to control a "guardian" element's relevance *should* be as easy
as this:
<bind nodeset="... guardian" relevant="isChild"/>
But because *all* MIPs are interpreted as strings, and because of an XPath
quirk, the above does a dratted node existence test.
This is one of those annoyances where we often have to explain to people
why their straightforward-looking reasoning does not work. At some point,
it isn't them! And you can tell it's us based on what we have to tell
them to do:
<bind nodeset="... guardian" relevant="boolean-from-string(isChild)"/>
It would be much better to have the 99% case be the default, i.e. to
default to boolean-from-string interpretation of the results of relevant,
readonly and constraint.
For the few cases where you actually do want to do a node existence test,
I would say the following:
1) the form author is a more complicated person because they are dealing
with optional content in their schemas, so having to write something more
in this 1% case is OK
2) the node existence test can be simpler than what you wrote; rather than
invoking if(), just use boolean(some/node). This would work because the
boolean result would be converted to string in order to be valid input to
boolean-from-string(), and then it would be converted right back to
boolean.
In XForms 1.1 and below, we've consumed XPath, which had to pick a default
way of converting a nodeset to boolean, and it picked the wrong way for
forms, though perhaps the right way for XSLT. So this just seems like one
of those "not a perfect fit" issues that comes from adopting someone
else's technology. The ease-of-authoring mandate means it is time to
smooth out some rough edges.
Now, you might say that the highest priority is to keep the "simplified
authoring" syntax simple, and the "canonical" XForms syntax does not have
to change unless it is hard to convert from simplified to canonical form.
For example, we could say that this markup:
<div name="guardian" relevant="isChild">
<input name="name"> ...
...
</div>
implies a canonical form that automatically adds the
boolean-from-string(), like this:
<xf:model>
<xf:instance>
<data>
...
<isChild>true</isChild>
<guardian>
<name>...</name>
...
</guardian>
...
</data>
</xf:instance>
<xf:bind nodeset="guardian" relevant="boolean-from-string(isChild)"/>
</xf:model>
<group ref="guardian">
<input ref="name"> ...
...
</group>
Maybe that's good enough, but it does seem to continue to penalize authors
of canonical XForms.
Best regards,
John M. Boyer, Ph.D.
Senior Technical Staff Member
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
Blog RSS feed:
http://www.ibm.com/developerworks/blogs/rss/JohnBoyer?flavor=rssdw
Nick_Van_den_Bleeken@inventivegroup.com
02/26/2008 06:01 AM
To
John Boyer/CanWest/IBM@IBMCA, XForms <public-forms@w3c.org>
cc
Subject
Question about MIP childs of binds (XForms 1.2 : Unified evaluation
context)
John,
While working on my action items, and more specific Unified evaluation
context(1). I've re-read your e-mail (2) related to this action item. I
completely agree with most of your remarks. But I'm not convinced by your
proposal to specify "that the element relevant could
be defined as automatically applying boolean-from-string to the string
result", because:
1) XForms 1.0 and 1.1 define that boolean() is used to convert the node
set to a boolean for the MIPs
2) Other w3c specs use the same strategy as XForms 1.0 and 1.1 to come to
an 'effective boolean' : XPath (see (3) (4) and (5) for places where
boolean() is used to convert a node set to a boolean), XSLT, ...
3) When we will use boolean-from-string() instead of boolean() it becomes
really counter intuitive to check for existence of a node example :
if(<xpath-expr>, 'true', 'false')
Regards,
Nick Van den Bleeken - Research & Development Manager
Inventive Designers
Phone: +32 - 3 - 8210170
Fax: +32 - 3 - 8210171
Email: Nick_Van_den_Bleeken@inventivegroup.com
(1) http://www.w3.org/MarkUp/Forms/wiki/Unified_evaluation_context
(2) http://lists.w3.org/Archives/Public/public-forms/2008Feb/0022.html
(3) http://www.w3.org/TR/xpath#section-Function-Calls
(4)http://www.w3.org/TR/xpath#booleans
(5)http://www.w3.org/TR/xpath#predicates
Inventive Designers' Email Disclaimer:
http://www.inventivedesigners.com/email-disclaimer
Received on Wednesday, 27 February 2008 01:50:45 UTC