Le seul moyen d'afficher correctement un document avec une belle mise en forme, des couleurs et un confort correct est de générer du HTML ou du XHTML à partir de XML/XSL.

XHTML

Le XHTML est un langage récent, dérivé du XML dont il reprend les avantages et la puissance et amené à remplacer le HTML pur.

Pour générer du XHTML à partir de XML/XSL, il faut, un fichier XML, contenant un minimum de données :

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="mafeuilledestyle.xsl"?>
<contenu>
</contenu>

On remarquera que le XML appelle la feuille de style grâce à :

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

Cette feuille de style mafeuilledestyle.xsl sera constituée de la manière suivante, en fonction du résultat récherché.

XHTML 1 strict

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">

<xsl:output
method="html"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
indent="yes"
encoding="utf-8"/>

<xsl:template match="/">
<html xml:lang="fr" lang="fr">
<head>
<title>Un exemple de XSL/XHTML</title>
<link rel="stylesheet" type="text/css" href="mafeuilledesytle.css" />
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
</head>
<body>

</body>
</html>
</xsl:template>
</xsl:stylesheet>

ce qui va générer le code :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
...

Un modèle est téléchargeable ici.

XHTML 1.1

Si XHTML laissait le choix html ou xml, à partir du XHTML 1.1, tout ce qui est XHTML doit être définit en xml, avec content-type : application/xhtml+xml

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">

<xsl:output
method="xml"
doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
indent="yes"
encoding="utf-8"/>

ce qui va générer le code :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml">
...

Un modèle est téléchargeable ici.

XHTML 5

Le XHTML 5 est généré de la façon suivante :

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">

<xsl:output
method="xml"
indent="yes"
encoding="utf-8"/>

ce qui va générer le code :

<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">

Un modèle est téléchargeable ici.

HTML

Notez la différence entre la balise meta content="text/html... " pour le HTML et meta content="application/xhtml+xml..." pour le XHTML.

HTML 4.01 strict

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="2.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"
indent="yes"
encoding="utf-8"/>

qui va générer ce code :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
...

Remarque

Notez que dans le cas du HTML, le contenu est déjà typé automatiquement par <META http-equiv="Content-Type" content="text/html; charset=utf-8">. Inutile donc de le générer par la XSL.

Un modèle est téléchargeable ici.

HTML 5

Le HTML 5 ne nécessite plus de définition doctype-public .... Si nous ôtons cette option inutile, alors nous perdons <DOCTYPE html>. Heureusement, le W3C avait déjà prévu ce cas et propose une solution de contournement grâce à doctype-system="about:legacy-compat".

Pour générer le HTML 5 il y a deux méthodes.

Par la génération de HTML explicite

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:output
method="html"
doctype-system="about:legacy-compat"
encoding="utf-8"
indent="yes"/>

qui va générer ce code :

<!DOCTYPE html SYSTEM "about:legacy-compat"><html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
...

Remarque

Notez que dans le cas du HTML, le contenu est déjà typé automatiquement par <META http-equiv="Content-Type" content="text/html; charset=utf-8">. Inutile donc de le générer par la XSL.

Un modèle est téléchargeable ici.

Par la génération XHTML

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:output
method="xml"
doctype-system="about:legacy-compat"
encoding="utf-8" indent="yes"
omit-xml-declaration="yes"/>

qui va générer ce code :

<!DOCTYPE html SYSTEM "about:legacy-compat">
<html>

Remarque

Dans ce cas, il ne faudra pas oublier de définir soi-même la balise <META http-equiv="Content-Type" content="text/html; charset=utf-8"> dans le XSL.

Un modèle est téléchargeable ici.