* Steve Krulewitz <[EMAIL PROTECTED]> [2004-02-28 16:13]:
> I agree that more sophisticated input handing would make general web
> applications much easier to write in Cocoon... here are some more random
> thoughts on the subject:
...
> 1. A deserializer component is used to convert the raw input into XML.
> A deserializer component would be mated to each type of input -- for
> example, the HTTPDeserializer would turn HTTP headers into a simple XML
> document (or just selected parts of the header based on a parameter).
Do you create a new concept, deserializer, or do you just continue
to use the generator concept?
The HTTP deserializer you describe is a cool thing. I can
imagine that there would be other sorts of desrializers, an EDI
deserialiser, maybe an e-mail deserialzer if you want to accept
e-mail messages as submissions, or an NNTP deserializer.
Cocoon an be a publishing framework for different protocols.
> <map:input-pipeline name="orders">
> <map:aggregate>
> <map:generate type="httpdeserializer">
> <map:parameter name="query" value="customerid,orderid"/>
> </map:generate>
> <map:transform type="sql"/>
> <map:serialize type="object"/>
> </map:input-pipeline>
>
> ...
>
> <map:pipeline match="/orders">
> <map:input name="orders"/>
> <map:generate type="jx"/>
> <map:transform "orders.xslt"/>
> <map:serialize/>
> </map:pipleline>
I'd much rather not deal with jx if I don't have to. I'd much rather
move to input pipelines that can store input as XML in such a
way that I can generate content using XSLT only.
I do like Mr Fagerstrom's idea to have input pipelines terminate in
a store, then have them resume with an output pipeline.
I guess the word "deserialize" gave me an idea. Start a pipeline
with a deserialize statement end it with a serialize statement.
<!--+
| A pipeline that builds a validated document representing a
| user registration. If a validator fails then an error document
| is created and the error pipeline called -->
<map:match pattern="registration-validation">
<map:generate type="c-form" src="forms/registration.cf"/>
<map:transform src="styleshets/c-form/registration.xslt"/>
<map:validate type="relax-ng" src="relax/registration.xml"/>
<map:validate type="schematron" src="schematron/registration.xml"/>
</map:match>
<!--+
| A pipeline that stores user mailing address and such into
| a Momento document. If Momento rejects the update for some
| reason (ACID) then an error document is created and the error
| pipeline called -->
<map:match pattern="registration-momento-store">
<map:generate src="cocoon:/registration-validation"/>
<map:transform src="styleshets/xupdate/registration-to-momento.xslt"/>
<map:store type="momento"/>
</map:match>
<!--+
| A pipeline that makes note of session preferences. -->
<map:match pattern="registration-session-store">
<map:aggregate element="session">
<map:generate src="http-session"/>
<map:generate src="cocoon:/registration-validation"/>
</map:aggregate>
<map:transform src="styleshets/xupdate/registration-to-session.xslt"/>
<map:store type="session-document"/>
</map:match>
<!--+
| A pipeline that stores user name and login to an ldap server.
| If LDAP rejects the insert for some reason, then an error
| document is created and the error pipeline is called.
-->
<map:match pattern="registration-ldap-store">
<map:generate type="c-forms" src="forms/registration.cf"/>
<map:transform src="styleshets/ldap/registration-to-insert.xslt"/>
<map:store type="ldap"/>
</map:match>
<map:match pattern="/registration-submit">
<!--+ All or nothing.
|
| If any of the channels fail, then the error pipeline
| triggers. The error pipeline will start off with a generator
| that will retrieve the error document. All validators write
| their error messages as a sub-document in the error document.
+-->
<map:deserialize>
<map:channel name="registration-momento-store"/>
<map:channel name="registration-session-store"/>
<map:channel name="registration-ldap-store"/>
</map:deserialize>
<map:aggregate element="page">
<!--| Navigation for page. |-->
<map:generate src="layout.xml"/>
<!--| Generate page content using the user that was stored
| above |-->
<map:generate type="momento"
src="momento/e-mail-service.mx"
xslt="stylesheets/momento/registration-page.xslt">
<!--| Liberal use of XPath in the sitemap |-->
<map:parameter name="user-id"
value="{session://document#/document/@user-id}"/>
</map:generate>
<!--| Pull in the session document |-->
<map:generate src="session://document"/>
</map:aggregate>
<!--| Make a form |-->
<map:transform src="stylesheets/page-to-form.xml"/>
<!--| Output |-->
<map:serialize type="html"/>
</map:match>
Thoughts?
--
Alan / [EMAIL PROTECTED] / http://engrm.com/
aim/yim: alanengrm - icq: 228631855 - msn: [EMAIL PROTECTED]