Re: Wrong XPath expression in Iterate example of XForms 1.1 CR

Hi Nick,

The 'if' and 'while' attributes use the in-scope evaluation context before 
the action is executed, so they are not subject to the result of a ref or 
nodeset on the action.

This is the same context used to evaluate the context attribute on 
insert/delete.

For this reason, the 'if' expression in the example you cited is actually 
correct.  In fact, the example is written this way exactly to highlight 
the difference.

The context coming into the setvalue is the 'default' instance.  The bulk 
of the action script does work in a 'temp' instance.  In the setvalue you 
cited, the one which adds to the accumulator, the 'value' attribute must 
directly reference the default instance because its evaluation context 
comes from the ref attribute, which refers to a node in the temp instance. 
 But the 'if' attribute is evaluated before the 'ref' so it uses the 
in-scope evaluation context, which is the default instance in this 
example.

Cheers,
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 
Sent by: www-forms-editor-request@w3.org
12/14/2007 07:02 AM

To
public-xforms@w3.org, www-forms-editor@w3.org
cc

Subject
Wrong XPath expression in Iterate example of XForms 1.1 CR







All, 

Can it be that the 'if' XPath expression of the 3th setvalue in the '
Summing Selected Results'  sample [1] is missing an explicit reference to 
the default instance? 

<trigger>
  <label>Get Sum</label>
  <action ev:event="DOMActivate">
     <setvalue ref="instance('temps')/counter" value="1"/>
     <setvalue ref="instance('temps')/accumulator" value="0"/>
     <action while="instance('temps')/counter <= count(/some/nodes)">
        <setvalue ref="instance('temps')/accumulator" 
                  value=". + 
instance('default')/some/nodes[number(instance('temps')/counter)]"
 
if="boolean-from-string(/some/nodes[number(instance('temps')/counter)]/@selected)"/>
        <setvalue ref="instance('temps')/counter" value=". + 1"/>
     </action>
  </action>
</trigger> 

The ref of the 3th setvalue changes the instance of the in-scope 
evaluation context to instance 'temps'. 
But the '/some/nodes' are in the 'default' instance (see value of the 
setvalue). 
-> we should change 'boolean-from-string(/some/nodes' to 
     'boolean-from-string(instance('default')/some/nodes' 


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/TR/xforms11/#action-iterated
Inventive Designers' Email Disclaimer:
http://www.inventivedesigners.com/email-disclaimer

Received on Friday, 14 December 2007 18:25:49 UTC