Représenter la lettre officielle suivante en utilisant le formalisme XML.

Une lettre

Repérer la structure physique du document.

Structure physique de la lettre XML

Déduire une structure logique depuis la structure physique et écrire le document XML correspondant.

<?xml version="1.0"?>
<lettre>
  <entete>
    <emetteur>
      <prenom>Stéphane</prenom>
      <nom>Crozat</nom>
      <adresse>
        <texte>
          <paragraphe>UTC</paragraphe>
          <paragraphe>60200 Compiègne</paragraphe>
        </texte>
      </adresse>
    </emetteur>
    <destinataire>
      <titre>Monsieur</titre>
      <nom>Dupont</nom>
    </destinataire>
    <date>2001-03-01</date>
    <lieu>Compiègne</lieu>
    <objet>Démonstration XML</objet>
  </entete>
  <corps>
    <texte>
      <paragraphe>XXXXXXXXXXX...</paragraphe>
      <paragraphe>XXXXXXXXXXX...</paragraphe>
      <paragraphe>XXXXXXXXXXX...</paragraphe>
    </texte>
  s</corps>
</lettre>

Quelques remarques

La structure logique est très éloignée de la mise en forme dans la page. En particulier aucune information n'est présente sur la localisation dans la page des informations, c'est la structure d'une lettre qui les prescrira à partir des descripteurs logiques.

On note que certains éléments, s'ils sont calculables, n'ont pas besoins d'être spécifiés dans la structure logique, comme ici la formule de politesse et la signature.

Écrire le schéma RelaxNG des lettres respectant ce modèle.

Utiliser :

  • Des patterns, par exemple Texte = paragraphe+

  • Des datatype, par exemple pour la date

  • Proposer votre propre namespace

<?xml version="1.0" encoding="UTF-8"?>
<grammar
  xmlns="http://relaxng.org/ns/structure/1.0"
  datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
  ns="www.utc.fr/nf29/tdXml">
  <start>
    <element name="lettre"> 
      <element name="entete">
        <element name="emetteur">
          <ref name="personne"/>
        </element>
        <element name="destinataire">
          <ref name="personne"></ref>
        </element>
        <element name="date"><data type="date"></data></element>
        <element name="lieu"><text/></element>
        <element name="objet"><text/></element>
      </element>
      <element name="corps">
        <ref name="texte"/>
      </element>
    </element>
  </start>
  <define name="personne">
    <optional>
      <element name="titre"><text/></element>
    </optional>
    <zeroOrMore>
      <element name="prenom" ><text/></element>
    </zeroOrMore>
      <element name="nom"><text/></element>
    <optional>
    <element name="adresse">
      <ref name="texte"/>
    </element>
    </optional>
  </define>
  <define name="texte">
    <element name="texte">
      <oneOrMore>
        <element name="paragraphe"><text/></element>
      </oneOrMore>
    </element>
  </define>
</grammar>
AccueilExercices > Exercices RelaxNG > Exercice< PrécédentSuivant >