<?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-5 : Relax-NG</title>
    <author>
      <firstname>Benoît</firstname>
      <surname>Valiron</surname>
    </author>
  </articleinfo>

  <sect1>
    <title>Document simple</title>
    <para>
      L'information à représenter est la suivante: un relevé météo (racine <code>météo</code>) 
      comprend le nom de la ville où le relevé a été effectué (élément <code>ville</code>),
      la date (élément <code>date</code>), les températures 
      <code>temperatureMin</code> et <code>temperatureMax</code>.
    </para>
    <para>
      Écrivez un fichier XML suivant ce format pour la ville de Grenoble,
      le 15 octobre, avec des températures entre 10 et 15 degrés celsius.
    </para>
    <para>
      Écrivez un fichier DTD et une feuille de validation Relax-NG (XML et compacte)
      pour ce format.
    </para>
    
    <para>
      Faites la même chose, en plaçant toutes les informations en attributs : l'élément
      <code>météo</code> est maintenant vide mais contient 4 attributs <code>ville</code>, 
      <code>date</code>,
      <code>temperatureMin</code> et <code>temperatureMax</code>.
    </para>
    
  </sect1>
  
  <sect1>
    <title>DTD vers Relax NG</title>
    
    <para>
      Voila une DTD.
      <programlisting><![CDATA[<!ELEMENT flux (title, description, item+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT item (title?,description)*>
<!ATTLIST flux lang CDATA #IMPLIED>
<!ATTLIST item date CDATA #REQUIRED>
]]></programlisting>
      Écrivez la feuille de validation Relax-NG en format compacte et en
      format XML.
    </para>
  </sect1>
  
  <sect1>
    <title>Relax-NG vers DTD</title>
    <para>
      Voila une feuille de validation Relax-NG
      <programlisting><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<element name="catalogue"
         xmlns="http://relaxng.org/ns/structure/1.0">
  <element name="boutique">
    <element name="nom">
      <text/>
    </element>
    <optional>
      <element name="adresse">
        <text/>
      </element>
    </optional>
  </element>
  <oneOrMore>
    <element name="categorie">
      <attribute name="nom"/>
      <zeroOrMore>
        <element name="pièce">
          <choice>
            <interleave>
              <element name="nom">
                <text/>
              </element>
              <element name="prix">
                <text/>
              </element>
            </interleave>
            <element name="absent">
              <empty/>
            </element>
          </choice>
        </element>
      </zeroOrMore>
    </element>
  </oneOrMore>
</element>]]></programlisting>
      Quelle en est la syntaxe compacte ? Donnez un document XML
      simple vérifiant le format.
    </para>
    <para>
      Si possible, écrivez la DTD correspondante.
    </para>
  </sect1>
  
  <sect1>
    <title>Contenu mixte</title>
    <para>
      Le format XML pour une biographie est le suivant : la racine est
      <code>bio</code> ; ses fils sont dans l'ordre un élément
      <code>nom</code> et du texte. Le texte peut contenir des morceaux en
      italique, encadrés par des balises <code>i</code>.
    </para>
    <para>
      Écrivez une feuille de validation Relax-NG pour ce format (version XML
      et version compacte).
    </para>
    <para>
      Quelle serait une DTD correspondante ? Quels problèmes rencontre-t-on ?
    </para>
  </sect1>
  
  <sect1>
    <title>Météo, encore.</title>
    <para>
      On considère le fichier de relevé météo suivant. Écrivez un fichier de
      validation Relax-NG permettant de le valider.
      <programlisting><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<météo>
 <relevé date="2009-10-20">
  <ville>Grenoble</ville>
  <tempMax unit="C">15</tempMax>
  <tempMin unit="C">7</tempMin>
 </relevé>
 <relevé date="2009-10-20">
  <ville>Lyon</ville>
  <tempMax unit="F">40</tempMax>
 </relevé>
 <relevé date="2009-10-19">
  <ville>Grenoble</ville>
  <tempMin unit="C">8</tempMin>
 </relevé> 
 <relevé date="2009-10-19">
  <tempMin unit="C">2</tempMin>
  <ville>Lyon</ville>
  <tempMax>9</tempMax>
 </relevé>
</météo>]]></programlisting>
      Quel serait un fichier de validation DTD ? Quelles sont les problèmes rencontrés ?
      Comment les résoudrait-on ?
    </para>
  </sect1>
</article>

