Soit le schéma RelaxNG suivant permettant de représenter un glossaire.
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<element name="glossaire">
<oneOrMore>
<ref name="Definition"/>
</oneOrMore>
</element>
</start>
<define name="Definition">
<element name="definition">
<attribute name="id"><data type="ID"/></attribute>
<element name="terme"><text/></element>
<element name="explication"><text/></element>
<zeroOrMore>
<element name="voirAussi">
<attribute name="ref"><data type="IDREF"/></attribute>
</element>
</zeroOrMore>
</element>
</define>
</grammar>
Expliquer ce qu'exprime les datatypes ID
et REFID
. Préciser le format que doit respecter un attribut ou un élément de type ID
.
Instancier un document de type glossaire
, sur une thématique au choix.
<?xml version="1.0" encoding="UTF-8"?>
<glossaire>
<definition id="xml">
<terme>XML</terme>
<explication>Méta-langage...</explication>
</definition>
<definition id="sgml">
<terme>SGML</terme>
<explication>Méta-langage...</explication>
<voirAussi ref="xml"/>
</definition>
</glossaire>
Réaliser un programme XSLT permettant de publier les documents de type glossaire
en HTML.
Utiliser les ancres en HTML pour gérer les "voir aussi" (on se limitera pour le moment à utiliser l'id comme texte de l'ancre).
Ajouter un sommaire au début du fichier HTML, permettant de pointer chaque définition.
Proposer deux implémentations une avec xsl:template mode="..."
et une avec xsl:for-each
.
Trier les définitions par ordre alphabétique.
Pour trier les termes par ordre alphabétique utiliser xsl:sort
.
<xsl:for-each select="...">
<xsl:sort select="..."/>
...
<xsl:apply-templates select="...">
<xsl:sort select="..."/>
</xsl:apply-templates>
Pour les "voir aussi", afficher le terme de la définition plutôt que l'id.
Utiliser la fonction XPath current()
.