ivelin      02/05/20 06:33:50

  Modified:    src/webapp/WEB-INF/db cocoondb.backup cocoondb.data
                        cocoondb.properties cocoondb.script
               src/webapp/docs/samples sample-apps.xml
               src/webapp/samples samples.xml
  Added:       src/webapp/samples/xmlform README.txt sitemap.xmap
               src/webapp/samples/xmlform/schematron
                        wizard-xmlform-sch-report.xml
               src/webapp/samples/xmlform/stylesheets wizard2html.xsl
               src/webapp/samples/xmlform/wizard Readme.txt confirm.xml
                        deployment.xml end.xml start.xml system.xml
                        userIdentity.xml
  Log:
  moved XMLForm demo from webapp/mount to webapp/samples
  added link to it from the refactored samples page webapp/samples/samples.xml
  
  Revision  Changes    Path
  1.2       +1 -2      xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.backup
  
        <<Binary file>>
  
  
  1.3       +1 -3      xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.data
  
        <<Binary file>>
  
  
  1.4       +1 -1      xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.properties
  
  Index: cocoondb.properties
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.properties,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- cocoondb.properties       20 May 2002 06:53:15 -0000      1.3
  +++ cocoondb.properties       20 May 2002 13:33:49 -0000      1.4
  @@ -1,4 +1,4 @@
   #HSQL database
  -#Mon May 20 01:42:46 CDT 2002
  +#Mon May 20 08:21:25 CDT 2002
   version=1.6
   modified=yes
  
  
  
  1.5       +3 -5      xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.script
  
  Index: cocoondb.script
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/WEB-INF/db/cocoondb.script,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- cocoondb.script   20 May 2002 06:53:15 -0000      1.4
  +++ cocoondb.script   20 May 2002 13:33:49 -0000      1.5
  @@ -4,8 +4,8 @@
   CREATE TABLE GROUPS(GID INTEGER IDENTITY PRIMARY KEY,GNAME VARCHAR,UNIQUE(GNAME))
   CREATE TABLE USER_GROUPS(UID INTEGER,GID INTEGER,UNIQUE(UID,GID),FOREIGN 
KEY(UID)REFERENCES USER(UID),FOREIGN KEY(GID)REFERENCES GROUPS(GID))
   CREATE TABLE STATE_TAX(CATEGORY VARCHAR NOT NULL,GROSSTAX_COLLECTED DOUBLE NOT 
NULL,NETTAX_COLLECTED DOUBLE NOT NULL,YEAR INTEGER NOT NULL)
  -GRANT ALL ON CLASS "org.hsqldb.Library" TO PUBLIC
   GRANT ALL ON CLASS "java.lang.Math" TO PUBLIC
  +GRANT ALL ON CLASS "org.hsqldb.Library" TO PUBLIC
   CREATE USER SA PASSWORD "" ADMIN
   CREATE ALIAS DAYNAME FOR "org.hsqldb.Library.dayname"
   CREATE ALIAS SPACE FOR "org.hsqldb.Library.space"
  @@ -115,7 +115,5 @@
   INSERT INTO STATE_TAX VALUES('Horse Racing',1.7921198E7,1.7321198E7,2001)
   INSERT INTO STATE_TAX VALUES('Severance',7981539.0,7967438.0,2001)
   INSERT INTO STATE_TAX VALUES('School District 
Income',1.61257059E8,1.53238001E8,2001)
  -/*C1*/CONNECT USER sa PASSWORD ""
  -/*C2*/CONNECT USER sa PASSWORD ""
  -/*C5*/CONNECT USER sa PASSWORD ""
  -/*C6*/CONNECT U
  \ No newline at end of file
  +/*C3*/CONNECT USER sa PASSWORD ""
  +/*C4*/CONNECT USER sa PASSWORD ""
  
  
  
  1.4       +2 -2      xml-cocoon2/src/webapp/docs/samples/sample-apps.xml
  
  Index: sample-apps.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/docs/samples/sample-apps.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- sample-apps.xml   20 May 2002 06:53:16 -0000      1.3
  +++ sample-apps.xml   20 May 2002 13:33:50 -0000      1.4
  @@ -1,6 +1,6 @@
   <?xml version="1.0" encoding="iso-8859-1"?>
   
  -<!-- CVS: $Id: sample-apps.xml,v 1.3 2002/05/20 06:53:16 ivelin Exp $ -->
  +<!-- CVS: $Id: sample-apps.xml,v 1.4 2002/05/20 13:33:50 ivelin Exp $ -->
   
   <samples xmlns:xlink="http://www.w3.org/1999/xlink";>
   
  @@ -31,7 +31,7 @@
   
    
     <group name="Sample Forms">
  -    <sample name="Cocoon Feedback Wizard" href="mount/xmlform/wizard.html" 
xlink:role="dynamic">
  +    <sample name="Cocoon Feedback Wizard" href="samples/xmlform/wizard.html" 
xlink:role="dynamic">
           Presents a sophisticated form handling demo - 
           multi page wizard with two way navigation.
           Features the 
  
  
  
  1.6       +20 -1     xml-cocoon2/src/webapp/samples/samples.xml
  
  Index: samples.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/webapp/samples/samples.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- samples.xml       19 May 2002 19:21:32 -0000      1.5
  +++ samples.xml       20 May 2002 13:33:50 -0000      1.6
  @@ -1,6 +1,6 @@
   <?xml version="1.0" encoding="iso-8859-1"?>
   
  -<!-- CVS: $Id: samples.xml,v 1.5 2002/05/19 19:21:32 ovidiu Exp $ -->
  +<!-- CVS: $Id: samples.xml,v 1.6 2002/05/20 13:33:50 ivelin Exp $ -->
   
   <samples xmlns:xlink="http://www.w3.org/1999/xlink";>
   
  @@ -66,6 +66,25 @@
   
      <sample name="Examples" href="flow/samples.html">
       Samples implemented using control flow.
  +   </sample>
  +  </group>
  +  
  +  <group name="Form Handling">
  +   <sample name="Documentation" href="xmlform/README.txt">
  +    Introduction to Cocoon's form handling framework,
  +    which provides 
  +        <xlink:link href="http://www.w3.org/MarkUp/Forms/";>XForms</xlink:link>
  +    based markup, 
  +        <xlink:a 
href="http://www.ascc.net/xml/resource/schematron/schematron.html";>Schematron</xlink:a>
  +    instance validation and
  +    automated binding to 
  +        <xlink:a href="http://java.sun.com/products/javabeans/";>JavaBeans</xlink:a> 
and 
  +        <xlink:a href="http://www.w3.org/DOM/";>DOM</xlink:a> instances.   
  +   </sample>
  +
  +   <sample name="Examples" href="xmlform/wizard.html">
  +        Presents a sophisticated form handling demo - 
  +        multi page wizard with two way navigation.
      </sample>
     </group>
     
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/README.txt
  
  Index: README.txt
  ===================================================================
  
  
  The XMLForm framework is inspired by Apache Jakarta Struts and W3C XForms. 
  Its goal is to:
  
  * Ease the development of sophisticated web applications utilizing complex data 
types and multi-page transactions
  * Provide an automated 2 way mapping between HTML Forms <-> XML <-> JavaBeans
  * Use standard XML validation languages like XML Schema, Relax-NG, Schematron for 
data validation
  * Promote natural reuse of validation, binding and business logic between cocoon 
actions (which are best utilized for interactive clients driven web applications ) and 
web services (which are in turn becoming the standard machine-to-machine web 
technology)
  * In doing so, utilize as much as possible of the existing cocoon 2 technology. More 
specifically: actions, action sets, cocoon-action parameters and transformers.
  * Utilize existing XPath tools like JXPath for read/write access to JavaBeans, DOM 
nodes and mixed
  objects.
  
  
  
--------------------------------------------------------------------------------------------
  
  The current implementation offers the following features:
  
  1) Automated 2 way binding of HTML Forms to JavaBeans (and DOM nodes) through XPath
  2) Automatic validation of JavaBeans(and DOM nodes) through Schematron schemas
  3) Intermediate XForms like XML markup for form views
  
  
--------------------------------------------------------------------------------------------
  
  To try the demo, link to:
  
  http://localhost:8080/cocoon/mount/xmlform/wizard.html
  
  
--------------------------------------------------------------------------------------------
  
  For questions contact:
  
  Ivelin Ivanov, [EMAIL PROTECTED]
  
  
  
--------------------------------------------------------------------------------------------
  
  Following is a summary provided by Daniel Fagerstrom <[EMAIL PROTECTED]>
  
  
  Background
  ----------
  
  The aim of XMLForm, is to build and edit an xml document (called the
  instance), subject to constraints from some schema (XMLSchema, Schematron,
  ...), through a sequence of form pages. The instance is either a
  dom-document or a Java bean-structure or a mix. XMLForm consist, of
  three main components:
  
  * Form - is responsible for the instance and validation of it. Form objects
  are stored in request attributes for one page forms and session attributes
  for wizards (multi page forms). A Form can be populated from the request
  parameters. This is the "model in MVC terms.
  
  * XMLFormTransformer - takes a form descriptor, (similar to XForms) as input
  and  fill it with data and error messages from a Form object that is
  referred in an attribute. This is the "view" in MVC terms.
  
  * AbstractXMLFormAction, (WizardAction) - creates the Form object if
  necessary and populates it with data based on the request parameters. It can
  also take care of flow handling and checkbox state. This is the "controller" in MVC 
terms.
  
  
  
  
  
--------------------------------------------------------------------------------------------
  
  Following are copies of the announcement emails send to the Cocoon development 
mailing list.
  [EMAIL PROTECTED] <[EMAIL PROTECTED]>
  
  
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  ----- Original Message ----- 
  From: "Ivelin Ivanov" <[EMAIL PROTECTED]>
  To: <[EMAIL PROTECTED]>
  Sent: Tuesday, April 16, 2002 
  Subject: [Announcement] Cocoon Form Handling - XML Form Release 0.8
  
  
  First, I would like to thank everyone who participates in the Form Handling 
discussion.
  I have learned a lot from this discussion in the last few weeks.
  
  There are plenty of great ideas coming from all directions, and some of them 
influenced my
  thinking significantly.
  
  As I have already mention more than once, I have a certain fear that this topic may 
be too large 
  to handle at once and may eventually wind up as it did several times before 
(Schemox, ExFormular, etc.)
  I would very much like this time Cocoon to end up with a better overall form 
handling solution, than the one that currently exists. It does not have to be perfect 
from the start.
  
  With all tha said, I am presenting to anyone interested the new incarnation of the 
xmlform solution.
  It has gone through major refactoring based on heavy influence from Torsten and 
Konstantin.
  I will not advertsise what it is this time. I would instead encourage people who are 
*really* interested
  in bettering Cocoon, to look at the demo and provided feedback.
  This time there is only one demo, which is an extension of the survey wizard, 
originally offered by Torsten.
  
  Once you build c2 with scratchpad, point to 
  http://localhost:8080/cocoon/mount/xmlform/wizard.html
  
  
  For those who will take the time to peek in,
  
  I would like to request votes on the following:
  
  1) Does this solution prohibit further extensions in directions that you might be 
interested?
  
  2) Does this solution offer better overall form handling than the existing one for 
C2?
  
  3) Can this solution be the base for 2.1?
  
  
  Thanks everyone,
  
  Ivelin
  
  
  
  
  
  
  
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  ----- Original Message ----- 
  From: "Ivelin Ivanov" <[EMAIL PROTECTED]>
  To: <[EMAIL PROTECTED]>
  Cc: "Sam Robertson" <[EMAIL PROTECTED]>; "Torsten Curdt" <[EMAIL PROTECTED]>; "Dmitri 
Plotnikov" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>; 
<[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
  Sent: Thursday, March 14, 2002 3:31 PM
  Subject: [Announcement] HTML Form binding and validation arrived
  
  ===============================================================
  ! The HTML Form symmetry loop is closed: !
  ===============================================================
  HTML Forms <-> XPath <-> JavaBeans <-> XML -> Schematron -> HTML Forms
  ===============================================================
  
  Just released the next version of the symmetric Form binding and validation
  toolkit ( a CocoonBlock wannabe :).
  In addition to the form-binding it now has integrated Schematron validation
  support.
  
  The zip file can be downloaded from:
  http://prdownloads.sourceforge.net/freebuilder/CocoonForm_0-6.zip
  
  With this in place one can provide form binding with just a few lines of
  code (~5 lines) and Sophisticated form validation with 0! lines of Java
  code.
  
  ...
  
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  
  ----- Original Message ----- 
  From: "Ivelin Ivanov" <[EMAIL PROTECTED]>
  To: <[EMAIL PROTECTED]>
  Cc: "Oliver Becker" <[EMAIL PROTECTED]>; "Rick Jelliffe" 
<[EMAIL PROTECTED]>; "Dmitri Plotnikov" <[EMAIL PROTECTED]>
  Sent: Sunday, March 24, 2002 7:03 AM
  Subject: [Announcement] Fast Schematron Validation Here !
  
  
  
  We've got the rainbow !
  
  +===========================================+
  +    *Fast* Java API for Schematron Validation *Ready* !      +
  +===========================================+
  +    Validates both JavaBeans and DOM nodes                       +
  +===========================================+
  
  It's been another long and fruitful Saturday here in Austin...
  
  I am grateful to everyone in the Cocoon community as well as Dmitri
  Plotnikov for his help with JXPath, Rick Jelliffe for his guidance with
  Schematron and Oliver Becker for the clarifications on his XSLT based Java
  API for Schematron.
  
  
  As I mentioned already, I've decided to implement Schematron in Java using
  JXPath.
  The result is surprisingly little code (~1K lines) and quite exciting speed
  (~20ms per validation for the demo setup).
  
  What's more:
     - Does not need Castor mapping
     - Does not do XSL transformation
     - Direct access through the JXPath library
  
  * Someone let me know if this can be implemented too much faster *
  
  I hope this answers some outstanding questions like:
  "How do we validate HTML Forms ?"
  "How do we reuse validation rules and code for HTML Forms, Web Services and
  domain validation ?"
  "What language do we use or build to implement validation?"
  
  I am not sure if the credits should all go to Schematron or more to XPath,
  but
  Schematron being so simple and powerful is clearly my choice:
  - Schemas can grow organicly. One can start with a few simple rules and grow
  the document with time.
  - Native support for validation in "phases". Unlike XML Schema, one doesn't
  need to provide a complete document in order to be able to perform
  validation.
  - Pin-points the bad elements and provides user-friendly reporting.
  - Very, very simple to learn if one knows XPath. (I just can stop repeating
  that.)
  
  ...
  
  ~~~~~~~~~~~~~~~~~~~~~
  
  <end-of-file/>
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  <?xml version="1.0"?>
  <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0";>
  
    <!-- =========================== Components ================================ -->
    <map:components> 
      <map:actions>
        <map:action name="WizardAction" 
src="org.apache.cocoon.samples.xmlform.WizardAction"  logger="webapp.xmlform"/>
      </map:actions>
      <map:generators default="file"/>
      <map:transformers default="xslt">
        <map:transformer name="xmlform" 
src="org.apache.cocoon.transformation.XMLFormTransformer" logger="webapp.xmlform"/>
      </map:transformers>
      <map:readers default="resource"/>
      <map:serializers default="html"/>
      <map:selectors default="browser"/>
      <map:matchers default="wildcard">
        <map:matcher name="wildcard" 
src="org.apache.cocoon.matching.WildcardURIMatcherFactory"/>
      </map:matchers>
    </map:components>
  
    <!-- =========================== Resources ================================= -->
    <map:resources>
    </map:resources>
  
    <!-- =========================== Pipelines ================================= -->
    <map:pipelines> 
      <map:pipeline>
  
        <map:match pattern="">
          <map:redirect-to uri="wizard.html"/>
        </map:match>
  
        <!-- A non-trivial example - Feedback Wizard -->
        <map:match pattern="wizard.html">
          <map:act type="WizardAction">
  
            <!-- XMLForm parameters for the AbstractXMLFormAction -->
            <map:parameter name="xmlform-validator-schema-ns" 
value="http://www.ascc.net/xml/schematron"/>
            <map:parameter name="xmlform-validator-schema" 
value="schematron/wizard-xmlform-sch-report.xml"/>
            <map:parameter name="xmlform-id" value="form-feedback"/>
            <map:parameter name="xmlform-scope" value="session"/>
            <map:parameter name="xmlform-model" 
value="org.apache.cocoon.samples.xmlform.UserBean"/>
  
            <!-- Content transformation logic -->
            <map:generate src="wizard/{page}.xml"/>
            <map:transform type="xmlform" label="xml"/>
            <map:transform src="stylesheets/wizard2html.xsl"/>
            <map:transform src="context://stylesheets/xmlform/xmlform2html.xsl"/>
            <map:serialize type="html"/>
          </map:act>
        </map:match>  
      </map:pipeline>
    </map:pipelines> 
  </map:sitemap>
  <!-- end of file -->
  
  
  
  1.1                  
xml-cocoon2/src/webapp/samples/xmlform/schematron/wizard-xmlform-sch-report.xml
  
  Index: wizard-xmlform-sch-report.xml
  ===================================================================
  <?xml version="1.0" ?>
  <!--
  
        Validating Schematron schema for the xmlform example wizard
    
    Schematron Schema language home page:
    http://www.ascc.net/xml/schematron/
    
        Author: Ivelin Ivanov, [EMAIL PROTECTED], April 2002
  
  -->
  
  <schema ns="http://xml.apache.cocoon/xmlform";  
xmlns="http://www.ascc.net/xml/schematron";>
  
        <title>Schema for the XML Form example</title>
    
      <phase id="userIdentity">
              <p>For user identity information.</p>
              <active pattern="user"/>
      </phase>
      <phase id="deployment">
              <p>For deployment info page.</p>
              <active pattern="dep" />
      </phase>
      <phase id="system">
              <p>For system info page.</p>
              <active pattern="sys" />
      </phase>
      <phase id="confirm">
              <p>For final total validation and tracking 
                  some tricky problems.</p>
              <active pattern="user" />
              <active pattern="dep" />
              <active pattern="sys" />
      </phase>
  
      
        <pattern name="User Info Validation Pattern" id="user">
                <rule context="/firstName">
                        <assert  test="string-length(.) &gt; 3" diagnostics="dname 
dcount">
          First name should be at least 4 characters.
        </assert>
                        <assert  test="string-length(.) &lt; 20">
          First name should be less than 20 characters.
        </assert>
                </rule>
                <rule context="/lastName">
                        <assert  test="string-length(.) &gt; 3" diagnostics="dname 
dcount">
          Last name should be at least 4 characters.
        </assert>
                        <assert  test="string-length(.) &lt; 20">
          Last name should be less than 20 characters.
        </assert>
                </rule>
                <rule context="/email">
                        <assert test="contains( string(.),'@')">
          Email format is invalid.
        </assert>
                </rule>
                <rule context="/age">
                        <assert test="number() &gt; 0 and number(.) &lt; 200">
          Age should be a reasonably big positive number.
        </assert>
                </rule>
        </pattern>
    
        <pattern name="Deployment Information Validation Pattern" id="dep">
                <rule context="/number">
                        <assert  test="number() &gt; 0"> 
          The number of deployments must be non-negative ( hopefully positive :-> ) .
        </assert>
                </rule>
                <rule context="/">
        <!-- 
          If the site is to be published, then verify the URL.
          Note: This assertion demonstrates the unique ability of 
          Schematron to test document node dependencies.
          This is not possible to do with XML Schema and Relax NG.
         -->
                        <assert  test="not(string(publish) = 'true') or 
(starts-with(liveUrl, 'http://') and contains( string(liveUrl),'.') ) "> 
          The URL of the published site is invalid.
        </assert>
                </rule>
        </pattern>
    
        <pattern name="System Information Validation Pattern" id="sys">
                <rule context="/system/@ram">
                        <assert test="number() &gt; 0"> 
          The RAM value should be a positive number, denoting the memory in MB (e.g. 
128, 512, etc.).
        </assert>
                </rule>
        </pattern>
  
  </schema>
  
  
  
  
  
  
  
  
  
  
  
  1.1                  
xml-cocoon2/src/webapp/samples/xmlform/stylesheets/wizard2html.xsl
  
  Index: wizard2html.xsl
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!--
        Cocoon Feedback Wizard XMLForm processing and displaying stylesheet.    
    
    This stylesheet merges an XMLForm document into 
    a final document. It includes other presentational
    parts of a page orthogonal to the xmlform.
  
    author: Ivelin Ivanov, [EMAIL PROTECTED], May 2002
    original Author: Konstantin Piroumian, [EMAIL PROTECTED], 21-Feb-2002
  
  -->
  
  <xsl:stylesheet 
      version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
      xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002";
      exclude-result-prefixes="xalan"
  >
  
        <xsl:template match="document">
                <html>
                        <head>
                                <title>XMLForm - Cocoon Feedback Wizard</title>        
 
                                <style type="text/css">
                                <![CDATA[
                H1{font-family : sans-serif,Arial,Tahoma;color : 
white;background-color : #0086b2;} 
                BODY{font-family : sans-serif,Arial,Tahoma;color : 
black;background-color : white;} 
                B{color : white;background-color : #0086b2;} 
                HR{color : #0086b2;}
                                      input { background-color: #FFFFFF; color: 
#000099 }               
                                      table { background-color: #EEEEEE; color: 
#000099; font-size: x-small; border: 2px solid brown;}
                                select { background-color: #FFFFFF; color: #000099 }
                                 .error { color: #FF0000; }           
                                 .invalid { color: #FF0000; border: 2px solid #FF0000; 
}
                                 .info { color: #0000FF; border: 1px solid #0000FF; }
                                 .repeat { border: 0px inset #999999;border: 1px inset 
#999999; width: 100%; }
                                 .group { border: 0px inset #999999;border: 0px inset 
#999999; width: 100%; }
                   .sub-table { border: none; }
                 .button { background-color: #FFFFFF; color: #000099; border: 1px 
solid #666666; width: 70px; }
                ]]>
                                </style>
                        </head>
                        <body>
                    <xsl:apply-templates />
                        </body>
                </html>
        </xsl:template>
        
        <xsl:template match="xf:form">
      <xf:form method="post">
        <xsl:copy-of select="@*" />
          <br/><br/><br/><br/>
          <table align="center" border="0">
            <tr>
              <td align="center" colspan="3">
                  <h1>
                      <xsl:value-of select="xf:caption"/>
                      <hr/>
                  </h1>
              </td>
            </tr>
            <xsl:if test="count(error/xf:violation) > 0">
                <tr>
                  <td align="left" colspan="3" class="{error/xf:violation[1]/@class}">
                      <p>
                      * There are
                      [<b><xsl:value-of select="count(error/xf:violation)"/></b>]
                      errors. Please fix these errors and submit the form again.
                      </p>
                      <p>
                        <xsl:variable name="localViolations" select=".//xf:*[ 
child::xf:violation ]"/>
                        <xsl:for-each 
                          select="error/xf:violation">
                          <xsl:variable name="eref" select="./@ref"/>
                          <xsl:if test="count ($localViolations[ @ref=$eref ]) = 0">
                              * 
                              <xsl:copy-of select="." />
                              <xsl:value-of select="." />
                              <br/>
                          </xsl:if>
                        </xsl:for-each>
                      </p>
                      <p/>
                  </td>
                </tr>
            </xsl:if>
  
           <xsl:for-each select="*[name() != 'xf:submit']">
            <xsl:choose>
              <xsl:when test="name() = 'error'"/>
              <xsl:when test="xf:*">
                  <xsl:apply-templates select="."/>
              </xsl:when>
              <xsl:otherwise>
                  <xsl:copy-of select="."/>
              </xsl:otherwise>
             </xsl:choose>
           </xsl:for-each>
          <tr>
            <td align="center" colspan="3">
              <xsl:for-each select="*[name() = 'xf:submit']">
                <xsl:copy-of select="." />
                <xsl:text> </xsl:text>
              </xsl:for-each>
            </td>
          </tr>
        </table>
      </xf:form>
        </xsl:template>
      
        <xsl:template match="xf:repeat">
          <tr  width="100%">
              <td colspan="3" width="100%">
                  <table class="repeat">
                            <xsl:apply-templates select="*"/>
                  </table>
              </td>
          </tr>
        </xsl:template>
  
        <xsl:template match="xf:group">
          <tr width="100%">
              <td width="100%" colspan="2">
                  <table class="group" border="0">
                            <xsl:apply-templates select="*"/>
                  </table>
              </td>
          </tr>
        </xsl:template>
      
        <xsl:template match="xf:output[@form]">
          <div align="center"> 
              <hr width="30%"/>
              <br/>
              <font size="-1">
                <code>
                  <xsl:value-of select="xf:caption" /> :
                  <xsl:copy-of select="." />
                </code>
              </font>
              <br/>
          </div>
        </xsl:template>
        
  
      <xsl:template match="xf:*">
         <tr>
            <td align="left">
              <xsl:value-of select="xf:caption" />
            </td>
            <td>
              <xsl:copy-of select="." />
            </td>
            <xsl:if test="xf:violation">
                <td class="{xf:violation[1]/@class}" width="100%">
                  <xsl:for-each select="xf:violation">
                    * <xsl:value-of select="." />
                    <br/>
                  </xsl:for-each>
                </td>
            </xsl:if>
         </tr>
      </xsl:template>
      
          
        <xsl:template match="*">
            <xsl:copy-of select="." />
        </xsl:template>
      
  </xsl:stylesheet>
  
  
  
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/wizard/Readme.txt
  
  Index: Readme.txt
  ===================================================================
  This example use a more cleaner approach. The views are defined
  in XML and the stylesheet only renders into the desired media.
  Inserting of instance data will happen from within a transformer.
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/wizard/confirm.xml
  
  Index: confirm.xml
  ===================================================================
  <?xml version="1.0" ?>
  
  <!-- 
  
        XMLForm instance document for the Cocoon Feedback Wizard.
  
        Original Author: Torsten Curdt, [EMAIL PROTECTED], March 2002
    Author: Ivelin Ivanov, [EMAIL PROTECTED], April 2002
  
  -->
  
  <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002";>
  
  
    <xf:form id="form-feedback" view="confirm" action="wizard.html">
  
    
      <xf:caption>Confirm Input</xf:caption>    
  
    
      <!-- from page1 -->
  
      <xf:output ref="/firstName">
          <xf:caption>First Name</xf:caption>    
      </xf:output>
  
      <xf:output ref="/lastName">
          <xf:caption>Last Name</xf:caption>    
      </xf:output>
  
      <xf:output ref="/email">
          <xf:caption>Email</xf:caption>    
      </xf:output>
  
      <xf:output ref="/age">
          <xf:caption>Age</xf:caption>
          <xf:violations class="error"/>
      </xf:output>
  
      <xf:group ref="/">
        <xf:caption>Professional roles</xf:caption>
        <xf:repeat nodeset="/role">
          <xf:output ref="."/>
        </xf:repeat>
      </xf:group>
  
      <!-- from page2 -->
      
      <xf:output ref="/number">
          <xf:caption>Number of installations</xf:caption>    
      </xf:output>
  
      <xf:output ref="/liveUrl">
          <xf:caption>Live URL</xf:caption>    
      </xf:output>
  
      <xf:output ref="/publish">
          <xf:caption>Publish URL</xf:caption>    
      </xf:output>
    
      
      <!-- from page3 -->
  
  
      <xf:output ref="/system/os">
          <xf:caption>OS</xf:caption>    
      </xf:output>
  
      <xf:output ref="/system/processor">
          <xf:caption>Processor</xf:caption>    
      </xf:output>
  
      <xf:output ref="/system/@ram">
          <xf:caption>RAM</xf:caption>    
      </xf:output>
  
      <xf:output ref="/system/servletEngine">
          <xf:caption>Servlet Engine</xf:caption>    
      </xf:output>
  
      <xf:output ref="/system/javaVersion">
          <xf:caption>Java Version</xf:caption>    
      </xf:output>
              
      
      
      <xf:group ref="/" id="favorites_group">
          <xf:caption>Favorite web sites</xf:caption>    
          <xf:repeat nodeset="/favorite[position() &lt;= 3]" id="favorites">
              <xf:output ref="." class="info">
                  <xf:caption>URL: </xf:caption>
              </xf:output>                
          </xf:repeat>
      </xf:group>
      
      
      <!-- submit -->
        
      <xf:submit id="prev" class="button">
        <xf:caption>Prev</xf:caption>
      </xf:submit>
      
      <xf:submit id="next" class="button">
        <xf:caption>Finish</xf:caption>
      </xf:submit>
  
    </xf:form>
  
  
    <xf:output ref="/count" id="show_count" form="form-feedback" class="info">
          <xf:caption>Visits Count</xf:caption>
    </xf:output>
    
  </document>
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/wizard/deployment.xml
  
  Index: deployment.xml
  ===================================================================
  <?xml version="1.0" ?>
  
  
  
  <!-- 
  
        XMLForm instance document for the Cocoon Feedback Wizard.
  
        Original Author: Torsten Curdt, [EMAIL PROTECTED], March 2002
    Author: Ivelin Ivanov, [EMAIL PROTECTED], April 2002
  
  -->
  
  <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002";>
  
    <xf:form id="form-feedback" view="deployment" action="wizard.html">
  
      <xf:caption>Cocoon Deployment Information</xf:caption>    
  
      <error>
        <xf:violations class="error"/>
      </error>
    
      <xf:textbox ref="/number">
          <xf:caption>Number of deployments</xf:caption>    
          <xf:violations class="error"/>
      </xf:textbox>
  
      <xf:textbox ref="/liveUrl">
          <xf:caption>Live URL</xf:caption>    
          <xf:violations class="error"/>
      </xf:textbox>
  
      <xf:selectBoolean ref="/publish">
          <xf:caption>Publish</xf:caption>    
      </xf:selectBoolean>
  
      
      <xf:group nodeset="" id="favorites_group">
  
          <xf:caption>Favorite web sites</xf:caption>    
          
          <!-- 
            repeat is a very powerful iterator tag,
            because it iterates over a nodeset resulting from
            a the nodeset selector attribute.
            Very similar to xslt's for-each tag.
  
            In this case we iterate over the top three favorite
            web sites.
          -->
  
          <xf:repeat nodeset="/favorite[position() &lt;= 3]" id="favorites">
  
              <xf:textbox ref="." class="info">
                  <xf:caption>URL: </xf:caption>
              </xf:textbox>                
  
          </xf:repeat>
  
      </xf:group>
      
      <xf:submit id="prev" class="button">
        <xf:caption>Prev</xf:caption>
      </xf:submit>
  
      <xf:submit id="next" class="button">
        <xf:caption>Next</xf:caption>
      </xf:submit>
  
    </xf:form>
  
  
    <xf:output ref="/count" id="show_count" form="form-feedback" class="info">
          <xf:caption>Visits Count</xf:caption>
    </xf:output>
    
  </document>
  
  
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/wizard/end.xml
  
  Index: end.xml
  ===================================================================
  <?xml version="1.0" ?>
  <document>
      <br/><br/><br/>
      <table align="center" width="50%" cellspacing="20">
          <tr>
              <td align="center">
                  <h1>
                      Congratulations, Wizard Complete!
                  </h1>
              </td>
          </tr>
  
          <tr>
              <td align="center" class="info">
                  <code>
                      Your feedback form was processed successfully.
                  </code>
              </td>
          </tr>
           
          <tr>
              <td align="center">
                  <h3>
                      <a href="wizard.html">Go to home page.</a>
                  </h3>
              </td>
          </tr>
      </table>
  </document>
  
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/wizard/start.xml
  
  Index: start.xml
  ===================================================================
  <?xml version="1.0" ?>
  
  <document>
      <br/><br/><br/>
      <table align="center" width="50%" cellspacing="20">
          <tr>
              <td align="center">
                  <h1>
                      Welcome !
                  </h1>
              </td>
          </tr>
  
          <tr>
              <td align="center" class="info">
                  <code>
                  This wizard will collect feedback information
                  for the     
                  <a href="http://xml.apache.org/cocoon";>Apache Cocoon</a>
                  project !
                  </code>
              </td>
          </tr>
           
          <tr>
              <td align="center">
                  <h3>
                      <a href="wizard.html?cocoon-action-start=true">
                          Start!
                      </a>
                  </h3>
              </td>
          </tr>
      </table>
  </document>
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/wizard/system.xml
  
  Index: system.xml
  ===================================================================
  <?xml version="1.0" ?>
  
  
  
  <!-- 
  
        XMLForm instance document for the Cocoon Feedback Wizard.
  
        Original Author: Torsten Curdt, [EMAIL PROTECTED], March 2002
    Author: Ivelin Ivanov, [EMAIL PROTECTED], April 2002
  
  -->
  
  <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002";>
  
  
    <xf:form id="form-feedback" view="system" action="wizard.html">
  
      <xf:caption>System Information</xf:caption>    
    
      <error>
        <xf:violations class="error"/>
      </error>
    
      <xf:group ref="/system">
      
          <xf:selectOne ref="os">
              <xf:caption>OS</xf:caption>
              <xf:item id="unix">
                  <xf:caption>Unix/Linux</xf:caption>
                  <xf:value>Unix</xf:value>
              </xf:item>
              <xf:item id="mac">
                  <xf:caption>Mac OS/X</xf:caption>
                  <xf:value>Mac OS/X</xf:value>
              </xf:item>
              <xf:item id="win">
                  <xf:caption>Windows 95/98/NT/2000</xf:caption>
                  <xf:value>Windows</xf:value>
              </xf:item>
              <xf:item id="other">
                  <xf:caption>Other</xf:caption>
                  <xf:value>Other</xf:value>
              </xf:item>
          </xf:selectOne>
  
          <xf:selectOne ref="processor">
              <xf:caption>Processor</xf:caption>    
              <xf:item>
                  <xf:caption>AMD/Athlon</xf:caption>
                  <xf:value>Athlon</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>AMD/Duron</xf:caption>
                  <xf:value>Duron</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Pentium Celeron</xf:caption>
                  <xf:value>Celeron</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Pentium III</xf:caption>
                  <xf:value>p3</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Pentium IV</xf:caption>
                  <xf:value>p4</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Other</xf:caption>
                  <xf:value>other</xf:value>
              </xf:item>
          </xf:selectOne>
  
          <xf:textbox ref="@ram">
              <xf:caption>RAM</xf:caption>    
              <xf:violations class="error"/>
          </xf:textbox>
  
          <xf:selectOne ref="servletEngine">
              <xf:caption>Servlet Engine</xf:caption>    
              <xf:item>
                  <xf:caption>Tomcat</xf:caption>
                  <xf:value>Tomcat</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Jetty</xf:caption>
                  <xf:value>Jetty</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Resin</xf:caption>
                  <xf:value>Resin</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Weblogic</xf:caption>
                  <xf:value>weblogic</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>WebSphere</xf:caption>
                  <xf:value>WebSphere</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Other</xf:caption>
                  <xf:value>other</xf:value>
              </xf:item>
          </xf:selectOne>
  
          <xf:selectOne ref="javaVersion">
              <xf:caption>Java Version</xf:caption>    
              <xf:item>
                  <xf:caption>1.1</xf:caption>
                  <xf:value>1.1</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>1.2</xf:caption>
                  <xf:value>1.2</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>1.3</xf:caption>
                  <xf:value>1.3</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>1.4</xf:caption>
                  <xf:value>1.4</xf:value>
              </xf:item>
              <xf:item>
                  <xf:caption>Other</xf:caption>
                  <xf:value>Other</xf:value>
              </xf:item>
          </xf:selectOne>
  
      </xf:group>
          
      <xf:submit id="prev" class="button">
        <xf:caption>Prev</xf:caption>
      </xf:submit>
  
      <xf:submit id="next" class="button">
        <xf:caption>Next</xf:caption>
      </xf:submit>
  
    </xf:form>
  
  
    <xf:output ref="/count" id="show_count" form="form-feedback" class="info">
          <xf:caption>Visits Count</xf:caption>
    </xf:output>
    
  </document>
  
  
  
  1.1                  xml-cocoon2/src/webapp/samples/xmlform/wizard/userIdentity.xml
  
  Index: userIdentity.xml
  ===================================================================
  <?xml version="1.0" ?>
  
  
  <!-- 
  
        XMLForm instance document for the Cocoon Feedback Wizard.
  
        Original Author: Torsten Curdt, [EMAIL PROTECTED], March 2002
      Author: Ivelin Ivanov, [EMAIL PROTECTED], April 2002
  
  -->
  
  <document xmlns:xf="http://xml.apache.org/cocoon/xmlform/2002";>
  
  
    <xf:form id="form-feedback" view="userIdentity" action="wizard.html">
  
      <xf:caption>Personal Information</xf:caption>    
  
      <error>
        <xf:violations class="error"/>
      </error>
    
      <xf:textbox ref="/firstName">
          <xf:caption>First Name</xf:caption>    
          <xf:violations class="error"/>
      </xf:textbox>
  
      <xf:textbox ref="/lastName">
          <xf:caption>Last Name</xf:caption>    
          <xf:violations class="error"/>
      </xf:textbox>
  
      <xf:textbox ref="/email">
          <xf:caption>Email</xf:caption>    
          <xf:violations class="error"/>
      </xf:textbox>
  
      <xf:textbox ref="/age">
          <xf:caption>Age</xf:caption>
          <xf:violations class="error"/>
      </xf:textbox>
  
      <xf:selectMany ref="/role" selectUIType='listbox'>
          <xf:caption>Professional roles</xf:caption>
          <xf:item>
              <xf:caption>Geek</xf:caption>
              <xf:value>Geek</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>Hacker</xf:caption>
              <xf:value>Hacker</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>Student</xf:caption>
              <xf:value>Student</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>University Professor</xf:caption>
              <xf:value>University Professor</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>Software Developer</xf:caption>
              <xf:value>Developer</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>Technical Leader</xf:caption>
              <xf:value>Tech Lead</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>Development Manager</xf:caption>
              <xf:value>Development Manager</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>Executive</xf:caption>
              <xf:value>Executive</xf:value>
          </xf:item>        
          <xf:item>
              <xf:caption>Heir of the Apache tribe</xf:caption>
              <xf:value>Heir of the Apache tribe</xf:value>
          </xf:item>        
      </xf:selectMany>
  
      <xf:submit id="next" class="button"> 
        <xf:caption>Next</xf:caption>
      </xf:submit>
  
    </xf:form>
  
  
    <xf:output ref="/count" id="show_count" form="form-feedback" class="info">
          <xf:caption>Visits Count</xf:caption>
    </xf:output>
    
  </document>
  
  
  
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to