- From: Erik Bruchez <ebruchez@orbeon.com>
- Date: Mon, 12 Feb 2007 23:38:20 +0100
- To: www-forms@w3.org
Philip, >> Now there is a twist: a control bound to a non-existing node is >> considered non-relevant. > > If a control is non-relevant because it is bound to a non-existent > node, surely that would imply that the control should be rendered > in-accessible That's right, and that's what the spec mandates (and has in fact been made clearer in either an errata to 1.0 or in 1.1, I am not sure). > and therefore it would be impossible, for example, to add attributes > to a node that had not had those attributes already declared! That does not follow: you can add attributes with xforms:insert. I can imagine how you could have controls able to create nodes on their own, but XForms doesn't have this particular feature (if you except the lazy authoring feature that allows controls to create nodes during initialization if you don't specify an instance at all). > In essence, I want to create a dependency between two attributes > such that it doesn't make sense to have the later without the > former. However, if both attributes are implied then how can you > test the dependency, as expressed with the relevance MIP, if: > > a) The context for the test is the later and, > b) the later doesn't exist. > > > I've reworked my example with some of your corrections: > > <xforms:model> > > <xforms:instance xmlns=""> > <area x="0" y="0"/> > </xforms:instance> > > <xforms:bind id="area.width" nodeset="@width" > relevant="../@height"/> > > </xforms:model> > > > <xforms:input bind="area.width"> > ... > </xforms:input> > > 1) I must be able to input a value for @width regardless of whether > it has already been specified in the instance data. This mandates that there is, somewhere, a node to which the input control can be bound. One way to do this, graphically, is to use two controls: 1. xforms:input bound to @width, which may or may not exist. If it does not exist, the control doesn't show. 2. xforms:trigger, visible only if the node does not exist. When the user activates the trigger, the node is created, and the xforms:input automatically appears. Because it is now bound to a node, you can enter data in it. You may want to add another trigger to remove the attribute (or change the behavior of the trigger to add the node if it doesn't exist, and delete it if it does exist.) <xforms:input bind="area.width">...</xforms:input> <xforms:trigger ref=".[not(@width)]"> <xforms:label>Add</xforms:label> <xforms:insert context="." origin="instance('template')/@width"/> </xforms:trigger> <xforms:trigger ref=".[@width]"> <xforms:label>remove</xforms:label> <xforms:delete context="." nodeset="@width"/> </xforms:trigger> (Note that xforms:insert and xforms:dlete above use XForms 1.1 capabilities.) > 2) If I want to have the ability to prevent the input a values for > @width if @height has not already been defined then the relevance > expression is meaningless without a valid context (in this case > @width). If think your binding expression will work fine for xforms:input with the above: it will make the control bound to @width non-relevant if there is no height. But then you also need to control the appearance of the Add/Remove triggers. You could maybe write: <xforms:trigger ref=".[@height and not(@width)]"> <xforms:label>Add</xforms:label> <xforms:insert context="." origin="instance('template')/@width"/> </xforms:trigger> <xforms:trigger ref=".[@height and @width]"> <xforms:label>remove</xforms:label> <xforms:delete context="." nodeset="@width"/> </xforms:trigger> > If, as I believe this problem cannot be solved as it is expressed then > can I express the binding and the relevance test in another way so that > the absence of a valid context node is not an issue? > xforms:bind id="area.width" nodeset="area" calculate="@width" > relevant="@height"/> @calculate already returns a string value, so it cannot be used to create attributes or elements, if that's what you wanted to do here. -Erik -- Orbeon Forms - Web Forms for the Enterprise Done the Right Way http://www.orbeon.com/
Received on Monday, 12 February 2007 22:38:31 UTC