HTML5, structuration documentaire

[BONUS] DOCTYPE HTML5 avec XSLT

Génération du DOCTYPE HTML5 avec XSLT

[Exercice BONUS]

Le but de cet exercice est de comprendre les différentes manières de générer le DOCTYPE HTML5 avec XSLT.

Rappel : le DOCTYPE valide en HTML5 est le suivant :

CTRL+C pour copier, CTRL+V pour coller
1
<!DOCTYPE html>
<!DOCTYPE html>

On dispose des fichiers xml et xsl suivants :

movies.xml

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
3
<?xml-stylesheet type="text/xsl" href="movies.xsl"?>
4
5
<movies>
6
  <movie>
7
    <title>Aliens</title>
8
    <year>1986</year>
9
    <rank>8.2</rank>
10
  </movie>
11
  <movie>
12
    <title>Apollo 13</title>
13
    <year>1995</year>
14
    <rank>7.5</rank>
15
  </movie>
16
  <movie>
17
    <title>Pi</title>
18
    <year>1998</year>
19
    <rank>7.1</rank>
20
  </movie>
21
</movies>
<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="movies.xsl"?>

<movies>
  <movie>
    <title>Aliens</title>
    <year>1986</year>
    <rank>8.2</rank>
  </movie>
  <movie>
    <title>Apollo 13</title>
    <year>1995</year>
    <rank>7.5</rank>
  </movie>
  <movie>
    <title>Pi</title>
    <year>1998</year>
    <rank>7.1</rank>
  </movie>
</movies>

movies.xsl

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
3
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
4
  
5
  <xsl:output
6
    method="html"
7
    doctype-public="-//W3C//DTD HTML 4.01//EN"
8
    doctype-system="http://www.w3.org/TR/html4/strict.dtd"
9
    encoding="utf-8"
10
    indent="yes" />
11
  
12
  <xsl:template match="/">
13
    <html lang="en">
14
      <head>
15
        <title>List of Movies.</title>
16
        
17
        <link rel="stylesheet" href="movies.css" />
18
      </head>
19
      <body>
20
        <table class="movies">
21
          <thead>
22
            <tr>
23
              <th>Title</th>
24
              <th>Year</th>
25
              <th>Rank</th>
26
            </tr>
27
          </thead>
28
          <tbody>
29
            <xsl:for-each select="movies/movie">
30
              <xsl:sort select="rank"/>
31
              <tr>
32
                <td><xsl:value-of select="title"/></td>
33
                <td><xsl:value-of select="year"/></td>
34
                <td><xsl:value-of select="rank"/></td>
35
              </tr>
36
            </xsl:for-each>
37
          </tbody>
38
        </table>
39
      </body>
40
    </html>
41
  </xsl:template>
42
  
43
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
  <xsl:output
    method="html"
    doctype-public="-//W3C//DTD HTML 4.01//EN"
    doctype-system="http://www.w3.org/TR/html4/strict.dtd"
    encoding="utf-8"
    indent="yes" />
  
  <xsl:template match="/">
    <html lang="en">
      <head>
        <title>List of Movies.</title>
        
        <link rel="stylesheet" href="movies.css" />
      </head>
      <body>
        <table class="movies">
          <thead>
            <tr>
              <th>Title</th>
              <th>Year</th>
              <th>Rank</th>
            </tr>
          </thead>
          <tbody>
            <xsl:for-each select="movies/movie">
              <xsl:sort select="rank"/>
              <tr>
                <td><xsl:value-of select="title"/></td>
                <td><xsl:value-of select="year"/></td>
                <td><xsl:value-of select="rank"/></td>
              </tr>
            </xsl:for-each>
          </tbody>
        </table>
      </body>
    </html>
  </xsl:template>
  
</xsl:stylesheet>

Ouvrir ces fichiers dans Oxygen. Tester la génération du fichier HTML4 en sortie.

On remarque que les attributs doctype-public et doctype-system permettent de générer le DOCTYPE HTML4 voulu.

Question

Tester la modification des attributs doctype-public et doctype-system, leur suppression, pour essayer d'obtenir le DOCTYPE HTML5. Que se passe-t-il ?

L'instruction XSLT 1.0 <xsl:text disable-output-escaping='yes'></xsl:text> permet de générer du texte en sortie.

L'attribut disable-output-escaping='yes' permet de reconvertir les caractères HTML échappés en sortie (&amp; en "&" par exemple).

Rappel : les chevrons "<" et ">" correspondent respectivement aux codes suivants, &lt; et &gt;.

Question

Générer le DOCTYPE à l'aide de l'instruction donnée.

Le statut de DOE (disable-output-escaping) et la "DOCTYPE legacy string"

La solution ci-dessus utilise la fonctionnalité DOE (disable-output-escaping), mais celle-ci :

  • n'est qu'une fonctionnalité optionnelle d'un moteur XSLT 1.0 ;

  • est dépréciée en XSLT 2.0.

Les spécifications de HTML5 fournissent une alternative à l'aide de la "DOCTYPE legacy string" : <!DOCTYPE html SYSTEM "about:legacy-compat">.

Question

Modifier le code xsl pour générer un DOCTYPE HTML5 à l'aide de la "DOCTYPE legacy string".

[BONUS] L'instruction <xsl:character-map>

La solution précédente ne doit être utilisé que si le moteur XSLT n'est pas capable de générer le DOCTYPE HTML5 standard (en version courte).

Source : spécification HTML5 du W3C.

Nous allons nous intéresser à une solution utilisant une instruction valide en XSLT 2.0, <xsl:character-map>.

On placera cette instruction avant l'instruction <xsl:output>.

La syntaxe de l'instruction :

CTRL+C pour copier, CTRL+V pour coller
1
  <xsl:character-map name="name">
2
    <xsl:output-character character="x" string="remplacement de x"/>
3
  </xsl:character-map>
  <xsl:character-map name="name">
    <xsl:output-character character="x" string="remplacement de x"/>
  </xsl:character-map>

L'instruction <xsl:output-character> utilisée à l'intérieur de <xsl:character-map> prend un unique character et le remplace en sortie par la chaîne string spécifiée.

On utilisera l'attribut use-character-maps="charactermapname" dans l'instruction <xsl:output> pour activer les substitutions lors de la transformation xsl.

Question

Utiliser l'instruction <xsl:character-map> pour générer le DOCTYPE HTML5.

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Rihab Hachem, Cindy Pinvin, Baptiste Perraud, 2014-2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)