0% ont trouvé ce document utile (0 vote)
15 vues118 pages

Introduction à XML et ses normes

Transféré par

GBELY Fabius
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues118 pages

Introduction à XML et ses normes

Transféré par

GBELY Fabius
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

XML

Introduction et concepts
Des résumés de commandes se trouvent dans :
http://www.digilife.be/quickreferences/quickrefs.htm

© A. Belaïd
Introduction
‹ Aujourd’hui
z Production importante de documents (sur le Web)
z Plusieurs applications, se partagent des documents,
recherchent des documents sur le Web
z Les formats de ces documents sont disparates
ƒ PDF, images, HTML, etc.
‹ On cherche un protocole commun pour
z Les manipuler, les compléter
z Les communiquer
ƒ à d’autres personnes
ƒ entre différents outils
ƒ les échanger sur le Web
z Les interroger

© A. Belaïd 2
Introduction
‹ Les documents à balises offrent ces possibilités
z Historiquement, on trouve :
z SGML
ƒ Standard Generalized Markup Language
¾ Meta-langage pour définir des langages de "markup"
z HTML
ƒ Hypertext Markup Language
¾ Application de SGML au Web, ayant peu de tag
z XML
ƒ eXtensible Markup Language
¾ Version plus légère que SGML pour le Web

© A. Belaïd 3
Introduction
‹ Tous ces langages essaient de représenter le document
par ses structures (méta-données)

z Un exemple de document balisé :


<book>
<title>XML langage et applications</title>
<author>
<firstname>Alain</firstname>
<surname>Michard</surname>
</author>
...
<p>Ces dernières années ont vu l'ouverture des
systèmes d'information à l'Internet.
</p>
...
</book>

© A. Belaïd 4
Principe du balisage
‹ Mécanisme pour
z repérer des éléments dans un texte
z le structurer en rappelant le type des éléments

‹ Balisage redondant (maximal)


z Une balise de début <surname>
z et une balise de fin </surname>
‹ Exemple
<surname>Dupont</surname>

© A. Belaïd 5
Pour les documents, ces langages
proposent un découpage hiérarchique
‹ Structure de boîtes pour la
structure physique
book
title <book>
author <title>XML langage et
firstname
applications</title>
lastname <author>
<firstname>Alain</firstname>
chapter title <surname>Michard</surname>
para </author>
<chapter>
para <title>Introduction</title>
...
<para> bla bla bla </para>
... </chapter>
...
</book>

© A. Belaïd 6
Pour les document, ces langages
proposent un découpage hiérarchique
‹ Structure d’arbre pour la
structure logique
<book>
book
<title>XML langage et
applications</title>
title
<author>
<firstname>Alain</firstname>
author <surname>Michard</surname>
firstname surname </author>
<chapter>
chapter chapter <title>Introduction</title>
title para para para <para> bla bla bla </para>
</chapter>
...
</book>

© A. Belaïd 7
Permettent d’accompagner le document de
DTD, Schémas…
‹ DTD : Document Type Definition
z Donne la définition des éléments, leur hiérarchie et leurs attributs
z Spécialise le document pour une application donnée
‹ Exemple
<!DOCTYPE book [
book
<!ELEMENT book (title, author*,
chapter+)>
title
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (firstname?,
author
surname)>
<!ELEMENT firstname (#PCDATA)> firstname surname
<!ELEMENT surname (#PCDATA)>
<!ELEMENT chap (title?, chapter chapter
para+)>
title para para para
<!ELEMENT para (#PCDATA)>
]>

© A. Belaïd 8
Retour sur les normes
SGML/HTML/XML
‹ SGML : Standard Generalized Markup Language
z Langage de balisage généralisé
z Besoin :
ƒ de séparer la structure logique
¾ chapitre, paragraphe, section, mise en relief
ƒ de la présentation
¾ gras, italique, saut de ligne, rouge, clignotement, ligne
horizontale

© A. Belaïd 9
Origine des normes
SGML/HTML/XML
‹ SGML
z Origine
ƒ IBM, documentation militaire, avionique...
¾ un même contenu produit plusieurs cibles :
– par compagnie aérienne,
– au sol (classeur), embarqué (CDROM)
¾ les mises à jour doivent se répercuter automatiquement
z Résultat
ƒ Système normatif «générique» pour les documents techniques
ƒ Norme ISO 8879 - Information Processing Systems - Text and office
systems - Standard Generalized Markup Language
ƒ Imposée par le DOD pour la documentation associée aux armements
livrés à l'armée US (programme CALS)

© A. Belaïd 10
Origine des normes
SGML/HTML/XML
‹ HTML : HyperText Markup Language
ƒ Langage de balisage pour documents hypertextes
z Besoin :
ƒ documents simples sur INTERNET
z Principe :

ƒ une DTD SGML

z Limites
ƒ HTML est un langage de présentation
ƒ insuffisant pour couvrir toutes les applications du Web
z Retombée intéressante
ƒ démonstration de l'intérêt des langages de balisage

© A. Belaïd 11
Origine des normes
SGML/HTML/XML
‹ XML : eXtensible Markup Language
z Sur le plan de l’encodage
ƒ sert à encoder/structurer des données (textes, formats vectoriels,
messages entre machines, feuilles de style...)
ƒ Permet la définition de langages adaptés à des besoins très variés
¾ fournit le formalisme + des mécanismes pour définir ces langages
(grammaires, schémas)

z Sur le plan des applications


¾ sert à organiser l’échange d’informations
¾ sert à remplacer HTML pour certaines tâches (mais fonctionne d’une
autre façon ! )

ƒ Donc : XML n’existe pas au même sens que HTML, ce n’est qu’un
formalisme !

© A. Belaïd 12
Utilité de XML
‹ Exemple : Rapprocher l’information du logiciel
z Utile dans toutes les applications de veille

© A. Belaïd 13
XML
‹ Exemple : Créer des portails multimédias, biblio…
z Intégrer des normes relatives aux méta-données pour le catalogage des
collections

© A. Belaïd 14
XML
‹ Exemple : Portail Art Nouveau : http://dilib.inist.fr/dilib/Musee/
ou http://biban.loria.fr/ (biban, galle)

© A. Belaïd 15
Aujourd’hui, XML est au centre de la
galaxie de standards
‹ XSchema
z Schémas de documents
ebXML
‹ XSL
z Feuilles de styles DOM
XSchema
‹ SAX
z API de programmation
événementielle
‹ DOM RDF
XML SAX
z API de programmation objet
‹ SOAP
XSL
z Protocole Web Services
‹ RDF SOAP
z Description de ressources Web
‹ ebXML
z Standards de e-Commerce XQuery

© A. Belaïd 16
Structure d'un document XML
‹ Un document XML
z a la structure suivante
ƒ Prologue Prologue
ƒ Élément racine
ƒ Arbre d'éléments ou structure
‹ Le prologue
z peut contenir :
ƒ une déclaration XML Arbre d’éléments
ƒ des instructions de traitement (structure du
ƒ une DTD document)

© A. Belaïd 17
Structure d'un document XML
‹ Exemple
<!-- Prologue -->
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<!-- Élément racine -->
<biblio>
<!-- Premier enfant -->
<livre>
<!-- Élément enfant titre -->
<titre>Les Misérables</titre>
<auteur>Victor Hugo</auteur>
<nb_tomes>3</nb_tomes>
</livre>
<livre>
<titre>L'Assomoir</titre>
<auteur>Emile Zola</auteur>
</livre>
<livre lang="en">
<titre>David Copperfield</titre>
<auteur>Charles Dickens</auteur>
</livre>
</biblio>

© A. Belaïd 18
Document XML
Le prologue
‹ La déclaration XML
<?xml version="1.0" encoding=‘iso-8859-1’ standalone=‘yes’?>

z Indique au processeur qui va traiter le document :


ƒ Version du langage : 1.0 (la plus récente)
ƒ Encoding :
¾ jeu de codage de caractères utilisé dans le document. Le jeu de
caractères standard pour la France est le ISO-8859-1
¾ Par défaut, l'attribut encoding a la valeur UTF-8 (Unicode)
ƒ Standalone
¾ Si Standalone = 'yes', le processeur considère que toutes les
déclarations nécessaires au traitement du document sont incluses
dans le document courant (le document est autonome et ne
requiert aucune autre donnée externe)

© A. Belaïd 19
Document XML
‹ L'arbre d’éléments
z Tout document XML est représenté sous la forme d'un arbre d'éléments
z Comme tout arbre, il comporte :
ƒ une racine, des branches et des feuilles
z qui pour nous seront les éléments
<liste-cd>
<cd>
<interprete>Keith Jarret</interprete>
<titre>The Köln Concert</titre>
<specif type="Live" nb_cd="1"/>
</cd>
<cd>
<interprete>Keith Jarret</interprete>
<titre>La Scala</titre>
<specif type="Live" nb_cd="1"/>
</cd>
</liste-cd>

© A. Belaïd 20
Document XML
‹ Les attributs
z Tous les éléments peuvent contenir un ou plusieurs attributs
z Un attribut est composé d'un nom et d'une valeur
z Syntaxe :
<Nom-elem attribut1, attribut2, …>
Attributi : nom="valeur"
z Exemple d'utilisation d'un élément avec attribut :
ƒ <instrument type="vent">trompette</instrument>
z Exemple d'utilisation d'un élément vide avec attributs :
ƒ <specif type="Live" nb_cd="1" />

© A. Belaïd 21
XML: DTD et Schémas
1. Validité des documents
2. DTD
3. Schémas

© A. Belaïd
Validité des documents
‹ Pour être utilisable par les différentes applications, un
document XML doit être
z bien formé (well formed document)
ƒ Balises correctement imbriquées
ƒ Parsable et manipulable
ƒ Pas nécessairement valide par rapport à la DTD
z valide (valid document)
ƒ Bien formé +
ƒ conforme à la DTD (ou au schéma)
z Logiciel de validation
ƒ XmlSpy, Cooktop (voir plus loin)

© A. Belaïd 23
La DTD
‹ A deux représentations physiques
z Peut faire partie du document XML
ƒ Elle est alors dite interne
z Être un fichier à elle seule, lui permettant d'être utilisable par
d'autres documents XML
ƒ Elle sera alors dite externe
‹ Les DTD externes peuvent être séparées en deux
catégories :
z privée (SYSTEM) et publique (PUBLIC)
ƒ La première catégorie est représentée par un fichier
accessible uniquement en local
ƒ La seconde sera disponible pour tout le monde via une URI
(Uniform Resource Identifier)

© A. Belaïd 24
DTD
‹ DTD interne
z Déclaration
ƒ <!DOCTYPE elt-racine déclarations>
z Exemple
<?xml version="1.0" standalone="yes"?>

<!DOCTYPE parent [
<!ELEMENT parent (garcon,fille)>
<!ELEMENT garcon (#PCDATA)>
<!ELEMENT fille (#PCDATA)>
]>
<parent>
<garcon>Loic</garcon>
<fille>Marine</fille>
</parent>

© A. Belaïd 25
DTD
‹ Validation
z Appeler Cooktop ou XmlSpy

© A. Belaïd 26
DTD
‹ DTD externe de type SYSTEM :
z Le fichier parent.xml
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE parent SYSTEM "parent.dtd">
<parent>
<garcon>Loic</garcon>
<fille>Marine</fille>
</parent>
z Le fichier parent.dtd contient :
<!ELEMENT parent (garcon,fille)>
<!ELEMENT garcon (#PCDATA)>
<!ELEMENT fille (#PCDATA)>

© A. Belaïd 27
DTD
‹ Validation sous Cooktop

© A. Belaïd 28
DTD
‹ DTD externe de type PUBLIC :
z Exemple : référence à la DTD XHTML
ƒ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
strict.dtd">
z La chaîne de caractères après le mot PUBLIC fait référence :
ƒ tout d'abord à l'identifiant de la DTD
¾ (ici -, qui signifie que la DTD n'a pas de numéro
d'enregistrement officiel)
ƒ au propriétaire de la DTD
¾ (ici le W3C)
ƒ puis son nom
ƒ enfin sa langue

© A. Belaïd 29
DTD
Déclaration d'élément
‹ Définition
z Chaque élément du document doit être défini par une
commande du type
<!ELEMENT nom (contenu) >
z où nom est le nom de l'élément (balise) et
z où contenu décrit :
ƒ soit la structure de l’élément s’il est composé
ƒ soit #PCDATA si c’est une feuille
‹ Exemple
<!ELEMENT livre (auteur, editeur)>
z définit un élément livre composé d'une séquence d'éléments
auteur et éditeur

© A. Belaïd 30
DTD
Forme du contenu
‹ Notations ‹ Exemples

z (a, b) séquence z (nom, prenom, rue, ville)

z (a|b) liste de choix z (oui|non)

z a? élément optionnel [0,1] z (nom, prenom?, rue, ville)

z a* élément répétitif [0,N] z (produit*, client)

z a+ élément répétitif [1,N] z (produit*, vendeur+)

© A. Belaïd 31
DTD
Exemple
‹ annuaire.xml ‹ annuaire.dtd
<?xml version="1.0" encoding="ISO-
8859-1"?> <!ELEMENT annuaire (personne*)>
<!DOCTYPE annuaire SYSTEM <!ELEMENT personne
"annuaire.dtd"> (nom,prenom,email+)>
<!ATTLIST personne type (étudiant |
<annuaire> professeur | chanteur | musicien)
<personne type="étudiant"> "étudiant">
<nom>HEUTE</nom> <!ELEMENT nom (#PCDATA)>
<prenom>Thomas</prenom> <!ELEMENT prenom (#PCDATA)>
<email>[email protected] <!ELEMENT email (#PCDATA)>
</email>
</personne>
<personne type="chanteur">
<nom>CANTAT</nom>
<prenom>Bertrand</prenom>
<email>[email protected]</email>
</personne>
</annuaire>

© A. Belaïd 32
DTD
‹ Élément vide
z Un élément vide est un élément qui n'a aucun contenu
z Déclaration :
<!ELEMENT elem-vide EMPTY>
z Exemples :
ƒ img, hr, br dans HTML
z Un élément vide peut avoir des attributs
ƒ Déclaration dans le Body :
<img width="100" height="30" src="paysage.jpg" alt="Paysage de
neige"/>

© A. Belaïd 33
DTD
‹ Élément vide : Exemple <contacts>
<personne>
<!ELEMENT contacts (personne+)> <nom>Chazalon</nom>
<!ELEMENT personne (nom, prénom, <prénom>Grégory</prénom>
dateDeNaissance?, adresse, email+, <dateDeNaissance>1977-07-09
téléphone*)> </dateDeNaissance>
<!ELEMENT nom (#PCDATA)> <adresse pays="France"/>
<!ELEMENT prénom (#PCDATA)> <email>[email protected]</email>
<!ELEMENT dateDeNaissance (#PCDATA)> <email>[email protected]</email>
<!ELEMENT adresse EMPTY> <téléphone>01 23 45 67 89</téléphone>
<!ELEMENT email (#PCDATA)> </personne>
<!ELEMENT téléphone (#PCDATA)> <personne>
<!ATTLIST adresse pays CDATA <nom>Lemoine</nom>
#REQUIRED> <prénom>Joséphine</prénom>
<dateDeNaissance>1977-01-06
</dateDeNaissance>
<adresse pays="France"/>
<email>[email protected]</email>
</personne>
</contacts>
© A. Belaïd 34
DTD
‹ Élément à contenu mixte
z Contient du texte et des éléments
‹ Exemple de déclaration :

<!ELEMENT bonjour (#PCDATA | cible*)>

‹ Exemple d'utilisation :
<bonjour>
Hello
<cible>World</cible>
</bonjour>

© A. Belaïd 35
DTD : exemple
L’intérêt est de rendre accessible certaines parties du texte

© A. Belaïd 36
DTD : attribut
‹ Définition
<!ATTLIST tag [attribut type #mode [valeur]]* >
z Définit la liste d’attributs pour une balise, comme par exemple
les attributs genre et ville pour la balise auteur, et l'attribut ville
pour la balise éditeur :

<!ATTLIST auteur
genre CDATA #REQUIRED
ville CDATA #IMPLIED>

<!ATTLIST editeur
ville CDATA #FIXED "Paris">

© A. Belaïd 37
DTD
Déclaration d'attributs
‹ Obligatoire :
<!ATTLIST elt attr CDATA #REQUIRED>

z Lors du traitement par le processeur, si un attribut obligatoire


n'est pas présent dans un élément, cela provoquera une erreur
‹ Optionnel :
<!ATTLIST elt attr CDATA #IMPLIED>

‹ Avec une valeur fixe :


<!ATTLIST elt attr CDATA "valeur">

z Lors du traitement par le processeur, si la valeur d'un attribut à


valeur fixe est différente de la valeur qui lui a été fixée dans la
DTD, cela provoquera une erreur

© A. Belaïd 38
DTD
Déclaration d'attributs identificateurs

‹ Type ID
z Permet d'associer à un élément un identificateur unique
z Exemple :
ƒ chaque produit dans un magasin doit avoir un code unique
z Déclaration :
<!ATTLIST elt attr ID>
Soit pour le magasin :
<!ATTLIST produit code ID>
z Cette valeur doit être évidemment unique. Dans le cas contraire,
le processeur XML renverra une erreur d'analyse lorsqu'il
rencontrera un second identificateur identique

© A. Belaïd 39
DTD
Déclaration d'attributs identificateurs
‹ Exemple : magasin.xml
<!DOCTYPE magasin [
<!ELEMENT magasin (service+)>
<!ELEMENT service (produit*)>
<!ATTLIST service code ID #REQUIRED>
<!ELEMENT produit (#PCDATA)>
<!ATTLIST produit code ID #REQUIRED> ]>
<magasin>
<service code="A001">
<produit code="DE205"> Soupe </produit>
<produit code="TM206"> Condiment </produit>
On vérifie que service et produit
<produit code="KJ227"> Conserve </produit> sont accompagnés chacun d’un
</service> attribut code dont la valeur est à
<service code="A003"> chaque fois différente
<produit code="OU152"> Lessive </produit>
<produit code="AH070"> Essuie-tout </produit>
</service>
</magasin>
© A. Belaïd 40
DTD
Déclaration d'attributs identificateurs
‹ Question : est-ce que ceci est valide ? Sinon, comment indiquer
qu’un produit est associé à différents services ?
<!DOCTYPE magasin [
<!ELEMENT magasin (service+)>
<!ELEMENT service (produit*)>
<!ATTLIST service code ID #REQUIRED>
<!ELEMENT produit (#PCDATA)>
<!ATTLIST produit code ID #REQUIRED> ]>
<magasin>
<service code="A001">
<produit code="DE205"> Soupe </produit>
<produit code="TM206"> Condiment </produit>
<produit code="KJ227"> Conserve </produit>
</service>
<service code="A003">
<produit code="OU152"> Lessive </produit>
<produit code="AH070"> Essuie-tout </produit>
<produit code="KJ227"> Conserve </produit>
</service>
</magasin>

© A. Belaïd 41
DTD
Déclaration d'attributs identificateurs

‹ Réponse : Type IDREF :


z Permet à une valeur d'attribut de faire référence à l'identificateur
(ID) d'un autre élément
ƒ De cette manière, il est possible de relier des éléments entre
eux
z IDREFS permet d'associer plusieurs identificateurs (ID) en les
séparant par des espaces blancs dans la valeur d'un attribut

© A. Belaïd 42
Exemple : magasin-ref.xml
mais on ne doit pas répéter un produit à cause du fait qu’on lui a associé un ID

<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE magasin[
<!ATTLIST magasin codes_services IDREFS #IMPLIED>
<!ELEMENT magasin (service+)>
<!ELEMENT service (produit+)>
<!ATTLIST service code ID #REQUIRED>
<!ELEMENT produit (#PCDATA)>
<!ATTLIST produit code ID #REQUIRED code_service IDREF #REQUIRED>]>
<magasin codes_services="A001 A003">
<service code="A001">
<produit code="E205" code_service="A001"> Savon </produit >
<produit code="E206" code_service="A001"> Essuie-tout </produit >
<produit code="E207" code_service="A001"> Serviettes </produit >
<produit code="H107" code_service="A003"> Balai</produit >
</service>
<service code="A003">
<produit code="A115" code_service="A003"> Chiffon </produit>
</service>
</magasin>
© A. Belaïd 43
DTD : Entité paramètre
‹ But
z Une entité simple permet de remplacer par un nom une portion
de texte dans un document
<!ENTITY nom "texte de remplacement">
z L'entité (i.e. le texte de remplacement) est alors rappelée dans le
document par utilisation de &nom
‹ Exemple :
<!ENTITY magasin "Primevère">
z définit une entité magasin correspondant à la chaîne de
caractères "Primevère"
z le document XML
<message>Bienvenu au &magasin</message>
z sera compris par l'analyseur comme :
<message>Bienvenu au Primevère</message>

© A. Belaïd 44
DTD : Entité paramètre
‹ Peut être externe :
z Comme pour les DTD, une entité peut être définie dans un
fichier externe local ou public. Par exemple, l'entité vins pourra
être définie comme suit dans un fichier vins.dtd en interne ou en
externe à l'URL www.gardarin.org
‹ Exemple :
<!ENTITY % vins PUBLIC "http://www.gardarin.org/vins.dtd"
ou
<!ENTITY % vins SYSTEM "vins.dtd"
<!ELEMENT cru (#PCDATA)>
<!ELEMENT mil (#PCDATA)>
<!ELEMENT degre (#PCDATA)>…">
z Utilisation en XML
ƒ %vins

© A. Belaïd 45
Espaces de nommage
‹ Idée
z Permettre de mélanger des éléments, ayant le même nom,
déclarés dans plusieurs DTD à l'intérieur d'un même document
ƒ C’est l’objectif de XML de pouvoir rassembler plusieurs
documents écrits par différentes personnes
‹ Risque
z Confusion des noms et attributs
‹ Solution
z Ranger ces éléments et attributs dans des espaces spécifiques
(à qui on donnera des noms : nommage XML) qui les
identifient

© A. Belaïd 46
Espaces de nommage
‹ Comment créer un espace de nommage ?
z On le déclare en lui donnant un identifiant qui le distingue, puis on
l’associe aux éléments et aux attributs ainsi rassemblés
z Pour l’identification, le meilleur identifiant est une URI
ƒ L’URI n’a pas besoin de désigner un fichier existant
‹ Déclaration
z La déclaration se fait par attribut. Deux formes :
ƒ xmlns="uri"
¾ définit l'espace de noms par défaut, par ex. HTML
ƒ xmlns:prefix="uri"
¾ définit le préfixe représentant un espace de noms
z Exemples de déclarations d’espaces pour les éléments html et div :
ƒ <html xmlns="http://www.w3.org/1999/xhtml">
¾ entre <html> et </html>, on peut utiliser directement les balises HTML
ƒ <div xmlns:ht='http://www.w3.org/1999/xhtml'>
¾ entre <div> et </div>, tous les éléments seront précédés du préfixe ht

© A. Belaïd 47
Espaces de nommage
‹ Exemple : utilisation du HTML dans du XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<livre xmlns="http://www.monserveur.fr/XML/livre">
<chapitre numero="1">
<html xmlns="http://www.w3.org/TR/REC-html-40">
<head><titre>Introduction</titre></head>
<body>
<h1>Introduction</h1>
<p>Le livre commence par ce texte...</p>
</body>
</html>
</chapitre>
</livre>

© A. Belaïd 48
Espaces de nommage
Exemple : 2 espaces de nommage :
liste_collaborateurs.xml sans DTD interne

<?xml version="1.0" encoding="iso-8859-1"?> <col:collaborateur>


<col:liste_collaborateurs <col:nom>Bernard Roux</col:nom>
xmlns:col="http://www.monserveur.fr/adresse" <col:adresse>
xmlns:edv="http://www.monserveur.fr/postes"> <col:rue>188, Cours Mirabeau</col:rue>
<col:collaborateur> <col:ville>13100 Aix-en-Provence </col:ville>
<col:nom>Jean-Marie Fontaine</col:nom> </col:adresse>
<col:adresse> <edv:ordinateur>
<col:rue>13, rue de l'horloge</col:rue> <edv:nom>Morgane</edv:nom>
<col:ville>13100 Aix-en-Provence <edv:adresse>156.97.234.98 </edv:adresse>
</col:ville> </edv:ordinateur>
</col:adresse> </col:collaborateur>
<edv:ordinateur> </col:liste_collaborateurs>
<edv:nom>Saturne</edv:nom>
<edv:adresse>127.98.76.35
</edv:adresse>
</edv:ordinateur>
</col:collaborateur>

On voit bien les mélanges de noms et d’adresses mais associés à des


espaces de nommage différents
© A. Belaïd 49
Espaces de nommage
Portée

© A. Belaïd © Philippe
© Philippe
PoulardPoulard 50
Espaces de nommage
‹ Quelques espaces de noms célèbres
z RDF : <rdf:RDF xmlns:rdf="http://www.w3.org/TR/REC-rdf-syntax#">
z Dublin-core : <dc:title xmlns:dc="http://purl.org/dc/">
z SVG : <svg xmlns="http://www.w3.org/2000/svg">
z XSLFO : <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
z XSLT : <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
z XHTML : <xhtml:xhtml xmlns:xhtml="http://www.w3.org/1999/xhtml">
z XLink : <foo xmlns:xlink="http://www.w3.org/1999/xlink">
z SOAP : <SOAP-ENV xmlns:SOAP-ENV =
"http://schemas.xmlsoap.org/soap/envelope/">
z Schema : <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

© A. Belaïd 51
Espaces de nommage
‹ Exemple : espace de nom SVG ‹ Résultat : essai.svg

<?xml version="1.0" encoding="utf-8"?>


<svg xmlns="http://www.w3.org/2000/svg">
<title>Rectangles</title>
<rect width="300" height="120"
x="0" y="20" fill="green" />
<rect width="80" height="150"
x="20" y="30" fill="red" />
<rect width="140" height="80"
x="50" y="50" fill="blue" />
</svg>

© A. Belaïd 52
Espaces de nommage
‹ Comment faire pour utiliser les espaces de nommage dans
les documents XML valides ?
ÎDeux conditions :
ƒ Les types d'éléments et d'attributs affectés à un espace de
nommage doivent être :
¾ déclarés par un nom qualifié (c'est à dire avec un préfixe d'espace
de nommage)
– xmlns:prefix="uri"
ƒ les attributs xmlns servant à désigner les déclarations d'espaces
de nommage doivent être
¾ déclarés dans la DTD

© A. Belaïd 53
Espaces de nommage
‹ Exemple: Document XML non-valide
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE notice [
<!ELEMENT notice (#PCDATA)>
<!ATTLIST notice style CDATA #IMPLIED>
]>
<notice html:style="font-color:red"
xmlns:html="http://www.w3.org/TR/REC-html40">
<!-- Ce document n'est malheureusement pas valide! -->
</notice>

© A. Belaïd 54
Espaces de nommage
‹ Exemple: Document XML valide
<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE notice [
<!ELEMENT notice (#PCDATA)>
<!ATTLIST notice html:style CDATA #IMPLIED
xmlns:html CDATA #FIXED "http://www.w3.org/TR/REC-html40"
>
]>

<notice html:style="font-color:red" xmlns:html="http://www.w3.org/TR/REC-


html40">
Ce document est valide!
</notice>

© A. Belaïd 55
Espaces de nommage
‹Explication
z l'attribut style de l’élément notice est associé à l'espace
de nommage html
z Il est qualifié : html:style
z L'attribut xmlns servant à la déclaration de l'espace de
nommage est déclaré dans la DTD
z Cette déclaration est combinée avec le mot-clé #FIXED
ƒ On s'assure ainsi que dans l'élément racine notice
une déclaration d'espace de nommage interviendra
toujours pour l'espace de nommage HTML même si
elle n'est pas mentionnée explicitement

© A. Belaïd 56
Espaces de nommage
‹Espaces de nommage dans la DTD
z Dans la DTD, les espaces de nommage ne sont pas
reconnus en tant que tels
z Pour un analyseur syntaxique XML, les préfixes
d'espaces de nommage ne représentent pas l'URI de
l'espace de nommage, mais ne sont qu'une partie du
nom d'élément ou d'attribut
z En d'autres termes :
ƒ une DTD dans laquelle sont déclarés des types
d'éléments de deux espaces de nommage, "ignore"
qu'elle a affaire à deux espaces de nommage

© A. Belaïd 57
Espaces de nommage
‹ Espaces de nommage dans la DTD
z Exemple :
<?xml version="1.0"?>

<!DOCTYPE ns1:notice [
<!ELEMENT ns1:notice (ns2:notice)>
<!ATTLIST ns1:notice xmlns:ns1 CDATA #FIXED
"http://www.monserveur.fr">
<!ELEMENT ns2:notice EMPTY>
<!ATTLIST ns2:notice xmlns:ns2 CDATA #FIXED
"http://www.monserveur.fr">
]>

<ns1:notice xmlns:ns1="http://www.monserveur.fr">
<ns2:notice xmlns:ns2="http://www.monserveur.fr"/>
© A. Belaïd
</ns1:notice> 58
Espaces de nommage
‹ Explications
z Les deux types d'éléments déclarés dans la DTD possèdent le
même nom local notice, se différencient pourtant par le préfixe (ns1
et ns2)
z Ils appartiennent au même espace de nommage
z Mais, du point de vue de la DTD, deux types d'éléments différents
sont déclarés (à savoir ns1:notice et ns2:notice)
ƒ Ainsi ce document est valide
z Si dans une DTD, une affectation de préfixe d'espaces de
nommage à des URI d'espaces de nommage avait lieu, un
analyseur syntaxique considérerait les deux noms d'éléments
comme identiques et déclarerait le document comme non-valide
étant donné qu'un type d'élément dans une DTD ne peut être
déclaré qu'une seule fois

© A. Belaïd 59
Espaces de nommage
‹ Exemple: liste_collaborateurs.xml avec DTD interne
<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE notice [
<!ELEMENT notice (#PCDATA)>
<!ATTLIST notice html:style CDATA #IMPLIED
xmlns:html CDATA #FIXED "http://www.w3.org/TR/REC-html40"
>
]>

<notice html:style="font-color:red" xmlns:html="http://www.w3.org/TR/REC-


html40">
Ce document est valide!
</notice>

© A. Belaïd 60
Espaces de nommage
Exemple : 2 espaces de nommage :
liste_collaborateurs.xml avec DTD interne

<?xml version="1.0" encoding="iso-8859-1"?>


<col:liste_collaborateurs
<!DOCTYPE col:liste_collaborateurs [ xmlns:col="http://www.monserveur.fr/adresse"
<!ELEMENT col:liste_collaborateurs xmlns:rech="http://www.monserveur.fr/postes">
(col:collaborateur+)>
<col:collaborateur>
<!ATTLIST col:liste_collaborateurs
xmlns:col CDATA #FIXED <col:nom>Jean-Marie Fontaine</col:nom>
"http://www.monserveur.fr/adresse" <col:adresse>
xmlns:edv CDATA #FIXED <col:rue>13, rue de l'horloge</col:rue>
"http://www.monserveur.fr/postes" <col:ville>13100 Aix-en-Provence</col:ville>
>
</col:adresse>
<!ELEMENT col:collaborateur (col:nom,
col:adresse, edv:ordinateur)> <edv:ordinateur>
<!ELEMENT col:adresse (col:rue, col:ville)> <edv:nom>Saturne</edv:nom>
<!ELEMENT edv:ordinateur (edv:nom, <edv:adresse>127.98.76.35</edv:adresse>
edv:adresse)> </edv:ordinateur>
<!ELEMENT col:nom (#PCDATA)> </col:collaborateur>
<!ELEMENT col:rue (#PCDATA)> <col:collaborateur>
<!ELEMENT col:ville (#PCDATA)>
<col:nom>Bernard Roux</col:nom>
<!ELEMENT edv:nom (#PCDATA)>
<col:adresse>
<!ELEMENT edv:adresse (#PCDATA)>

]>

© A. Belaïd 61
Les schémas XML

Insuffisance des DTD


zles DTD ne sont pas au format XML
ƒDifficulté de les parser
zles DTD ne supportent pas les "espaces de nom"
ƒDifficulté d’introduire des balises extérieures
zle "typage" des données est extrêmement limité
ƒque du #PCDATA

© A. Belaïd
XML Schéma
‹ Format
<?xml version="1.0" ?>
<xsd:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<!-- déclarations d'éléments, d'attributs et de types ici -->



</xsd:schema>

z L'élément racine est l'élément xsd:schema


ƒ accompagné d’attributs qui précisent le lieu de définition des
éléments
z Tout élément d'un schéma doit commencer par le préfixe xsd ou xs

© A. Belaïd 63
XML Schéma
‹ Attributs de xsd:schema
z xmlns:xs="http://www.w3.org/2001/XMLSchema"
ƒ Indique que les éléments et les types utilisés (schema,
element, complexType, sequence, string, boolean, etc.) sont
définis dans l’espace indiqué entre "" et qu’ils doivent être
préfixés par xs
z targetNamespace="http://www.w3schools.com"
ƒ Indique que les autres éléments utilisés (note, to, from,
heading, body) sont définis dans l’espace indiqué entre ""
z xmlns="http://www.w3schools.com"
ƒ Indique que le nom d’espace par défaut est celui entre ""
z elementFormDefault="qualified"
ƒ Indique que tous les éléments utilisés dans le schéma doivent
être rattachés à un nom d’espace qualifié (accompagné d’un
préfixe)

© A. Belaïd 64
XML Schéma
‹ Déclaration d'éléments
z Un élément, dans un schéma, se déclare avec la balise <xsd:element>
z Exemple :
<?xml version="1.0" ?>
<xsd:schema …>
<xsd:element name="remarque" type="xsd:string"/>
<xsd:element name="contacts" type="typeContacts"/>
<!-- déclarations de types ici -->
</xsd:schema>
‹ Ce schéma déclare deux éléments :
z remarque et contacts
z A chaque élément est associé un type via l'attribut type
ƒ remarque de type xsd:string, type simple prédéfini de XML Schema
ƒ contacts de type typeContacts, type complexe défini par l'utilisateur

© A. Belaïd 65
XML Schéma
‹Les types de données
z On distingue deux types :
ƒ types simples
ƒ types complexes
‹Types simples
z Ne peuvent comporter ni attributs, ni éléments enfants
z Il en existe de nombreux, prédéfinis, mais il est également
possible d'en "dériver" de nouveaux
z Syntaxe de déclaration
<xs:element name="xxx" type="yyy"/>

© A. Belaïd 66
XML Schéma
‹Types simples : exemple
z Document XML
<lastname>Refsnes</lastname>
<age>34</age>
<dateborn>1968-03-27</dateborn>
z Schéma associé
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>

© A. Belaïd 67
XML Schéma
‹Déclaration d’attributs
z Les attributs sont déclarés de types simples
<xs:attribute name="xxx" type="yyy"/>
z Seuls les éléments complexes peuvent avoir des attributs
z Exemple d’élément XML
<lastname lang="EN">Smith</lastname>
z Voici la définition correspondante de type simple
<xs:attribute name="lang" type="xs:string"/>
z Ici, l’attribut est optionnel, et s’il apparaît, sa valeur est "EN"
<xs:attribute name="lang" type="xs:string" default="EN"/>
z Ici, l’attribut ne peut prendre que la valeur "EN"
<xs:attribute name="lang" type="xs:string" fixed="EN"/>

© A. Belaïd 68
XML Schéma
‹ Déclaration d’attributs : restriction
z Des restrictions sont utilisées sur les attributs pour ne tolérer que des
valeurs acceptables
z Les restrictions en XML sont appelées facettes
‹ Restriction à des valeurs
z Cet exemple définit un élément age avec une restriction : la valeur doit
être comprise ente 0 et 100
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

© A. Belaïd 69
XML Schéma
‹ Restriction à un ensemble de valeurs
z Pour limiter l’étendue d'un élément de XML à un ensemble de
valeurs acceptables, on a l’habitude d’utiliser l’énumération
z Cet exemple montre l’élément "car" avec restriction à "Audi",
"Golf" et "BMW"
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

© A. Belaïd 70
XML Schéma
Composition de types simples

‹Liste
z Les types listes sont des suites de types simples (ou atomiques)
z Exemple de suite intégrée :
ƒ NMTOKENS : suite séparée par des blancs
¾ <xsd:attribute name="country" type="xsd:NMTOKEN"
fixed="US"/>
z Il est également possible de créer une liste personnalisée, par
"dérivation" de types existants
z Par exemple :
<xsd:simpleType name="numéroDeTéléphone">
<xsd:list itemType="xsd:unsignedByte" />
</xsd:simpleType>
z Un élément conforme à cette déclaration serait :
<téléphone>01 44 27 60 11</téléphone>
© A. Belaïd 71
XML Schéma
‹Union
z On peut faire l’union de types déjà définis
z Exemple : sous réserve que le type simple numéroDeTéléphone ait été
préalablement défini, on peut déclarer...
<xsd:simpleType
name="numéroDeTéléphoneMnémoTechnique">
<xsd:union memberTypes="xsd:string numéroDeTéléphone" />
</xsd:simpleType>
z Les éléments suivants sont alors des "instances" valides de cette
déclaration
<téléphone>18</téléphone>
<téléphone>Pompiers</téléphone>

© A. Belaïd 72
XML Schéma
‹Types ou éléments complexes
z Un type complexe est une association de types simples
z Exemple : employee
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

© A. Belaïd 73
XML Schéma
z On peut également se baser sur un élément d’un type complexe existant et
lui ajouter des éléments :
<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent> // définit des extensions ou des restrictions sur complexType
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
"employee" doit contenir, dans l'ordre :
</xs:complexContent>
"firstname", "lastname", "adresse", "ville et
</xs:complexType>
"pays"

© A. Belaïd 74
XML Schéma
‹Type complexe avec indicateurs
z Les indicateurs permettent de contrôler l’usage des éléments à
l’intérieur du type complexe
z Il existe 7 types d’indicateurs :
ƒ Indicateurs d’ordre :
¾ All
¾ Choice
¾ Sequence
ƒ Indicateurs d’occurrence :
¾ maxOccurs
¾ minOccurs
ƒ Indicateurs de groupes :
¾ Group name
¾ attributeGroup name
© A. Belaïd 75
XML Schéma
Type complexe avec indicateurs

‹Indicateurs d’ordre
z Sont employés pour définir comment les éléments devraient se produire
z L’indicateur all
ƒ indique que les éléments enfant peuvent apparaître dans n'importe
quel ordre et que chaque élément doit se produire une et une seule
fois :
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>

© A. Belaïd 76
XML Schéma
Type complexe avec indicateurs
z L’indicateur choice
ƒ indique qu'un seul parmi les éléments enfants peut se produire:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>

© A. Belaïd 77
XML Schéma
Type complexe avec indicateurs
z L’indicateur sequence
ƒ spécifie que les éléments enfants doivent apparaître dans un certain
ordre :
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

© A. Belaïd 78
XML Schéma
Type complexe avec indicateurs

‹Indicateurs d’occurrence
z indique le nombre maximum de fois qu’un élément peut se produire
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
z Le temps d’occurrence minimum par défaut est 1

© A. Belaïd 79
XML Schéma
Type complexe avec indicateurs
z Exemple :
ƒ Fichier XML : Myfamily.xml
ƒ Fichier xsd : familiy.xsd

© A. Belaïd 80
XML Schéma
‹ L’élément <any>
z permet d’étendre le document de XML avec des éléments non indiqués
par le schéma
z L'exemple suivant est un fragment du schéma "family.xsd". Il montre
une déclaration de l'élément "person". En employant <any> on peut
prolonger (après <lastname>) "person" avec n'importe quel élément :
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>

© A. Belaïd 81
XML Schéma
L’élément <any>
z Maintenant on veut prolonger l'élément "person" avec un
élément "children". Dans ce cas-ci on peut faire ainsi, même si
l'auteur du schéma ci-dessus n’avait jamais déclaré aucun
élément "children"!
z Exemple : regarder : children.xsd
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:…>
<xs:element name="children">
<xs:complexType>
<xs:sequence>
<xs:element name="childname" type="xs:string"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
© A. Belaïd 82
XML Schéma
L’élément <any>
z Le fichier XML ci-dessous (appelé " Myfamily2.xml"), utilise des composants
issus de deux schémas différents; "family.xsd" et "children.xsd" :
<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns… xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com children.xsd">
<person>
<firstname>Hege</firstname>
<lastname>Refsnes</lastname>
<children>
<childname>Cecilie</childname>
</children>
</person>
<person>
<firstname>Stale</firstname>
<lastname>Refsnes</lastname>
</person>
</persons>

© A. Belaïd 83
XML Schéma
‹L’élément <anyAttribute>
z Nous permet d’étendre le document XML avec des attributs non prévus
par le schéma
z Exemple : on peut ajouter des attributs à l’élément "person"
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>

© A. Belaïd 84
XML Schéma
L’élément <anyAttribute>
z Maintenant nous voulons prolonger l'élément "person" avec un
attribut "gender"
z Exemple : attribute.xsd
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:…>
<xs:attribute name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:schema>

© A. Belaïd 85
XML Schéma
L’élément <anyAttribute>
z Le fichier XML ci-dessous ("Myfamily3.xml"), utilise des
composants de deux schémas différents "family.xsd" et
"attribute.xsd" :
<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com attribute.xsd">
<person gender="female">
<firstname>Hege</firstname>
<lastname>Refsnes</lastname>
</person>
<person gender="male">
<firstname>Stale</firstname>
<lastname>Refsnes</lastname>
</person>
</persons>
© A. Belaïd 86
Affichage du XML

‹Utilisation de feuilles de styles : CSS


zTrès similaire à la CSS en HTML

© A. Belaïd
Introduction
‹ Comment associer une feuille de style au document
XML ?
z On ajoute une instruction de traitement :
ƒ <?xml-stylesheet type="text/css" href="url" ?>
z précisant les pseudo-attributs :
ƒ type de valeur text/css
ƒ href de valeur l’URL absolue ou relative localisant la feuille
de style

© A. Belaïd 88
Introduction
Deux manières d’attacher les feuilles de style
‹ Feuille de style interne :
1. Inclure des règles de feuille de style dans un élément
du document XML avec un ID nommé
2. Référencer la feuille de style par son ID dans
l'instruction de traitement xml-stylesheet :
‹ Exemple : cssInterne.xml
<?xml-stylesheet type="text/css" href="#MaFeuilleDeStyle"?>
<document>
<style id="MaFeuilleDeStyle">
…. règles de styles
</style>

</document>
© A. Belaïd 89
Exemple : cssInterne.xml
<?xml version="1.0" encoding="ISO- <titre> Feuilles de style CSS dans un
8859-1"?> document XML</titre>
<?xml-stylesheet type="text/css" <p>Vous pouvez utiliser le signe dièse
href="#MaFeuilleDeStyle" ?> "#" pour indiquer que vous voulez
<document> référencer une feuille de style depuis
<style id="MaFeuilleDeStyle"> l'intérieur de votre document. Dans ce
cas, la feuille de style est contenue
titre {font-size:24pt; dans l'élément <b>st</b>, et nommée
display:block;}
"FeuilleDeStyle".
p {font-size:11pt;display:block;}
</p>
p:first-letter {float:left;
</document>
font-size:36pt;}
style {display:none;}
<!-- cela signifie que l'élément st
ne sera pas affiché -->
b {font-weight:bold;}
</style>

© A. Belaïd 90
Introduction
Deux manières d’attacher les feuilles de style
‹ Feuille de style externe :
1. Ranger la feuille de style dans un fichier, par ex. notes1.css
2. La rattacher par href
z Exemple : note1.xml
note1.css
<?xml version="1.0" encoding="UTF-8"?>
astuce {margin-left:.5in; width:250px;
<?xml-stylesheet type="text/css" border:solid 3px black;position:relative;
href="notes1.css"?> background-color:yellow;}
<!-- notes1.xml -->
<document> ressource {margin-left:.5in;width:250px;
<corps> border:solid 3px black;position:relative;
<avertissement>Ceci est un background-color:green;}
avertissement.</avertissement> avertissement {margin-left:.5in; width:250px;
En revanche, <astuce>ceci est border:solid 3px black;position:relative;
une astuce</astuce>, tandis que background-color:red;}
<ressource>ceci est une ressource
</ressource>
</corps>
</document>

© A. Belaïd 91
Définition d’une feuille de style
‹Composition
z Une feuille de style est composée de règles qui peuvent
s'appliquer soit
ƒ au document entier
ƒ à un ensemble d'éléments du document (e.g. les balises <p>
du document)
ƒ à un élément particulier qui sera défini par l'attribut class ou
id
z Une règle de style est composée :
ƒ d'un sélecteur et
ƒ d'une déclaration
z Syntaxe :
sélecteur { déclaration }

© A. Belaïd 92
Le sélecteur
‹ Le sélecteur est le nom d’une balise
z soit le document notes1.xml contenant plusieurs notes différentes.
On souhaite les afficher différemment
z Solution : on crée une feuille de style qu’on associe au document
z Exemple : notes1.xml
<?xml-stylesheet type="text/css" href="notes1.css"?>
<document>
<avertissement>Ceci est un avertissement.</avertissement> En
revanche,
<astuce>ceci est une astuce</astuce>, tandis que
<ressource>ceci est une ressource</ressource>
</document>

© A. Belaïd 93
Le sélecteur
z Exemple : notes1.css : la feuille de style correspondante
Î contient 3 règles, chacune est spécifique à une note
Î Chaque style est accompagné du nom de la note
z notes1.css :
astuce {margin-left:.5in;width:250px;border:solid 3px
black;position:relative; background-color:yellow;}
ressource {margin-left:.5in;width:250px;border:solid 3px
black;position:relative; background-color:green;}
avertissement {margin-left:.5in;width:250px;border:solid 3px
black;position:relative; background-color:red;}
z Résultat

© A. Belaïd 94
Le sélecteur
‹ Le sélecteur est précisé par un attribut
zComme il s’agit de trois notes, on pourrait :
ƒ continuer à appeler le style : note
ƒ mais le différencier par un attribut caractéristique de la note
Î notes2.xml
<?xml-stylesheet type="text/css" href="notes2.css"?>
<corps>
<note type="avertissement">Ceci est un avertissement.</note>
En revanche, <note type="astuce"> ceci est une astuce</note>,
tandis que <note type="ressource"> ceci est une
ressource</note>
</corps>
</document>

© A. Belaïd 95
Le sélecteur
z La css : notes2.css :
ƒ contient un référencement d’attributs, noté entre [] :

note {margin-left:.5in;width:250px;border-width:3px; border-


style:outset; border-color:blue;position:relative; background-
color:lightblue;}
note [type="astuce"] {background-color:yellow;border-color:yellow}
note [type="ressource"] {background-color:green; border-
color:green}
note [type="avertissement"] {background-color:red; border-
color:green}

© A. Belaïd 96
Le sélecteur
z Référencement par l’attribut (suite)
etape [optional] {dispaly:none;}
¾ Cette règle masque tous les éléments ayant un attribut optional
* [optional] {dispaly:none;}
¾ Cette règle masque tous les éléments ayant un attribut optional
quel que soit leur nom
recette[source~="Anderson"] {font-weight: bold;}
¾ Cette règle met en gras tous les éléments recette dont l’attribut
source contient le mot « Anderson ». Ce caractère "~=" permet de
faire la sélection
recette[source|="Marjorie"] {font-weight: bold;}
¾ L’opérateur "|=" se rapporte au premier terme d’une valeur
d’attribut séparée par un trait d’union, comme par exemple
Anderson-Harold ou fr-CA

© A. Belaïd 97
Étudions quelques propriétés
(ou styles)
‹ Display
z Concerne le mode de remplissage de la page par le contenu
ƒ Il existe deux modes de remplissage : inline et block
z inline
ƒ Le contenu se remplit ligne par ligne :
Î une nouvelle ligne se met à la suite de la précédente et
l’espace se remplit au fur et à mesure : caractère par caractère
Îpas de perte d’espace
z block
ƒ Un élément block remplit tout l’espace disponible

© A. Belaïd 98
Les propriétés
‹ Display : exemple
z display.xml
<para>J'aimerai émettre un commentaire : <commentaire>Il s'agit la d'une
intéressante façon de vous exprimer. </commentaire></para>
<para>Tandis que cette ligne est dépourvue de commentaire</para>
z display.css
para {display:block;color:red;}
commentaire {display:inline;color:gray;font-size:120%;font-familiy:courier;}
z Remarque : on voit que le commentaire se met à la suite, remplit au fur et à mesure
l’espace, alors que la paragraphe se met en bloc

© A. Belaïd 99
Les propriétés
‹ Display : exemple
para {display:block;color:red;}
commentaire {display:block;color:gray;font-size:120%;font-familiy:courier;}
z Remarque : ici les deux se mettent dans de nouveaux blocs

© A. Belaïd 100
Les propriétés
‹ Display : les autres valeurs
z none :
ƒ indique que le contenu ne sera pas affiché
z inherit :
ƒ l’élément hérite de l’attribut de style du conteneur immédiat
(propriété par défaut)
z compact :
ƒ le contenu occupe le minimum d’espace disponible
‹ Exemple : PluieNocturne.xml
titre {display:block;font-size:24pt;}
auteur {display:block;font-size:18pt;}
email {display:none;}
corps {display:block;font-size:10pt;}
para {display:block;font-size:11pt;}

© A. Belaïd 101
Les propriétés
‹ PluieNocturne.xml
<document>
<entete>
<titre>Pluie nocturne</titre>
<auteur>Kurt Cagle</auteur>
<email>[email protected]</email>
</entete>
<corps>
<note>Extrait du premier chapitre de Pluie nocturne, de Kurt Cagle</note>
<para>La pluie crachotait contre la fenêtre de l'appartement,
torrentielle pour cette région de Los Angeles, bien que Gina ne l'eût
sans doute à peine remarquée chez elle. … </para>
<para>"Pluie, pluie, va-t-en ..." chantait-elle sans énergie, tout en
griffonnant machinalement le script envoyé par Stan : Gina
savourait secrètement la pluie, aussi indulgente qu'avec l'humeur sombre
dans laquelle elle se complaisait.</para>
</corps>
</document>

© A. Belaïd 102
Les propriétés
‹ Pour les listes : exemple : liste.xml + liste.css
salarie {display:list-item;left:10%;list-style-image:url(PuceBleue.jpg);list-style-
type:square;}
nom {display:inline;font-size:12pt;}
prenom {display:inline;font-size:12pt;}
fonction {display:none;font-size:12pt;}
embauche {display:none;font-size:12pt;}
salaire {display:none;font-size:12pt;}
service {display:none;font-size:12pt;}
image {display:none;}
z Le navigateur affiche la puce s’il la trouve, sinon, il affiche un carré

© A. Belaïd 103
Les propriétés
‹ Pour les tables : TableSalaries.xml + TableSalaries.css
z table : le contenu s’affiche dans un tableau
z table-row-group : équivalent à <TBODY> en HTML
z Table-column-group : équivaut à <COL-GROUP> en HTML
z table-cell : équivaut à <TD> en HTML
z table-row : équivaut à <TR> en HTML
salaries {display:table;}
salarie {display:table-row;}
prenom {display:table-cell;}
nom {display:table-cell;}
titre {display:table-cell;}
embauche {display:table-cell;}
salaire1 {display:table-cell;}
service1 {display:table-cell;}
image {display:none;}
z Résultat

© A. Belaïd 104
Retour sur les sélecteurs
‹ Les sélecteurs de pseudo-classes
z Sélectionnent les éléments selon une condition n’impliquant pas
leur nom
z Il en existe 7 et sont séparés du nom de l’élément par deux
points
z :first-child
ƒ Correspond au premier-sous-élément de l’élément nommé
¾ etape:first-child {font-style: italic}
Î Mettra en italique le premier fils de etape
z :link
ƒ Correspond à l’élément source d’un lien
¾ *:link {color: blue; text-decoration: underline;}
Î Mettra en rose et en souligné tout lien hypertexte
z :visited {color: purple; text-decoration: underline;}
z :active {color: red;}

© A. Belaïd 105
Retour sur les sélecteurs
‹ Les sélecteurs de pseudo-éléments
z Sélectionnent des choses qui ne sont pas des éléments
z Comme les sélecteurs de pseudo-classes, ils sont séparés du
nom par deux points
z Il en existe quatre :
z First-letter, first-line, before et after
z Exemple : Lettrines.html
P:first-letter {float:left;font-size:36pt;font-family:Times Roman;}

<P>Ceci est un exemple de …</P>
donne

© A. Belaïd 106
Liens XML avec les autres
langages

‹ HTML
‹ Flash
‹ JavaScript
‹ PHP5

© A. Belaïd
XML - HTML
‹ Plusieurs liens
z Espace de nom
z XSL (voir plus loin)

© A. Belaïd 108
XML – SVG (Schéma XML)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN"
"http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd">
<svg>
<rect x="10" y="10" width="20" height="20" style="stroke: black; fill: #cfc;">
<animate attributeName="width" attributeType="XML" from="20"
to="120" begin="0s" dur="8s" fill="freeze"/>
</rect>
<text x="75" y="200" style="font-size:18;font-family:Helvetica; fill:green">
HELLO Visitor</text>
<path id="X_curve_MCSmcs" style="fill:#FF0000;stroke:#00C000;" d=" M
250 130 C 185 130 150 80 150 80 S 115 25 50 25
m 0 105 c 65 0 100 -50 100 -50 s 35 -55 100 -55 "/>
</svg>

© A. Belaïd 109
XML – SVG (Schéma XML)
‹ Résultat : xml-svg.svg

© A. Belaïd 110
XML – Flash - SMIL

© A. Belaïd 111
XML – Flash – SMIL (Schéma XML)
<?xml version="1.0" encoding="UTF-8" ?>
<musee nom="museeMiage">
<salle id="1" nom="Van Gogh" nboeuvre="2">
<oeuvre nom="Champ de ble aux corbeaux" auteur="VanGogh">
<resume place="vangogh.smil"/>
</oeuvre>
<oeuvre nom="Nuit etoilée" auteur="VanGogh">
<resume place="vangogh2.smil"/>
</oeuvre>
</salle>

<salle id="2" nom="Monet" nboeuvre="4">


<oeuvre nom="Le vieillard" auteur="Monet">
<resume place="monet.smil"/>
</oeuvre>
<oeuvre nom="Le vieux pont" auteur="Monet">
<resume place="monet2.smil"/>
</oeuvre>
<œuvre …

</salle>
</musee>

© A. Belaïd 112
XML – Flash - SMIL
//on créé l’objet XML :
liste = new XML();
liste.ignoreWhite = true;
//8em salle: (les tableaux commencent à l’index 0)
salle=7;
//on définit ce qui se passe sur un load():
liste.onLoad = function(ok) {
if (ok = true) {
n_root = liste.firstChild;
//on récupère la salle concernée:
n_salle = n_root.childNodes[salle];
//on récupère l’oeuvre concernée, ici la 3em :
n_oeuvre=n_salle.childNodes[2];
//on récupère le path vers le .smil de l’œuvre :
n_resume=n_oeuvre.childNodes[0];
//on affiche les informations:
textDynamiq01.text=n_oeuvre.attributes.nom;
textDynamiq02.text=n_oeuvre.attributes.auteur;
}
};
liste.load("bdd.xml" );
© A. Belaïd stop(); 113
SMIL : PP_AUTO.smil
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<head>
<layout>
<root-layout width="640" height="500" backgroundColor="#000000"/>
<region id="img_region" width="640" height="500" />
<regPoint id="middle" left="50%" top="50%" regAlign="center"/>
</layout>
</head>
<body>
<par>
<img src="images/PP/PP_autoportrait.jpg" region="img_region"
transOut="toBlackQuick" begin="0s" dur="23s" fill="freeze"
regPoint="middle"/>
<audio src="sons/PP_AUTO.mp3" id="audio1" region="audio_region">
</audio>
</par>
</body>
© A. Belaïd
</smil> 114
XML-JavaScript
‹ Lecture sous InternetExplorer
function afficheIE(couleur) {
// chargement du fichier XML
var xml = new ActiveXObject("Microsoft.XMLDOM") ;
xml.async = false ;
xml.load("xmldemo.xml") ;

// chargement du fichier XSL


var xsl = new ActiveXObject("Microsoft.XMLDOM") ;
xsl.async = false ;
xsl.load("xsl2.xsl");
// modification du parametre dans la XSL
xsl.selectSingleNode("//xsl:param[@name='couleur']/@select").nodeValue = "'" +
couleur +"'";

// transformation
var target = document.getElementById("tableau");
target.innerHTML = xml.transformNode(xsl);
}
© A. Belaïd 115
XML-PHP
‹ Lecture par simplexml_load
<?php
$bibliotheque = simplexml_load_file('livres.xml');
foreach ($bibliotheque->style as $style) {
print "\nType {$style['id']} <br />\n";
foreach ($style->livre as $livre) {
print "Titre : {$livre->titre} <br />\n";
print "Auteur : {$livre->auteur} <br />\n";
}
}
?>

© A. Belaïd 116
XML-PHP
<?xml version="1.0" encoding="utf-8"?> ‹ Lecture par simplexml_load
<bibliotheque>
<?php
<style id="roman">
$bibliotheque =
<livre>
simplexml_load_file('livres.xml');
<titre>La fortune des Rougon</titre>
foreach ($bibliotheque->style as
<auteur>Emile Zola</auteur> $style) {
</livre>
print "\nType {$style['id']} <br />\n";
<livre>
foreach ($style->livre as $livre) {
<titre>Hernani</titre>
<auteur>Victor Hugo</auteur> print "Titre : {$livre->titre} <br />\n";
</livre> print "Auteur : {$livre->auteur} <br
</style> />\n";
<style id="fiction"> }
<livre> }
<titre>Le seigneur des anneaux</titre> ?>
<auteur>J.R.R. Tolkien</auteur>
</livre>
</style>
</bibliotheque>
© A. Belaïd 117
XML-PHP
‹ Résultats
Type roman
Titre : La fortune des Rougon
Auteur : Emile Zola
Titre : Hernani
Auteur : Victor Hugo
Type fiction
Titre : Le seigneur des anneaux
Auteur : J.R.R. Tolkien

© A. Belaïd 118

Vous aimerez peut-être aussi