Introduction à XML et ses normes
Introduction à XML et ses normes
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)
© 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
© 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 :
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)
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’?>
© 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
© 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 :
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>
© 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
© 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
© 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
© 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
© 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"
>
]>
© 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"
>
]>
© A. Belaïd 60
Espaces de nommage
Exemple : 2 espaces de nommage :
liste_collaborateurs.xml avec DTD interne
© A. Belaïd 61
Les schémas XML
© 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">
© 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
© 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 [] :
© 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>
© 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") ;
// 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