<?xml version="1.0" encoding="UTF-8"?>
<!--November 17, 2006--><bpel-xpath-functions>

    <!-- Assistants and args repeated in the function defintions below -->

    <assistant name="SimpleDateFormat" type="1">
        <option value="&quot;yyyy.MM.dd G 'at' HH:mm:ss z&quot;">2001.07.04 AD at 12:08:56 PDT</option>
        <option value="&quot;EEE, MMM d, ''yy&quot;">Wed, Jul 4, '01</option>
        <option value="&quot;h:mm a&quot;">12:08 PM</option>
        <option value="&quot;hh 'o''clock' a, zzzz&quot;">12 o'clock PM, Pacific Daylight Time</option>
        <option value="&quot;K:mm a, z&quot;">0:08 PM, PDT</option>
        <option value="&quot;yyyyy.MMMMM.dd GGG hh:mm aaa&quot;">02001.July.04 AD 12:08 PM</option>
        <option value="&quot;EEE, d MMM yyyy HH:mm:ss Z&quot;">Wed, 4 Jul 2001 12:08:56 -0700</option>
        <option value="&quot;yyMMddHHmmssZ&quot;">010704120856-0700</option>
    </assistant>

     <assistant name="LDAPScope">
        <option value="'subtree'">Subtree Search (starting at the given Distinguished Name)</option>
        <option value="'onelevel'">Onelevel Search (siblings of given Distinguished Name only)</option>
        <option value="'object'">Object Search (given Distinguished Name only)</option>
    </assistant>

    <arg default="" name="dateFormat" optional="true" type="string">
        <comment>Contains a string formatted according to java.text.SimpleDateFormat format.</comment>
        <assistant ref="SimpleDateFormat"/>
    </arg>

    <arg default="" name="ldapfilter" type="string">
        <comment>An LDAP filter. </comment>
    </arg>

    <arg default="'subtree'" name="ldapscope" optional="true" type="string">
        <comment>An LDAP search scope. Values are object,onelevel,subtree.</comment>
        <assistant ref="LDAPScope"/>
    </arg>

    <arg default="" name="password" type="string">
        <comment>The user password.</comment>
        <assistant ref="xpathPicker"/>

    </arg>

    <arg default="" name="fileName" type="string">
        <comment>File name from the file system. Note that this file name is in the context of the Oracle BPEL Process Manager.</comment>
        <assistant ref="filePicker"/>
    </arg>

    <arg default="" name="xpath" optional="true" type="string">
        <comment>An XPath expression that resolves in an W3C XML DOM Element node</comment>
    </arg>

    <arg default="" name="templateURI" type="string">
        <comment>A URI to the template. </comment>
        <assistant ref="uriPicker"/>
    </arg>

    <arg default="" name="xsltInput" type="node">
        <comment>A W3C XML DOM element. </comment>
        <assistant ref="xpathPicker"/>
    </arg>

    <arg default="" name="xqueryContext" optional="true" type="node">
        <comment>A W3C XML DOM element. </comment>
        <assistant ref="xpathPicker"/>
    </arg>

    <arg default="'1'" name="item" type="number">
        <comment>Item in array</comment>
        <assistant ref="xpathPicker"/>
    </arg>

    <arg default="" name="properties" optional="true" type="node">
        <comment>A W3C XML DOM element. </comment>
        <assistant ref="xpathPicker"/>
    </arg>

    <arg default="" name="element1" type="node">
        <comment>A W3C XML DOM element.  </comment>
        <assistant ref="xpathPicker"/>

    </arg>

    <arg default="" name="element2" type="node">
        <comment>A W3C XML DOM element.  </comment>
        <assistant ref="xpathPicker"/>

    </arg>


    <arg default="" name="variableName" type="string">
        <comment>The source variable for the data</comment>
        <assistant ref="xpathPicker"/>

    </arg>

    <arg default="" name="partName" optional="true" type="string">
        <comment>The part to select from the variable</comment>
        <assistant ref="xpathPicker"/>

    </arg>
    <arg default="" name="locationPath" optional="true" type="string">
        <comment>Provides an absolute location path (with '/' meaning the root of the document fragment representing the entire part) to identify the root of a subtree within the document fragment representing the part.</comment>
    </arg>

    <arg default="" name="index" optional="true" type="number">
        <comment>Dynamic index value</comment>
        <assistant ref="xpathPicker"/>

    </arg>

    <arg default="" name="aNode" type="node">
        <comment>An XML DOM node. </comment>
        <assistant ref="xpathPicker"/>
    </arg>

    <arg default="" name="xmlContentString" type="string">
        <comment>XML Content formatted as a string. </comment>
        <assistant ref="functions"/>
    </arg>

    <arg default="" name="nodeSet" type="node-set">
        <comment>An XML DOM Node-Set </comment>
        <assistant ref="xpathPicker"/>
    </arg>

    <arg default="" name="aNodeSet" optional="true" type="node-set">
        <comment>An XML DOM Node-Set </comment>
        <assistant ref="xpathPicker"/>
    </arg>
    <arg default="" name="object" type="object">
        <comment>Any W3C XML DOM object or node-set.</comment>
        <assistant ref="xpathPicker"/>
    </arg>
    <arg default="" name="aBoolean" type="boolean">
        <comment>A boolean value expression or constant</comment>
        <assistant ref="xpathPicker"/>
    </arg>
    
    <!-- BPEL functions -->

    
    <function id="last" returns="number" visual="1">
        <help>Returns a number equal to context size of the expression evaluation context.
        </help>
        <comment>
            <![CDATA[ Returns a number equal to context size of the expression evaluation context. ]]>
        </comment>
    </function>

    <function id="position" returns="number">
        <help>Returns the index number of the node within the parent.
            The position of the node is is 1-based, so the first node returns a position of 1. </help>
        <comment>
            <![CDATA[ Returns the position, or index number, of the node, relative to all the selected nodes in the node list.
        The position of the node is is 1-based, so the first node returns a position of 1.]]>
        </comment>
    </function>

    <function id="count" returns="number">
        <help>This XPath 1.0 defined function returns the count of nodes
            present in the supplied node-set</help>
        <comment>
            <![CDATA[ This XPath 1.0 defined function returns the count of nodes
         present in the supplied node-set ]]>
        </comment>
        <arg ref="aNodeSet"/>
    </function>


    <function id="id" returns="node-set">
        <help>Selects elements by their unique ID</help>
        <comment>
            <![CDATA[ Selects elements by their unique ID, <p>
          When the argument is of type node-set, the result is the union of the
          result of applying id() to the string value of each of the nodes in
          the node-set argument.
<p>
When the argument is of any other type, it is converted to a string
and then split into a white space separated list of tokens (white space is
any sequence of characters matching the production); the result
is a node-set containing the elements in the same document as the context
node that have a unique ID equal to any of the tokens in the list. ]]>
        </comment>

        <arg default="" name="object" type="object">
            <comment>The object or objects to apply the id function to.</comment>
            <assistant ref="xpathPicker"/>
        </arg>
    </function>


    <function id="local-name" returns="string">
        <help>Returns the local part of the expanded name of the node in the node-set argument that is first in document order</help>
        <comment>
            <![CDATA[ Returns the local part of the expanded name of the node in the node-set
        argument that is first in document order. <p>

    ]]>
        </comment>
        <arg ref="nodeSet"/>
    </function>


    <function id="namespace-uri" returns="string">
        <help>Returns the namespace Uniform Resource Identifier (URI) of the expanded name of the node
            in the node-set argument that is first in document order.</help>
        <comment>
            <![CDATA[ Returns the namespace Uniform Resource Identifier
        (URI) of the expanded name of the node in the node-set
        argument that is first in document order.

     ]]>
        </comment>
        <arg ref="nodeSet"/>
    </function>


    <function id="name" returns="string">
        <help>Returns a string containing a QName representing the expanded
            name of the node in the node-set argument that is first in document
            order.
        </help>
        <comment>
            <![CDATA[ Returns a string containing a QName representing
        the expanded name of the node in the node-set argument
        that is first in document order.
     ]]>
        </comment>
        <arg ref="nodeSet"/>
    </function>


    <function id="string" returns="string" visual="1">
        <help>Converts an object to a string.</help>
        <comment>
            <![CDATA[Converts an object to a string. ]]>
        </comment>
        <arg ref="object"/>
    </function>

    <function id="concat" returns="string">
        <help>This XPath 1.0 defined function concatenates several strings together.</help>
        <comment>
            <![CDATA[ This XPath 1.0 defined function concatenates several strings together.]]>
        </comment>

        <arg default="" name="firstString" type="string">
            <comment>First string to concatenate with</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="nextString" type="string">
            <comment>Next string to concatenate with</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="oneMoreString" optional="*" type="string">
            <comment>One more string. You can concatenate several strings at once.</comment>
            <assistant ref="xpathPicker"/>
        </arg>
    </function>

    <function id="contains" returns="string">
        <help>Checks whether the first argument string contains
            the second argument string.</help>
        <comment>
            <![CDATA[ Checks whether the first argument string
        contains the second argument string. ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to inspect</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="searchString" type="string">
            <comment>The search string </comment>
            <assistant ref="xpathPicker"/>
        </arg>
    </function>


    <function id="substring-before" returns="string">
        <help>Returns the substring of the first argument string that
            precedes the first occurrence of the second argument string
            in the first argument string, or the empty string if
            the first argument string does not contain the second argument
            string.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>substring-before Function</H1>
  <P class=dtP>Returns the substring of the first argument string that precedes the first
  occurrence of the second argument string in the first argument string, or the
  empty string if the first argument string does not contain the second argument
  string.</P><PRE class=syntax><I>string</I> substring-before(<I>string</I>, <I>string</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>If an argument is not of type <I>string,</I> it is first converted to a
  string and then evaluated.</P>
  <P class=dtP>The following function call returns "1999":</P><PRE class=code>substring-before("1999/04/01","/")</PRE>
  <P class=dtP>The following function call returns an empty string "":</P><PRE class=code>substring-before("1999/04/01","2")</PRE>
  </div>

        ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to search in</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="searchString" type="string">
            <comment>The search string </comment>
            <assistant ref="xpathPicker"/>
        </arg>
    </function>


    <function id="substring-after" returns="string">
        <help>Returns the substring of the first argument string that
            follows the first occurrence of the second argument string
            in the first argument string, or the empty string if
            the first argument string does not contain the second argument
            string.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">

  <H1 class=dtH1>substring-after Function</H1>
  <P class=dtP>Returns the substring of the first argument string that follows the first
  occurrence of the second argument string in the first argument string, or the
  empty string if the first argument string does not contain the second argument
  string.</P><PRE class=syntax><I>string</I> substring-after(<I>string</I>, <I>string</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>If an argument is not of type <I>string,</I> it is first converted to a
  string and then evaluated.</P>
  <P class=dtP>The following function call returns "04/01":</P><PRE class=code>substring-after("1999/04/01","/")</PRE>
  <P class=dtP>The following function call returns "99/04/01":</P><PRE class=code>substring-after("1999/04/01","19")</PRE>
  <P class=dtP>The following function call returns an empty string "":</P><PRE class=code>substring-after("1999/04/01","2")</PRE>
  </div>
        ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to search in</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="searchString" type="string">
            <comment>The search string </comment>
            <assistant ref="xpathPicker"/>
        </arg>
    </function>

    <function id="starts-with" returns="boolean">
        <help>Returns true if the first argument string starts with
            the second argument string; otherwise returns false.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>starts-with Function</H1>
  <P class=dtP>Returns true if the first argument string starts with the second argument
  string; otherwise returns false.</P><PRE class=syntax><I>boolean</I> starts-with(<I>string</I>, <I>string</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>If an argument is not of type <I>string,</I> it is first converted to a
  string and then evaluated. The function is case-sensitive.</P>
  </div>
        ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to search in</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="searchString" type="string">
            <comment>The search string </comment>
            <assistant ref="xpathPicker"/>
        </arg>
    </function>


    <function id="substring" returns="string">
        <help>Returns the substring of the first argument
            starting at the position specified in the second argument
            and the length specified in the third argument.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>substring Function</H1>
  <P class=dtP>Returns the substring of the first argument starting at the position
  specified in the second argument and the length specified in the third
  argument.</P><PRE class=syntax><I>string</I> substring(<I>string</I>, <I>number</I>, <I>number</I>?)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>Each character in the string is considered to have a numeric position: the
  position of the first character is 1, the position of the second character is 2,
  and so on.</P>
  <P class=dtP>If the third argument is not specified, it returns the substring starting at
  the position specified in the second argument and continuing to the end of the
  string.</P>
  <P class=dtP>The following function call returns "234":</P><PRE class=code>substring("12345",2,3) </PRE>
  <P class=dtP>The following function call returns "2345":</P><PRE class=code>substring("12345",2) </PRE>
  <P class=dtP>The returned substring contains those characters for which the position of
  the character is greater than or equal to the rounded value of the second
  argument, and if the third argument is specified, less than the sum of the
  rounded value of the second argument and the rounded value of the third
  argument. The comparisons and addition used for the preceding follow the
  standard IEEE 754 rules; rounding is done as if by a call to the <CODE
  class=ce>round()</CODE> function.</P>
  <P class=dtP>The following examples illustrate unusual cases.</P>
  <BLOCKQUOTE class=dtBlock><CODE class=ce>substring("12345", 1.5, 2.6)</CODE>
  returns "<CODE class=ce>234</CODE>"</BLOCKQUOTE>
  <BLOCKQUOTE class=dtBlock><CODE class=ce>substring("12345", 0, 3)</CODE> returns
  "<CODE class=ce>12</CODE>"</BLOCKQUOTE>
  <BLOCKQUOTE class=dtBlock><CODE class=ce>substring("12345", 0 div 0, 3)</CODE>
  returns <CODE class=ce>""</CODE></BLOCKQUOTE>
  <BLOCKQUOTE class=dtBlock><CODE class=ce>substring("12345", 1, 0 div 0)</CODE>
  returns <CODE class=ce>""</CODE></BLOCKQUOTE>
  <BLOCKQUOTE class=dtBlock><CODE class=ce>substring("12345", -42, 1 div 0)</CODE>
  returns <CODE class=ce>"12345"</CODE></BLOCKQUOTE>
  <BLOCKQUOTE class=dtBlock><CODE class=ce>substring("12345", -1 div 0, 1 div 0)</CODE> returns <CODE class=ce>""</CODE></BLOCKQUOTE>
  </div>
        ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to compute substring on</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="startPosition" type="number">
            <comment>Start Position (first position is index == 1)</comment>
            <assistant ref="xpathPicker"/>
        </arg>
        <arg default="" name="length" optional="true" type="number">
            <comment>Length of characters to extract</comment>
            <assistant ref="xpathPicker"/>
        </arg>

    </function>


    <function id="string-length" returns="number">
        <help>Returns the number of characters in the string.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>string-length Function</H1>
  <P class=dtP>Returns the number of characters in the string.</P><PRE class=syntax><I>number</I> string-length(<I>string</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>If the argument is omitted, it returns the number of characters in the
  string-value of the context node.</P>
  <P class=dtP>The following function call returns 4:</P><PRE class=code>string-length("abcd")</PRE>
  <P class=dtP>The following function call returns 5:</P><PRE class=code>string-length("ab cd")</PRE>
  <P class=dtP>If an argument is not of type <I>string,</I> it is first converted to a
  string and then evaluated.</P>
  </div>
        ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to compute the length on</comment>
            <assistant ref="xpathPicker"/>
        </arg>

    </function>


    <function id="normalize-space" returns="string">
        <help>Returns the argument string with the white space stripped.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>normalize-space Function</H1>
  <P class=dtP>Returns the argument string with the leading, trailing, and repeating white
  spaces stripped.</P><PRE class=syntax><I>string</I> normalize-space(<I>string</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>White space is normalized by stripping leading and trailing white space and
  replacing sequences of white space characters with a single space. If the
  argument is omitted, the string-value of the context node is normalized and
  returned.</P>
  <P class=dtP>The following function call returns "abc def":</P><PRE class=code>normalize-space("  abc    def  ")</PRE>
  <P class=dtP>If an argument is not of the type string<I>,</I> it is first converted to a
  string and then evaluated. See the example below.</P>

  </div>
        ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to normalize</comment>
            <assistant ref="xpathPicker"/>
        </arg>

    </function>

    <function id="translate" returns="string">
        <help>Returns the first argument string with occurrences
            of characters in the second argument string replaced by
            the character at the corresponding position in the third
            argument string.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>translate Function</H1>
  <P class=dtP>Returns the first argument string with occurrences of characters in the
  second argument string replaced by the character at the corresponding position
  in the third argument string.</P><PRE class=syntax><I>string</I> translate(<I>string</I>, <I>string</I>, <I>string</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>This function provides a mapping of characters on the first argument. The
  second and third arguments describes the scheme of the mapping. </P>
  <P class=dtP>The following function call returns "BAr":</P><PRE class=code>translate("bar","abc","ABC")</PRE>
  <P class=dtP>If there is a character in the second argument string with no character at a
  corresponding position in the third argument string (because the second argument
  string is longer than the third argument string), occurrences of that character
  in the first argument string are removed.</P>
  <P class=dtP>The following function call returns "AAA":</P><PRE class=code>translate("--aaa--","abc-","ABC")</PRE>
  <P class=dtP>If a character occurs more than once in the second argument string, the first
  occurrence determines the replacement character. If the third argument string is
  longer than the second argument string, excess characters are ignored.</P>
  <P class=dtP>If an argument is not of type <I>string,</I> it is first converted to a
  string and then evaluated.</P>


  </div>
        ]]>
        </comment>

        <arg default="" name="aString" type="string">
            <comment>The string to translate</comment>
            <assistant ref="xpathPicker"/>
        </arg>

        <arg default="" name="strOccur" type="string">
            <comment>The string to translate from</comment>
            <assistant ref="xpathPicker"/>
        </arg>

        <arg default="" name="strRepl" type="string">
            <comment>The string to translate to</comment>
            <assistant ref="xpathPicker"/>
        </arg>

    </function>



    <!-- Boolean functions -->


    <function id="boolean" returns="boolean" visual="1">
        <help>Converts the argument to a Boolean.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>boolean Function</H1>
  <P class=dtP>Converts the argument to a Boolean.</P><PRE class=syntax><I>boolean</I> boolean(<I>value</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>Converts argument to a Boolean as follows.
  <UL type=disc>
  <LI>A negative or positive number is true<CODE class=ce> </CODE>and any value
  that contains either zero or a NaN value
  is false.
  <LI>A node-set is false if empty and only true if it is nonempty.
  <LI>A string is false if it is zero-length and only true<CODE class=ce>
  </CODE>if its length is greater than zero.
  <LI>An object of a type other than the four basic types is converted to a
  Boolean in a way that is dependent on that type. </LI></UL>

  </div>
        ]]>
        </comment>
        <arg ref="object"/>
    </function>


    <function id="not" returns="boolean">
        <help>Returns true if the argument is false; otherwise false.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>not Function</H1>
  <P class=dt>Returns true if the argument is false; otherwise false.</P><PRE class=syntax><I>boolean</I> not(boolean)</PRE>

  </div>
        ]]>
        </comment>
        <arg ref="aBoolean"/>
    </function>


    <function id="true" returns="boolean">
        <help>Returns true.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>true Function</H1>
  <P class=dtP>Returns true.</P><PRE class=syntax><I>boolean</I> true()</PRE>

  </div>
        ]]>
        </comment>
    </function>


    <function id="false" returns="boolean">
        <help>Returns false.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>false Function</H1>
  <P class=dtP>Returns false.</P><PRE class=syntax><I>boolean</I> false()</PRE>

  </div>
        ]]>
        </comment>
    </function>


    <function id="lang" returns="boolean">
        <help>Returns true if the xml:lang attribute of the
            context node is the same as the argument string.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>lang Function</H1>
  <P class=dtP>Returns true if the <CODE class=ce>xml:lang</CODE> attribute of the context
  node is the same as a sublanguage of the language specified by the argument
  string.</P>
  <H4 class=dtH4>Syntax</H4><PRE class=syntax><I>boolean</I> lang(<I>string</I>)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>The language of the context node is determined by the value of the <CODE
  class=ce>xml:lang</CODE> attribute on the context node, or if the context node
  has no <CODE class=ce>xml:lang</CODE> attribute, by the value of the <CODE
  class=ce>xml:lang</CODE> attribute on the nearest ancestor of the context node
  that has an <CODE class=ce>xml:lang</CODE> attribute. If there is no such
  attribute, <CODE class=ce>lang()</CODE> returns false. If there is such an
  attribute, <CODE class=ce>lang()</CODE> returns true if the attribute value is
  equal to the argument (ignoring case) or if there is a suffix starting with
  "<CODE class=ce>-</CODE>", such that the attribute value is equal to the
  argument, ignoring the suffix of the attribute value and ignoring case.</P>
  <P class=dtP>Given the following XML elements:</P><PRE class=code>&lt;para xml:lang="en"/&gt;
  &lt;div xml:lang="en"&gt;&lt;para/&gt;&lt;/div&gt;
  &lt;para xml:lang="EN"/&gt;
  &lt;para xml:lang="en-us"/&gt;</PRE>
  <P class=dtP>The following function call returns true for all:</P><PRE class=code>lang("en")</PRE>

  </div>
        ]]>
        </comment>

        <arg ref="aString"/>
    </function>


    <!-- Number functions -->

    <function id="number" returns="number" visual="1">
        <help>Evaluates the argument expressions to obtain a numeric result.</help>
        <comment>
            <![CDATA[<div class="xpathHelp">
  <H1 class=dtH1>number Function</H1>
  <P class=dtP>Converts the argument to a number.</P><PRE class=syntax><I>number</I> number(<I>object</I>?)</PRE>
  <H4 class=dtH4>Remarks</H4>
  <P class=dtP>Converts its argument to a number as follows.
  <UL type=disc>
  <LI>A string that consists of optional white space followed by an optional minus
  sign followed by a number followed by white space is converted to the IEEE 754
  number that is nearest (according to the IEEE 754 round-to-nearest rule) to the
  mathematical value represented by the string; any other string is converted to
  NaN.
  <LI>Boolean true is converted to 1; Boolean false is converted to 0.
  <LI>A node-set is first converted to a string and then converted in the same way
  as a string argument.
  <LI>An object of a type other than the four basic types (node-set, Boolean,
  number, or string) is converted to a number in a way that is dependent on that
  type. </LI></UL>
  <P class=dtP>If the argument is omitted, it defaults to a node-set with the context node
  as its only member.</P>
  <BLOCKQUOTE class=dtBlock><B class=le>Note&nbsp;&nbsp;&nbsp;</B>The <CODE
  class=ce>number()</CODE> function should not be used for conversion of numeric
  data occurring in an element in an XML document unless the element is of a type
  that represents numeric data in a language-neutral format (that would typically
  be transformed into a language-specific format for presentation to a user). In
  addition, the <CODE class=ce>number()</CODE> function cannot be used unless the
  language-neutral format used by the element is consistent with the XML Path
  Language (XPath) syntax for a number.</BLOCKQUOTE>

  </div>
        ]]>
        </comment>

        <arg default="" name="object" optional="true" type="object">
            <comment>Any W3C XML DOM object or node-set.</comment>
            <assistant ref="xpathPicker"/>
        </arg>
    </function>

    <function id="sum" returns="number">
        <help>Returns the sum of all nodes in the node-set. Each node
            is first converted to a number value before summing.</help>
        <comment>
            <![CDATA[<H1 class=dtH1>sum Function</H1>
<P class=dtP>Returns the sum of all nodes in the node-set. Each node is first converted to
a number value before summing.</P><PRE class=syntax><I>number</I> sum(<I>node-set</I>)</PRE>
            ]]>
        </comment>

        <arg ref="nodeSet"/>&gt;

    </function>


    <function id="floor" returns="number">
        <help>Returns the largest integer that is not greater
            than the argument.</help>
        <comment>
            <![CDATA[<H1 class=dtH1>floor Function</H1>
<P class=dtP>Returns the largest integer that is not
greater than the argument.</P>
<PRE class=syntax><I>number</I> floor(<I>number</I>)</PRE>
  ]]>
        </comment>

        <arg default="" name="aNumber" type="number">
            <comment>Number to compute the floor of</comment>
            <assistant ref="xpathPicker"/>
        </arg>

    </function>


    <function id="ceiling" returns="number">
        <help>Returns the smallest integer that is not less than the argument.</help>
        <comment>
            <![CDATA[
    <H1 class=dtH1>ceiling Function</H1>
    <P class=dtP>Returns the smallest integer that is not
    less than the argument.</P>
    <PRE class=syntax><I>number</I> ceiling(<I>number</I>)</PRE>

    ]]>
        </comment>

        <arg default="" name="aNumber" type="number">
            <comment>Number to compute the ceiling of</comment>
            <assistant ref="xpathPicker"/>
        </arg>

    </function>


    <function id="round" returns="number">
        <help>Returns an integer closest in value to the argument.</help>
        <comment>
            <![CDATA[
    <H1 class=dtH1>round Function</H1>
    <P class=dtP>Returns an integer closest in value to the argument.</P><PRE class=syntax><I>number</I> round(<I>number</I>)</PRE>
    <H4 class=dtH4>Remarks</H4>
    <P class=dtP>If there are two such numbers, the one that is closest to positive infinity
    is returned.</P>
    <P class=dtP>If the argument is NaN, NaN is returned.</P>
    <P class=dtP>If the argument is positive infinity, positive infinity is returned.</P>
    <P class=dtP>If the argument is negative infinity, negative infinity is returned.</P>
    <P class=dtP>If the argument is positive zero, positive zero is returned.</P>
    <P class=dtP>If the argument is negative zero, negative zero is returned.</P>
    <P class=dtP>If the argument is less than zero but greater than or equal to -0.5, negative
    zero is returned.</P>
    <P class=dtP>For the last two cases, the result of calling the <CODE
    class=ce>round()</CODE> function is not the same as the result of adding 0.5 and
    then calling the <CODE class=ce>floor()</CODE> function because positive zero
    will be returned in such cases.</P>

    ]]>
        </comment>

        <arg default="" name="aNumber" type="number">
            <comment>Number to round up</comment>
            <assistant ref="xpathPicker"/>
        </arg>

    </function>


</bpel-xpath-functions>