TP 4, 14/10/2009

Par Benoît Valiron <benoit.valiron [at] monoidal.net> et Jean Baptiste FADDOUL <jean-baptiste.faddoul [at] xrce.xerox.com>

Dans ce TP, vous allez devoir utiliser des outils de manipulation DocBook et XSL-FO. Une description de ces outils se trouve ici.

Place au TP.

  1. Reprendre la question 1 du TD 4 : écrivez le fichier XML ville.xml et le fichier DTD ville.dtd et validez avec le validateur. ATTENTION ! Il vous faut utiliser le validateur java .jar.

    Modifier le préfixe geo et assurez-vous d'être toujours capable de valider les documents.

    CORRECTION

    La deuxième partie de la question ne marchait pas, c'est ma faute. La première partie est ce que nous avions fait en TD :

    ville.xml

    <!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>
    

    ville.dtd

    <!ELEMENT ville (nom,geo:lat,geo:long)>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT geo:lat (#PCDATA)>
    <!ELEMENT geo:long (#PCDATA)>
    <!ATTLIST ville xmlns:geo CDATA #REQUIRED>
    <!ENTITY grenoble "Ma belle ville">
    

    Si on souhaite utiliser des entités paramètres, c'est un peu plus subtil. En effet, les entités paramètres ne peuvent apparaitre au milieu de mots XML. Voila donc la méthode :

    ville.dtd

    <-- Le préfixe -->
    
    <!ENTITY % pref "geo">
    
    <-- Les mots dont on a besoin -->
    
    <!ENTITY % preflat "%pref;:lat">
    <!ENTITY % preflong "%pref;:long">
    <!ENTITY % prefxmlns "xmlns:%pref;">
    
    <-- La DTD -->
    
    <!ELEMENT ville (nom , %preflat; , %preflong;)>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT %preflat; (#PCDATA)>
    <!ELEMENT %preflong; (#PCDATA)>
    <!ATTLIST ville %prefxmlns; CDATA #REQUIRED>
    <!ENTITY grenoble "Ma belle ville">
    

    On peut ensuite redéfinir l'entité paramètre pref comme on a dit :

    ville.xml

    <!DOCTYPE ville SYSTEM "ville.dtd" [
      <!ENTITY % pref "g">
    ]>
    <ville xmlns:g="http://www.w3.org/2003/01/geo/wgs84_pos#">
      <nom>&grenoble;</nom>
      <g:lat>45.196349</g:lat>
      <g:long>5.73226</g:long>
    </ville>
    
  2. Voici un document PDF. Reproduisez ce document en format docbook. Vous utiliserez la DTD simple-docbook.dtd pour construire et valider votre fichier. Pour vous aider à démarrer, vous pouvez bien sûr utiliser l'exemple donné en TD 4.

    Transformez le fichier docbook en XSL-FO puis en PDF, en suivant les instructions. Faites un document XHTML à partir du fichier DocBook.

    Si vous vous demandez d'où les lignes curieuses du PDF proviennent, elles ont été générées par l'outil en ligne Lorem Ipsum.

    Ajouter une section avec titre "Un symbole bizarre" et un paragraphe contenant le symbôle "±" (obtenu à l'aide de &#177;). Creez une entité générale &plusmoins; pour y faire référence et utilisez-là à la place. Recompilez le fichier.

    CORRECTION

    Correction : TP-4-doc-1.xml, qui compile en TP-4-doc-1.what.you.get.pdf en utilisant les outils donnés.

    Attention en ouvrant le fichier XML dans firefox : vous n'allez pas voir les balises <![CDATA[...]]>. Ouvrez-le plutôt dans un éditeur de texte.

  3. Dans cet exercice, vous allez construire un document XSL-FO et le compiler en format PDF.

    La DTD à utiliser est celle du TD 4 (modulo le changement de page-master-sequence à simple-page-master. Il semble que le format des deux éléments ne soit pas le même) :

    <!ELEMENT root (layout-master-set, page-sequence*)>
    <!ELEMENT layout-master-set (simple-page-master+)>
    
    <!ELEMENT simple-page-master (region-body)>
    <!ATTLIST simple-page-master 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"
    	color CDATA "black">
    

    On vous demande de produire :

    • Un titre, centré, police sans-serif, 18pt, gras, contenant le texte "XSL-FO"
    • Deux paragraphes justifiés, police serif, 12pt, contenant le texte

      XSL-FO (eXtensible Stylesheet Language - Formatting Objects) dans la recommandation XSL du W3C est le vocabulaire qui décrit les mises en forme de documents XML quel que soit le support : écran, papier, audio, etc.

      et

      XSL-FO s'adresse principalement aux typographes afin de fournir avec les outils de gestion de documents, un outil typographique du niveau attendu par les publications imprimées. Il n'est pas prévu que les documents originaux soient rédigés avec XSL-FO, mais plutôt dans des dialectes adaptés (XHTML, DocBook, TEI, etc.). Ils peuvent alors être convertis en XSL-FO à l'aide de XSLT, une autre composante de la recommandation XSL. Finalement, un processeur XSL-FO permet de générer les documents finaux (par exemple pages imprimables en PDF ou PostScript).

      Les mots "XSL-FO" seront mis en italique.

    • Un deuxième titre, aligné à gauche, en gras et en italique, 16pt, police sans-serif, disant "Je suis en italique".
    • Un dernier paragraphe de texte quelconque :

      Pellentesque rhoncus dignissim hendrerit. Praesent suscipit auctor rhoncus. Sed quis arcu risus, at eleifend odio. Proin vulputate, lectus sed facilisis pulvinar, libero purus vehicula felis, non iaculis augue elit sit amet tortor. Praesent aliquam egestas rutrum.

      comme les autres paragraphes.

    CORRECTION

    Correction : TP-4-doc-2.xml, qui compile en TP-4-doc-2.pdf en utilisant les outils donnés.