<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
  "/usr/share/xml/docbook/schema/dtd/4.4/docbookx.dtd">
<article>
  <articleinfo>
    <title>TD-4 : Entités, DocBook et XSL-FO</title>
    <author>
      <firstname>Benoît</firstname>
      <surname>Valiron</surname>
    </author>
  </articleinfo>

  <sect1>
    <title>Encore des entités</title>
    <subtitle>(reprise du TD 3)</subtitle>
    <para>
      Considérez le fichier XML suivant.
      <programlisting><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ville SYSTEM "ville.dtd">
<ville xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <nom>&grenoble;</nom>
  <geo:lat>45.196349</geo:lat>
  <geo:long>5.73226</geo:long>
</ville>
]]></programlisting>
      Si le fichier valide, que contient la DTD ?
    </para>
    <para>
      Même question, avec une entité paramètre pour le préfixe <code>geo</code>.
      Comment changeriez-vous l'appel à la DTD dans le fichier XML
      pour pouvoir changer de préfixe ?
    </para>
  </sect1>
  
  <sect1>
    <title>XSL-FO</title>
    
    <para>
      Voila une DTD simplifiée pour XSL-FO (la racine est <code>root</code>).
      <programlisting><![CDATA[<!ELEMENT root (layout-master-set, page-sequence*)>
<!ELEMENT layout-master-set (page-master-sequence+)>
<!ELEMENT page-master-sequence (region-body)>
<!ATTLIST page-master-sequence master-name   ID    #REQUIRED
                               page-height   CDATA #REQUIRED
                               page-width    CDATA #REQUIRED
                               margin-top    CDATA #REQUIRED
                               margin-bottom CDATA #REQUIRED
                               margin-left   CDATA #REQUIRED
                               margin-right  CDATA #REQUIRED>
<!ELEMENT region-body EMPTY>
<!ATTLIST region-body region-name ID #REQUIRED>

<!ELEMENT page-sequence (flow)>
<!ATTLIST page-sequence master-reference IDREF # REQUIRED>

<!ELEMENT flow (block+)>
<!ATTLIST flow flow-name IDREF #REQUIRED>

<!ELEMENT block (#PCDATA | inline)*>
<!ATTLIST block font-family  CDATA #REQUIRED
                font-size    CDATA #REQUIRED
                font-weight  (normal|bold) "normal"
                font-style   (normal|italic) "normal"
                text-align   (left|right|center|justify) "left"
                color        CDATA "black">
<!ELEMENT inline (#PCDATA)>
<!ATTLIST inline font-family  CDATA #REQUIRED
                 font-size    CDATA #REQUIRED
                 font-weight  (normal|bold) "normal"
                 font-style   (normal|italic) "normal"
                 text-align   (left|right|center|justify) "left"
                 color        CDATA "black">
]]></programlisting>
      On vous demande de concevoir une page de texte A4 avec des marges de 1cm.
      Vous placerez un titre de police Helvetica, 
      centré, de taille 18pt "Titre", un sous-titre de même police mais de taille 14pt disant "Auteur" et un paragraphe de texte justifié,
      de taille 12pt, en police "Times" 
      disant "ceci est un mot en rouge". Le mot "mot" sera mis 
      en gras et en rouge.
    </para>
  </sect1>


  <sect1>
    <title>DocBook</title>
    <para>
      Voila un document DocBook simple.
      <programlisting><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PRIVATE 
    "/usr/share/xml/docbook/schema/dtd/4.4/docbookx.dtd">
<article>
  <articleinfo>
    <title>Titre</title>
    <author>
      <firstname>Prénom auteur</firstname>
      <surname>Nom-auteur</surname>
    </author>
  </articleinfo>

  <sect1>
    <title>Titre de section</title>
    <para>
    Ceci est un <emphasis>mot</emphasis> emphasé.
    </para>
  </sect1>
</article>]]></programlisting>
      Écrivez une DTD simple pour ce document.
    </para>
    <para>
      Comparez avec le même texte en XSL-FO. En TP, vous allez 
      utiliser un outils de conversion automatique de DocBook en 
      XSL-FO puis de XSL-FO vers PDF.
    </para>
    <para>
      On veut rajouter une section de titre "Un symbole", avec un paragraphe contenant la chaine de caractère "&#177;" (caractère unicode numéro 177).
      Où le texte sera-t-il placé ? Écrivez la partie manquante.
    </para>
    <para>
      Maintenant, on veut définir une entité &amp;plusmoins;
      pour faire appel au caractère spécial. Comment faire ? 
    </para>
  </sect1>
  
  <sect1>
  <title>Encore des DTDs</title>
  <para>
    Le moteur de recherche google propose un service aux webmasters pour l'indexation : les sitemaps. Il s'agit d'un format XML pour donner des informations succintes au robot d'indexation sur les pages qu'il peut rencontrer.
    Le format est le suivant (pris sur wikipedia) :
    <itemizedlist>
    <listitem><para>
    Élément <code>&lt;urlset&gt;</code>. Obligatoire. Racine du document.
    </para></listitem>
    <listitem><para>
    Élément <code>&lt;url&gt;</code>. Obligatoire. Élément parent pour chaque entrée.
    Les éléments restant sont tous fils de cet élément.
    </para></listitem>
    <listitem><para>
    Élément <code>&lt;loc&gt;</code>. Obligatoire. Contient l'adresse internet d'une page, incluant le protocole (<code>http://</code> ou <code>https://</code>). Doit faire au maximum 2048 caractères de long.
    </para></listitem>
    <listitem><para>
    Élément <code>&lt;lastmod&gt;</code>. Facultatif. La date de dernière modification du fichier, en format ISO ou plus simplement YYYY-MM-DD.
    </para></listitem>
    <listitem><para>
    Élément <code>&lt;changefreq&gt;</code>. Facultatif. Fréquence à laquelle la page est modifiée en générale : <code>always</code>, <code>hourly</code>, <code>daily</code>, <code>weekly</code>, <code>monthly</code>, <code>yearly</code>, <code>never</code>.
    </para></listitem>
    <listitem><para>
Élément <code>&lt;priority&gt;</code>. Facultatif. L'importance relative de cette page par rapport aux autres. Valeur entre 0.0 et 1.0, valeur par défaut de 0.5.
    </para></listitem>
    </itemizedlist>
  </para>
  <para>
  Écrivez une DTD pour ce format, puis un document simple pour un site avec 3 pages : une page d'accueil à <code>http://www.mon-site.com</code>, changeant tous les jours ; une page <code>http://www.mon-site.com/infos.html</code>, ne changeant jamais ; une page <code>http://www.mon-site.com/doc.html</code>, changeant tous les mois.
  </para>
  <para>
  On souhaite modifier le format pour que les informations contenues dans les éléments <code>loc</code>, <code>lastmod</code>, <code>changefreq</code> et <code>priority</code> soient maintenant attributs de <code>url</code>.
  Comment changeriez-vous la DTD ?
  </para>
  <para>
  Les DTDs empêchent-elles l'écriture de documents sitemap non traitables par le robot d'indexation ?
  </para>
  </sect1>
</article>
