Algorithme Outline HTML5
Le but de cet exercice est de se familiariser avec l'algorithme Outline HTML5 et d'en comprendre les mécanismes de base.
On dispose du squelette HTML5 suivant :
<html>
<head>
<title>HTML5</title>
<meta charset="utf-8">
</head>
<body>
</body>
</html>
Visualiser le sectionnement généré par l'algorithme Outline HTML5 en utilisant l'un des deux outils suivants :
Pour l'instant, il n'y a qu'une section ("1. Document" ou 1. "Untitled section") créée par l'élément <body>.
Question
Générer un code HTML dans l'élément body pour parvenir au sectionnement suivant :
Instruments à cordes
Violon
Piano
Harpe
Instruments à vent
Haut-bois
Cor
Dans un premier temps, on utilisera seulement des balises de titre pour ce faire : h1 ... h6.
Rappel : une balise de titre non première de sa section de niveau inférieur à la précédente ouvre une sous-section implicite.
<h1>Instruments à cordes</h1>
<h2>Violon</h2>
<h2>Piano</h2>
<h2>Harpe</h2>
<h1>Instruments à vent</h1>
<h2>Haut-bois</h2>
<h2>Cor</h2>
Question
On remarque que notre document n'a plus de racine unique dans son plan, mais deux sections au niveau supérieur.
Comment expliquer la construction de ce plan ?
Ne pas oublier que la première balise de titre dans une section en définit le titre.
Relire le comportement implicite d'ouverture/fermeture de sections par les balises de titre.
La première balise h1 est la première balise de titre de l'élément body, elle en définit donc le titre sans ouvrir de section.
L'élément body est la section reliée aux instruments à cordes, avec un titre explicite (premier h1).
Le premier h2 a ouvert une sous-section.
Le deuxième h2 a fermé la section précédente et ouvert une nouvelle sous section. Idem pour le troisième h2.
Le deuxième h1 a fermé la section du troisième h2 et ouvre une nouvelle section du niveau supérieur à celle-ci, soit du même niveau que l'élément body.
Question
Utiliser les balises de section HTML5 pour obtenir le plan suivant de manière purement explicite, puis en mixant explicite/implicite ;
Instruments
Instruments à cordes
Violon
Piano
Harpe
Instruments à vent
Haut-bois
Cor
Purement explicite
<body>
<h1>Instruments</h1>
<section>
<h1>Instruments à cordes</h1>
<section>
<h1>Violon</h1>
</section>
<section>
<h1>Piano</h1>
</section>
<section>
<h1>Harpe</h1>
</section>
</section>
<section>
<h1>Instruments à vent</h1>
<section>
<h1>Haut-bois</h1>
</section>
<section>
<h1>Cor</h1>
</section>
</section>
</body>
Combinaison explicite/implicite
<body>
<h1>Instruments</h1>
<section>
<h2>Instruments à cordes</h2>
<h3>Violon</h3>
<h3>Piano</h3>
<h3>Harpe</h3>
</section>
<section>
<h2>Instruments à vent</h2>
<h3>Haut-bois</h3>
<h3>Cor</h3>
</section>
</body>
Remarque :
Le rang des balises de titre utilisé est purement arbitraire, tant que le garde la hiérarchie relative des éléments entre eux.
Question
Grâce à l'algorithme Outline HTML5, les transclusions sont facilitées car le plan du document est dynamiquement calculé selon le plan de chaque section.
On dispose du fichier instruments.html XHTML5 suivant :
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<h1>Instruments</h1>
<section>
<h2>Instruments à cordes</h2>
<h3>Violon</h3>
<h3>Piano</h3>
<h3>Harpe</h3>
</section>
<section>
<h2>Instruments à vent</h2>
<h3>Haut-bois</h3>
<h3>Cor</h3>
</section>
<div class="transclusion" id="instruments-percussions" data-url="percu.xml"></div>
</body>
</html>
Le document percus.html suivant :
<section>
<h1>Percussions</h1>
<h2>Tambour</h2>
<h2>Triangle</h2>
<h2>Claves</h2>
</section>
Compléter le fichier instruments.xsl donné ci-dessous pour faire la transclusion du fichier percus.html dans le fichier instruments.html. Observer l'Outline généré en regard des rangs des balises de titre utilisés. Conclure.
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:character-map name="doctype">
<xsl:output-character character="<" string="<"/>
<xsl:output-character character=">" string=">"/>
</xsl:character-map>
<xsl:output
method="xml"
encoding="utf-8"
indent="yes"
omit-xml-declaration="yes"
use-character-maps="doctype"
/>
<!-- Transformation identité -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Génération du DOCTYPE -->
<xsl:template match="html">
<xsl:text><!DOCTYPE html>
</xsl:text>
<xsl:element name="html">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<!-- Pas de processing instruction -->
<xsl:template priority="1" match="processing-instruction()" />
</xsl:stylesheet>
<xsl:template match="div[@class='transclusion' and @id='instruments-percussions']">
<xsl:copy-of select="document('percus.html')"></xsl:copy-of>
</xsl:template>
Fichier HTML5 en sortie :
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<h1>Instruments</h1>
<section>
<h2>Instruments à cordes</h2>
<h3>Violon</h3>
<h3>Piano</h3>
<h3>Harpe</h3>
</section>
<section>
<h2>Instruments à vent</h2>
<h3>Haut-bois</h3>
<h3>Cor</h3>
</section>
<section>
<h1>Percussions</h1>
<h2>Tambour</h2>
<h2>Triangle</h2>
<h2>Claves</h2>
</section>
</body>
</html>
Plan obtenu :
Instruments
Instruments à cordes
Violon
Piano
Harpe
Instruments à vent
Haut-bois
Cor
Percussions
Tambour
Triangle
Claves
Conclusion : Le fait que l'on utilise des balises h1 et h2 dans le fichier percus.html ne perturbe pas la bonne génération du plan du document.