CHAPITRE 1 : INTRODUCTION AU XML
1. Qu'est-ce que XML ?
XML (Extensible Markup Language) est un langage de balisage extensible utilisé pour
structurer, stocker et transporter des données de manière lisible par les humains et les
machines. Contrairement à HTML, qui est utilisé pour afficher des données, XML est conçu
pour décrire et structurer des informations de manière flexible.
2. Caractéristiques de XML
1. Lisibilité Humaine : Les fichiers XML sont lisibles par les humains, ce qui facilite leur
compréhension et leur modification.
2. Extensible : XML permet aux utilisateurs de définir leurs propres balises, ce qui offre une
grande flexibilité dans la structuration des données.
3. Auto-descriptif : Les balises XML contiennent des informations sur les données qu'elles
entourent, rendant le fichier auto-descriptif.
4. Indépendance de la Plateforme : XML est indépendant de la plateforme et peut être utilisé
dans différents environnements et applications.
3. Structure d'un Document XML
Un document XML est composé de plusieurs éléments clés :
1. Prologue : Il comprend la déclaration XML et les instructions de traitement.
2. Éléments : Les éléments sont les unités de base de XML et sont définis par des balises de
début et de fin.
3. Attributs : Les attributs fournissent des informations supplémentaires sur les éléments.
4. Commentaires : Les commentaires sont utilisés pour inclure des notes ou des descriptions et
sont ignorés par les parseurs XML.
4. Exemple de Document XML
<?xml version="1.0" encoding="UTF-8"?>
<livres>
<livre id="1">
<titre>XML pour les débutants</titre>
<auteur>Jean Dupont</auteur>
<année>2023</année>
<prix devise="EUR">29.99</prix>
</livre>
<livre id="2">
<titre>Maîtriser XML</titre>
<auteur>Marie Curie</auteur>
1
<année>2021</année>
<prix devise="USD">39.99</prix>
</livre>
</livres>
5. Composants XML
5.1. Prologue XML
Le prologue XML est facultatif mais recommandé. Il spécifie la version XML et l'encodage
utilisé.
<?xml version="1.0" encoding="UTF-8"?>
5.2. Éléments XML
Les éléments sont définis par des balises de début et de fin.
<livre>
<titre>XML pour les débutants</titre>
<auteur>Jean Dupont</auteur>
</livre>
5.3. Attributs XML
Les attributs fournissent des informations supplémentaires sur les éléments et sont définis
dans la balise de début.
<livre id="1" genre="informatique">
<titre>XML pour les débutants</titre>
</livre>
6. Commentaires XML
Les commentaires commencent par <!-- et se terminent par -->.
<!-- Ceci est un commentaire -->
<livre>
<titre>XML pour les débutants</titre>
</livre>
7. Règles de Syntaxe XML
1. Balises appariées : Chaque élément doit avoir une balise de début et une balise de fin.
2. Sensibilité à la casse : Les balises XML sont sensibles à la casse.
3. Nesting approprié : Les éléments doivent être correctement imbriqués.
4. Attributs entre guillemets : Les valeurs des attributs doivent être placées entre guillemets.
Exemple d'Erreur Syntaxique
<livre>
<titre>XML pour les débutants</Titre> <!-- Balise de fin incorrecte -->
</livre>
2
8. DTD et Schéma XML
Pour garantir la validité des documents XML, on utilise des DTD (Document Type
Definition) ou des schémas XML.
Exemple de DTD
<!DOCTYPE livres [
<!ELEMENT livres (livre+)>
<!ELEMENT livre (titre, auteur, année, prix)>
<!ATTLIST livre id ID #REQUIRED>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT année (#PCDATA)>
<!ELEMENT prix (#PCDATA)>
<!ATTLIST prix devise CDATA #REQUIRED>
]>
Expliquons en détail cet exemple de DTD (Document Type Definition) :
<!DOCTYPE livres [
<!ELEMENT livres (livre+)>
<!ELEMENT livre (titre, auteur, année, prix)>
<!ATTLIST livre id ID #REQUIRED>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT année (#PCDATA)>
<!ELEMENT prix (#PCDATA)>
<!ATTLIST prix devise CDATA #REQUIRED>
]>
Structure et Composants de la DTD
Cette DTD définit la structure et les contraintes pour un document XML contenant des
informations sur des livres.
1. Élément Racine
<!DOCTYPE livres [
La DTD commence par la déclaration du type de document avec <!DOCTYPE> et spécifie que
l'élément racine du document XML est livres.
3
2. Déclaration de l'Élément livres
<!ELEMENT livres (livre+)>
Cette ligne déclare que l'élément livres est composé d'un ou plusieurs (+) éléments livre.
Cela signifie que le document XML doit contenir au moins un élément livre à l'intérieur de
l'élément livres.
3. Déclaration de l'Élément livre
<!ELEMENT livre (titre, auteur, année, prix)>
Cette ligne déclare que l'élément livre est composé de quatre sous-éléments : titre,
auteur, année et prix, dans cet ordre spécifique.
4. Déclaration d'Attribut pour l'Élément livre
<!ATTLIST livre id ID #REQUIRED>
Cette ligne déclare que l'élément livre doit avoir un attribut id. Cet attribut est de type ID, ce
qui signifie qu'il doit être unique dans le document. #REQUIRED indique que cet attribut est
obligatoire pour chaque élément livre.
5. Déclaration des Éléments titre, auteur, année, et prix
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT année (#PCDATA)>
<!ELEMENT prix (#PCDATA)>
Ces lignes déclarent que les éléments titre, auteur, année et prix contiennent des données
textuelles. #PCDATA (Parsed Character Data) signifie que le contenu de ces éléments est du
texte qui peut être analysé par le parseur XML.
6. Déclaration d'Attribut pour l'Élément prix
<!ATTLIST prix devise CDATA #REQUIRED>
Cette ligne déclare que l'élément prix doit avoir un attribut devise. Cet attribut est de type
CDATA (Character Data), ce qui signifie qu'il peut contenir n'importe quelle donnée textuelle.
#REQUIRED indique que cet attribut est obligatoire pour chaque élément prix.
Exemple de Document XML Validé par cette DTD
Pour illustrer comment cette DTD peut être utilisée, voici un exemple de document XML
conforme à cette DTD :
4
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE livres [
<!ELEMENT livres (livre+)>
<!ELEMENT livre (titre, auteur, année, prix)>
<!ATTLIST livre id ID #REQUIRED>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT année (#PCDATA)>
<!ELEMENT prix (#PCDATA)>
<!ATTLIST prix devise CDATA #REQUIRED>
]>
<livres>
<livre id="b1">
<titre>XML pour les débutants</titre>
<auteur>Jean Dupont</auteur>
<année>2023</année>
<prix devise="EUR">29.99</prix>
</livre>
<livre id="b2">
<titre>Maîtriser XML</titre>
<auteur>Marie Curie</auteur>
<année>2021</année>
<prix devise="USD">39.99</prix>
</livre>
</livres>
Explication du Document XML
Prologue XML : La déclaration <?xml version="1.0" encoding="UTF-8"?>
indique la version et l'encodage du document XML.
DOCTYPE : La déclaration <!DOCTYPE livres [...]> inclut la DTD directement
dans le document XML.
Élément Racine : <livres> est l'élément racine contenant tous les éléments livre.
Éléments livre : Chaque élément livre a des sous-éléments titre, auteur, année,
et prix dans l'ordre spécifié par la DTD.
Attributs : Chaque élément livre a un attribut id unique, et chaque élément prix a
un attribut devise.
Cette structure garantit que le document XML est bien formé et conforme aux règles définies
par la DTD, assurant ainsi une validation correcte et une manipulation fiable des données.
5
Exemple de Schéma XML
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="livres">
<xs:complexType>
<xs:sequence>
<xs:element name="livre" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="titre" type="xs:string"/>
<xs:element name="auteur" type="xs:string"/>
<xs:element name="année" type="xs:integer"/>
<xs:element name="prix">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="devise"
type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:ID"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
9. Conclusion
XML est un outil puissant pour structurer et échanger des données. Sa flexibilité et son
extensibilité en font un choix populaire dans de nombreux domaines, allant des services web à
la configuration d'applications. Une bonne maîtrise de la syntaxe et des schémas XML est
essentielle pour tirer pleinement parti de ses capacités.
6
CHAPITRE 2 : MANIPULATION DE DONNEES XML
1. Intr oduction
XML (Extensible Markup Language) est un format de fichier largement utilisé pour
structurer, stocker et transporter des données. Python offre plusieurs bibliothèques pour
travailler avec XML, les plus couramment utilisées étant xml.etree.ElementTree, lxml, et
xml.dom.minidom. Ce cours vous guidera à travers l'utilisation de ces bibliothèques pour lire,
écrire, modifier et valider des documents XML.
2. Lecture de Fichiers XML
2.1. Utilisation de xml.etree.ElementTree
xml.etree.ElementTree est une bibliothèque intégrée à Python, simple et efficace pour la
manipulation de XML.
Exemple de Lecture
import xml.etree.ElementTree as ET
# Chargement et analyse du fichier XML
tree = ET.parse('livres.xml')
root = tree.getroot()
# Parcours des éléments XML
for livre in root.findall('livre'):
titre = livre.find('titre').text
auteur = livre.find('auteur').text
annee = livre.find('année').text
prix = livre.find('prix').text
print(f'Titre: {titre}, Auteur: {auteur}, Année: {annee}, Prix:
{prix}')
2.2. Utilisation de lxml
lxml est une bibliothèque puissante pour traiter XML et HTML, offrant des fonctionnalités
avancées et une performance améliorée.
Exemple de Lecture
from lxml import etree
# Lecture du fichier XML
tree = etree.parse('livres.xml')
root = tree.getroot()
7
# Parcours des éléments XML
for livre in root.findall('livre'):
titre = livre.find('titre').text
auteur = livre.find('auteur').text
annee = livre.find('année').text
prix = livre.find('prix').text
print(f'Titre: {titre}, Auteur: {auteur}, Année: {année}, Prix:
{prix}')
3. Écriture de Fichiers XML
3.1. Utilisation de xml.etree.ElementTree
Exemple de Création et d'Écriture
import xml.etree.ElementTree as ET
# Création de la structure XML
livres = ET.Element('livres')
livre1 = ET.SubElement(livres, 'livre', id='1')
ET.SubElement(livre1, 'titre').text = 'XML pour les débutants'
ET.SubElement(livre1, 'auteur').text = 'Jean Dupont'
ET.SubElement(livre1, 'année').text = '2023'
ET.SubElement(livre1, 'prix', devise='EUR').text = '29.99'
# Écriture dans un fichier XML
tree = ET.ElementTree(livres)
tree.write('nouveaux_livres.xml', encoding='utf-8', xml_declaration=True)
3.2. Utilisation de lxml
Exemple de Création et d'Écriture
from lxml import etree
# Création de la structure XML
livres = etree.Element('livres')
livre1 = etree.SubElement(livres, 'livre', id='1')
etree.SubElement(livre1, 'titre').text = 'XML pour les débutants'
etree.SubElement(livre1, 'auteur').text = 'Jean Dupont'
etree.SubElement(livre1, 'année').text = '2023'
etree.SubElement(livre1, 'prix', devise='EUR').text = '29.99'
# Écriture dans un fichier XML
tree = etree.ElementTree(livres)
8
tree.write('nouveaux_livres.xml', pretty_print=True, xml_declaration=True,
encoding='utf-8')
4. Modification de Fichiers XML
4.1. Exemple de Modification avec xml.etree.ElementTree
import xml.etree.ElementTree as ET
# Chargement du fichier XML
tree = ET.parse('livres.xml')
root = tree.getroot()
# Modification d'un élément
for livre in root.findall('livre'):
annee = livre.find('année')
if annee is not None and annee.text == '2023':
annee.text = '2024'
# Écriture des modifications dans le fichier XML
tree.write('livres_modifies.xml', encoding='utf-8', xml_declaration=True)
4.2. Exemple de Modification avec lxml
from lxml import etree
# Lecture du fichier XML
tree = etree.parse('livres.xml')
root = tree.getroot()
# Modification d'un élément
for livre in root.findall('livre'):
annee = livre.find('année')
if annee is not None and annee.text == '2023':
annee.text = '2024'
# Écriture des modifications dans le fichier XML
tree.write('livres_modifies.xml', pretty_print=True, xml_declaration=True,
encoding='utf-8')
5. Validation de Fichiers XML avec un Schéma XSD
5.1. Exemple de Validation avec lxml
Fichier XML (livres.xml)
<?xml version="1.0" encoding="UTF-8"?>
9
<livres>
<livre id="1">
<titre>XML pour les débutants</titre>
<auteur>Jean Dupont</auteur>
<année>2023</année>
<prix devise="EUR">29.99</prix>
</livre>
</livres>
Fichier XSD (livres.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="livres">
<xs:complexType>
<xs:sequence>
<xs:element name="livre" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="titre" type="xs:string"/>
<xs:element name="auteur" type="xs:string"/>
<xs:element name="année" type="xs:integer"/>
<xs:element name="prix">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="devise"
type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:ID"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Validation avec lxml
from lxml import etree
10
# Chargement du fichier XML
xml_file = 'livres.xml'
xml_doc = etree.parse(xml_file)
# Chargement du fichier XSD
xsd_file = 'livres.xsd'
with open(xsd_file, 'rb') as f:
xsd_doc = etree.parse(f)
xsd_schema = etree.XMLSchema(xsd_doc)
# Validation du fichier XML
is_valid = xsd_schema.validate(xml_doc)
print(f"Le fichier XML est valide: {is_valid}")
# Affichage des erreurs de validation, le cas échéant
if not is_valid:
for error in xsd_schema.error_log:
print(error.message)
6. HTML vs. XML : Concepts et Utilisations
6.1. HTML (HyperText Markup Language)
Objectif
HTML est un langage de balisage utilisé principalement pour créer et structurer des pages
web. Il définit la structure du contenu web et permet aux navigateurs d'afficher du texte, des
images, des liens, des formulaires et d'autres éléments interactifs. HTML est conçu pour
afficher des informations et pour structurer visuellement du contenu.
Principales Caractéristiques
1. Balises Prédéfinies : HTML utilise un ensemble fixe de balises prédéfinies comme
<h1>, <p>, <a>, <div>, etc. Chaque balise a une signification spécifique et une
fonction liée à la présentation ou à la structuration du contenu.
2. Affichage : Les balises HTML sont principalement utilisées pour décrire comment le
contenu doit être rendu par les navigateurs web.
3. Flexibilité Limitée : Bien qu'HTML5 ait introduit de nouvelles balises et
fonctionnalités, les utilisateurs ne peuvent pas créer leurs propres balises. HTML est
limité aux balises standard définies par la spécification HTML.
11
4. Indépendance des Données : HTML est étroitement lié à la manière dont les données
sont affichées. Il ne sépare pas bien le contenu de la présentation.
Exemple
<!DOCTYPE html>
<html>
<head>
<title>Exemple HTML</title>
</head>
<body>
<h1>Bienvenue à ma page web</h1>
<p>Ceci est un paragraphe de texte.</p>
<a href="https://www.example.com">Lien vers Example.com</a>
</body>
</html>
6.2. XML (Extensible Markup Language)
Objectif
XML est un langage de balisage extensible conçu pour décrire et structurer des données de
manière flexible et indépendante de la présentation. XML est utilisé pour stocker et
transporter des données, sans se préoccuper de leur affichage. Il permet aux utilisateurs de
définir leurs propres balises en fonction de leurs besoins spécifiques, facilitant ainsi l'échange
d'informations entre différentes systèmes et applications.
Principales Caractéristiques
1. Balises Personnalisables : XML permet aux utilisateurs de définir leurs propres
balises, offrant une grande flexibilité pour structurer les données selon les besoins
spécifiques d'une application ou d'un domaine.
2. Séparation du Contenu et de la Présentation : XML se concentre uniquement sur la
structuration des données. La présentation de ces données est généralement gérée par
d'autres technologies comme XSLT, CSS ou des scripts côté serveur/clients.
3. Interchangeabilité des Données : XML est conçu pour être utilisé comme un format
d'échange de données entre différentes applications et systèmes, indépendamment de
la manière dont ces données seront affichées ou utilisées.
4. Extensibilité : XML est facilement extensible. Les utilisateurs peuvent créer de
nouveaux éléments et attributs sans se soucier des conflits avec d'autres balises
standard.
Exemple
<?xml version="1.0" encoding="UTF-8"?>
12
<livres>
<livre id="1">
<titre>XML pour les débutants</titre>
<auteur>Jean Dupont</auteur>
<année>2023</année>
<prix devise="EUR">29.99</prix>
</livre>
<livre id="2">
<titre>Maîtriser XML</titre>
<auteur>Marie Curie</auteur>
<année>2021</année>
<prix devise="USD">39.99</prix>
</livre>
</livres>
6.3. Comparaison Directe
1. Finalité :
o HTML : Utilisé pour afficher et structurer visuellement le contenu web.
o XML : Utilisé pour structurer, stocker et transporter des données sans se
soucier de leur présentation.
2. Balises :
o HTML : Utilise des balises prédéfinies et standardisées.
o XML : Permet la création de balises personnalisées définies par l'utilisateur.
3. Présentation :
o HTML : La présentation est une partie intégrante du langage. Les balises
HTML décrivent comment le contenu doit être affiché par le navigateur.
o XML : La présentation est séparée des données. XML ne contient pas de
directives sur la manière dont les données doivent être affichées.
4. Extensibilité :
o HTML : Limité aux balises et attributs définis par la spécification HTML.
o XML : Extensible par définition, permettant aux utilisateurs de créer des
balises et attributs selon leurs besoins.
6.4. Utilisation Conjointe
HTML et XML peuvent être utilisés ensemble. Par exemple, des données structurées en XML
peuvent être transformées en HTML pour l'affichage à l'aide de XSLT (Extensible Stylesheet
Language Transformations). Voici un exemple simple :
Fichier XML (livres.xml)
13
<?xml version="1.0" encoding="UTF-8"?>
<livres>
<livre id="1">
<titre>XML pour les débutants</titre>
<auteur>Jean Dupont</auteur>
<année>2023</année>
<prix devise="EUR">29.99</prix>
</livre>
<livre id="2">
<titre>Maîtriser XML</titre>
<auteur>Marie Curie</auteur>
<année>2021</année>
<prix devise="USD">39.99</prix>
</livre>
</livres>
Fichier XSLT (livres.xsl)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Liste des Livres</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>ID</th>
<th>Titre</th>
<th>Auteur</th>
<th>Année</th>
<th>Prix</th>
</tr>
<xsl:for-each select="livres/livre">
<tr>
<td><xsl:value-of select="@id" /></td>
<td><xsl:value-of select="titre" /></td>
<td><xsl:value-of select="auteur" /></td>
<td><xsl:value-of select="année" /></td>
<td><xsl:value-of select="prix" /> <xsl:value-of
select="prix/@devise" /></td>
</tr>
14
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Ce fichier XSLT transforme le contenu du fichier XML en une page HTML formatée pour
l'affichage dans un navigateur.
En résumé, HTML est utilisé pour afficher et structurer visuellement le contenu, tandis que
XML est utilisé pour décrire et structurer des données de manière flexible et extensible. Les
deux technologies peuvent être utilisées ensemble pour créer des applications web riches en
fonctionnalités, avec une séparation claire entre les données et leur présentation.
7. Relation entre un document XML ( prologue XML, éléments XML,
Attributs XML, commentaires XML) et DTD et Schéma XML
Les documents XML, les DTD (Document Type Definition) et les schémas XML sont
interconnectés dans le cadre de la définition, de la validation et de la structuration des données
XML. Voici une explication détaillée de chaque composant et de leurs relations :
7.1. Document XML
Un document XML est composé de plusieurs éléments clés :
1. Prologue XML
Le prologue XML se trouve au début d'un document XML et inclut généralement une
déclaration XML. Il peut également inclure des instructions de traitement et des déclarations
de type de document (DTD).
Exemple
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
2. Éléments XML
15
Les éléments XML sont les unités de base d'un document XML. Ils sont délimités par des
balises de début et de fin et peuvent contenir du texte, d'autres éléments ou des attributs.
Exemple
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
3. Attributs XML
Les attributs XML fournissent des informations supplémentaires sur les éléments. Ils sont
définis dans les balises de début des éléments et prennent la forme de paires nom-valeur.
Exemple
<note priority="high">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
4. Commentaires XML
Les commentaires XML sont utilisés pour inclure des notes ou des remarques dans un
document XML sans affecter son contenu. Ils sont délimités par <!-- et -->.
Exemple
<!-- Ceci est un commentaire -->
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
7.2. DTD (Document Type Definition)
Une DTD définit la structure légale d'un document XML. Elle spécifie les éléments, les
attributs, et la hiérarchie des éléments d'un document XML, ainsi que les relations entre eux.
Exemple de DTD
DTD Interne
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
16
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
DTD Externe
Le DTD peut également être stocké dans un fichier externe et référencé dans le prologue
XML.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Contenu du Fichier note.dtd
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
7.3. Schéma XML (XSD - XML Schema Definition)
Un schéma XML est plus puissant et flexible qu'une DTD. Il définit la structure d'un
document XML de manière plus détaillée et stricte, en spécifiant les types de données, les
valeurs par défaut, les contraintes de longueur, etc.
Exemple de Schéma XML
Fichier XML (note.xml)
<?xml version="1.0" encoding="UTF-8"?>
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="note.xsd">
<to>Tove</to>
17
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Fichier Schéma XML (note.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
7.4. Relation entre Document XML, DTD et Schéma XML
Définition et Validation
Document XML : Contient les données réelles et la structure définie par des éléments
et des attributs. Un document XML peut être accompagné d'une DTD ou d'un schéma
XML pour assurer la validité structurelle des données.
DTD : Utilisé pour définir la structure de base et les règles d'un document XML. Il
spécifie quels éléments et attributs peuvent apparaître dans un document, ainsi que
leur hiérarchie et leurs relations. La DTD peut être incluse directement dans le
document XML ou être référencée depuis un fichier externe.
Schéma XML (XSD) : Fournit une validation plus précise et détaillée des documents
XML. Il permet de définir des types de données, des contraintes de longueur, des
valeurs par défaut et d'autres règles complexes. Un schéma XML est souvent utilisé
pour des applications qui nécessitent une validation stricte des données XML.
Validation
Lorsqu'un document XML est associé à une DTD ou à un schéma XML, il peut être validé
pour vérifier qu'il respecte les règles définies par la DTD ou le schéma. Cette validation
garantit que le document est bien formé et conforme à la structure attendue.
Exemple de Validation avec Python
18
Utilisation de lxml pour Valider avec un Schéma XML
from lxml import etree
# Chargement du fichier XML
xml_file = 'note.xml'
xml_doc = etree.parse(xml_file)
# Chargement du fichier XSD
xsd_file = 'note.xsd'
with open(xsd_file, 'rb') as f:
xsd_doc = etree.parse(f)
xsd_schema = etree.XMLSchema(xsd_doc)
# Validation du fichier XML
is_valid = xsd_schema.validate(xml_doc)
print(f"Le fichier XML est valide: {is_valid}")
# Affichage des erreurs de validation, le cas échéant
if not is_valid:
for error in xsd_schema.error_log:
print(error.message)
En résumé, un document XML définit les données et leur structure via des éléments, des
attributs et des commentaires. Une DTD ou un schéma XML est utilisé pour décrire et valider
cette structure de manière précise. Les DTD sont plus simples et moins puissants que les
schémas XML, qui offrent une validation et des fonctionnalités plus détaillées et strictes.
19