Les outils déstinés à transformer les documents XML représentent ceux-ci comme un arbre de noeuds XML.
On peut transformer les documents XML à l'aide de :
Considérons l'arbre suivant
<?xml version="1.0"?>
<racine>
<encyclopedie nom="Wikipedia" site="http://fr.wikipedia.org/">
<article nom="XPath">
<auteurs>
<auteur>
<nom>Dupont</nom>
</auteur>
<auteur>
<nom>Dubois</nom>
</auteur>
</auteurs>
</article>
</encyclopedie>
</racine>
Exemple de requêtes
| Requête (expression XPath) | Résultat obtenu |
|---|---|
| /article | Sélectionne le noeud article |
| //article | Sélectionne tous les noeuds article. |
| //article[@nom='XPath'] | Sélectionne tous les noeuds article ayant un attribut nom dont la valeur est égale à XPath |
Ce mode de requêtage est utilisé dans le XSLT.
Permet de créer des liens d'un document XML vers un autre (équivalent des hrefs en HTML)
<!-- Exemple de lien XLink -->
<paragraphe>Voici <ancre xlink:type="simple" xlink:href="#UnEntete">un lien</ancre> vers l'en-tête.</paragraphe>
Ou des liens vers une partie du document à l'aide des XPointer (équivalent des ancres HTML).
Utilisé pour la transformation de document XML vers d'autres formats.
Le XSL permet de transformer un document XML vers le
Un fichier XSLT va décrire un ensemble de règles de transformation s'appliquant à ou plusieurs noeuds.
Exemple de transformation du XML vers XML à l'aide de XSLT
<!-- Fichier de départ -->
<?xml version="1.0" ?>
<persons>
<person username="JS1">
<name>John</name>
<family-name>Smith</family-name>
</person>
<person username="MI1">
<name>Morka</name>
<family-name>Ismincius</family-name>
</person>
</persons>
<!-- Feuille de style XSLT -->
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/persons">
<root>
<xsl:apply-templates select="person"/>
</root>
</xsl:template>
<xsl:template match="person">
<name username="{@username}">
<xsl:value-of select="name" />
</name>
</xsl:template>
</xsl:stylesheet>
<!-- Résultat -->
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name username="JS1">John</name>
<name username="MI1">Morka</name>
</root>
Exemple de transformation du XML vers le HTML à l'aide de XSLT
<!-- fichier de base -->
<personne>
<nom>Dupond</nom>
<prenom>Toto</prenom>
</personne>
<!-- On désire avoir l'output suivant -->
<html>
<body>
<p>
<b>Dupond</b>
Toto
</p>
</body>
</html>
<!-- Feuille de style XSLT -->
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="personne">
<html>
<body>
<p>
<b>
<xsl:value-of-select="nom"/>
</b>
<xsl:value-of-select="prenom"/>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Le
value-of-selectréalise en fait une requête XPath.
La Document Type Definition (DTD), ou Définition de Type de Document, est un document permettant de décrire un modèle de document SGML ou XML. Le modèle est décrit comme une grammaire de classe de documents.
<!-- exemple de DTD -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE liste_de_gens [
<!ELEMENT liste_de_gens (personne)*>
<!ELEMENT personne (nom, date_de_naissance?, genre?, numero_de_secu?)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT date_de_naissance (#PCDATA)>
<!ELEMENT genre (#PCDATA | masculin | féminin) "féminin">
<!ELEMENT numero_de_secu (#PCDATA)>
]>
<liste_de_gens>
<personne>
<nom>Fred Bloggs</nom>
<date_de_naissance>2008-11-27</date_de_naissance>
<genre>masculin</genre>
</personne>
</liste_de_gens>
Permet de définir la structure et le type de contenu d'un document XML. Cette définition permet notamment de vérifier la validité de ce document.
<!-- exemple de XSD -->
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="personne">
<xs:complexType>
<xs:sequence>
<xs:element name="nom" type="xs:string" />
<xs:element name="prenom" type="xs:string" />
<xs:element name="date_naissance" type="xs:date" />
<xs:element name="etablissement" type="xs:string" />
<xs:element name="num_tel" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<!-- fichier xml validé avec XSD -->
<?xml version="1.0" encoding="UTF-8"?>
<personne xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="personne.xsd">
<nom>MBODJ</nom>
<prenom>Babacar</prenom>
<date_naissance>1996-10-06</date_naissance>
<etablissement>NIIT</etablissement>
<num_tel>764704140</num_tel>
</personne>
Il existe beaucoup plus de types dans le XSD que dans le DTD
XSD amène cependant plusieurs différences avec les DTD
<?xml version="1.0" encoding="UTF8">
<!DOCTYPE Patient [
<!ELEMENT Patient(...)>
<!ELEMENT Date EMPTY>
<!ATTLIST Date jj CDATA #REQUIRED
Date mm CDATA #REQUIRED
Date aa CDATA #REQUIRED>
<!ELEMENT Nom (#PCDATA)>
<!ELEMENT Diagnostic(Maladie)*>
<!ATTLIST Diagnostic Catégorie CDATA #REQUIRED>
<!ELEMENT Maladie(#PCDATA)>
<!ELEMENT Prescriptions(Medoc)*>
<!ELEMENT Medoc(#PCDATA)>
<!ATTLIST Medoc Posologie CDATA #REQUIRED>
]>
Sur le partiel de l'année dernière
<?xml version="1.0" encoding="UTF8">
<xs:schema xmlns="http://.../XMLSchema">
<xs:element name="Patient">
<xs:complexType>
<xs:sequence>
<xs:element name="date">
<xs:complexType>
<xs:attribute name="jj" type="xs:string" use="required" />
<xs:attribute name="dd" type="xs:string" use="required" />
<xs:attribute name="aa" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="nom" type="xs:string" />
<xs:element name="morphologie" type="morphologie">
<xs:complexType>
<xs:attribute name="poids" type="xs:string" use="required" />
<xs:attribute name="taille" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="profession" type="xs:string">
<xs:element name="diagnostique">
<xs:complexType>
<xs:element name="maladie" maxOccurs="unbounded" type="xs:string"/>
<xs:attribute name="categorie" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="prescriptions">
<xs:complexType>
<xs:element name="medoc" maxOccurs="unbounded" type="xs:string">
<xs:complexType>
<xs:attribute name="posologie" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:complexType>
</xs:element name="Patient">