XQuery
Introduction
XSLT (Extensible Stylesheet Language Transformations) est un langage de transformation de documents XML. Il est utilisé pour transformer un document XML en un autre format, tel que HTML, PDF ou même un autre document XML.
En XSLT, les transformations sont définies en utilisant des règles de correspondance (matching rules) qui spécifient les parties du document source à transformer et les modèles de sortie qui décrivent la structure et le contenu du document de sortie.
Par exemple, supposons que nous ayons un document XML représentant une liste de courses et que nous voulions le transformer en une liste HTML pour l'affichage sur une page Web. Nous pourrions utiliser XSLT pour créer une feuille de style qui définit comment chaque élément de la liste doit être affiché. Voici un exemple simplifié de cette feuille de style :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>Ma liste de courses</title>
</head>
<body>
<h1>Ma liste de courses</h1>
<ul>
<xsl:apply-templates/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<li><xsl:value-of select="."/></li>
</xsl:template>
</xsl:stylesheet>
Dans cet exemple, nous avons deux règles de correspondance :
- La première règle correspond à la racine du document (correspondant à l'élément liste). Elle définit la structure de la page HTML et applique les modèles de sortie aux enfants de l'élément liste.
- La deuxième règle correspond à chaque élément item de la liste. Elle définit comment chaque élément doit être affiché dans la liste HTML.
Si nous appliquons cette feuille de style à notre document XML de liste de courses :
<liste>
<item>Lait</item>
<item>Pain</item>
<item>Beurre</item>
</liste>
Le résultat sera un document HTML qui ressemble à ceci :
<html>
<head>
<title>Ma liste de courses</title>
</head>
<body>
<h1>Ma liste de courses</h1>
<ul>
<li>Lait</li>
<li>Pain</li>
<li>Beurre</li>
</ul>
</body>
</html>
Ceci est juste un exemple simplifié, mais XSLT peut être utilisé pour des transformations beaucoup plus complexes et avancées.
Etape à réaliser
Voici les étapes simples pour créer une feuille de style XSLT pour transformer un document XML :
-
Ouvrir un éditeur de texte ou un environnement de développement intégré (IDE) qui prend en charge la création de fichiers XSLT.
-
Créer un nouveau fichier et lui donner un nom avec l'extension ".xsl" ou ".xslt". Par exemple, "monfichier.xsl".
-
Définir le prologue XML en tant que première ligne de la feuille de style XSLT. Cette ligne doit inclure l'attribut version, qui spécifie la version de XSLT que vous utilisez. Par exemple :
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
Définir des modèles de correspondance pour les éléments du document XML source que vous souhaitez transformer. Chaque modèle doit être défini à l'aide de la balise xsl:template et inclure un attribut match qui spécifie l'élément XML à transformer. Par exemple :
<xsl:template match="personne"> <!-- Le code pour transformer l'élément "personne" --> </xsl:template>
-
À l'intérieur de chaque modèle, vous pouvez utiliser des instructions XSLT pour manipuler les données. Par exemple, vous pouvez utiliser la balise xsl:value-of pour extraire la valeur d'un élément XML et l'afficher dans le résultat transformé.
<xsl:template match="personne"> <h1> Nom : <xsl:value-of select="nom"/> </h1> <p> Age : <xsl:value-of select="age"/> </p> </xsl:template>
-
Ajouter des éléments HTML ou XML à la sortie de la transformation, en utilisant des balises normales et des balises XSLT. Par exemple :
<xsl:template match="personne"> <div> <h1> Nom : <xsl:value-of select="nom"/> </h1> <p> Age : <xsl:value-of select="age"/> </p> <ul> <xsl:apply-templates select="competences/competence"/> </ul> </div> </xsl:template>
Dans cet exemple, nous ajoutons une liste de compétences en utilisant l'instruction xsl:apply-templates pour appliquer un autre modèle de correspondance à chaque élément competence.
-
Fermer la feuille de style XSLT en ajoutant la balise de fermeture
</xsl:stylesheet>
. -
Enregistrer le fichier XSLT.
Une fois que vous avez créé la feuille de style XSLT, vous pouvez l'appliquer à un document XML source en utilisant un processeur XSLT tel que Saxon ou Xalan. Le résultat sera un nouveau document XML ou HTML qui est le résultat de la transformation.
XQuery
Différence entre for let et for
Introduction
XQuery est un langage de requête pour extraire des données à partir de sources de données XML. Il est conçu pour être utilisé avec d'autres technologies XML telles que XPath, XSLT et XML Schema.
XQuery permet d'effectuer des requêtes sur des documents XML en utilisant une syntaxe similaire à celle des langages de programmation tels que Java et C#. Il permet également de filtrer, trier, regrouper et aggréger des données XML.
Voici un exemple simple de requête XQuery :
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>Les Misérables</title>
<author>Victor Hugo</author>
<price>12.99</price>
</book>
<book>
<title>Les Trois Mousquetaires</title>
<author>Alexandre Dumas</author>
<price>9.99</price>
</book>
<book>
<title>Le Comte de Monte-Cristo</title>
<author>Alexandre Dumas</author>
<price>15.99</price>
</book>
</books>
Supposons que nous voulions extraire le titre et le prix de tous les livres dont le prix est supérieur à 10. Nous pouvons utiliser XQuery pour cela. Voici la requête XQuery correspondante :
for $book in doc("books.xml")//book
where $book/price > 10
return concat($book/title, ": ", $book/price)
Cette requête parcourt tous les éléments book du document XML et ne retourne que ceux dont le prix est supérieur à 10. Pour chaque livre sélectionné, elle concatène le titre et le prix en une seule chaîne de caractères, en utilisant la fonction concat(). Voici le résultat obtenu :
Les Misérables: 12.99
Le Comte de Monte-Cristo: 15.99
Comme nous pouvons le voir, la requête a retourné les titres et les prix des deux livres dont le prix est supérieur à 10, en les concaténant dans une seule chaîne de caractères pour chaque livre.