2. Développement Web
(X)HTML





2.1. Qu'est ce que (X)HTML ?

(X)HTML ou eXtensible HyperText Markup Language est un langage à balises issu de XML (eXtensible Markup Language), qui dérive lui-même des concepts du SGML (Standard Generalized Markup Language) conçu à partir de 1969 par Charles Goldfarb travaillant à l'époque chez IBM. SGML est employé dans les industries de la documentation et de l'édition.

Attention : (X)HTML n'est pas un langage de programmation mais un langage de description ou de structuration de l'information. Un langage de programmation décrit un calcul et c'est le langage qui exprime comment réaliser ce calcul. (X)TML ne fait que décrire de l'information.

Le terme anglais markup signifie en français balisage mais est souvent traduit par balise. A markup language peut se traduire par langage de balisage ou plus communément : langage à balises.

Pour rappel, une balise est "un objet, un ouvrage, ou un dispositif destiné à guider un navigateur, un pilote".

2.1.1. XML (eXtensible Markup Language)

Si on considère les langues naturelles (français, anglais, ...), la compréhension d'une phrase repose sur au moins trois facteurs :

L'idée fondamentale du langage XML (eXtensible Markup Language, à la base de XHTML) est l'utilisation de balises pour ajouter un contenu syntaxique et sémantique à un texte. Par exemple en XML pour décrire la phrase "le lion mange la gazelle", on pourrait écrire :

  1. <phrase>
  2.     <sujet>
  3.         <article genre="masculin" nombre="singulier"> le </article>
  4.         <nom type="animal, domestique"> chat </nom>
  5.     </sujet>
  6.     <verbe groupe="premier" personne="troisieme"
  7.         nombre="singulier" racine="manger"
  8.         temps="indicatif-présent"> mange </verbe>
  9.     <complement>
  10.         <article genre="feminin" nombre="singulier"> la </article>
  11.         <nom type="animal, rongeur"> souris </nom>
  12.     </complement>
  13. </phrase>
  14.  
  15.  

On retrouve la phrase initiale agrémentée d'informations complémentaires :

Applications

Les informations complémentaires peuvent être utilisées afin de vérifier le sens de la phrase ou d'en extraire de l'information. Par exemple, à partir de toutes les phrases d'un texte ou d'un ensemble de textes, du type "le(s) lion(s) mange(nt)/dévore(nt) ...", on pourrait en déduire le régime alimentaire des lions.

De la même manière, si on avait écrit "la gazelle mange le lion", qui est une phrase syntaxiquement correcte, on pourait en déduire que la phrase est fausse du point de vue sémantique puisqu'un herbivore ne mange pas d'autres animaux.


Difficultés liées à la compréhension du langage

Rappelez vous ce passage du Bourgeois Gentilhomme de Molière qui démontre ô combien la compréhension d'un texte peut être complexe si elle doit être interprétée par une machine :

Maître de philosophie : On les peut mettre premièrement comme vous avez dit : Belle Marquise, vos beaux yeux me font mourir d’amour. Ou bien : D’amour mourir me font, belle Marquise vos beaux yeux. Ou bien : Vos yeux beaux d’amour me font, belle Marquise, mourir. Ou bien : Mourir vos beaux yeux, belle Marquise, d’amour me font. Ou bien : Me font vos yeux beaux mourir, belle Marquise, d’amour.

Monsieur Jourdain : Mais de toutes ces façons-là, laquelle est la meilleure ?

Maître de philosophie : Celle que vous avez dite : Belle marquise, vos beaux yeux me font mourir d’amour.

D'une autre manière, si je dis Richer, tu sais qu'il y a un analphabète dans cette classe, (Bernard Bost, professeur de français, collège Terrain Fleury, Le Tampon), c'est un moyen détourné de dire : Richer, tu es un analphabète.

La possibilité de pouvoir augmenter le texte d'information annexe permet d'en améliorer la compréhension pour les systèmes de Traitement Automatique du Langage Naturel (TALN).

Un autre point est la compréhension du langage pour des systèmes comme Siri ou Alexa. Pensez à cette chanson de Richard Gotainer : Tout, chez moi, l'habite.

2.1.2. et (X)HTML dans tout ça ?

Le langage XHTML est l'application de ce principe à la description de pages web avec comme élément principal les hyperliens, c'est à dire que l'on peut cliquer sur un mot dans le texte et se rendre sur une autre page.

D'un point de vue historique, XHTML 1.0 (2001) est une évolution de HTML version 4.01 basée sur XML. La version XHTML 2.0 qui a été développée pendant près de 8 ans a été abandonnée en 2009 à la faveur de XHTML 5 (2012). XHTML 2.0 n'était pas rétro-compatible avec HTML 4. Afin de comprendre les différences entre ces versions, on peut consulter ce site.

Aujourd'hui, on parle de manière équivalente de HTML 5 ou XHTML 5. XHTML est simplement plus restrictif dans sa syntaxe. On parle alors de (X)HTML pour faire référence aux deux langages.

Parmi les principaux éléments liés à HTML 5, on note :

Les conventions sont les suivantes :

  • balises et attributs sont écrits en minuscule
  • on conseille de fermer les balises : <p>...</p>, sauf certaines balises comme <meta>
  • certaines balises qui ne peuvent être fermées, comme break rule (que l'on peut considérer comme un passage à la ligne), s'écrivent <br />

Pour en savoir plus vous pouvez consulter cette page.

2.1.3. Extensions de fichiers

Les fichier (X)HTML prennent l'extension .html (ou parfois .htm), il existe d'autres extensions notamment lorsque l'on utilise des langages de script pour dynamiser les pages web :

Par exemple, si on a activé sur le serveur web la possibilité d'utiliser le langage de programmation PHP, un fichier d'extention .php peut ne contenir que du code PHP ou uniquement du code (X)HTML ou du code (X)HTML avec des sections de code PHP.

2.2. Structure d'un document de base HTML

Un document de base contient deux parties :

  1. <!DOCTYPE html>
  2.  
  3. <!-- langue utilisée -->
  4. <html lang="fr">
  5.  
  6. <!-- entete -->
  7.  
  8.     <!-- titre de la page affiché dans un des onglets du navigateur -->
  9.     <title>Ma première page web</title>
  10.    
  11.     <!-- encodage des caractères -->
  12.     <meta charset="utf-8">
  13.    
  14.     <!-- description de la page, optionnel -->
  15.     <meta name="author" content="Jean-Michel Richer">
  16.     <meta name="description" content="Une page web">
  17.     <meta name="keywords" content="page, web, création">
  18.    
  19.    
  20. </head>
  21.  
  22. <!-- contenu de la page -->
  23.  
  24.     <!-- balise d'entête / titre -->
  25.     <h1>Titre</h1>
  26.  
  27.     <!-- un premier paragraphe -->
  28.     <p>Bonjour, ceci est ma première page web !</p>
  29.    
  30.     <!-- un second paragraphe -->
  31.     <p>J'espère que vous l'appréciez &#128540;</p>
  32.  
  33. </body>
  34.  
  35. </html>
  36.  
  37.  

On remarquera que dans la partie head, les balises meta devraient être terminées par /> puisque l'on n'écrit pas <meta>...</meta>, mais ce n'est pas le cas : HTML5 doesn't need the closing. XHTML does.

On remarque également que le début du document est beaucoup plus simple que dans les versions antérieures d'HTML où il fallait écrire par exemple :

  1. <!DOCTYPE html PUBLIC
  2.     "-//W3C//DTD XHTML 1.1//EN"
  3.     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">

2.3. Eléments de contenu simples

Les éléments de base sont les éléments liés au texte comme :

  1. <!DOCTYPE html>
  2.  
  3. <!-- langue utilisée -->
  4. <html lang="fr">
  5.  
  6. <!-- entete -->
  7.  
  8.     <!-- titre de la page affiché dans un des onglets du navigateur -->
  9.     <title>Balises h1 à h6</title>
  10.    
  11.     <!-- encodage des caractères -->
  12.     <meta charset="utf-8">
  13.    
  14.     <!-- description de la page, optionnel -->
  15.     <meta name="author" content="Jean-Michel Richer">
  16.     <meta name="description" content="Une page web avec balise h1 à h6">
  17.     <meta name="keywords" content="page, web, création">
  18.  
  19. </head>
  20.  
  21. <!-- contenu de la page -->
  22.  
  23.     <h1>Balise h1</h1>
  24.     <h2>Balise h2</h2>
  25.     <h3>Balise h3</h3>
  26.     <h4>Balise h4</h4>
  27.     <h5>Balise h5</h5>
  28.     <h6>Balise h6</h6>
  29.     <p>un paragraphe.</p>
  30. </body>
  31.  
  32. </html>
  33.  
  34.  

Ainsi que certains anciens éléments de mise en forme, mais que l'on recommande à présent de remplacer par des styles dans des CSS :

Titre h1

Titre h2

Voici un texte en gras, en emphase, souligné.

  

<h1>Titre h1</h1>
<h2>Titre h2</h2>
<p>Voici un texte <b>en gras</b>, <em>en emphase</em>, <u>souligné</u>. </p>

2.3.1. La balise <span> pour modifier le style du texte

La balise <span>texte</span> permet de modifier le style d'un texte à l'intérieur d'un paragraphe. Elle est généralement utilisée de concert avec les fichiers CSS.

Voici un exemple simple :

Voici un texte en rouge.

  

<p>Voici un texte <span style="color: red;">en rouge</span>. </p>

2.3.2. Les balises <sub> et <sup>

Ces balises permettent de mettre en indice ou en exposant les valeurs qu'elles encadrent.

On cherche les racines de l'équation (e1) 3x2 - 6x - 5

  

<p>On cherche les racines de l'équation  (e<sub>1</sub>)  
	3x<sup>2</sup> - 6x - 5 </p>

2.4. La balise liées aux hyperliens

2.4.1. Naviguer entre pages

Les balises <a>...</a> sont l'élément essentiel des documents (X)HTML car elles permettent la navigation de page en page.

Un lien ou hyperlien est défini par :

Bonjour, ceci est ma première page web !

  

<p>Bonjour, ceci est ma première 
<a href="http://leria-info.univ-angers.fr/~jeanmichel.richer/">page</a> web !</p>

2.4.2. Naviguer vers un endroit de la page

On peut, en outre, ajouter une référence dans la page grâce au caractère # que l'on ajoute à la fin de l'URL.

Mais il faudra également ajouter la définition de ce lien dans la page :

Je veux aller au second paragraphe de la page info.html

Un second paragraphe

  

<p>Je veux aller au <a href="#SECOND_PARAGRAPHE">second paragraphe</a> 
de la page info.html</p>
<a name="SECOND_PARAGRAPHE"></a>
<p>Un second paragraphe</p>

2.4.3. Ouvrir un nouvel onglet

On peut également ouvrir une page dans un nouvel onglet en ajoutant l'attribut target. On recommande d'ajouter rel="noopener noreferrer" pour des raisons de sécurité :

Se rendre sur Yahoo en ouvrant un nouvel onglet.

  

<p>Se rendre sur <a href="http://yahoo.fr" target="_blank" 
	rel="noopener noreferrer">Yahoo</a> en ouvrant un nouvel onglet.</p>

Enfin, on peut ouvrir une URL dans une nouvelle fenêtre :

Ouvrir une nouvelle fenêtre vers Yahoo.

  

<p>Ouvrir une nouvelle fenêtre vers <a href="http://yahoo.fr" target="_parent"
	 onclick="window.open('http://yahoo.fr', name='_blank', 
	 'width=600, height=400, toolbar=yes, resizable=no'); return false;">Yahoo</a>.</p>

2.5. Les images

Il existe une seule balise auto fermante appelée <img> pour insérer des images. Elle dispose de plusieurs attributs comme :

structure des répertoires sous Linux

  

<p class="center">
	<img src="ens/l1/img/bi2_part_2.png" 
	     alt="structure des répertoires sous Linux"
	     width="200" height="100" />
</p>

2.6. Les listes

On trouve trois types de listes :

L'exemple qui suit montre comment utiliser ces listes :

Liste non numérotée
  • premier élément
  • second élément
Liste numérotée
  1. premier élément
  2. second élément
Liste de descriptions
Nos Cafés
Cappuccino
Latté
Latté Machiatto
Nos Thés
English Breakfast
Chaï
Combinaison de listes
Nos Cafés
Capuccino
  • classique
  • lait d'amande
  • lait de coco
Latté
Latté Machiatto
Nos Thés
English Breakfast
  1. Darjeeling
  2. Russian
Chaï

  

	<!-- liste non numérotée -->	
	<h5>Liste non numérotée</h5>
 
	<ul>
		<li>premier élément</li>
		<li>second élément</li>
	</ul>
 
	<!-- liste numérotée -->
	<h5>Liste numérotée</h5>
 
	<ol>
		<li>premier élément</li>
		<li>second élément</li>
	</ol>
 
	<!-- liste de descriptions -->
	<h5>Liste de descriptions</h5>
 
	<dl>
		<dt>Nos Cafés</dt>
			<dd>Cappuccino</dd>
			<dd>Latté</dd>
			<dd>Latté Machiatto</dd>
		<dt>Nos Thés</dt>
			<dd>English Breakfast</dd>
			<dd>Chaï</dd>	
	</dl>
 
	<!-- Combinaison de listes -->
	<h5>Combinaison de listes</h5>
 
	<dl>
		<dt>Nos Cafés</dt>
			<dd> Capuccino
				<ul>
					<li>classique</li>
					<li>lait d'amande</li>
					<li>lait de coco</li>
				</ul>	 
			</dd>
			<dd>Latté</dd>
			<dd>Latté Machiatto</dd>
		<dt>Nos Thés</dt>
			<dd>English Breakfast
				<ol>
					<li>Darjeeling</li>
					<li>Russian</li>
				</ol>
			</dd>
			<dd>Chaï</dd>	
	</dl>

Concernant les listes, on pourra modifier le style de numérotation ou le symbole utilisé pour les listes non numérotées qui peut être un carré, un cercle ou une image (voir le cours CSS).

2.7. Les <div>

Les balises <div>...</div> permettent de créer de nouveaux éléments auxquels on associera un style particulier (cf. cours CSS).

2.8. Le canvas

Le canvas permet de réaliser des dessins :

CANVAS NOT SUPPORTED IN THIS BROWSER!
  

  

<div style = "text-align:center;">
<canvas id="zone_dessin" width="400" height="400">
  CANVAS NOT SUPPORTED IN THIS BROWSER!
</canvas><br />
<button onclick="return dessine();">Dessine</button>
&nbsp;&nbsp;
<button onclick="return efface();">Efface</button>
 
</div>

2.9. Les formulaires

Les formulaires permettent de saisir des informations qui seront envoyées au serveur pour y être traitées : il peut s'agir de faire un calcul, d'insérer ou d'extraire des informations d'une base de données.

Vous trouverez sur cette page plus d'informations concernant les formulaires et les éléments qui les composent.

2.10. Les tableaux

Les tableaux sont introduits par la balise <table>. Leur description a été augmentée avec HTML 5 avec les balises <thead>, <tbody> et <tfoot>.

Chaque ligne est introduite par la balise <tr> qui contiennent les balises qui décrivent les colonnes :

Ma première table
Month Savings
January $100
February $80
Sum $180

  

<table style="border-collapse: collapse;" class="center">
 
	<caption>Ma première table</caption>
 
	<!-- l'entête avec les titres des colonnes -->
	<thead>
		<tr>
    	  	<th>Month</th>
      		<th>Savings</th>
		</tr>
	</thead>
 
	<!-- le corps avec les données -->
	<tbody>
		<tr>
		  	<td>January</td>
		  	<td>$100</td>
		</tr>
		<tr>
		  	<td>February</td>
		  	<td>$80</td>
		</tr>
	</tbody>
 
	<!-- éventuellement le bas de tableau avec des données récapitulatives -->
	<tfoot>
		<tr>
			<td>Sum</td>
			<td>$180</td>
		</tr>
	</tfoot>
 
</table>

La balise <td> est dotée d'attributs qui permettent de fusionner des lignes ou des colonnes :

fusion de deux colonnes 2
3 4 5
fusion de
deux lignes
7 8
9 10
Ma table

  

<table style="border-collapse: collapse;" class="center">
 
	<!-- le corps avec les données -->
	<tbody>
		<tr>
		  	<td colspan="2"> fusion de deux colonnes </td>
		  	<td>2</td>
		</tr>
		<tr>
		  	<td>3</td>
		  	<td>4</td>
		  	<td>5</td>
		</tr>
		<tr>
			<td rowspan="2"> fusion de<br />deux lignes </td>
			<td>7</td>
			<td>8</td>
		</tr>
		<tr>
			<td>9</td>
			<td>10</td>
		</tr>
 
	</tbody>
 
	<caption>Ma table</caption>
</table>

Voici un exemple assez simple d'une commande : table sans mise en forme et le même exemple avec mise en forme.

2.11. Les nouvelles balises HTML5

Ces nouvelles balises ont pour but de mieux structurer les pages en fournissant des balises de nom fixe (main, header, footer, nav, aside, ...) plutôt que d'utiliser des <div>...</div> qui seront spécifiques à chacun. On peut consulter ce document afin d'avoir un aperçu de ces différentes balises.

2.12. Le DOM (Document Object Model)

Les pages (X)HTML sont composées de balises qui incluent d'autres balises de manière récursive. Un document XML ou HTML peut être manipulé pour en extraire de l'information. On dispose de deux approches pour cela :

L'approche DOM possède un inconvénient c'est qu'elle nécessite de représenter tout le document en mémoire alors que ce n'est pas le cas pour l'approche SAX. Cependant, l'approche SAX nécessite l'écriture d'un analyseur ce qui prend du temps à écrire.

Au sein du navigateur une page web est représentée au format DOM. Le langage Javascript disponible dans chaque navigateur permet la manipulation du DOM, c'est à dire la consultation, l'ajout, la suppression et modification de noeuds (cf Cours Javascript).

2.13. Suite du cours

La suite du cours s'intéresse aux CSS (Cascading Style Sheets).

2.14. Exercices

Exercice 2.1

Créer une page web ayant les caractéristiques suivantes :

  • un titre de type h2 de libellé "Introduction"
  • un paragraphe de quelques lignes (repris sur internet)
  • mettre quelque mots du paragraphe en gras
  • ajouter un autre paragraphe qui contient un lien vers google.com

Exercice 2.2

Reprendre l'exercice précédent et ajouter :

  • une image
  • une liste non numérotée contenant trois éléments

Exercice 2.3

Créer une page web avec un formulaire qui contient 3 champs ainsi que les labels associés :

  • un champ pour saisir un nom
  • un champ pour saisir une date de naissance
  • un champ pour saisir une couleur

On ajoutera également un bouton "Valider" pour soumettre les données.