<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//UR1//DTD docbookAllegeEsup//FR"
"http://www.esup-portail.org/consortium/espace/docbook/xxe/dtd/docbook_allege_esup.dtd">
<article lang="FR">
  <title>Moteur de rendu inJAC</title>

  <subtitle>Installation</subtitle>

  <section>
    <title>Pré-requis</title>

    <para><emphasis role="bold">Sur la machine de dépoiement ou sur d'autres
    machines :</emphasis></para>

    <para>Le moteur de rendu inJac est le rendu d'un espace de publication
    Webdav, il dépends donc d'Esup-Portail, du Canal de Stockage et du serveur
    Webdav.</para>

    <para>En outre, l'accés authentifié nécessite l'installation d'un serveur
    CAS(CAS server with CAS GH ou CAS QuickStart). Tous sont disponibles sur
    l'espace de téléchargement , respectivement dans les sections 'Espace de
    Stockage' et 'SSO'.</para>

    <para>Ceux-ci doivent être déployés, soit sur la même machine, soit sur
    des machines accessibles par réseau à la machine sur laquelle est déployée
    l'application.</para>

    <para><emphasis role="bold">Sur la machine de déploiement du moteur de
    rendu :</emphasis></para>

    <para>Sur la machine de déploiement doivent être installés un
    environnement Java (JRE ou JDK), version 1.4.2 ou supérieur, ainsi qu'un
    moteur de servlet/jsp (TOMCAT 5.0.28 ou supérieur).</para>

    <para>Sous <emphasis role="bold">Linux</emphasis>, cette application
    nécessite d'installer les librairies X, et lors du lancement de la jvm
    d'ajouter le paramètre :</para>

    <para><emphasis>-Djava.awt.headless=true</emphasis></para>

    <para>Sous Windows 98/2000/XP, aucune configuration supplémentaire n'est
    requise.</para>

    <para><remark>Note : L'application n'a pas été testée sous Windows XP
    Edition 64 bits.</remark></para>
  </section>

  <section>
    <title>Installation</title>

    <section>
      <title>deployer l'application</title>

      <para>Pour déployer le moteur de rendu inJAC, il suffit de décompresser
      l'archive dans un moteur de servlet. Pour Tomcat, l'application peut
      être déployée dans le répertoire <emphasis
      role="bold">/webapps.</emphasis></para>
    </section>

    <section>
      <title>Configuration générale</title>

      <para>Une fois déployée, l'application se configure en éditant le
      fichier <filename>iconf.xml</filename> dans le répertoire
      <emphasis>injac/conf.</emphasis></para>

      <para></para>

      <itemizedlist>
        <listitem>
          <para>Les URL</para>

          <para><programlisting>&lt;!-- Webdav (hostname+port+path)  authentified mode --&gt;
 &lt;webdav&gt;<emphasis role="bold">slide-priv.enseeiht.fr:8080</emphasis>/slide/files/injac/injacRoot&lt;/webdav&gt;
 &lt;!-- URL Webdav (hostname+port+path) public mode --&gt;
 &lt;anon-webdav&gt;<emphasis role="bold">slide-pub.enseeiht.fr:8080</emphasis>/slide/files/injac/injacRoot&lt;/anon-webdav&gt;
 &lt;casURL&gt;https://cas.enseeiht.fr:8443/cas&lt;/casURL&gt;
 &lt;!-- URL of Injac application (don't use 'localhost', but DNS or IP--&gt;
 &lt;baseURL&gt;http://saroumane.enseeiht.fr:810/injac&lt;/baseURL&gt;
 &lt;!-- URL of Injac-indexing application (don't use 'localhost', but DNS or IP--&gt;
 &lt;indexingURL&gt;http://saroumane.enseeiht.fr:810/injac-indexing&lt;/indexingURL&gt;
</programlisting></para>

          <para><emphasis role="bold">&lt;webdav&gt;</emphasis> et <emphasis
          role="bold">&lt;anon-webdav&gt;</emphasis> Avant toute chose, vous
          devez définir les url du serveur Webdav, ainsi que l'url de votre
          application Injac. Pour gérer les deux mode d'accés, public et avec
          identification, deux url distinctes sont nécessaires, avec deux
          <emphasis>hostnames</emphasis> différents, un pour chaque mode. Ces
          <emphasis>hotsnames</emphasis> doivent correspondre à ceux définis
          dans les filtres "TRUSTED" et "ANON" du serveur Webdav (fichier
          <filename>web.xml</filename> de l'application Slide) :</para>

          <para><programlisting>&lt;filter&gt;
&lt;filter-name&gt;authenticationRouter&lt;/filter-name&gt;

...

&lt;!-- TRUSTED --&gt;

&lt;init-param&gt;
&lt;param-name&gt;org.esupportail.filter.authenticationRouter.destinationHostTRUSTED&lt;/param-name&gt;
&lt;param-value&gt;<emphasis role="bold">slide-priv.enseeiht.fr:8080</emphasis>&lt;/param-value&gt;
&lt;/init-param&gt;

&lt;!-- UNAUTHENTICATED --&gt;

&lt;init-param&gt;
&lt;param-name&gt;org.esupportail.filter.authenticationRouter.destinationHostUNAUTHENTICATED&lt;/param-name&gt;
&lt;param-value&gt;<emphasis role="bold">slide-pub.enseeiht.fr:8080</emphasis>&lt;/param-value&gt;
&lt;/init-param&gt;

...

&lt;/filter&gt;</programlisting></para>

          <para>Ces URLs doivent correspondre à celles définies dans
          iconf.xml(voir plus haut caractères gras).</para>

          <para><emphasis role="bold">&lt;baseURL&gt;</emphasis> correspond à
          l'URL à laquelle le moteur de rendu va être accessible.</para>

          <para><emphasis role="bold">&lt;indexingURL&gt;</emphasis>
          correspond à l'URL à laquelle le moteur de rendu va être
          accessible.</para>
        </listitem>

        <listitem>
          <para>Espace racine</para>

          <para><emphasis role="bold">&lt;upnode&gt;</emphasis> est le nom
          WEBDAV du répertoire racine de l'arborescence de navigation. Il
          correspond <emphasis role="bold">impérativement</emphasis> au
          dernier élément des URL WEBDAV définies plus haut. <emphasis
          role="bold">&lt;display-upnode&gt;</emphasis> est le nom affiché
          pour ce répertoire racine.</para>
        </listitem>

        <listitem>
          <para>Paramètre d'affichage et d'accessibilité</para>

          <para><emphasis
          role="bold">&lt;enable-external-preview&gt;</emphasis> booléen pour
          autoriser ou non la prévisualisation de documents dont le rendu est
          externe(Word, Open Office, RTF, PDF...).</para>

          <para><emphasis role="bold">&lt;trustedpw&gt;</emphasis> mot de
          passe TRUSTED pour la connexion au serveur Webdav(doit être le même
          que celui défini dans le filtre TRUSTED du serveur WEBDAV.</para>

          <para><emphasis role="bold">&lt;locale&gt;</emphasis> langue
          utilisée pour la navigation. Les langues implémentées dans cette
          version sont le français(fr) et l'anglais(en). (Pour configurer le
          module de traduction, se reporter à la section Localisation.)</para>

          <para><emphasis role="bold">&lt;access mode&gt;</emphasis> mode
          d'accès au moteur de rendu :</para>

          <para><itemizedlist>
              <listitem>
                <para>public : seul l'accès anonyme est utilisé. Pas de lien
                pour s'authentifier.</para>
              </listitem>

              <listitem>
                <para>private : seul l'accès authentifié est utilisé. Pas
                d'accès anonyme.</para>
              </listitem>

              <listitem>
                <para>mixed : les deux modes sont accessibles.</para>
              </listitem>
            </itemizedlist>(public|private|mixed)</para>

          <para><emphasis role="bold">&lt;errorsheet&gt;</emphasis> Feuille
          utilisée pour signifier les erreurs. A changer uniquement pour le
          deboggage.</para>
        </listitem>

        <listitem>
          <para>Paramètres liés aux métadonnées WEBDAV (<emphasis
          role="bold">configuration avancée</emphasis>)</para>

          <para>Ces paramètres assurent l'interfaçage avec le Canal de
          stockage. Les valeurs par défaut correspondent à la version courante
          de ce dernier, contemporaine de la sortie de ce package. <emphasis
          role="bold">Ne pas toucher sauf en pleine connaissance de cause
          !</emphasis></para>
        </listitem>
      </itemizedlist>
    </section>

    <section>
      <title>Configuration du filtre CAS</title>

      <para>L'accés authentifié se fait par l'intermédiaire d'un filtre java,
      à l'aide d'un jeu d'URL qui se paramètrent dans le fichier web.xml
      d'inJAC (<filename>injac/WEB-INF/web.xm</filename>l) :</para>

      <para><programlisting>&lt;!-- CAS FILTER --&gt;
&lt;filter&gt;
&lt;filter-name&gt;Filtre CAS&lt;/filter-name&gt;
&lt;filter-class&gt;edu.yale.its.tp.cas.client.filter.CASFilter&lt;/filter-class&gt;
&lt;init-param&gt;
&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.loginUrl&lt;/param-name&gt;
&lt;param-value&gt;https://<emphasis role="bold">cas.enseeiht.fr</emphasis>:8443/cas/login&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;init-param&gt;
&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.validateUrl&lt;/param-name&gt; &lt;!--serviceValidate--&gt;
&lt;param-value&gt;https://<emphasis role="bold">cas.enseeiht.fr</emphasis>:8443/cas/serviceValidate&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;init-param&gt;
&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.proxyCallBackURL&lt;/param-name&gt;
&lt;param-value&gt;https://<emphasis role="bold">saroumane.enseeiht.fr</emphasis>:8443/injac/CasProxyServlet&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;init-param&gt;
&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.serverName&lt;/param-name&gt;
&lt;param-value&gt;<emphasis role="bold">saroumane.enseeiht.fr</emphasis>&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
&lt;filter-name&gt;Filtre CAS&lt;/filter-name&gt;
&lt;url-pattern&gt;/injac/auth/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;
&lt;!-- CAS FILTER --&gt;</programlisting>Dans cet exemple "<emphasis
      role="bold">cas.enseeiht.f</emphasis>r" est le hostname de l'application
      CAS, et "<emphasis role="bold">saroumane.enseeiht.fr</emphasis>" celui
      où est déployé Injac.</para>
    </section>

    <section>
      <title>Configuration avancée</title>

      <para><itemizedlist>
          <listitem>
            <para>Options de rechargement de Cocoon ou du sitemap</para>

            <para>Une url permet forcer le rechargement de Cocoon aprés par
            exemple une modification de xconf.conf :
            http://localhost:8080/injac?cocoon-reload=true Note: Chaque fois
            que je l'ai testée, elle a fait planter la servlet Cocoon. En mode
            développement ce n'est pas gênant, mais en production, il ne faut
            pas oublier de le désactiver dans injac/WEB-INF/web.xml:</para>

            <para><programlisting>&lt;!--
   Allow reinstantiating (reloading) of the cocoon instance. If this is
   set to "yes" or "true", a new cocoon instance can be created using
   the request parameter "cocoon-reload"
.--&gt;
&lt;init-param&gt;
  &lt;param-name&gt;allow-reload&lt;/param-name&gt;
  &lt;param-value&gt;<emphasis role="bold">no</emphasis>&lt;/param-value&gt;
&lt;/init-param&gt;</programlisting></para>

            <para>En outre, le rechargement du sitemap peut aussi être
            configuré dans cocoon.xconf à la dernière ligne :<programlisting>&lt;sitemap file="sitemap.xmap" reload-method="asynchron" check-reload="yes"/&gt;</programlisting></para>
          </listitem>

          <listitem>
            <para>Configuration mémoire de Tomcat</para>

            <para>Cocoon nécessite un minimum de 128M pour fonctionner
            correctement, sachant que rien qu'au lancement 75mo sont utilisés,
            et le maximum reste dépendant du nombre d'utilisateurs. Il faut
            donc indiquer à la jvm que le servlet container doit se lancer
            avec les options -Xms128m -Xmx256(min et max de mémoire) : Dans le
            répertoire {$CATALINA_HOME}/bin, editer le fichier catalina.bat
            et/ou catalina.sh, et chercher la variable CATALINA_OPTS, et lui
            rajouter les options -Xms128m -Xmx256 : catalina.bat : set
            CATALINA_OPTS=-<emphasis role="bold">Xms128m -Xmx256m</emphasis>
            -server</para>

            <para>catalina.sh : CATALINA_OPTS="-<emphasis role="bold">Xms128m
            -Xmx256m</emphasis> $CATALINA_OPTS"</para>
          </listitem>
        </itemizedlist></para>
    </section>

    <section>
      <title>Niveau de débogage</title>

      <para>Le niveau de débogage peut être modifier en éditant le fichier
      WEB-INF\classes\log4j.properties. Les niveaux disponibles sont :
      <emphasis role="bold">debug</emphasis>, <emphasis
      role="bold">info</emphasis>, <emphasis role="bold">warn</emphasis>,
      <emphasis role="bold">error</emphasis> et <emphasis
      role="bold">fatal</emphasis>, du plus prolixe au plus concis.</para>

      <para>Note : il faut également adapter le chemin du fichier de log, à la
      ligne :</para>

      <para><programlisting>log4j.appender.R.File=F:/logs/injac.log</programlisting></para>
    </section>
  </section>

  <section>
    <title>Personnalisation</title>

    <para>Le moteur de rendu inJAC offre la possibilité d'adapter l'apparence
    du rendu(notion de <emphasis>skin</emphasis>), mais également de
    personnaliser la langue utilisée, gràce au module I18N utilisé dans le
    framework Cocoon.</para>

    <section>
      <title>Personnalisation du rendu</title>

      <para>La personnalisation se fait à travers deux fichiers associés :
      <itemizedlist>
          <listitem>
            <para>un fichier de <emphasis>skin</emphasis></para>

            <para>Il définit des options du contenu du rendu(liens, logos,
            recherche).</para>

            <para><emphasis role="bold">Emplacement</emphasis> : le
            sous-répertoire <filename>injac/xml/skins</filename>.</para>

            <para> Le fichier <filename>skin.xml.template</filename> sert de
            modèle auquel se réferrer pour construire d'autres
            fichiers.</para>
          </listitem>

          <listitem>
            <para>une feuille CSS</para>

            <para>Elle gère l'aspect graphique du rendu (couleurs,
            disposition, images...).</para>

            <para><emphasis role="bold">Emplacement</emphasis> : le
            sous-répertoire <filename>injac/stylesheets/xsl</filename>.</para>

            <para>Le fichier <filename>skin-esup1.css peut</filename> servir
            de modèle auquel se réferrer pour construire d'autres
            fichiers.</para>
          </listitem>
        </itemizedlist>C'est à travers l'edition des metadonnées lors de la
      création ou de l'administration d'un espace par le <emphasis
      role="bold">Canal de Stockage</emphasis> que l'administrateur d'espace
      choisit le skin :</para>

      <para><mediaobject>
          <imageobject>
            <imagedata fileref="media/adminskin.jpg"></imagedata>
          </imageobject>
        </mediaobject>Le <emphasis role="bold">choix d'un skin</emphasis> dans
      le Canal détermine l'utilisation, dans le moteur de rendu, des<emphasis
      role="bold"> fichiers XML et CSS</emphasis> correspondant, qui doivent
      impérativement <emphasis role="bold">porter le même nom</emphasis> (sauf
      l'extension, bien sûr).</para>

      <para>Une liste des skins doit donc être renseignée dans le fichier de
      configuration du Canal, <filename>properties/injac/injac.xml</filename>,
      sous la forme :<programlisting>&lt;RENDERINGS&gt;
   &lt;RENDERING
      skinFile="skin-esup1.xml"
      label="ESUP 1"
   /&gt;
   &lt;RENDERING
      skinFile="skin-esup2.xml"
      label="ESUP 2"
   /&gt;
   &lt;RENDERING
      skinFile="skin-esup-doc.xml"
      label="Documentation ESUP"
   /&gt;
   &lt;RENDERING
      skinFile="skin-valenciennes.xml"
      label="Université de Valencienne"
   /&gt;
&lt;RENDERINGS&gt;</programlisting></para>

      <itemizedlist>
        <listitem>
          <para>Description du fichier de <emphasis>skin</emphasis></para>

          <para>Le skin est un fichier xml qui permet de définir
          principalement le <emphasis role="bold">contenu</emphasis> du rendu
          d'un espace inJac :: les images et liens que l'ont veut rajouter,
          les éléments optionnels tels que recherche, RSS, contenus isssus de
          base de données.</para>

          <para>Voici un squelette de fichier skin, montrant les éléments de
          type contenu :</para>

          <para><programlisting>&lt;skin&gt; 
   &lt;header&gt; <emphasis role="bold">Entête</emphasis> 
      &lt;logos/&gt; <emphasis role="bold">Image(s)</emphasis>
      &lt;links /&gt; <emphasis role="bold">Liens</emphasis>
   &lt;/header&gt;
   &lt;navbar/&gt; <emphasis role="bold">Barre de navigation</emphasis> 
   &lt;navpan/&gt; <emphasis role="bold">Panneau de navigation</emphasis>
   &lt;doc/&gt; Document 
   &lt;tools&gt; <emphasis role="bold">Outils divers : lucene, RSS</emphasis> 
      &lt;tool/&gt;
   &lt;/tools&gt;
   &lt;footer&gt; <emphasis role="bold">Pied-de-page</emphasis> 
      &lt;validators&gt; <emphasis role="bold">Validateurs CSS, HTML, XHTML</emphasis> 
        &lt;validator/&gt;
      &lt;/validators&gt;
   &lt;/footer&gt;
&lt;/skin&gt;</programlisting></para>
        </listitem>

        <listitem>
          <para>Description du fichier CSS</para>

          <para>Le fichier CSS sert à habiller le contenu avec des <emphasis
          role="bold">éléments de style</emphasis> : fontes, couleurs, images
          de fond...</para>

          <para>Les classes et identifiants insérés dans le code HTML sont
          affectés à ces éléments de style par le feuille CSS, et il suffit
          donc de changer les styles associés à chaque nom de ces classes et
          identifiants pour personnaliser librement l'apparence.</para>

          <para>Voici une liste arborescente montrant l'inclusion de ces noms
          et leur correspondance avec un élément du contenu. Pour chaque point
          d'arborescence, le premier mot représente la balise HTML, et le
          deuxième la classe (<emphasis role="bold">.</emphasis>) ou
          l'identifiant (<emphasis role="bold">#</emphasis>) CSS :</para>

          <para><itemizedlist>
              <listitem>
                <para>div #page</para>

                <para><itemizedlist>
                    <listitem>
                      <para>div #header (en-tête)</para>

                      <para><itemizedlist>
                          <listitem>
                            <para>div #headerLinks (liens de l'entête)</para>
                          </listitem>
                        </itemizedlist></para>
                    </listitem>

                    <listitem>
                      <para>div #welcome (bienvenue utilisateur)</para>
                    </listitem>

                    <listitem>
                      <para>div #login (lien pour l'authentification)</para>
                    </listitem>

                    <listitem>
                      <para>div #menu</para>

                      <para><itemizedlist>
                          <listitem>
                            <para>div #navbar (barre de navigation)</para>
                          </listitem>

                          <listitem>
                            <para>div #sectionMenu</para>

                            <para><itemizedlist>
                                <listitem>
                                  <para>div #iNavPan (panneau de
                                  navigation)<itemizedlist>
                                      <listitem>
                                        <para>h2 (titre)</para>
                                      </listitem>

                                      <listitem>
                                        <para>ul .ispaces (espaces inJAC)</para>
                                      </listitem>

                                      <listitem>
                                        <para>ul .idocs (documents inJAC)</para>
                                      </listitem>
                                    </itemizedlist></para>
                                </listitem>

                                <listitem>
                                  <para>div #gentools (outils)</para>

                                  <para><itemizedlist>
                                      <listitem>
                                        <para>div .tool</para>
                                      </listitem>
                                    </itemizedlist></para>
                                </listitem>
                              </itemizedlist></para>
                          </listitem>
                        </itemizedlist></para>
                    </listitem>

                    <listitem>
                      <para>#iDocRender (zone de rendu centrale des
                      documents)<itemizedlist>
                          <listitem>
                            <para>div #iDocToPDF (lien pour la conversion
                            PDF)</para>
                          </listitem>
                        </itemizedlist></para>
                    </listitem>
                  </itemizedlist></para>
              </listitem>
            </itemizedlist>Deux skins principaux sont fournis avec le package
          :</para>

          <para><emphasis role="bold">skin-esup1 : </emphasis></para>

          <para><mediaobject>
              <imageobject>
                <imagedata align="center"
                fileref="media/skin-esup1.jpg"></imagedata>
              </imageobject>
            </mediaobject><emphasis role="bold">skin-esup2 :</emphasis></para>

          <para><mediaobject>
              <imageobject>
                <imagedata align="center"
                fileref="media/skin-esup2.jpg"></imagedata>
              </imageobject>
            </mediaobject></para>
        </listitem>
      </itemizedlist>
    </section>

    <section>
      <title>Localisation</title>

      <para>Le moteur de rendu inJAC permet un affichage dans différentes
      langues, et par défaut, l'anglais et le français sont supportés dans
      cette version.</para>

      <para>Cette traduction est assurée par le module <ulink
      url="http://cocoon.apache.org/2.1/userdocs/i18nTransformer.html">i18N</ulink>
      intégré à Cocoon.</para>

      <para>Pour sélectionner la langue d'affichage, il suffit d'indiquer une
      des deux valeurs suivantes pour le paramètre &lt;locale&gt; du fichier
      injac/conf/iconf.xml :</para>

      <para><itemizedlist>
          <listitem>
            <para>"en" pour l'anglais</para>
          </listitem>

          <listitem>
            <para>"fr" pour le français</para>
          </listitem>
        </itemizedlist>Les fichiers assurant la traduction se situent dans le
      répertoire injac/xml/messages.</para>

      <para>Le fichier pour le français : messages_fr.xml, pour l'anglais :
      messages_en.xml.</para>

      <para><emphasis role="bold">Remarque</emphasis> : Les cléfs pour la
      traduction sont en anglais, aussi le fichier messages_en.xml ne
      contient-il pas toutes les entrées, car la valeur de la clé est utilisée
      pour l'affichage par défaut du texte.</para>

      <para><mediaobject>
          <imageobject>
            <imagedata align="center" fileref="media/i18n.jpg"></imagedata>
          </imageobject>
        </mediaobject></para>

      <para>Les fichiers FormsMessages_**.xml sont les fichiers prédéfinis
      pour le framework de formulaires CForms.</para>

      <para>Les personnalisations de la langue concernent deux objectifs
      différents :</para>

      <para><itemizedlist>
          <listitem>
            <para>Compléter les dictionnaires anglais et français en
            rajoutant, par exemple, la traduction des nom des métadonnées pour
            la recherche avancée :</para>

            <para><programlisting>&lt;!-- METADATA FIELD NAMES --&gt;
  &lt;message key="gen_title"&gt;Général : titre (LOM)&lt;/message&gt;  </programlisting></para>

            <para>Cette ligne ajoutée au fichier messages_fr.xml permet de
            proposer un texte d'affichage différent de celui de la métadonnées
            WEBDAV, dans la page de recherche avancée :</para>

            <para><mediaobject>
                <imageobject>
                  <imagedata fileref="media/advsearch_i18n.jpg"></imagedata>
                </imageobject>
              </mediaobject></para>
          </listitem>

          <listitem>
            <para>Prendre en charge une nouvelle langue</para>

            <para>Pour implémenter une nouvelle langue, il faut créer et
            remplir un fichier messages_<emphasis
            role="bold">**</emphasis>.xml dans le répertoire
            <filename>injac/xml/messages</filename> en reprenant la liste des
            entrées définies dans messages_fr.xml. La valeur à renseigner pour
            le paramètre locale du fichier iconf.xml doit correspondre au
            <emphasis role="bold">**</emphasis>.</para>

            <para><mediaobject>
                <imageobject>
                  <imagedata fileref="media/messages_i18n.jpg"></imagedata>
                </imageobject>
              </mediaobject>La valeur des attributs <emphasis
            role="bold">key</emphasis> est reprise à l'identique, seule le
            contenu de la balise <emphasis
            role="bold">&lt;message&gt;</emphasis> change.</para>
          </listitem>
        </itemizedlist></para>
    </section>
  </section>
</article>