From 0026d9becf489657e300fb2b65e67287475c7060 Mon Sep 17 00:00:00 2001
From: Christophe Sovant <christophe.sovant@forgerock.com>
Date: Fri, 11 Sep 2009 14:48:00 +0000
Subject: [PATCH] Improvements in ant build + update STAF/services versions + dynamic dsmlService compilation/loading

---
 opends/tests/staf-tests/shared/stax.dtd |  735 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 369 insertions(+), 366 deletions(-)

diff --git a/opends/tests/staf-tests/shared/stax.dtd b/opends/tests/staf-tests/shared/stax.dtd
index 75458da..0ea3208 100644
--- a/opends/tests/staf-tests/shared/stax.dtd
+++ b/opends/tests/staf-tests/shared/stax.dtd
@@ -27,7 +27,7 @@
 <!--
    STAf eXecution (STAX) Document Type Definition (DTD)
 
-   Generated Date: 20090312-15:22:34
+   Generated Date: 20090818-11:49:53
 
    This DTD module is identified by the SYSTEM identifier:
 
@@ -39,17 +39,17 @@
 
 <!ENTITY % stax-elems 'function | script | signalhandler'>
 
-<!ENTITY % task       'call | terminate | raise | 
-                       block | iterate | throw | 
-                       break | paralleliterate | timer | 
-                       if | loop | import | 
-                       tcstatus | rethrow | parallel | 
-                       hold | return | job | 
-                       call-with-list | script | log | 
-                       stafcmd | nop | testcase | 
-                       message | process | signalhandler | 
-                       call-with-map | sequence | continue | 
-                       release | try'>
+<!ENTITY % task       'timer | parallel | log | 
+                       call | stafcmd | script | 
+                       tcstatus | message | iterate | 
+                       sequence | import | raise | 
+                       job | process | nop | 
+                       try | break | testcase | 
+                       paralleliterate | continue | throw | 
+                       release | signalhandler | rethrow | 
+                       block | hold | terminate | 
+                       return | if | call-with-list | 
+                       loop | call-with-map'>
 
 <!--================= STAX Job Definition ========================== -->
 <!--
@@ -71,6 +71,64 @@
           function     IDREF    #REQUIRED
 >
 
+<!--================= The Timer Element ============================ -->
+<!--
+     The timer element runs a task for a specified duration.
+     If the task is still running at the end of the specified duration,
+     then the RC variable is set to 1, else if the task ended before
+     the specified duration, the RC variable is set to 0, else if the
+     timer could not start due to an invalid duration, the RC variable
+     is set to -1.
+-->
+<!ELEMENT timer     (%task;)>
+<!-- duration is the maximum length of time to run the task.
+       Time can be expressed in milliseconds, seconds, minutes,
+       hours, days, weeks, or years.  It is evaluated via Python.
+         Examples:  duration='50'    (50 milliseconds)
+                    duration='90s'   (90 seconds)
+                    duration='5m'    ( 5 minutes)
+                    duration='36h'   (36 hours)
+                    duration='3d'    ( 3 days)
+                    duration='1w'    ( 1 week)
+                    duration='1y'    ( 1 year)
+-->
+<!ATTLIST timer
+          duration   CDATA        #REQUIRED
+>
+
+<!--================= The Parallel Element ========================= -->
+<!--
+     The parallel element performs one or more tasks in parallel.
+-->
+<!ELEMENT parallel   (%task;)+>
+
+<!--================= The Log Element ============================== -->
+<!--
+     Writes a message and its log level to a STAX Job User Log file.
+     The message must evaluate via Python to a string.
+
+     The log level specified defaults to 'info'.  If specified, it
+     must evaluate via Python to a string containing one of the
+     following STAF Log Service Log levels:
+       fatal, warning, info, trace, trace2, trace3, debug, debug2,
+       debug3, start, stop, pass, fail, status, user1, user2, user3,
+       user4, user5, user6, user7, user8
+     The message attribute is evaluated via Python.  If it evaluates
+     to true, the message text will also be sent to the STAX Job Monitor.
+     The message attribute defaults to the STAXMessageLog variable whose
+     value defaults to 0 (false) but can by changed within the STAX job
+     to turn on messaging.
+
+     If an if attribute is specified and it evaluates via Python to
+     false, then the log element is ignored.
+-->
+<!ELEMENT log         (#PCDATA)>
+<!ATTLIST log
+          level       CDATA       "'info'"
+          message     CDATA       "STAXMessageLog"
+          if          CDATA       "1"
+>
+
 <!--================= The Call Element ============================= -->
 <!--
      Perform a function with the referenced name.
@@ -84,39 +142,84 @@
 >
 
 
-<!--================= The Terminate Element ======================== -->
+<!--================= The STAF Command Element ===================== -->
 <!--
-     The terminate element specifies to terminate a block in the job.
+     Specifies a STAF command to be executed.
+     Its name and all of its element values are evaluated via Python.
+-->
+<!ELEMENT stafcmd    (location, service, request)>
+<!ATTLIST stafcmd
+          name       CDATA   #IMPLIED
+>
+<!ELEMENT service    (#PCDATA)>
+<!ELEMENT request    (#PCDATA)>
+
+<!--================= The Script Element =========================== -->
+<!--
+     Specifies Python code to be executed.
+-->
+<!ELEMENT script     (#PCDATA)>
+
+<!--================= The Testcase Status Element ================== -->
+<!--
+     Marks status result ('pass' or 'fail' or 'info') for a testcase
+     and allows additional information to be specified.  The status
+     result and the additional info is evaluated via Python.
+-->
+<!ELEMENT tcstatus   (#PCDATA)>
+<!ATTLIST tcstatus
+          result     CDATA  #REQUIRED
+>
+
+<!--================= The Message Element ========================== -->
+<!--
+     Generates an event and makes the message value available to the
+     STAX Job Monitor.  The message must evaluate via Python to a string.
+
+     The log attribute is evaluated via Python to a boolean.  If it
+     evaluates to true, the message text will also be logged in the STAX
+     Job User log.  The log attribute defaults to the STAXLogMessage
+     variable whose value defaults to 0 (false) but can by changed within
+     the STAX job to turn on logging.
+
+     The log level is ignored if the log attribute does not evaluate to
+     true.  It defaults to 'info'.  If specified, it must evaluate via
+     Python to a string containing one of the following STAF Log Service
+     logging levels:
+       fatal, warning, info, trace, trace2, trace3, debug, debug2,
+       debug3, start, stop, pass, fail, status, user1, user2, user3,
+       user4, user5, user6, user7, user8
+
      If an if attribute is specified and it evaluates via Python to
-     false, the terminate element is ignored.
+     false, the message element is ignored.
 -->
-<!ELEMENT terminate  EMPTY>
-<!ATTLIST terminate
-          block      CDATA    #IMPLIED
-          if         CDATA    "1"
+<!ELEMENT message     (#PCDATA)>
+<!ATTLIST message
+          log         CDATA       "STAXLogMessage"
+          level       CDATA       "'info'"
+          if          CDATA       "1"
 >
 
-<!--================= The Raise Element ============================ -->
+<!--================= The Iterate Element ========================= -->
 <!--
-     A raise signal element raises a specified signal.
-     Signals can also be raised by the STAX execution engine.
-     The signal attribute value is evaluated via Python.
+     The iterate element iterates through a list of items, performing
+     its contained task while substituting each item in the list.
+     The iterated tasks are performed in sequence.
 -->
-<!ELEMENT raise      EMPTY>
-<!ATTLIST raise
-          signal     CDATA        #REQUIRED
->
-
-<!--================= The Block Element ============================ -->
-<!--
-     Defines a task block that can be held, released, or terminated.
-     Used in conjunction with the hold/terminate/release elements to
-     define a task block that can be held, terminated, or released.
-     The name attribute value is evaluated via Python.
+<!ELEMENT iterate  (%task;)>
+<!-- var      is the name of the variable which will contain the
+              current item in the list or tuple being iterated.
+              It is a literal.
+     in       is the list or tuple to be iterated.  It is evaluated
+              via Python and must evaluate to be a list or tuple.
+     indexvar is the name of a variable which will contain the index of
+              the current item in the list or tuple being iterated.
+              It is a literal.  The value for the first index is 0.
 -->
-<!ELEMENT block      (%task;)>
-<!ATTLIST block
-          name       CDATA    #REQUIRED
+<!ATTLIST iterate
+          var        CDATA    #REQUIRED
+          in         CDATA    #REQUIRED
+          indexvar   CDATA    #IMPLIED
 >
 
 <!--================= The Function Element ========================= -->
@@ -207,143 +310,11 @@
           value        CDATA    #IMPLIED
 >
 
-<!--================= The Iterate Element ========================= -->
+<!--================= The Sequence Element ========================= -->
 <!--
-     The iterate element iterates through a list of items, performing
-     its contained task while substituting each item in the list.
-     The iterated tasks are performed in sequence.
+     The sequence element performs one or more tasks in sequence.
 -->
-<!ELEMENT iterate  (%task;)>
-<!-- var      is the name of the variable which will contain the
-              current item in the list or tuple being iterated.
-              It is a literal.
-     in       is the list or tuple to be iterated.  It is evaluated
-              via Python and must evaluate to be a list or tuple.
-     indexvar is the name of a variable which will contain the index of
-              the current item in the list or tuple being iterated.
-              It is a literal.  The value for the first index is 0.
--->
-<!ATTLIST iterate
-          var        CDATA    #REQUIRED
-          in         CDATA    #REQUIRED
-          indexvar   CDATA    #IMPLIED
->
-
-<!--================= The Throw Element ============================ -->
-<!--
-     The throw element specifies an exception to throw.
-     The exception attribute value and any additional information
-     is evaluated via Python.
--->
-<!ELEMENT throw      (#PCDATA)>
-<!ATTLIST throw
-          exception  CDATA        #REQUIRED
->
-
-<!--================= Break Element ================================ -->
-<!--
-     The break element can be used to break out of a loop or iterate
-     element.
--->
-<!ELEMENT break      EMPTY>
-
-<!--================= The Parallel Iterate Element ================ -->
-<!--
-     The parallel iterate element iterates through a list of items,
-     performing its contained task while substituting each item in
-     the list.  The iterated tasks are performed in parallel.
--->
-<!ELEMENT paralleliterate  (%task;)>
-<!-- var      is the name of a variable which will contain the current
-              item in the list or tuple being iterated.
-              It is a literal.
-     in       is the list or tuple to be iterated.  It is evaluated
-              via Python and must evaluate to be a list or tuple.
-     indexvar is the name of a variable which will contain the index of
-              the current item in the list or tuple being iterated.
-              It is a literal.  The value of the first index is 0.
--->
-<!ATTLIST paralleliterate
-          var        CDATA    #REQUIRED
-          in         CDATA    #REQUIRED
-          indexvar   CDATA    #IMPLIED
->
-
-<!--================= The Timer Element ============================ -->
-<!--
-     The timer element runs a task for a specified duration.
-     If the task is still running at the end of the specified duration,
-     then the RC variable is set to 1, else if the task ended before
-     the specified duration, the RC variable is set to 0, else if the
-     timer could not start due to an invalid duration, the RC variable
-     is set to -1.
--->
-<!ELEMENT timer     (%task;)>
-<!-- duration is the maximum length of time to run the task.
-       Time can be expressed in milliseconds, seconds, minutes,
-       hours, days, weeks, or years.  It is evaluated via Python.
-         Examples:  duration='50'    (50 milliseconds)
-                    duration='90s'   (90 seconds)
-                    duration='5m'    ( 5 minutes)
-                    duration='36h'   (36 hours)
-                    duration='3d'    ( 3 days)
-                    duration='1w'    ( 1 week)
-                    duration='1y'    ( 1 year)
--->
-<!ATTLIST timer
-          duration   CDATA        #REQUIRED
->
-
-<!--================= The Conditional Element (if-then-else) ======= -->
-<!--
-     Allows you to write an if or a case construct with zero or more
-     elseifs and one or no else statements.
-
-     The expr attribute value is evaluated via Python and must evaluate
-     to a boolean value.
--->
-<!ELEMENT if         ((%task;), elseif*, else?)>
-<!ATTLIST if
-          expr       CDATA   #REQUIRED
->
-<!ELEMENT elseif     (%task;)>
-<!ATTLIST elseif
-          expr       CDATA   #REQUIRED
->
-<!ELEMENT else       (%task;)>
-
-<!--================= The Loop Element ============================= -->
-<!--
-     The loop element performs a task a specified number of times,
-     allowing specification of an upper and lower bound with an
-     increment value and where the index counter is available to
-     sub-tasks.  Also, while and/or until expressions can be
-     specified.
--->
-<!ELEMENT loop       (%task;)>
-<!-- var      is the name of a variable which will contain the loop
-              index variable.  It is a literal.
-     from     is the starting value of the loop index variable.
-              It must evaluate to an integer value via Python.
-     to       is the maximum value of the loop index variable
-              It must evaluate to an integer value via Python.
-     by       is the increment value for the loop index variable
-              It must evaluate to an integer value via Python.
-     while    is an expression that must evaluate to a boolean value
-              and is performed at the top of each loop.  If it
-              evaluates to false, it breaks out of the loop.
-     until    is an expression that must evaluate to a boolean value
-              and is performed at the bottom of each loop.  If it
-              evaluates to false, it breaks out of the loop.
--->
-<!ATTLIST loop
-          var        CDATA    #IMPLIED
-          from       CDATA    '1'
-          to         CDATA    #IMPLIED
-          by         CDATA    '1'
-          while      CDATA    #IMPLIED
-          until      CDATA    #IMPLIED
->
+<!ELEMENT sequence   (%task;)+>
 
 <!--================= The Import Element ========================== -->
 <!--
@@ -351,55 +322,25 @@
 -->
 <!ELEMENT import        (import-include?, import-exclude?)?>
 <!ATTLIST import
-          machine     CDATA       #REQUIRED
           file        CDATA       #REQUIRED
-          mode        CDATA         "'error'"
+          machine     CDATA       #IMPLIED
+          mode        CDATA       "'error'"
 >
 <!ELEMENT import-include          (#PCDATA)>
 <!ELEMENT import-exclude          (#PCDATA)>
 
 
-<!--================= The Testcase Status Element ================== -->
+<!--================= The Raise Element ============================ -->
 <!--
-     Marks status result ('pass' or 'fail' or 'info') for a testcase
-     and allows additional information to be specified.  The status
-     result and the additional info is evaluated via Python.
+     A raise signal element raises a specified signal.
+     Signals can also be raised by the STAX execution engine.
+     The signal attribute value is evaluated via Python.
 -->
-<!ELEMENT tcstatus   (#PCDATA)>
-<!ATTLIST tcstatus
-          result     CDATA  #REQUIRED
+<!ELEMENT raise      EMPTY>
+<!ATTLIST raise
+          signal     CDATA        #REQUIRED
 >
 
-<!--================= The Rethrow Element ========================= -->
-<!--
-     The rethrow element specifies to rethrow the current exception.
--->
-<!ELEMENT rethrow      EMPTY>
-
-<!--================= The Parallel Element ========================= -->
-<!--
-     The parallel element performs one or more tasks in parallel.
--->
-<!ELEMENT parallel   (%task;)+>
-
-<!--================= The Hold Element ============================= -->
-<!--
-     The hold element specifies to hold a block in the job.
-     If an if attribute is specified and it evaluates via Python to
-     false, the hold element is ignored.
--->
-<!ELEMENT hold       EMPTY>
-<!ATTLIST hold
-          block      CDATA    #IMPLIED
-          if         CDATA    "1"
->
-
-<!--================= The Return Element =========================== -->
-<!--
-     Specifies a value to return from a function.
--->
-<!ELEMENT return     (#PCDATA)>
-
 <!--================== The STAX Job Element ===================== -->
 <!--
      Specifies a STAX sub-job to be executed.  This element is equivalent
@@ -613,112 +554,6 @@
           if        CDATA    "1"
 >
 
-<!--================= The Call-With-List Element =================== -->
-<!--
-     Perform a function with the referenced name with any number of
-     arguments in the form of a list.  The function attribute value
-     and argument values are evaluated via Python.
--->
-<!ELEMENT call-with-list      (call-list-arg*)>
-<!ATTLIST call-with-list
-          function   CDATA    #REQUIRED
->
-
-<!ELEMENT call-list-arg       (#PCDATA)>
-
-
-<!--================= The Script Element =========================== -->
-<!--
-     Specifies Python code to be executed.
--->
-<!ELEMENT script     (#PCDATA)>
-
-<!--================= The Log Element ============================== -->
-<!--
-     Writes a message and its log level to a STAX Job User Log file.
-     The message must evaluate via Python to a string.
-
-     The log level specified defaults to 'info'.  If specified, it
-     must evaluate via Python to a string containing one of the
-     following STAF Log Service Log levels:
-       fatal, warning, info, trace, trace2, trace3, debug, debug2,
-       debug3, start, stop, pass, fail, status, user1, user2, user3,
-       user4, user5, user6, user7, user8
-     The message attribute is evaluated via Python.  If it evaluates
-     to true, the message text will also be sent to the STAX Job Monitor.
-     The message attribute defaults to the STAXMessageLog variable whose
-     value defaults to 0 (false) but can by changed within the STAX job
-     to turn on messaging.
-
-     If an if attribute is specified and it evaluates via Python to
-     false, then the log element is ignored.
--->
-<!ELEMENT log         (#PCDATA)>
-<!ATTLIST log
-          level       CDATA       "'info'"
-          message     CDATA       "STAXMessageLog"
-          if          CDATA       "1"
->
-
-<!--================= The STAF Command Element ===================== -->
-<!--
-     Specifies a STAF command to be executed.
-     Its name and all of its element values are evaluated via Python.
--->
-<!ELEMENT stafcmd    (location, service, request)>
-<!ATTLIST stafcmd
-          name       CDATA   #IMPLIED
->
-<!ELEMENT service    (#PCDATA)>
-<!ELEMENT request    (#PCDATA)>
-
-<!--================= The No Operation Element ===================== -->
-<!--
-     No operation action.
--->
-<!ELEMENT nop        EMPTY>
-
-<!--================= The Testcase Element ========================= -->
-<!--
-     Defines a testcase.  Used in conjunction with the tcstatus
-     element to mark the status for a testcase.
-     The name attribute value is evaluated via Python.
--->
-<!ELEMENT testcase   (%task;)>
-<!ATTLIST testcase
-          name       CDATA    #REQUIRED
-          mode       CDATA    "'default'"
->
-
-<!--================= The Message Element ========================== -->
-<!--
-     Generates an event and makes the message value available to the
-     STAX Job Monitor.  The message must evaluate via Python to a string.
-
-     The log attribute is evaluated via Python to a boolean.  If it
-     evaluates to true, the message text will also be logged in the STAX
-     Job User log.  The log attribute defaults to the STAXLogMessage
-     variable whose value defaults to 0 (false) but can by changed within
-     the STAX job to turn on logging.
-
-     The log level is ignored if the log attribute does not evaluate to
-     true.  It defaults to 'info'.  If specified, it must evaluate via
-     Python to a string containing one of the following STAF Log Service
-     logging levels:
-       fatal, warning, info, trace, trace2, trace3, debug, debug2,
-       debug3, start, stop, pass, fail, status, user1, user2, user3,
-       user4, user5, user6, user7, user8
-
-     If an if attribute is specified and it evaluates via Python to
-     false, the message element is ignored.
--->
-<!ELEMENT message     (#PCDATA)>
-<!ATTLIST message
-          log         CDATA       "STAXLogMessage"
-          level       CDATA       "'info'"
-          if          CDATA       "1"
->
-
 <!--================= The STAF Process Element ===================== -->
 <!--
      Specifies a STAF process to be started.
@@ -1112,6 +947,110 @@
           if        CDATA     "1"
 >
 
+<!--================= The No Operation Element ===================== -->
+<!--
+     No operation action.
+-->
+<!ELEMENT nop        EMPTY>
+
+<!--=============== The Try / Catch / Finally Elements ============= --> 
+<!-- 
+     The try element allows you to perform a task and to catch 
+     exceptions that are thrown.  Also, if a finally element is 
+     specified, then the finally task is executed, no matter whether 
+     the try task completes normally or abruptly, and no matter whether 
+     a catch element is first given control. 
+--> 
+<!ELEMENT try        ((%task;), ((catch+) | ((catch*), finally)))> 
+<!-- 
+     The catch element performs a task when the specified exception is 
+     caught.  The var attribute specifies the name of the variable to 
+     receive the data specified within the throw element.  The typevar 
+     attribute specifies the name of the variable to receive the type 
+     of the exception.  The sourcevar attribute specifies the name
+     of the variable to receive the source information for the exception.
+ 
+--> 
+<!ELEMENT catch      (%task;)> 
+<!ATTLIST catch 
+          exception  CDATA        #REQUIRED 
+          var        CDATA        #IMPLIED 
+          typevar    CDATA        #IMPLIED 
+          sourcevar  CDATA        #IMPLIED 
+> 
+<!ELEMENT finally    (%task;)> 
+
+<!--================= Break Element ================================ -->
+<!--
+     The break element can be used to break out of a loop or iterate
+     element.
+-->
+<!ELEMENT break      EMPTY>
+
+<!--================= The Testcase Element ========================= -->
+<!--
+     Defines a testcase.  Used in conjunction with the tcstatus
+     element to mark the status for a testcase.
+     The name attribute value is evaluated via Python.
+-->
+<!ELEMENT testcase   (%task;)>
+<!ATTLIST testcase
+          name       CDATA    #REQUIRED
+          mode       CDATA    "'default'"
+>
+
+<!--================= The Parallel Iterate Element ================ -->
+<!--
+     The parallel iterate element iterates through a list of items,
+     performing its contained task while substituting each item in
+     the list.  The iterated tasks are performed in parallel.
+-->
+<!ELEMENT paralleliterate  (%task;)>
+<!-- var      is the name of a variable which will contain the current
+              item in the list or tuple being iterated.
+              It is a literal.
+     in       is the list or tuple to be iterated.  It is evaluated
+              via Python and must evaluate to be a list or tuple.
+     indexvar is the name of a variable which will contain the index of
+              the current item in the list or tuple being iterated.
+              It is a literal.  The value of the first index is 0.
+-->
+<!ATTLIST paralleliterate
+          var        CDATA    #REQUIRED
+          in         CDATA    #REQUIRED
+          indexvar   CDATA    #IMPLIED
+>
+
+<!--================= Continue Element ============================= -->
+<!--
+     The continue element can be used to continue to the top of a loop
+     or iterate element.
+-->
+<!ELEMENT continue   EMPTY>
+
+<!--================= The Throw Element ============================ -->
+<!--
+     The throw element specifies an exception to throw.
+     The exception attribute value and any additional information
+     is evaluated via Python.
+-->
+<!ELEMENT throw      (#PCDATA)>
+<!ATTLIST throw
+          exception  CDATA        #REQUIRED
+>
+
+<!--================= The Release Element ========================== -->
+<!--
+     The release element specifies to release a block in the job.
+     If an if attribute is specified and it evaluates via Python to
+     false, the release element is ignored.
+-->
+<!ELEMENT release    EMPTY>
+<!ATTLIST release
+          block      CDATA    #IMPLIED
+          if         CDATA    "1"
+>
+
 <!--================= The Signal Handler Element =================== -->
 <!--
      The signalhandler element defines how to handle a specified signal.
@@ -1122,6 +1061,119 @@
           signal     CDATA        #REQUIRED
 >
 
+<!--================= The Rethrow Element ========================= -->
+<!--
+     The rethrow element specifies to rethrow the current exception.
+-->
+<!ELEMENT rethrow      EMPTY>
+
+<!--================= The Block Element ============================ -->
+<!--
+     Defines a task block that can be held, released, or terminated.
+     Used in conjunction with the hold/terminate/release elements to
+     define a task block that can be held, terminated, or released.
+     The name attribute value is evaluated via Python.
+-->
+<!ELEMENT block      (%task;)>
+<!ATTLIST block
+          name       CDATA    #REQUIRED
+>
+
+<!--================= The Hold Element ============================= -->
+<!--
+     The hold element specifies to hold a block in the job.
+     If an if attribute is specified and it evaluates via Python to
+     false, the hold element is ignored.
+-->
+<!ELEMENT hold       EMPTY>
+<!ATTLIST hold
+          block      CDATA    #IMPLIED
+          if         CDATA    "1"
+>
+
+<!--================= The Terminate Element ======================== -->
+<!--
+     The terminate element specifies to terminate a block in the job.
+     If an if attribute is specified and it evaluates via Python to
+     false, the terminate element is ignored.
+-->
+<!ELEMENT terminate  EMPTY>
+<!ATTLIST terminate
+          block      CDATA    #IMPLIED
+          if         CDATA    "1"
+>
+
+<!--================= The Return Element =========================== -->
+<!--
+     Specifies a value to return from a function.
+-->
+<!ELEMENT return     (#PCDATA)>
+
+<!--================= The Conditional Element (if-then-else) ======= -->
+<!--
+     Allows you to write an if or a case construct with zero or more
+     elseifs and one or no else statements.
+
+     The expr attribute value is evaluated via Python and must evaluate
+     to a boolean value.
+-->
+<!ELEMENT if         ((%task;), elseif*, else?)>
+<!ATTLIST if
+          expr       CDATA   #REQUIRED
+>
+<!ELEMENT elseif     (%task;)>
+<!ATTLIST elseif
+          expr       CDATA   #REQUIRED
+>
+<!ELEMENT else       (%task;)>
+
+<!--================= The Call-With-List Element =================== -->
+<!--
+     Perform a function with the referenced name with any number of
+     arguments in the form of a list.  The function attribute value
+     and argument values are evaluated via Python.
+-->
+<!ELEMENT call-with-list      (call-list-arg*)>
+<!ATTLIST call-with-list
+          function   CDATA    #REQUIRED
+>
+
+<!ELEMENT call-list-arg       (#PCDATA)>
+
+
+<!--================= The Loop Element ============================= -->
+<!--
+     The loop element performs a task a specified number of times,
+     allowing specification of an upper and lower bound with an
+     increment value and where the index counter is available to
+     sub-tasks.  Also, while and/or until expressions can be
+     specified.
+-->
+<!ELEMENT loop       (%task;)>
+<!-- var      is the name of a variable which will contain the loop
+              index variable.  It is a literal.
+     from     is the starting value of the loop index variable.
+              It must evaluate to an integer value via Python.
+     to       is the maximum value of the loop index variable
+              It must evaluate to an integer value via Python.
+     by       is the increment value for the loop index variable
+              It must evaluate to an integer value via Python.
+     while    is an expression that must evaluate to a boolean value
+              and is performed at the top of each loop.  If it
+              evaluates to false, it breaks out of the loop.
+     until    is an expression that must evaluate to a boolean value
+              and is performed at the bottom of each loop.  If it
+              evaluates to false, it breaks out of the loop.
+-->
+<!ATTLIST loop
+          var        CDATA    #IMPLIED
+          from       CDATA    '1'
+          to         CDATA    #IMPLIED
+          by         CDATA    '1'
+          while      CDATA    #IMPLIED
+          until      CDATA    #IMPLIED
+>
+
 <!--================= The Call-With-Map Element ==================== -->
 <!--
      Perform a function with the referenced name with any number of
@@ -1139,52 +1191,3 @@
           name       CDATA    #REQUIRED
 >
 
-<!--================= The Sequence Element ========================= -->
-<!--
-     The sequence element performs one or more tasks in sequence.
--->
-<!ELEMENT sequence   (%task;)+>
-
-<!--================= Continue Element ============================= -->
-<!--
-     The continue element can be used to continue to the top of a loop
-     or iterate element.
--->
-<!ELEMENT continue   EMPTY>
-
-<!--================= The Release Element ========================== -->
-<!--
-     The release element specifies to release a block in the job.
-     If an if attribute is specified and it evaluates via Python to
-     false, the release element is ignored.
--->
-<!ELEMENT release    EMPTY>
-<!ATTLIST release
-          block      CDATA    #IMPLIED
-          if         CDATA    "1"
->
-
-<!--=============== The Try / Catch / Finally Elements ============= --> 
-<!-- 
-     The try element allows you to perform a task and to catch 
-     exceptions that are thrown.  Also, if a finally element is 
-     specified, then the finally task is executed, no matter whether 
-     the try task completes normally or abruptly, and no matter whether 
-     a catch element is first given control. 
---> 
-<!ELEMENT try        ((%task;), ((catch+) | ((catch*), finally)))> 
-<!-- 
-     The catch element performs a task when the specified exception is 
-     caught.  The var attribute specifies the name of the variable to 
-     receive the data specified within the throw element.  The typevar 
-     attribute specifies the name of the variable to receive the type 
-     of the exception. 
- 
---> 
-<!ELEMENT catch      (%task;)> 
-<!ATTLIST catch 
-          exception  CDATA        #REQUIRED 
-          var        CDATA        #IMPLIED 
-          typevar    CDATA        #IMPLIED 
-> 
-<!ELEMENT finally    (%task;)> 

--
Gitblit v1.10.0