Exercice 1 : Le document est un arbre
Une page web n'est pas un texte : c'est un ARBRE de balises, que le navigateur construit à la lecture et que le script manipule ensuite. Tout le chapitre découle de cette structure.
- a) Écrivez le document HTML minimal qui correspond exactement à cet arbre. Respectez l'imbrication.
- b) Donnez la racine de l'arbre, les feuilles, la profondeur de l'élément button, et le nombre de frères et soeurs de l'élément form.
- c) Un élément est dit descendant d'un autre s'il en est fils, petit-fils, et ainsi de suite. Citez tous les descendants de body, puis tous les ancêtres de input.
- d) Expliquez pourquoi une balise mal fermée ne provoque pas un message d'erreur mais un arbre différent de celui attendu. Donnez un exemple court.
- e) Un document comporte 3 niveaux d'imbrication et chaque élément a exactement 4 fils, sauf les feuilles. Combien d'éléments l'arbre compte-t-il en tout ?
Voir la correction
Réponses
- a) html, head et title ; body, h1 et form
- b) 4 feuilles, profondeur 3, un frère
- c) 4 descendants de body, 3 ancêtres de input
- d) Récupération silencieuse : arbre différent
- e) éléments
a) Le document s'écrit ainsi : une balise html contenant une balise head, elle-même contenant une balise title, puis une balise body contenant une balise h1 et une balise form, cette dernière contenant une balise input et une balise button. En code : la balise ouvrante html, puis head, puis title avec son texte et sa fermeture, la fermeture de head, puis body, h1 avec son texte et sa fermeture, form contenant input et button avec leurs fermetures, puis la fermeture de form, celle de body et celle de html. L'indentation du code n'a aucun effet sur l'arbre : elle ne sert qu'au lecteur humain, et c'est l'ordre des balises ouvrantes et fermantes qui décide seul de la structure.
b) La racine est html. Les feuilles, c'est-à-dire les éléments sans fils, sont title, h1, input et button. La profondeur de button est 3 si l'on compte la racine au niveau 0 : html, puis body, puis form, puis button. L'élément form a un seul frère, h1, puisque body a deux fils.
c) Les descendants de body sont h1, form, input et button, soit quatre éléments. Les ancêtres de input sont form, body et html, soit trois éléments, en remontant jusqu'à la racine. Un noeud n'est ni son propre ancêtre ni son propre descendant.
d) Parce que le navigateur ne refuse jamais un document : il applique une procédure de récupération qui devine une structure. Une balise laissée ouverte est fermée automatiquement à un endroit choisi par le navigateur, et cet endroit n'est pas forcément celui que l'auteur imaginait. Exemple : si l'on ouvre un paragraphe, puis un second paragraphe sans fermer le premier, le navigateur ferme le premier tout seul, si bien que les deux paragraphes sont FRÈRES alors que le code laissait croire qu'ils étaient imbriqués. Toute règle de style visant le paragraphe intérieur cesse alors de s'appliquer, sans le moindre message.
e) Avec la racine au niveau 0 et 3 niveaux d'imbrication, il y a 1 élément au niveau 0, au niveau 1, au niveau 2 et au niveau 3. Le total vaut éléments. La formule générale, pour un arbre complet de degré et de hauteur , est , ce qui donne ici et confirme le calcul.