The next thing I plan to work on is a customized Schematron meta-stylesheet for Cocoon, which will be used for validation of HTML Forms (can be also applied to SOAP messages).
Before I do that though, I'd like to ask for a vote to verify the interest in such a feature. Please vote if you have opinions on this subject. The idea is basicly described by this state flow: server side JavaBean -> cocoon -> html form -> browser -> http post -> Xpath/JavaBean (the same one) -> XML -> Schematron Validation -> (next action | back to same html form with errors ) Schematron is an alternative to Martin and Christian's FormValidatorAction and Descriptor.xml. It's designed to: 1) provide easy to write XML structure assertions based on XPath 2) user-friendly error reporting mechanism 3) Complimentary to XML Schema Based on the proposed CastorTransformer and FormBeanBinder, a Schematron trasnformer is a logical next step. Schematron has been polished and it is stable for about a year now. Has a working XSLT implementation. Proved successful for various applications. Under a truly open source license (zlib/libpng http://www.ascc.net/xml/resource/schematron/copyright.txt). Hosted on SourceForge. Here are some referenes: home page: http://www.ascc.net/xml/resource/schematron/ sf page: http://sourceforge.net/projects/schematron tutorial: http://www.zvon.org/xxl/SchematronTutorial/General/contents.html articles: http://www.xml.com/pub/a/2002/01/23/perl-schematron.html http://www.xmlhack.com/read.php?item=945 http://www.ibiblio.org/xml/slides/xmlonelondon2001/schemas/67.html Looking forward to your comments. Ivelin ----- Original Message ----- From: "Ivelin Ivanov" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Cc: "Dmitri Plotnikov" <[EMAIL PROTECTED]> Sent: Sunday, March 10, 2002 6:47 AM Subject: Re: Comitting components > Folks, > > I think we might have made one small step towards HTML Form symmetry in > Cocoon. > The approach I have taken after long discussions and even longer hours > before my monitor is enhancing the Cocoon Action concept so that it is > coherent with the rest of the framework. > > Thanks to the people who built JXPath and Castor (and CastorTransformer), > I think we now have a way to elegantly map content to business logic. (HTML > Forms <-> XML/XPath <-> JavaBeans) > > The idea has been in circulation for a long time: unmarshal JavaBeans from > the buziness layer to XML, so that they can be part of the content model and > then use XPath expressions for HTML Form elements so that on POST the same > JavaBean can be updated and sent back to the business logic. > > You can download a scratchpad formatted bundle here: > http://prdownloads.sourceforge.net/freebuilder/CocoonForm.zip > I've only used Apache licensed files this time ;) > The examples are based on the CastorTransformer examples, so they should be > easy to comprehend. > > The code is very simple. I've tried not to touch more advanced problems like > error handling and reporting, unusual custom mapping and multi page wizards. > Thought I should first present to the rest of the group a simple prototype > for feasibility test . > > > Below I will show just a sample XSL file which takes an XML presentation of > a JavaBean and renders HTML forms with the appropriate XPath expressions. It > will hopefully sharpen your apetite enough to make you look at the code and > participate in the > discussion: > > > --------------------------- > - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > <xsl:output method="html" omit-xml-declaration="yes" /> > - <xsl:template match="/zoo"> > - <html> > - <body> > Please edit and submit: > <br /> > <xsl:apply-templates /> > </body> > </html> > </xsl:template> > - <xsl:template match="animal[1]"> > - <form method="post" action="test"> > <xsl:variable name="animalName" select="name" /> > Animal name: > <input type="text" name="name" value="{$animalName}" /> > <br /> > Kind: > - <b> > <xsl:value-of select="personalInfo/@kind" /> > </b> > <br /> > <xsl:variable name="animalScope" select="scope" /> > Animal scope: > <input type="text" name="scope" value="{$animalScope}" /> > <br /> > <xsl:variable name="preference1" select="preferences[1]" /> > First Preference: > <input type="text" name="preferences[1]" value="{$preference1}" /> > <br /> > <xsl:variable name="preference2" select="preferences[2]" /> > Second Preference: > <input type="text" name="preferences[2]" value="{$preference2}" /> > <br /> > <input type="submit" /> > </form> > <br /> > Counter: > <xsl:value-of select="@count" /> > </xsl:template> > <xsl:template match="*" /> > </xsl:stylesheet> > ---------------------------------- > > > Looking forward to comments. > > Cheers, > > Ivelin > > > > > > ----- Original Message ----- > From: "Ivelin Ivanov" <[EMAIL PROTECTED]> > To: "Nicola Ken Barozzi" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> > Cc: <"[dplotnik@"@iname.com > Sent: Thursday, March 07, 2002 3:57 PM > Subject: Re: Comitting components > > > > > > Way cool ! > > > > We've been using castor .93 for quite serious xml traffic between hundreds > win c++ clients and a java portal. Great performance. > > > > Donating this transformer also saved me some work. > > As I mentioned before I am workin on a little prototype that'll hopefully > introduce some HTML Forms symmetry in cocoon. > > > > From an earlier email by Konstantin: > > >It would be also fine to have an action that >performs the opposite > > >operation: set properties of JavaBean object(s) with request param values > > >using XPath expressions, e.g.: > > >customer/firstname = Ozzy > > >customer/lastname = Osbourne > > >can be converted to XML: > > ><customer> > > > <firstname>Ozzy</firstname> > > > <lastname>Osbourne</lastname> > > ></customer> > > > > I am working on this with Dmitri's help using his JXPath lib. > > http://cvs.apache.org/viewcvs/jakarta-commons/jxpath/ > > > > It's being used for Jakarta JSTL and Workflow (which says enough for its > quality). > > > > Let me know if someone else is working in this direction so that we don't > double the work. > > > > Regards, > > > > Ivelin > > > > > > > > > > > > -----Original Message----- > > From: "Nicola Ken Barozzi" <[EMAIL PROTECTED]> > > Date: Thu, 7 Mar 2002 18:03:30 +0100 > > To: <[EMAIL PROTECTED]> > > Subject: Re: Comitting components > > > > > > > From: "Matthew Langham" <[EMAIL PROTECTED]> > > > > > > > today two new "things" were donated/comitted to the Cocoon > scratchpad - > > > the > > > > Castor Transformer and the POI Serialization code. > > > > > > > > It would help people like me (who do not read all the messages or much > > > worse > > > > remember them all) if comitters could add a couple of lines or > paragraphs > > > as > > > > to what can be done with the new components when sending off the > > > > announcements. > > > > > > You are right. Thank you for the pointer. > > > Here is a brief explanation. > > > > > > ---------------------- > > > POI Serializer > > > ---------------------- > > > > > > The POI project, now hosted on http://jakarta.apache.org/poi/ , is a > project > > > that consists of APIs for manipulating various file formats based upon > > > Microsoft's OLE 2 Compound Document format using pure Java. OLE 2 > Compound > > > Document Format based files include most Microsoft Office files such as > XLS > > > and DOC. > > > > > > The HSSFSerializer uses POI's HSSF xls file write API > > > http://jakarta.apache.org/poi/hssf/index.html , and is now in Cocoon > proper > > > (not scratchpad). > > > > > > It makes it possible to output xml following the schema of gnumeric to > an > > > xls file. > > > Examples are present in the "extra" section, under "legacy file > formats". > > > > > > To install the Cocoon war easily, do: > > > > > > build.(sh|bat) clean > > > build.(sh|bat) installwar > > > > > > ---------------------------- > > > Castor Transformer (in scratchpad) > > > ---------------------------- > > > > > > Marshals a object from the the sitemap, request, session or Servlet > Context > > > into a series of SAX events, and can seek for the java bean > automaticaly. > > > TheCastortransformer can be configured with a default mapping. This > mapping > > > is used as long as no other mappings are specified. > > > > > > <map:transformer name="CastorTransformer" > > > > src="org.apache.cocoontransformation.CastorTransformer"> > > > <mapping>castor/xmapping.xml</mapping> > > > </map:transformer> > > > > > > A sample for the use: > > > <root xmlns:castor="http://castor.exolab.org/cocoontransfomer"> > > > <castor:InsertBean source="session" key="invoice"/> > > > <castor:InsertBean source="sitemap" key="product" > > > mapping="castor/specicalmapping.xml"/> > > > </root> > > > > > > The CastorTransfomer support only one Element castor:InsertBean. > > > This element is replaced with the marshalled object. > > > > > > Other information can be found in the scratchpad sample sub-sitemap > under > > > docs. > > > > > > To install the Cocoon war with scratchpad stuff easily, do: > > > > > > build.(sh|bat) clean > > > build.(sh|bat) installscratchpadwar > > > > > > The demo is under http://server:port/cocoon/samples/castor/ > > > > > > -- > > > Nicola Ken Barozzi [EMAIL PROTECTED] > > > - verba volant, scripta manent - > > > (discussions get forgotten, just code remains) > > > --------------------------------------------------------------------- > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > For additional commands, email: [EMAIL PROTECTED] > > > > > > > > > > -- > > > > _______________________________________________ > > Sign-up for your own FREE Personalized E-mail at Mail.com > > http://www.mail.com/?sr=signup > > > > Travelocity.com is giving away two million travel miles. > > > http://ad.doubleclick.net/clk;3969773;6991039;g?http://svc.travelocity.com/p > romos/millionmiles_main/0,,TRAVELOCITY,00.html > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, email: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, email: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]