Hello group,

I created a minimal webapp and found the following remark from Geoff Howard in 
[1 href="http://wiki.cocoondev.org/Wiki.jsp?page=CreateMinimalWebapp";] 
CreateMinimalWebapp:
2. edit lib/jars.xml to comment out/remove all the optional jars except the ones noted 
above
    1. could be done with an xsl transform
[/1]

I wrote 2 XSLT- files that are working fine to do the job, but I would like to have 
more "intelligence" (please see below):
The first xslt (jars2exclude.xsl [2]) checks the <lib> element  form the jars.xml 
whether it starts with  'optional/' (the dir to exclude files from).  If so they will 
be labeled "2exclude" (there are exceptions - you will see later).
<xsl:when test="starts-with(text(), 'optional/')"> [compare 2]
The jars.xml looks like this:
...
<file>
    <title/>
    <description/>
    <used-by/>
    <lib>core/jvm1.2/excalibur-datasource-vm12-20021121.jar</lib>
    <homepage/>
</file>
...
The example file would not meet the criteria. The following would:
<file>
...
<lib>optional/servlet_2_2.jar</lib>
...
<file>
But this certain file has to be left untouched [1] - this is one of n exceptions (2 
are mentioned in [1], but I need more<-n exception). This is be done with 
<xsl:choose><xsl:when>[2]. Here is an example of an exception:
<xsl:when test="substring-after(text(), 'optional/')='servlet_2_2.jar'">
<xsl:value-of select="."/>
</xsl:when>

The result of the transformation [2] will look like this:
    <file>
        <title>XML Catalog Entity Resolver</title>
...
        <lib>2exclude</lib>
...
    </file>
    <file>
        <title>Servlet API</title>
...
        <lib>optional/servlet_2_2.jar</lib>
...
    </file>

Transforming this result with exclude2jars.xsl [3] will result in the new jar.xml 
(without the exclusions, but with the exceptions).

Ok, that is nice but I would prefer not to hard code the exceptions, e.g.:
substring-after(text(), 'optional/')='servlet_2_2.jar'
                               |------------|   |--------------------|
|---| hard coded exception (e.g. |optional/|

I prefer to use something like jars2exclude.xml [4] where I declare the |---| hard 
coded exceptions. 
...
                <dir2exclude>optional/</dir2exclude>
                <except>servlet_2_2.jar</except>
...

..but how can I do that?

Have a look at sitemap.snippet [5] to install it on your local cocoon version.

Any help and any ideas welcome.

King regards
Thorsten

[1] http://wiki.cocoondev.org/Wiki.jsp?page=CreateMinimalWebapp
[2]  jars2exclude.xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="jars">
        <jars>
            <xsl:apply-templates select="file"/>
        </jars>
    </xsl:template>
    <xsl:template match="file">
        <file>
            <xsl:apply-templates/>
        </file>
    </xsl:template>
    <!--================Parsing of value===============================-->
    <xsl:template match="title">
        <title>
            <xsl:value-of select="."/>
        </title>
    </xsl:template>
    <xsl:template match="description">
        <description>
            <xsl:value-of select="."/>
        </description>
    </xsl:template>
    <xsl:template match="used-by">
        <used-by>
            <xsl:value-of select="."/>
        </used-by>
    </xsl:template>
    <!--==Excluding dir without the exceptions==-->
    <xsl:template match="lib">
        <lib>
    <xsl:choose>
        <xsl:when test="starts-with(text(), 'optional/')">
            <xsl:choose>
                <xsl:when test="substring-after(text(), 'optional/')='fop-0.20.4.jar'">
                    <xsl:value-of select="."/>
                </xsl:when>
                <xsl:when test="substring-after(text(), 
'optional/')='servlet_2_2.jar'">
                    <xsl:value-of select="."/>
                </xsl:when>
                <xsl:when test="substring-after(text(), 
'optional/')='commons-jxpath-1.0.jar'">
                    <xsl:value-of select="."/>
                </xsl:when>
                <xsl:otherwise>2exclude</xsl:otherwise>
            </xsl:choose>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="."/>
        </xsl:otherwise>
    </xsl:choose>
        </lib>
    </xsl:template>
    <xsl:template match="homepage">
        <homepage>
            <xsl:value-of select="."/>
        </homepage>
    </xsl:template>
</xsl:stylesheet>
[/2] 
[3]exclude2jars.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
        <xsl:template match="/">
        <xsl:apply-templates/>
        </xsl:template>
        <xsl:template match="jars">
        <xsl:comment>
  Add an entry for each jar file used by Cocoon, following the other entries

  Author: Ovidiu Predescu "[EMAIL PROTECTED]"
  Date: May 23, 2002
  
jars2exclude have been used.
Author: Thorsten Scherler "[EMAIL PROTECTED]"
Date: March 06, 2003
This is the modified jars.xml.
                </xsl:comment>
                <jars>
                <xsl:copy-of select="file[lib!='2exclude']"/>
                </jars>
        </xsl:template>
</xsl:stylesheet>
[/3]
[4] jars2exclude.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
  Add an entry for each jar file which should be excluded  by Cocoon!

  Author: Thorsten Scherler "[EMAIL PROTECTED]"
  Date: March 05, 2003
  
                -->
<jars2exclude>
        <exclude>
                <dir2exclude>optional/</dir2exclude>
                <except>fop-0.20.4.jar</except>
                <except>commons-jxpath-1.0.jar</except>
                <except>servlet_2_2.jar</except>
        </exclude>
</jars2exclude>
[/4]
[5]sitemap.snippet:
                <map:pipeline>
                        <!-- Step 1: Label lib which should be excluded with 
"2exclude", leave exceptions untouched. -->
                        <map:match pattern="2Xclude.xml">
                                <map:generate src="xml/jars.xml"/>
                                <map:transform src="xsl/jars2exclude.xsl"/>
                                <map:serialize type="xml"/>
                        </map:match>
                        <!-- Step 2: Copy all elements except those which are labeled 
"2exclude"-->
                        <map:match pattern="exclude">
                                <map:generate src="cocoon:/2Xclude.xml"/>
                                <map:transform src="xsl/exclude2jars.xsl"/>
                                <map:serialize type="xml"/>
                        </map:match>
                </map:pipeline>


> Mit freundlichem Gruss,
> 
> Thorsten Scherler
> Marketing / Telefonmarketing
> 
> Weidmüller GmbH & Co.
> P.O. Box 2807
> 33058 Paderborn
> Tel.:+ 49 - 5252-960-350
> Fax:+ 49 - 5252-960-116
> eMail: [EMAIL PROTECTED]
> http://www.weidmueller.de
> 
> 

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

Reply via email to