> > This is likely an issue you're going to run into also; mapping XPath to
> > random session objects might be possible, but I suspect the two domains
> > aren't perfectly isomorphic :-(
> 
> Yes, but since we don't need to work on strings, less so. All these
> modules work on Objects and only on some occasions you really want
> strings.

I still think you'll have the problem.  Suppose for example an object
contains a vector of other objects and it's really some value in the other
objects that you are interested in.  In general, in such cases you may not
know the class of the Vector elements.  Eg;

        foo/patient/patient_number

where patient inherits from person, might not work if the Vector happens to
have a mix of both cases (not all people are patients).  Of course you can
handle this, but you're either going to have to demand that your audience
have good knowledge of the possible session objects or you're going to have
to have very robust (and meaningful) error handling.

> > No more matchers, no more selectors; just XSLT templates ;-)...
Seriously,
> > once (if?) XSLT 2 gains regex capabilities I can't really see why a pure
> > XSLT pipeline couldn't do everything that matchers and selectors do,
therby
> > eliminating huge chunks of the current Cocoon code base?
> 
> Maybe, maybe not. One would need to use a lot extension functions to
> achieve similar things (e.g. j2ee, databases and stuff) but that might
> be portable to other pipeline systems (?). OTOH Apache Cocoon a lot
> about SoC and it will need to be seen if that works as well with your
> suggested approach.

Much of the interfaces to external systems would become, in effect,
generators.  These would be invoked dependant on context. However, if you
want to avoid extensions and do that intelligently you could use a two pass
approach:

1) a tree structure giving the hierarchy of the context's in scope for the
current request (ie the output of a modified request generator). This would
be filtered by an XSLT to generate the list of contexts required for the
current request.

2) the tree structure from the requested contexts would be generated and fed
to the second XSLT.

It's really the first thing that's replacing the matchers/selectors in the
pipeline.  The second thing is essentially generation and aggregation as
currently done by the pipeline handling.  This suggests that the whole thing
could be implemented by a new pipeline component -- some kind of context
selector generator (need a name that's not going to collide too much with
existing Cocoon components) -- that is also a generator.  A pipeline using
such an approach might then become something like:

        <map:match pattern="**">
            <map:context-selector-generator-thingy
filter="businessfilter.xsl">
               <map:transform src="mypath/business-logic.xsl"/>
                    <map:context-selector-generator-thingy
filter="presentationfilter.xsl">
                    <map:transform src="mypath/presentation-logic.xsl"/>
                      </map:context-selector-generator-thingy>
               </map:context-selector-generator-thingy>
            <map:serialize .../>
      </map:match> 

If you didn't specify a filter you'd get the identity transform and all
information available from the current context would be generated for the
next step.  Normally, I doubt that you'd chain the thing as I've done above
(context should be context for any given request?), but there should be no
reason it wouldn't be possible; some dynamic presentation methodologies
might want to substitute new information once context results are better
understood or you may not want to retrieve and forward all data unless
needed (ie; large data set sizes).  (In such a case you may really want two
business logic passes.)

> I believe, many would be interested in your approach. I hope you find
> the time to work on it.

I think this is almost a requirement for where we want to go with our
project.  Tentatively we would begin work on such a beast next spring or
early summer.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to