<?xml version="1.0" encoding="ISO-8859-1"?><article lang="fr">
<articleinfo>
  <title>Système de publication de contenu basé sur DocBook</title> 
  <subtitle>Mise en place d'un système de publication de contenu basé sur le projet Apache Cocoon et le langage de balises DocBook</subtitle>
  <authorgroup>
  <author>
        <firstname>Nowicki</firstname>
        <surname>Christophe</surname>
        <email>cscm@csquad.org</email>
  </author>
  </authorgroup>
  <keywordset>
        <keyword>Cocoon</keyword>
        <keyword>DocBook</keyword>
        <keyword>XML</keyword>
        <keyword>Java</keyword>
        <keyword>PDF</keyword>
        <keyword>OpenDocument</keyword>
        <keyword>RTF</keyword>
        <keyword>Text</keyword>
        <keyword>CMS</keyword>
        <keyword>Système de gestion de contenu</keyword>
        <keyword>Publication de contenu</keyword>
  </keywordset>
  <revhistory>
      <revision>
        <revnumber>v0.1</revnumber>
        <date>2008-01-16</date>
        <authorinitials>CN</authorinitials>
		<revremark>Première version publique.</revremark>
      </revision>
  </revhistory>
  <date>janvier 2007</date>
  <legalnotice><para>Permission est accordée de copier, distribuer et/ou modifier ce
  document selon les termes de la Licence de Documentation Libre GNU
  (GNU Free Documentation License), version 1.1 ou toute version
  ultérieure publiée par la Free Software Foundation.
  Pas de section inaltérable.</para></legalnotice>
  <copyright>
      <year>janvier 2007</year>
      <holder>Nowicki Christophe</holder>
  </copyright>
</articleinfo>

<abstract>
    <para>
L'objectif de ce document est de décrire l'installation et la configuration d'un système de publication de contenu simplifié basé sur le langage de balises DocBook et le système de transformation de documents issu du projet Apache Coocon. La procédure d'installation est réalisée sur une distribution Debian GNU/Linux version « Etch » mais l'ensemble des instructions sont applicables à d'autres distributions GNU/Linux.        
    </para>
</abstract>

<sect1>
  <title>Présentation</title>
  <para>
  </para>
  <sect2>
      <title>Problèmatique</title>
      <para>
          Tous les documents disponibles à l'adresse (<ulink url="http://www.csquad.org"/>), sont écrit à
          l'aide du language DocBook, cette methode permet de séparer fond du document de sa mise en forme et anisi 
          publier le document dans plusieurs formats (HTML, PDF, Texte, etc...). Cette possiblité forte interessante, est
          devenus au fils du temps un handicape. Car la moindre modification d'un document nécessite la régénération 
          des differents formats d'export. J'ai donc cherché à simplifié et automatisé la procedure de publication. 
          La résultat de ce travail est décrit dans ce document. 
      </para>
  </sect2>
  <sect2>
      <title>DocBook</title>
      <para>
          DocBook est un langage de balisage conçu à l'origine pour la documentation technique informatique (matériel et logiciel). 
          Il à été développé par l'éditeur O'Reilly pour les besoins de l'édition technique et plus particulièrement informatique.
      </para>
      <para> 
          La grande force de ce langage est d'être un format XML totalement orienté sémantique, il n'inclut en effet aucune 
          information de mise en forme ce qui permet d'utiliser ensuite la documentation ainsi structurée par tout type de support / lecteur.
      </para> 
      <para>
          Un ensemble de feuilles de styles XSLT est disponible pour transformer des documents vers de nombreux formats tels que le 
          HTML, XHTML, PDF, RTF, Texte, Microsoft WordML, OpenDocument, etc... 
      </para>
  </sect2>

  <sect2>
      <title>Apache Cocoon</title>
      <para>
          Apache Cocoon est une plate-forme de développement d'applications web fondée sur la séparation des domaines techniques 
          et l'assemblage de composants.
      </para>
      <para>
          Cocoon implémente ces concepts par la notion de "pipelines de composants", 
          chaque composant du pipeline étant dédié à une fonction particulière. 
      </para>
      <para>
          Cela permet d'utiliser une approche du type "Lego" pour la construction d'applications web, 
          en assemblant des chaînes de composants, sans nécessiter de programmation.
      </para>
  </sect2>

  <sect2>
      <title>Fonctionnement du système de publication de contenu</title>
      <para>
          L'objectif de mon installation est de mettre en place 
          un système de publication de contenu fonctionnant de la manière suivante :
      </para>

      <para>
    <mediaobject>
        <imageobject>
            <imagedata fileref="apache_cocoon_docbook_cms_overview.png"/>
        </imageobject>
    </mediaobject>
      </para>

      <para>
        L'auteur édite un document à l'aide d'un éditeur XML (VIM, Emacs ou bien oXygen<footnote>
        <para>oXgen XML Editor <ulink url="http://www.oxygenxml.com/">http://www.oxygenxml.com/</ulink></para></footnote>) en 
    respectant le format Docbook.</para>
        <para>Une fois le document terminé, il l'envoi vers le serveur de publication de contenu à l'aide de Subversion. </para>
        <para>Lorsque'un utilisateur désire obtenir la version imprimable du document au format PDF, le clique sur un lien. 
        A partir de celui-ci Cocoon, réalise la transformation du document XML à l'aide de la feuille de style XSLT et 
        l'envoi à l'utilisateur.  
        </para>
  </sect2>
</sect1>

<sect1>
    <title>Installation</title>
    <para/>
    <sect2>
        <title>Liste des logiciels nécessaires</title>
        <para>
        Les logiciels suivants sont nécessaires pour mettre en place le système :
        </para>
        <para>
<table frame="all">
<title>Liste des logiciels</title>
<tgroup cols="3" align="left" colsep="1" rowsep="1">
<colspec colwidth="3cm"/>
<colspec align="center" colwidth="1cm"/>
<colspec/>
<thead>
<row>
  <entry>Nom</entry>
  <entry>Version</entry>
  <entry>Source</entry>
</row>
</thead>
<tbody>
<row>
  <entry>Apache</entry>
  <entry>2.0</entry>
  <entry>Debian, paquet apache2</entry>
</row>
<row>
  <entry>Tomcat</entry>
  <entry>5.0</entry>
  <entry>Debian, paquet tomcat5</entry>
</row>
<row>
  <entry>Connecteur Apache pour Tomcat</entry>
  <entry>2.0</entry>
  <entry>Debian, paquet libapache2-mod-jk</entry>
</row>
<row>
  <entry>Subversion</entry>
  <entry/>
  <entry>Debian, paquet subversion</entry>
</row>
<row>
  <entry>Support Subversion pour Apache</entry>
  <entry/>
  <entry>Debian, paquet libapache2-mod-svn</entry>
</row>
<row>
  <entry>Feuilles de styles DocBook XSL de Norman Walsh</entry>
  <entry>1.6.8</entry>
  <entry>Debian, paquet docbook-xsl</entry>
</row>
<row>
  <entry>Source de Apache Cocoon</entry>
  <entry>2.1.9</entry>
  <entry>Disponible à l'adresse suivante : <ulink url="http://cocoon.apache.org/mirror.cgi"/></entry>
</row>
<row>
  <entry>Kit de développement Java (JDK) de Sun</entry>
  <entry>1.5</entry>
  <entry>Debian, paquet sun-java5-jdk</entry>
</row>
</tbody>
</tgroup>
</table>

        </para>
    </sect2>

    <sect2>
        <title>Récupération des fichiers et installation des paquets Debian</title>
        <para>
Vous pouvez installer l'ensemble des paquets Debian à l'aide des commandes apt :
        </para>
        <para>
<programlisting format="linespecific">
# apt-get install sun-java5-jdk apache2  \
tomcat5 libapache2-mod-jk \
libapache2-mod-svn docbook-xsl unzip subversion
</programlisting>
        </para>
        <para>
Regrouper les fichiers dans un répertoire commun :
        </para>
        <para>
<programlisting format="linespecific">
$ cd cocoon_files/
$ wget http://apache.fastorama.com/dist/cocoon/cocoon-latest-src.zip
$ unzip cocoon-2.1.9-src.zip
$ ls
cocoon-2.1.10          
cocoon-latest-src.zip  
</programlisting>
        </para>
    </sect2>

    <sect2>
        <title>Compilation de Cocoon</title>
        <para>
            Il faut compiler Cocoon pour obtenir une application Tomcat. 
            Le système de compilation de Cocoon est modulaire, 
            il faut donc préciser les composants à compiler à l'aide du fichier de configuration  
            local.build.properties.
        </para>
        <para>
<programlisting format="linespecific">
$ cd cocoon-2.1.10/
$ cp build.properties local.build.properties
$ vim local.build.properties
</programlisting>
        </para>
        <para>
    <table frame="all">
        <title>Liste des options à modifier dans le fichier local.build.properties</title>
        <tgroup cols="2" align="left" colsep="1" rowsep="1">
        <colspec colwidth="3cm"/>
        <colspec align="center" colwidth="1cm"/>
        <thead>
        <row>
            <entry>Option</entry>
            <entry>Valeur</entry>
        </row>
        </thead>
        <tbody>
        <row>
            <entry>exclude.deprecated</entry>
            <entry>true</entry>
        </row>
        <row>
            <entry>compiler.debug</entry>
            <entry>off</entry>
        </row>
        </tbody>
	</tgroup>
        </table>

        </para>

        <para>
Pour lancer la compilation de Cocoon, il suffit de taper la commande suivante :
        </para>
        <para>
<programlisting format="linespecific">
$ sh build.sh war
...
Building jar: /home/cscm/cocoon_files/cocoon-2.1.10/build/cocoon/cocoon.war

BUILD SUCCESSFUL
Total time: 7 minutes 11 seconds
</programlisting>
        </para>
        <para>Vous avez largement le temps de vous faire un bon café.</para>
    </sect2>

    <sect2>
        <title>Installation de Cocoon dans Tomcat</title>

        <para>
            On désactive le  Java security manager, qui est activé par default mais qui 
            empeche de déploiement de l'application.
        </para> 
        <para>
        <programlisting format="linespecific">
            TOMCAT5_SECURITY=no
        </programlisting>
        </para>
        <para>
            Ce n'est pas la bonne méthode, mais c'est la plus rapide, car la description de 
            la configuration du Security Manger dépasse le cadre de ce document, 
            une fois votre installation finalisée, je vous invite 
            vivement à lire la documentation disponible à cette addresse :
        </para>
        <para>
            <ulink url="http://tomcat.apache.org/tomcat-5.5-doc/security-manager-howto.html">The Apache Tomcat Security Manager HOWTO</ulink>
        </para>


        <para>
            Il suffit de copier le fichier war dans le répertoire des webapps de Tomcat :
        </para>

        <para>
<programlisting format="linespecific">
# cp build/cocoon/cocoon.war /var/lib/tomcat5/webapps/ 
</programlisting>
        </para>
        <para>
            Pour vérifier le bon fonctionnement, il suffit de se connecter à l'adresse suivante :
            <ulink url="http://localhost:8180/cocoon">http://localhost:8080/cocoon</ulink>
        </para>
    </sect2>
</sect1>

<sect1>
    <title>Configuration de Subversion</title>
    <para/>
    <para>
        Nous allons utilisé Subversion pour la gestion des fichiers sources. 
    </para>

    <sect2>
        <title>Création d'un dêpot de code source</title>
	<para>
	</para>
        <para>
            <prompt moreinfo="none">#</prompt> mkdir /var/local/svn
            <prompt moreinfo="none">#</prompt> svnadmin create /var/local/svn/cocoon
	        <prompt moreinfo="none">#</prompt> chown -R www-data: /var/local/svn/cocoon
        </para>
    </sect2>

    <sect2>
        <title>Configuration d'Apache</title>
        <para>
            Il faut activer le module Subversion pour Apache
        </para>
	<para>
        <screen format="linespecific">
<prompt moreinfo="none">#</prompt> a2enmod dav_svn
Enabling dav as a dependency
This module is already enabled!
Module dav_svn installed; run /etc/init.d/apache2 force-reload to enable.
<prompt moreinfo="none">#</prompt> /etc/init.d/apache2 force-reload 
        </screen>
	</para>
        <para>
            Il faut ensuite créer un fichier de configuration pour votre site web
            dans le répertoire des sites disponibles dans apache2 :
            <filename moreinfo="none">/etc/apache2/sites-available/svn</filename>
        </para>
        <para>
<programlisting format="linespecific">

&lt;VirtualHost *:80&gt;
  ServerName svn.csquad.org

  ErrorLog /var/log/apache2/svn.csquad.org/error.log
  CustomLog /var/log/apache2/svn.csquad.org/access.log common

  DocumentRoot /var/www

  &lt;Location /&gt;
        DAV svn

        SVNParentPath /var/local/svn/
  &lt;/Location&gt;

&lt;/VirtualHost&gt;

</programlisting>
        </para>
        <para>
            Puis activer, cette configuration :
        </para>
	<para>
<programlisting format="linespecific">
# a2ensite svn
Site svn installed; run /etc/init.d/apache2 reload to enable.
# /etc/init.d/apache2
</programlisting>
	</para>
    </sect2>

    <sect2>
    	<title>Tests et structure du depôt Subversion</title>
	<para>Vous pouvez tester le fonctionnement de votre depôt :</para>

	<para>
<programlisting format="linespecific">
$ svn co http://svn.csquad.org/cocoon
Révision 0 extraite.
</programlisting>
	</para>
	<para>
	Je vous propose d'utilisé l'organisation suivante pour votre dêpot :
	</para>
	<para>
<programlisting format="linespecific">

cocoon
|-- branches
|-- tags
|   `-- public
|       |-- article
|            `-- article.xml
`-- trunk
    |-- article
        `-- article.xml

</programlisting>
	</para>
    <para>Les documents qui se trouvent dans le répertoire <filename moreinfo="none">tags/public</filename>, sont accessible publiquement et ceux du répertoire <filename moreinfo="none">trunk</filename> 
	sont les dernières versions et les documents en cours de rédaction. Cette organisation permet de simuler un simple système
	de pré-publication et de "versionner" l'ensemble de vos documents.</para>
    </sect2>

</sect1>

<sect1>
    <title>Configuration de Cocoon</title>
    <sect2>
        <title>Interface entre Apache et Tomcat : mod_jk</title>
        <para>
            Le module JK permet d'interfacer le serveur  Web Apache avec le serveur d'application Tomcat.
            L'objectif est de rendre Cocoon accessible depuis votre site web à une adresse de type :
            <ulink url="http://votre_site_web/cocoon">http://votre_site_web/cocoon</ulink>
        </para>
        <para>Pour cela, il faut :</para>
        <para>
<itemizedlist spacing="normal" mark="bullet">
    <listitem>
        <para>
activer le module jk
<programlisting format="linespecific">
# a2enmod jk
Module jk installed; run /etc/init.d/apache2 force-reload to enable.
</programlisting>
        </para>
    </listitem>
    <listitem>
        <para>copier l'exemple de fichier de configuration fourni par le paquet dans le répertoire de configuration d'apache : 
<programlisting format="linespecific">
# cp /usr/share/doc/libapache2-mod-jk/httpd_example_apache2.conf /etc/apache2/conf.d/jk.conf
</programlisting>
        </para>
    </listitem>
    <listitem>
        <para>ajouter dans le fichier de configuration du module JK : <filename moreinfo="none">/etc/apache2/conf.d/jk.conf</filename>
<programlisting format="linespecific">
JkMount /cocoon/* ajp13_worker
</programlisting>
        </para>
    </listitem>
    <listitem>
        <para>relancer le serveur Apache
<programlisting format="linespecific">
# /etc/init.d/apache2 reload
</programlisting>
        </para>
    </listitem>
    <listitem>
        <para>Vérifier le bon fonctionnement du module en vous connectant à 
	l'adresse suivante :<ulink url="http://votre_site_web/cocoon">http://votre_site_web/cocoon</ulink>
        </para>
  </listitem>
</itemizedlist>
        </para>
    </sect2>

    <sect2>
        <title>Configuration des transformations dans Cocoon</title>
        <para>Une fois l'ensemble installé, il faut configurer Cocoon de manière à transformer les fichiers qui se trouvent dans le dépôt Subversion
	en documents accessibles via le site Web dans différents formats.
        Pour cela nous allons modifier la section  map:pipelines du fichier de configuration <filename moreinfo="none">sitemap.xmap</filename> qui se trouve dans le répertoire :
            <filename moreinfo="none">/var/lib/tomcat5/webapps/cocoon</filename>
        </para>
        <para>
<programlisting format="linespecific">


&lt;map:pipeline&gt;

...

&lt;!--+
    | Subversion Content
    +--&gt;

&lt;!-- Images --&gt;
&lt;map:match pattern="**.png"&gt;
        &lt;map:read mime-type="image/png" src="http://svn.csquad.org/cocoon/{0}"/&gt;
&lt;/map:match&gt;

&lt;map:match pattern="**.jpg"&gt;
        &lt;map:read mime-type="image/jpeg" src="http://svn.csquad.org/cocoon/{0}"/&gt;
&lt;/map:match&gt;

&lt;!-- Acces direct au document au format XML --&gt;
 &lt;map:match pattern="**.xml"&gt;
 	&lt;map:generate src="http://svn.csquad.org/cocoon/{0}"/&gt;
     	&lt;map:serialize type="xml"/&gt;
 &lt;/map:match&gt;

&lt;!-- Transformation des documents XML en HTML a l'aide des feuilles de style de Norman Waslh--&gt;
&lt;map:match pattern="**.html"&gt;
        &lt;map:generate src="http://svn.csquad.org/cocoon/{1}.xml"/&gt;
        &lt;map:transform 
            src="/usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl"/&gt;
        &lt;map:serialize type="html"/&gt;
&lt;/map:match&gt;

&lt;!-- Transformation des documents XML en xHTML a l'aide des feuilles de style de Norman Waslh--&gt;
&lt;map:match pattern="**.xhtml"&gt;
        &lt;map:generate src="http://svn.csquad.org/cocoon/{1}.xml"/&gt;
        &lt;map:transform 
            src="/usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl"/&gt;
        &lt;map:serialize type="xhtml"/&gt;
&lt;/map:match&gt;

&lt;!-- Transformation des documents XML en PS a l'aide des feuilles de style de Norman Waslh et de FOP --&gt;
&lt;map:match pattern="**.ps"&gt;
        &lt;map:generate src="http://svn.csquad.org/cocoon/{1}.xml"/&gt;
        &lt;map:transform
            src="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl"/&gt;
        &lt;map:serialize type="fo2ps"/&gt;
&lt;/map:match&gt;

&lt;!-- Transformation des documents XML en PDF a l'aide des feuilles de style de Norman Waslh et de FOP --&gt;
&lt;map:match pattern="**.pdf"&gt;
        &lt;map:generate src="http://svn.csquad.org/cocoon/{1}.xml"/&gt;
        &lt;map:transform 
            src="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl"/&gt;
        &lt;map:serialize type="fo2pdf"/&gt;
&lt;/map:match&gt;

&lt;!-- Transformation des documents XML en RTF a l'aide des feuilles de style de Norman Waslh et de FOP --&gt;
&lt;map:match pattern="**.rtf"&gt;
        &lt;map:generate src="http://svn.csquad.org/cocoon/{1}.xml"/&gt;
        &lt;map:transform
            src="/usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl"/&gt;
        &lt;map:serialize type="fo2rtf"/&gt;
&lt;/map:match&gt;

...

&lt;map:pipelines&gt;

</programlisting>
        </para>
	<para>
		Cette configuration permet de transformer le contenu de votre dêpot dynamiquement, et se base sur l'extension du fichier 
		pour déterminer l'action à réaliser :
	</para>
	<para>Par exemple pour le document que vous êtes en train de lire, il n'existe qu'une seule version au format XML :</para>
	<para>
	<ulink url="http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.xml">http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.xml</ulink>
	</para>
	<para>
	le document originale se trouve dans le dépôt Subversion :
	</para>
	<para>
	<ulink url="http://svn.csquad.org/cocoon/tags/public/cocoon/cocoon.xml">http://svn.csquad.org/cocoon/tags/public/cocoon/cocoon.xml</ulink>
	</para>
	<para>
	Cette version est transformée dynamiquement dans plusieurs formats :
<itemizedlist spacing="normal" mark="bullet">
    <listitem>
        <para>
	        <ulink url="http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.html">http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.html</ulink>
        </para>
    </listitem>
    <listitem>
        <para>
	        <ulink url="http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.xhtml">http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.xhtml</ulink>
        </para>
    </listitem>
    <listitem>
        <para>
	        <ulink url="http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.pdf">http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.pdf</ulink>
        </para>
    </listitem>
    <listitem>
        <para>
	        <ulink url="http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.ps">http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.ps</ulink>
        </para>
    </listitem>
    <listitem>
        <para>
	        <ulink url="http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.rtf">http://www.csquad.org/cocoon/tags/public/cocoon/cocoon.rtf</ulink>
        </para>
    </listitem>
</itemizedlist>
	</para>
    </sect2>

    <sect2>
    	<title>Format OpenDocument</title>
	<para>
	OpenDocument est un format ouvert de données pour les applications bureautiques : traitements de texte, tableurs, présentations, diagrammes, dessins et base de données bureautique. 
	OpenDocument est la désignation d'usage d'un standard dont l'appellation officielle est OASIS Open Document Format for Office Applications, également abrégée par le sigle ODF.
	</para>
	<para>
	Un projet de feuille de style est en cours de réalisation (<ulink url="http://open.comsultia.com/docbook2odf/">docbook2odf</ulink>), celui-ci permet de transformet un 
	fichier docbook au format OpenDocument.
	</para>
	<para>
	Puis l'installer, à l'aide des commandes suivantes :
	</para>
	<para>
<programlisting format="linespecific">
# cd /usr/src
# svn co http://svn.comsultia.com/docbook2odf/trunk docbook2odf
# cd  docbook2odf
# make install
</programlisting>
	</para>
    </sect2>

    <sect2>
    	<title>Format Microsoft Office XML </title>
	<para>
	Depuis la version 2007 d'Office, Microsoft essaye d'introduire un nouveau format de fichier pour sa suite bureautique. 
	Ce format à l'avantage d'être basé sur XML et d'être probablement documenté. 
	</para>
	<para>
	Pour lire ce format avec les anciennes version de Micrsoft Office (XP, 2003, etc...), il faut installer le 
	<ulink url="http://www.microsoft.com/downloads/details.aspx?FamilyId=941b3470-3ae9-4aee-8f43-c6bb74cd1466">Microsoft Office Compatibility Pack</ulink>.
	</para>
	<para>
	Il est possible de produire des documents au format WordML à l'aide des feuilles de style Docbook, 
	pour cela il faut modifier la configuration de Cocoon et ajoutés les lignes suivantes dans votre fichier de configuration sitemap.xmap :
	</para>
<para>
<programlisting format="linespecific">


&lt;!-- Définition du serialiser --&gt;
&lt;map:serializers&gt;
...
	&lt;map:serializer name="docx" 
		mime-type="application/vnd.openxmlformats-officedocument.wordprocessingml.document" 
		src="org.apache.cocoon.components.serializers.XMLSerializer"/&gt;
...
&lt;/map:serializers&gt;

&lt;!-- Transformation des documents XML en WordML a l'aide des feuilles de style de Norman Waslh --&gt;
&lt;map:match pattern="**.docx"&gt;
        &lt;map:generate src="http://svn.csquad.org/cocoon/{1}.xml"/&gt;
        &lt;map:transform src="/usr/share/xml/docbook/stylesheet/nwalsh/wordml/docbook.xsl"&gt;
                &lt;map:parameter name="wordml.template" value="/usr/share/xml/docbook/stylesheet/nwalsh/wordml/template.xml"/&gt;
        &lt;/map:transform&gt;
        &lt;map:serialize type="docx"/&gt;
&lt;/map:match&gt;


</programlisting>
	</para>
	<para>
	Pour un document simple, cela fonctionne parfaitement, en revenche pour un document 
	un peu plus complexe (tableaux, images, etc ...), le résultat final n'est pas garantie.
	</para>
    </sect2>

    <sect2>
    	<title>Paramètrage des feuilles de style</title>
	<para>
        Les feuilles de style XSLT de Norman Waslh, disposent de nombreuses options 
        permettant de contrôler la mise en forme des documents :
	<ulink url="http://www.sagehill.net/docbookxsl/OptionsPart.html">http://www.sagehill.net/docbookxsl/OptionsPart.html</ulink>.
	Pour utiliser ces options, il est possible de procéder de plusieurs manières :
	</para>
    <sect3>
        <title>En passant directement les options dans le fichier sitemap.xmap</title>
        <para>
            De la manière suivante :
<programlisting format="linespecific">

&lt;map:transform src="...xsl"&gt;
    &lt;map:parameter name='nom1' value='valuer1'/&gt;
    &lt;map:parameter name='nom2' value='valuer2'/&gt;
    &lt;map:parameter name='nom3' value='valuer3'/&gt;
    ...
&lt;/map:transform&gt;

</programlisting>
        </para>
    </sect3>
    <sect3>
        <title>En utilisant une feuille de style</title>
        <para>
            En utilisant une autre feuille de style, comme d'écrit dans la documentation de docbook :
            <ulink url="http://sagehill.net/docbookxsl/ParametersInFile.html">Parameters in a file</ulink>
        </para>
    </sect3>
    </sect2>
</sect1>
    
<sect1>
    <title>Sécurité</title>
    <sect2>
    	<title>Protection du dépôt Subversion</title>
    <para>Au niveau de la sécurité du système, il faut protéger principalement l'accès au dépôt subversion.</para>
    <para>Pour cela, il suffit de protéger l'accès par mot de passe et de le limiter à votre réseau en modifiant le fichier de configuration du site Web :</para>
    <para>
<programlisting format="linespecific">

  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/svn.htpasswd

  # Authorise l'accès seulement au réseau local (pour la publication) 
  # et à la machine locale (pour les transformations avec cocoon)

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
  Allow from 192.168.0.0/24

  # Demande l'authentification que pour les opérations d'écriture
  &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
    Require valid-user
  &lt;/LimitExcept&gt;

</programlisting>
    </para>
    <para>
    Puis créer le fichier de mot de passe pour vos utilisateurs :
    </para>
    <para>
<programlisting format="linespecific">

# htpasswd -c /etc/apache2/svn.htpasswd user
New password:
Re-type new password:
Adding password for user user

</programlisting>
    </para>
    </sect2>
</sect1>

<sect1>
    <title>Performances</title>
    <para>
        Ce système de publication de contenu n'est pas destiné à des sites à forte fréquentation, car les transformations XSLT et les feuilles de style utilisées sont très complexes. Elle nécessitent des ressources importantes au niveau du processeur et de la mémoire. Néanmoins, mon site fonctionne parfaitement sur une machine très modeste : VIA Mini ITX C3 600Mhz et 512Mo de mémoire. La plupart des optimisations doivent se faire un niveau de l'utilisation mémoire de Java et de la gestion du cache de Cocoon.
    </para>
    <sect2>
    	<title>Gestion de la mémoire</title>
	<para>
        Pour configurer la gestion de la mémoire, il faut éditer la variable CATALINA_OPTS du fichier 
        <filename moreinfo="none">/etc/default/tomcat5</filename>.</para>
    <para>
	Il faut choisir la bonne configuration en fonction de la quantité de mémoire disponible sur votre serveur.
	Pour vous aider, je vous invite à vous consulter le document suivant : 
	<ulink url="http://java.sun.com/performance/reference/whitepapers/tuning.html">Java Tuning White Paper</ulink>
	</para>
    </sect2>
    <sect2>
    	<title>Optimisation de la configuration de Cocoon</title>
	<para>Il y'a plusieurs options interessantes dans le fichier <filename moreinfo="none">cocoon.xconf</filename> qui se trouve dans le répertoire 
        <filename moreinfo="none">/var/lib/tomcat5/webapps/cocoon/WEB-INF</filename></para>
	<para>
	<table frame="all">
        <title>Liste des options à modifier dans le fichier cocoon.xconf</title>
        <tgroup cols="2" align="left" colsep="1" rowsep="1">
        <colspec colwidth="3cm"/>
        <colspec align="center" colwidth="1cm"/>
        <thead>
        <row>
            <entry>Option</entry>
            <entry>Valeur</entry>
        </row>
        </thead>
        <tbody>
        <row>
            <entry>sitemap check-reload</entry>
            <entry>no</entry>
        </row>
        </tbody>
	</tgroup>
        </table>

	</para>
    </sect2>
    <sect2>
    	<title>Gestion du cache dans le fichier sitemap.xmap</title>
	<para>
        La récupèration du fichier source XML à partir du dépôt 
        est une opération récurrente, qu'il est possible d'optimiser 
        à l'aide de la gestion du cache.
    </para>
    <para>
		Pour cela, il faut modifié la déclaration de 
		la source est ajouté le préfix cached, comme ceux-ci :
	</para>
	<para>
<programlisting format="linespecific">

	&lt;map:generate src="cached:http://svn.csquad.org/cocoon/{1}.xml"/&gt;

</programlisting>
	</para>
    </sect2>
    <sect2>
    	<title>Benchmark rapide</title>
	<para>Voici la sortie de logiciel Apache Benchmark :</para>
	<para>
<programlisting format="linespecific">

$ab -n 100 -c 5 http://www.csquad.org/cocoon/trunk/cocoon/cocoon.html
This is ApacheBench, Version 2.0.40-dev &lt;$Revision: 1.146 $&gt; apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.csquad.org (be patient).....done


Server Software:        Apache/2.2.3
Server Hostname:        www.csquad.org
Server Port:            80

Document Path:          /cocoon/trunk/cocoon/cocoon.html
Document Length:        47673 bytes

Concurrency Level:      5
Time taken for tests:   5.586575 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      4806200 bytes
HTML transferred:       4767300 bytes
Requests per second:    17.90 [#/sec] (mean)
Time per request:       279.329 [ms] (mean)
Time per request:       55.866 [ms] (mean, across all concurrent requests)
Transfer rate:          840.05 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:    69  187 533.3    111    5426
Waiting:       45  155 534.6     79    5412
Total:         69  187 533.3    111    5426

Percentage of the requests served within a certain time (ms)
  50%    111
  66%    126
  75%    145
  80%    154
  90%    216
  95%    341
  98%    426
  99%   5426
 100%   5426 (longest request)

</programlisting>
	</para>
    <para>Comme on peux le voir, la 1ère requête, qui n'est pas mise en cache, est assez longue (5500 ms) 
    et les autres requêtes sont bien plus rapides.</para>
    </sect2>
</sect1>

<sect1>
    <title>Pour aller plus loin</title>
    <para>Voici décrites rapidement quelques idées d'améliorations et d'évolutions du système</para>
    <sect2><title>Validation de la structure du fichier XML lors d'un commit</title>
    <para>
        Le système de gestion d'événements ("Hooks") de Subversion permet d'exécuter des actions sur                    
        le serveur lorsqu'une opération est réalisée sur le dépôt. Via ce système, il est possible de
        valider le contenu des fichiers XML par rapport à la DTD Docbook et de refuser automatiquement  
        les fichiers qui ne sont pas formatés correctement.        
    </para>
    </sect2>
    <sect2><title>Création automatique de l'historique des révisions d'un document</title>
    <para>
        Docbook permet de décrire, l'historique des révisions d'un document 
        à l'aide du tag 
        <ulink url="http://www.oasis-open.org/docbook/documentation/reference/html/revhistory.html">revhistory</ulink>.
        Ces informations sont directement disponibles dans le dêpot Subversion, 
        il serait intérressant de les exploiter automatiquement.
    </para>
    </sect2>
</sect1>

</article>