XML
Karim LABIDI
ISET CHARGUIA
2021
XML
• XML = eXtensible Markup Language
• XML est un langage pour structurer des contenus et définir une classe d’objets de
données, par exemple:
• un dessin vectoriel (SVG), une page Web (XHTML), un flux (RSS)…
• Le langage est basé sur le concept de balisage des données
• Un document XML:
• contient des déclarations, éléments, commentaires, définition de caractères
spéciaux et instructions (facultatives) de traitement
• c’est un arbre: il doit avoir une racine et les éléments doivent s’imbriquer
proprement
• Plus simple que SGML, plus complexe mais moins confus et plus performant que
HTML
• Idéal pour l'échange de données semi-structurées
• Utilisable entre machines
2
XML (1)
• XML, c’est donc…
• un méta-langage universel pour structurer les données…
• qui permet aux utilisateurs de délivrer du contenu…
• depuis les applications à d'autres applications (browsers par exemple)
• XML promet de standardiser la manière dont l'information est :
• échangée (XML)
• personnalisée/présentée (XSL/CSS)
• recherchée (XPath/XSLT/XQuery)
• sécurisée (Encryption, Signature)
• liée (XLink)
4
XML (2)
• Balise (ou tag ou label)
• marque de début et fin permettant de repérer un élément de données (textuel)
• forme: <balise> de début, </balise> de fin
• les balises indiquent la signification des sections marquées
• Elément de données
• texte encadré par une balise de début et une de fin
• les éléments de données peuvent être imbriquées
• Attribut
• couple nom="valeur" qualifiant une balise
• <producteur no="160017" region="Bourgogne"/>
• Les utilisateurs définissent leurs propres balises
• Il est possible d'imposer une grammaire spécifique (DTD, Schéma)
5
XML: un exemple
Déclaration Entête
<?xml version=”1.0” ?>
<!DOCTYPE adresses SYSTEM “http://www.loria.fr/adr.dtd”> Type de
<!-- Mon fichier d’adresses --> document
Commentaire
<adresses> Racine du document
<personne id =”p01” > Attribut
<type rang=”maître de conférences” /> Élément vide
<nom>Perrin</nom>
<prenom>Olivier<prenom> Élément non vide
<adresse>IUT Nancy-Charlemagne, Université de Nancy 2 </adresse>
</personne> Balise d’ouverture Balise de fermeture
</adresses>
Corps du
document
6
XML: format interne
• C’est un arbre
7
XML: format interne
• C’est un arbre
7
Pourquoi XML ?
• Définir vos propres langages d’échange
• commande, facture, bordereau de livraison, etc.
• Modéliser des données et des messages
• Document Type Definition (DTD)
• types et éléments agrégés (XML Schema Definition)
• passerelle avec Unified Modelling Language (UML)
• Publier des informations
• indépendante du format
• mise en forme avec CSS et XSL
• présentation possible en XHTML, PDF, WML,…
• Archiver des données
• auto-description des archives
8
Comparaison Données/Documents
• Approche « Donnée »
• structuration forte et simple
• compatibilité SGBDR existants
• mise à jour en place
• intégrité sémantique
• indexation exacte
• adapté au transactionnel et décisionnel
• performances « moyenne » à « forte » pour une volumétrie « moyenne »
• Approche « Document »
• structuration faible et complexe
• systèmes documentaires spécialisés
• gestion de versions
• recherche textuelle
• indexation approchée
• accès type moteur de recherche
• performances « moyenne » pour une volumétrie « forte » 9
Avantages de XML
• Une technologie structurante
• Clarifie toutes les interfaces d'échange
• Transversale à l'entreprise
• échanges de données
• bureautique
• GED
• sites Web
• EDI
• bases de données
• intégration e-business
• …
• Un choix stratégique de direction
• ne pas rester isolé
10
Faiblesses de XML
• Une syntaxe verbeuse
• Un méta-langage, mais de nombreux langages
• Coûteux en CPU
• analyse
• Coûteux en mémoire
• instanciation
11
XML et BD
• Intégration des données et méta-données
• Standard d’échange de données universel
• Les BD ne peuvent rester indifférentes :
• nécessité de stocker les documents XML
• nécessité de pouvoir interroger ces documents
• évolution ou révolution ?
• Quel modèle de données ?
• Quel langage d'interrogation ?
• Quelle intégration avec l'existant ?
12
Modèles de
données
Document XML
• Un document XML peut être associé à:
• une DTD ou un schéma pour décrire la structure du document XML
• une feuille de style pour présenter les données
• DTD ou/et schéma permettent de définir son propre langage basé sur XML
• vocabulaire (balises)
• grammaire (imbrications)
• Deux types de documents
• well-formed document
• valid document
14
Document bien formé (well-formed)
• Commence par une déclaration XML (attribut version obligatoire) avec possibilité de
choisir un encodage (le défaut est utf-8):
<?xml version="1.0" encoding="ISO-8859-1"?>
• Structure hiérachique:
• les balises d’ouverture et de fermeture doivent apparaître et correspondre
• pas de croisements de type <i>...<b>...</i> .... </b>
• sensible à la casse: "LI" n’est pas égal à "li" par exemple
• balises "EMPTY" utilisent la syntaxe XML "auto-fermante": <br/>
• les valeurs d’attributs sont quotés: <a href="http://www.foo.fr/xml.html">
• un seul élément racine (root):
• l’élément root ne peut apparaître qu’une fois et ne doit pas apparaître dans un
autre élément
• Caractères spéciaux (!!) : <, &, >,", ’
• utilisez < & > &aquot; ' à la place dans un texte !
• les espaces sont préservés
15
Document valide (valid)
• Un document “valide” doit être:
• “well-formed” (formé correctement)
• être associé à une DTD (ou une autre grammaire)
• et être conforme à cette DTD ou une grammaire d’un autre
type comme XSD (XML Schema Definition).
16
XML Schema
• Un schéma d'un document définit:
• les éléments possibles dans le document
• les attributs associés àces éléments
• la structure du document
• les types de données
• Le schéma est spécifié en XML
• pas de nouveau langage
• balisage de déclaration
• espace de nom spécifique xsd: ou xmlns:
• Présente de nombreux avantages
• structures de données avec types de données (expressivité accrue)
• extensibilité par héritage et ouverture
• analysable à partir d'un parseur XML standard (c’est du XML)
35
Objectifs
• Reprendre les acquis des DTD
• plus riche et complet que les DTD
• Permettre de typer les données
• éléments simples et complexes
• attributs simples
• Permettre de définir des contraintes
• existence, obligatoire, optionnel
• domaines, cardinalités, références
• patterns, ...
• S'intégrer à la galaxie XML
• espace de noms
• infoset (structure d'arbre logique)
36
Modèle des schémas
• Déclaration des éléments et attributs
• nom
• typage similaire à l'objet
• Spécification de types simples
• grande variété de types
• Génération de types complexes
• sequence
• choice
• all
37
Un premier exemple
Élément racine d'un schéma
Comme tout document XML bien formé, un schéma a un élément racine dont le
nom est toujours xs:schema.
Pour que le préfixe xs soit connu dans tout le schéma, il doit être déclaré dans
l'élément racine à l'aide de l'attribut xmlns:xs.
Un schema a la forme suivante:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<-- corps du schéma -->
</xs:schema>
Liaison entre un document XML
et un schema
La liaison entre un document XML et le schéma qui le décrit
se fait dans l'élément racine du document.
<?xml version="1.0" encoding="UTF-8"?>
<-- début du document -->
<nom_elt_racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<-- corps du document -->
</nom_elt_racine>
Commandes de base
• element: association d'un type à une balise
• attributs name, type, ref, minOccurs, maxOccurs,…
• attribute: association d'un type à un attribut
• attributs name, type
• type simple: les multiples types de base
• entier, réel, string, time, date, ID, IDREF,…
• extensibles par des contraintes
• type complexe: une composition de types
• définit une agrégation d'éléments typés
39
Types simples
• string, normalizedString, token
• byte, unsignedByte
• base64Binary, hexBinary
• integer, positiveInteger, negativeInteger, nonNegativeInteger, nonPositiveInteger, int,
unsignedInt
• long, unsignedLong
• short, unsignedShort
• decimal, float, double
• boolean
• time, dateTime, duration, date, gMonth, gYear, gYearMonth, gDay, gMonthDay
• Name, QName, NCName, anyURI
• language
• ID, IDREF, IDREFS
• ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS
38
Déclaration d’un élément
Syntaxe d'un élément simple
<xs:element name=« x » type=« y »>
XSD a beaucoup de type de données prédéfinis. Les plus courants sont : xs:string,
xs:decimal, xs:integer; xs:Boolean, xs:date, xs:time
XML
<nom>Dupont</nom>
<age>25</age>
<date>2013-11-01</date>
XSD
<xs:element name="nom" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="date" type="xs:date"/>
Déclaration d'attributs
Les éléments simples ne peuvent pas avoir d'attributs. Si un
élément a des attributs, il est considéré comme étant d'un
type complexe.
En revanche, l'attribut lui-même est toujours de type
simple.
XML :
<titre lang="FR">XSD pour les nuls</titre>
XSD:
<xs:attribute name="lang" type="xs:string" default="FR"/>
Avec attribut obligatoir : mot clé use
<xs:attribute name="lang" type="xs:string" use="required"/>
Déclaration d’éléments complexes 1/2
Élément vide avec attribute : exemple l’id d’un article
<xs:element name="article">
<xs:complexType>
<xs:attribute name="id" type="xs:positiveInteger"/>
</xs:complexType> </xs:element>
Élément texte avec attribut
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Déclaration d’éléments complexes 2/2
Exemple
<lettre>
Fait le <date>2013-11-01</date> à <ville>Compiègne</ville>, A l'intention de
M. <nom>Jean Dupond</nom>, ...
<lettre>
XSD
<xs:element name="lettre">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="date" type="xs:date"/>
<xs:element name="ville" type="xs:string"/>
<xs:element name="nom" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Les types complexes
Séquences d'éléments
xs:sequence : Permet de déclarer un élément comme pouvant
contenir une suite de sous-éléments dans un ordre déterminé.
Choix d'élément
xs:choice: indique qu’on peut avoir soit tel ou tel élément.
<xs:complexType name="typePersonne">
<xs:sequence>
<xs:element name="nom" type="xs:string" />
<xs:element name="prénom" type="xs:string" />
<xs:element name="dateDeNaissance" type="xs:date" />
<xs:choice>
<xs:element name="adresse" type="xs:string" />
<xs:element name="adresseElectronique" type="xs:string" />
</xs:choice>
</xs:sequence>
<xs:element name="téléphone" type="numéroDeTéléphone" />
</xs:complexType>
Les types complexes
L'élément all
Il indique que les éléments enfants doivent apparaître une
fois (ou pas du tout), mais dans n'importe quel ordre. Cet
élément xs:all doit être un enfant direct de l'élément
xs:complexType. Par exemple…
<xs:complexType>
<xs:all>
<xs:element name="nom" type="xs:string" />
<xs:element name="prénom" type="xs:string" />
<xs:element name="dateDeNaissance" type="xs:date" />
<xs:element name="adresse" type="xs:string" />
<xs:element name="adresseElectronique" type="xs:string" />
<xs:element name="téléphone" type="numéroDeTéléphone" />
</xs:all>
</xs:complexType>
Les restrictions
Lorsqu'un élément ou un attribut XML a un
type de données défini, il impose des
restrictions sur son contenu.
Il faut utiliser le mot clé : restriction
Nombre borné:
minInclusive value=“valeur_min”
maxInclusive value=“valeur_max”
Choix de valeur restreint:
mot clé enumeration
Eléments complexes : 3 types de contenus
Concernant les types complexes, il est important de noter
qu'il existe 3 types de contenus possibles :
Les contenus simples.
Les contenus "standards".
Les contenus mixtes.
Les contenus simples
Le premier type de contenu possible pour un élément
complexe est le contenu simple.
On appelle contenu simple, le contenu d'un élément complexe
qui n'est composé que d'attributs et d'un texte de type simple.
<xsd:element name="mon_nom">
<xsd:complexType>
<!-- contient un attribut et du texte --> <xsd:simpleContent>
<prix devise="euros">35</prix> <xsd:extension base="mon_type">
<xsd:attribute name="mon_nom"
type="mon_type"/>
<!-- contient un attribut et du texte --> </xsd:extension>
<voiture marque="Renault">Clio</voiture> </xsd:simpleContent>
</xsd:complexType>
</xsd:element>
Eléments complexes : 3 types de
contenus
Contenus "standards"
c'est le contenu d'un élément complexe qui n'est composé
que d'autres éléments (simples ou complexes) ou
uniquement d'attributs.
<!-- contient d'autres éléments --> <xsd:element name="voiture">
<personne> <xsd:complexType>
<nom>DUPONT</nom> <xsd:attribute name="marque"
<prenom>Robert</prenom> type="xsd:string"/>
</personne> </xsd:complexType>
</xsd:element>
<!-- contient un attribut -->
<voiture marque="Renault"/>
Eléments complexes : 3 types de
contenus
Les contenus mixtes
Un contenu mixte est le contenu d'un élément complexe qui
est composé d'attributs, d'éléments et de texte.
Pour déclarer un élément complexe au contenu mixte, voici
la syntaxe à utiliser : mixed
<balise1> <xsd:element name="mon_nom">
Ceci est une chaîne de caractères <xsd:complexType mixed="true">
<balise2>10</balise2> <!-- liste des éléments -->
7.5 </xsd:complexType>
</balise1> <!-- liste des attributs -->
</xsd:element>
Héritage
• Définition de sous-types par héritage
• par extension: ajout d'informations
• par restriction: ajout de contraintes
• Possibilité de contraindre la dérivation
• Exemple :
<complexType name="AdressePays">
<complexContent>
<extension base="Adresse">
<sequence>
<element name="pays" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
42
Patterns
• Contraintes sur type simple prédéfini
• Utilisation d'expression rationnelles (regular expressions)
• similaires à celles de Perl
• Exemple
<xsd:simpleType name="pourcentage">
<xsd:restriction base="xsd:string">
<xsd:pattern value="([0-9]|[1-9][0-9]|100)%"/>
</xsd:restriction>
</xsd:simpleType>
43
Conclusion
• Schémas flexibles et irréguliers
• optionnels, avec ou sans DTD
• Données auto-descriptives
• balises et attributs
• Modèle de type hypertexte
• support des références
• Éléments atomiques ou complexes
• composition par agrégation
• Types de données variés et extensibles
• textes, numériques, …, types utilisateur
44