On 22.Nov.2002 -- 11:43 AM, Christian Haul wrote: > On 21.Nov.2002 -- 11:05 AM, Sylvain Wallez wrote: > > > > Q: I want do define a pipeline that will be used only as a > > transformation service. Why must I write a <map:generate> and a > > <map:serialize> in its definition ? > > > > A: Because the sitemap, as a pipeline building language, must be able to > > determine the start of a pipeline and its end, even if not all its > > components are used. Like opening and closing braces in Java, the > > generator begins the pipeline definition and the serializer ends it. > > We have the notion of pipelines in the sitemap. Today they are only > used to get different error handlers. Maybe we should rethink this and > use the map:pipeline as boundaries. > > Another idea would be to place those pipelines acting as generator, > transformer, serializer in the same part as we do with other > components of that kind. Problem would be that they would need to use > other components just introduced there. > > A last thought: would it be necessary to have those pipelines match a > pattern or would it be sufficiant to have them names?
Looks like my reply was too concise to be understandable. OK, next try: Sylvain explained, that A) a generator is a component that produces SAX events B) a transformer is a component that consumes SAX events and produces SAX events C) a serializer is a component that consumes SAX events and produces a binary stream Now, I'd like to add D) a reader is a component that produces a binary stream A "pipeline" could be any of these (according to the suggestion). To be more precise: Currently, a pipeline is only D). In conjunction with the cocoon: protocol, we can have A) as well. A resource is a C) while we can actually use it as B) as well because of a "bug" in 2.1 This comparison is a bit unfair as a resource for example is only visible in the current sitemap. But a pipeline is more: it is also a contract for the external URI space. Now, if we step back a little and look at the heart of things, why would a pipeline need to be referenced by anything else than its name, and why is a pipeline acting as a transformer placed anywhere else than the map:transformers section? This is probably a bit too radical and faces implementation problems. OTOH, what about e.g. <map:pipeline type="transformer" name="super_skin"> <!-- ... --> </map:pipeline> in the "traditional" map:pipelines section. This could be turned into a plain Avalon component filling the "transformer" role using the short hand "super_skin". Wait -- now, what about the external URI space? That would of course need the present notation of pipeline. Without a type attribute, that is. To use one of the new transformers, nothing chances: <map:pipeline> <map:match pattern="*"> <map:generate type="file" src="{1}.xml"/> <map:transform type="super_skin"/> <map:serialize type="xhtml"/> </map:match> </map:pipeline> I imagine that this could be done with only some tweaking of the current implementation. It would however, change the way we currently use the map:pipelines/map:pipeline section in the sitemap. But there seems to be little use of it anyways. So, what about blocks? Blocks would need to provide a way to let other block access components declared within. Interestingly enough, this gets easier as we have to deal with fewer different concepts that need to be visible outside: components, classes, URIs Oh yes, textual replacement wouldn't do for this. Does this relate to XSL named templates? No, I don't think it is related in any way. So, what do you think? Chris. -- C h r i s t i a n H a u l [EMAIL PROTECTED] fingerprint: 99B0 1D9D 7919 644A 4837 7D73 FEF9 6856 335A 9E08 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]