- From: Mark Birbeck <mark.birbeck@x-port.net>
- Date: Thu, 5 Feb 2004 15:30:48 -0000
- To: "'David Landwehr'" <dlandwehr@novell.com>
- Cc: <www-forms@w3c.org>, <Leigh.Klotz@pahv.xerox.com>
David,
> That is interesting. Is there backup for this in the spec today ...
I'd say that although it's a good candidate for clarification, the spec
already allows it.
The spec actually doesn't say whether @nodeset is optional or required
on xf:bind [1]. However, the schema (which is normative) *does* say that
@nodeset is optional [2]. This therefore leads to a number of possible
arrangements, many of which I believe are very useful.
For example, you could break this:
<bind nodeset="task" readonly="true()" relevant="true()" />
into this:
<bind nodeset="task">
<bind readonly="true()" />
<bind relevant="true()" />
</bind>
Why is that useful? Well for a start it makes it easier to document what
you are doing:
<bind nodeset="task">
<!--
A task is not editable if complete
-->
<bind readonly="status='status#1'" />
<!--
If the task is to send an email, then we need to
know who to
-->
<bind constraint=
"boolean-from-string(
if(
type='email',
if(who,'true','false'),
'true')
)"
/>
</bind>
It also makes it easier to build 'packets' of business rules that can be
used in other places. For example, a company could have a company-wide
policy that if someone is applying for a loan larger than £5000, they
must provide a contact phone number:
<bind constraint=
"boolean-from-string(
if(
amount > 5000,
if(phoneNumber,'true','false'),
'true')
)"
/>
If this is then placed on a central server in the way Leigh described,
and XInclude is used to pick this up, one form might look like this:
<bind nodeset="shortTermLoanApplication">
<xi:include href="business-rules.xml" />
</bind>
whilst another form might have this:
<bind nodeset="studentLoanApplication">
<xi:include href="business-rules.xml" />
</bind>
The company's rules can now be changed in one place.
Leigh's use of <bind /> is a special case of this, where if you have a
number of rules in the central file, you would need to encapsulate them
all in a single xf:bind:
<bind>
<bind readonly="true()" />
<bind constraint=". > 7" />
</bind>
The expansion (after include) would then be something like this:
<bind nodeset="...">
<!-- start inclusion of rules --->
<bind>
<bind readonly="true()" />
<bind constraint=". > 7" />
</bind>
<!-- end inclusion --->
</bind>
> ... e.g. should an implementation do this today?
I believe they should. formsPlayer does.
Regards,
Mark
[1] <http://www.w3.org/TR/xforms/slice3.html#structure-bind-element>
[2] <http://www.w3.org/TR/xforms/sliceA.html>
Mark Birbeck
CEO and CTO
x-port.net Ltd.
Received on Thursday, 5 February 2004 10:31:06 UTC