Glossaire II

Soit le schéma RelaxNG suivant permettant de représenter un glossaire.

1
<?xml version="1.0" encoding="UTF-8"?>
2
<grammar
3
    xmlns="http://relaxng.org/ns/structure/1.0"
4
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
5
    <start>
6
        <element name="glossaire">
7
            <oneOrMore>
8
                <ref name="Definition"/>
9
                </oneOrMore>
10
            </element>
11
    </start>
12
    <define name="Definition">
13
        <element name="definition">
14
            <attribute name="id"><data type="ID"/></attribute>
15
            <element name="terme"><text/></element>
16
            <element name="explication"><text/></element>
17
            <zeroOrMore>
18
                <element name="voirAussi">
19
                    <attribute name="ref"><data type="IDREF"/></attribute>
20
                    </element>
21
                </zeroOrMore>
22
            </element>
23
    </define>
24
</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
1
<?xml version="1.0" encoding="UTF-8"?>
2
<glossaire>
3
    <definition id="xml">
4
        <terme>XML</terme>
5
        <explication>Méta-langage...</explication>
6
    </definition>
7
    <definition id="sgml">
8
        <terme>SGML</terme>
9
        <explication>Méta-langage...</explication>
10
        <voirAussi ref="xml"/>
11
    </definition>
12
</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.

1
<xsl:for-each select="...">
2
    <xsl:sort select="..."/>
3
    ...
1
<xsl:apply-templates select="...">
2
    <xsl:sort select="..."/>
3
</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().