1-A partir du fichier XML suivant (Click here), Ecrire un fichier de transformation XSLT qui donne le résultat ci-dessous.
<?xml version="1.0" encoding="UTF-8"?>
<chimie>
<liste_corps>
<corps>
<nom>eau</nom>
<composant ref="H" nb="2"/>
<composant ref="O" nb="1"/>
</corps>
<corps>
<nom>méthane</nom>
<composant ref="C" nb="1"/>
<composant ref="H" nb="4"/>
</corps>
<corps>
<nom>éthane</nom>
<composant ref="C" nb="2"/>
<composant ref="H" nb="6"/>
</corps>
<corps>
<nom>acide sulfurique</nom>
<composant ref="H" nb="2"/>
<composant ref="S" nb="1"/>
<composant ref="O" nb="4"/>
</corps>
<corps>
<nom>soude</nom>
<composant ref="Na" nb="1"/>
<composant ref="O" nb="1"/>
<composant ref="H" nb="1"/>
</corps>
<corps>
<nom>acide nitrique</nom>
<composant ref="H" nb="1"/>
<composant ref="N" nb="1"/>
<composant ref="O" nb="3"/>
</corps>
</liste_corps>
<liste_atomes>
<atome symbole="H" Z="1">
<nom>hydrogène</nom>
<couche>1</couche>
<periph>1</periph>
<masse>1</masse>
</atome>
<atome symbole="He" Z="2">
<nom>hélium</nom>
<couche>1</couche>
<periph>8</periph>
<masse>4</masse>
<type>gaz rare</type>
</atome>
<atome symbole="C" Z="6">
<nom>carbone</nom>
<couche>2</couche>
<periph>4</periph>
<masse>12</masse>
<type>non métal</type>
</atome>
<atome symbole="N" Z="7">
<nom>azote</nom>
<couche>2</couche>
<periph>5</periph>
<masse>14</masse>
<type>non métal</type>
</atome>
<atome symbole="O" Z="8">
<nom>oxygène</nom>
<couche>2</couche>
<periph>6</periph>
<masse>16</masse>
<type>non métal</type>
</atome>
<atome symbole="F" Z="9">
<nom>fluor</nom>
<couche>2</couche>
<periph>7</periph>
<masse>19</masse>
<type>non métal</type>
</atome>
<atome symbole="Ne" Z="10">
<nom>néon</nom>
<couche>2</couche>
<periph>8</periph>
<masse>20</masse>
<type>gaz rare</type>
</atome>
<atome symbole="Na" Z="11">
<nom>sodium</nom>
<couche>3</couche>
<periph>1</periph>
<masse>23</masse>
<type>métal alcalin</type>
</atome>
<atome symbole="S" Z="16">
<nom>soufre</nom>
<couche>3</couche>
<periph>6</periph>
<masse>32</masse>
<type>non métal</type>
</atome>
<atome symbole="Cl" Z="17">
<nom>chlore</nom>
<couche>3</couche>
<periph>7</periph>
<masse>35.5</masse>
<type>non métal</type>
</atome>
<atome symbole="Ar" Z="18">
<nom>argon</nom>
<couche>3</couche>
<periph>8</periph>
<masse>40</masse>
<type>gaz rare</type>
</atome>
</liste_atomes>
</chimie>
Résultat attendu :
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head/>
<body>
<h2>Composition des corps chimiques</h2>
<ul>
<xsl:apply-templates select="//corps" mode="composition">
<xsl:sort select="./nom"/>
</xsl:apply-templates>
</ul>
<h2>Formules brutes</h2>
<table border="2">
<tr align="center">
<th>nom du corps chimique</th>
<th>formule brute</th>
</tr>
<xsl:apply-templates select="//corps" mode="fbrutes">
<xsl:sort select="./nom"/>
</xsl:apply-templates>
</table>
<ol>
<h2>Liens</h2>
<xsl:apply-templates select="//atome[./@symbole=//corps/composant/@ref]"/>
</ol>
</body>
</html>
</xsl:template>
<xsl:template match="corps" mode="fbrutes">
<tr align="center">
<td>
<xsl:value-of select="./nom"/>
</td>
<td>
<xsl:for-each select="./composant">
<xsl:value-of select="./@ref"/>
<xsl:if test="./@nb > 1">
<sub>
<xsl:value-of select="./@nb"/>
</sub>
</xsl:if>
</xsl:for-each>
</td>
</tr>
</xsl:template>
<xsl:template match="corps" mode="composition">
<li>
<b> <xsl:value-of select="./nom"/> : </b>
(
<xsl:for-each select="composant">
<xsl:variable name="s" select="./@ref"/>
<a href="{./@ref}.html">
<xsl:value-of select="//atome[@symbole= $s]/nom"/>
</a>
</xsl:for-each>
)
</li>
</xsl:template>
<!-- On peut utiliser le tag : result-document -->
<xsl:template match="atome">
<h3> <xsl:value-of select="./nom"/> </h3>
<ul>
<li> Symbole :
<b> <xsl:value-of select="./@symbole"/> </b>
</li>
<li> Nombre de couches électroniques :
<b> <xsl:value-of select="./couche"/> </b>
</li>
<li> Nombre d'électrons périphériques :
<b> <xsl:value-of select="./periph"/> </b>
</li>
<li> Masse atomique :
<b> <xsl:value-of select="./masse"/> </b>
</li>
<li> Famille :
<b> <xsl:value-of select="./type"/> </b>
</li>
</ul>
</xsl:template>
</xsl:stylesheet>
2- Écrire un document XML valide (conforme à la DTD ci-dessus) pour l'ennoncer suivant : Calculer la valeur de l'expression " x a la puissance quatre plus racine cubique de cinq le tous sur sept fois racine de trois " lorsque x prend la valeur quatre. (il faut transformer cette énoncer en XML, pas seulement la formule)
<!DOCTYPE textemath [
<!-- DTD pour décrire un texte contenant des formules mathématiques -->
<!ELEMENT textemath ((texte | formule)+) >
<!ELEMENT texte (#PCDATA) >
<!ELEMENT formule (valeur|somme|difference|produit|fraction|racine|puissance|variable) >
<!ELEMENT valeur (#PCDATA)>
<!ELEMENT somme (op1, op2)>
<!ELEMENT difference (op1, op2)>
<!ELEMENT produit (op1, op2)>
<!ELEMENT fraction (op1, op2)>
<!ELEMENT racine (op1)>
<!ATTLIST racine ordre CDATA #IMPLIED>
<!ELEMENT puissance (op1)
<!ATTLIST puissance exposant CDATA #REQUIRED>
<!ELEMENT op1 (valeur|formule|variable)>
<!ELEMENT op2 (valeur|formule|variable)>
]>
<?xml version="1.0" encoding="UTF-8"?>
<textemath>
<texte>Calculer la valeur de l'expression </texte>
<formule>
<fraction>
<op1>
<formule>
<somme>
<op1>
<formule>
<puissance exposant="4">
<op1>
<variable> x </variable>
</op1>
</puissance>
</formule>
</op1>
<op2>
<formule>
<racine ordre="3">
<op1>
<valeur>5</valeur>
</op1>
</racine>
</formule>
</op2>
</somme>
</formule>
</op1>
<op2>
<formule>
<produit>
<op1>
<valeur>7</valeur>
</op1>
<op2>
<racine>
<op1>
<valeur>3</valeur>
</op1>
</racine>
</op2>
</produit>
</formule>
</op2>
</fraction>
<formule>
<texte>lorsque </texte>
<formule>
<variable>x</variable>
</formule>
<texte> prend la valeur </texte>
<formule>
<valeur>4</valeur>
</formule>
</textemath>