Glossaire II
Soit le schéma RelaxNG suivant permettant de représenter un glossaire.
<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>
Question
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
.
Question
Instancier un document de type glossaire
, sur une thématique au choix.
Solution
Exemple :
<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>
Question
Réaliser un programme XSLT permettant de publier les documents de type glossaire
en HTML.
Indice
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).
Question
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.
Indice
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>
Question
Pour les "voir aussi", afficher le terme de la définition plutôt que l'id.
Indice
Utiliser la fonction XPath current()
.