J.J. GIRARDOT - EMSE 10/2004 2
Qu'est-ce que XML ?
Les initiales de eXtended Mark-up Language Un langage de description de documents Un successeur de SGML qui tient compte :
Des leçons de SGML et d'HTML De l'existence du Web, de Java
Une recommandation du W3C (World Wide Web Consortium)
Un format d'échange de stockage
J.J. GIRARDOT - EMSE 10/2004 4
Exemple de document SGML
<!DOCTYPE document SYSTEM "document.dtd">
<DOCUMENT>
<head>
<title>Le titre</title>
<author> Vincent Zoonekynd <date>Avril 2000</date>
<body>
<abstract>
<p>
Le contenu de l'abstract </abstract>
<toc><sect>
<stitle>Un sous-titre</stitle>
Un paragraphe
<p> Un second avec du TeX :
<verb lang=tex>\newcommand{\noun}[1]
{\textsc{#1}}</verb>
</sect>
<sect>
<stitle>Un autre sous-titre <sect1>
<stitle>Un titre de sous-section</stitle>
<p>
Un autre paragraphe </p>
</sect1>
<sect1>
<stitle>Autre sous-section</stitle>
<p>
Encore un <em>paragraphe</em>
</p>
</sect1>
</body>
</document>
J.J. GIRARDOT - EMSE 10/2004 1
XML : Extensible Markup Language
Une introduction (1)
http://kiwi.emse.fr/3A/dn.html Ph. Jaillon / J.J. Girardot
J.J. GIRARDOT - EMSE 10/2004 3
SGML
Standard Generalized Markup Language Norme ISO-8879 (1986)
Caractéristiques
Langage à balises, permettant la création de nouveaux formats
description des formats par des dtd, document type definition, (ex : DocBook)
Syntaxe complexe
délimiteurs de balises, entités, etc.
"Simple" à saisir
appels abrégés, fermeture automatique
J.J. GIRARDOT - EMSE 10/2004 6
Inconvénients de SGML
Très grande complexité de la syntaxe
Macros, abréviations, raccourcis, omissions...
Ambiguïté de certaines notations
Processeurs complexes à écrire
Aucun processeur complet
Non compatibilité entre processeurs
Rigueur et laxisme des descriptions
Nécessité de disposer d'un DTD
Laxisme possible dans l'écriture des documents
Nécessités d'évolution du langage
Orienté « document » plus que « données » Types de données manquants, adaptation au Web...
Inconvénients de HTML
HTML décrit une structure (simpliste) de documents
<html>
<head><title> … </title></head>
<body> … </body>
</html>
Il constitue également un langage (trop simple) de formatage et de présentation.
Texte en <b>gras</b> et en <i>italique</i>.
Mélange fréquent des genres (structuration et présentation)
J.J. GIRARDOT - EMSE 10/2004 5
Le DTD correspondant
<!ENTITY % text "#PCDATA|img|ref|label|a|link|itemize|enum|descrip|
verb|perl|tt|em|html|latex">
<!ENTITY % simpletext "#PCDATA|tt|em">
<!ELEMENT document - - (head,body)>
<!ELEMENT head O O (title, author?, date?)>
<!ELEMENT title - O (#PCDATA)>
<!ELEMENT author - O (#PCDATA)>
<!ELEMENT date - O (#PCDATA)>
<!ELEMENT body O O (abstract?,toc?,sect*)>
<!ELEMENT abstract - O (p+)>
<!ELEMENT toc - O EMPTY>
<!ELEMENT sect - O (stitle, (p|sect1)+)>
<!ELEMENT sect1 - O (stitle, (p|sect2)+)>
<!ELEMENT sect2 - O (stitle, p+)>
<!ELEMENT stitle O O (%simpletext)+>
<!ELEMENT p O O (%text)+>
<!ELEMENT tt - - (#PCDATA)>
<!ELEMENT em - - (#PCDATA)>
<!ELEMENT html - O EMPTY>
<!ATTLIST html src CDATA #REQUIRED>
<!ELEMENT latex - O EMPTY>
<!ATTLIST latex src CDATA #REQUIRED>
<!ELEMENT img - O EMPTY>
<!ATTLIST img src CDATA #REQUIRED>
<!ELEMENT a - - (%simpletext)+>
<!ATTLIST a href CDATA #REQUIRED>
<!ELEMENT link - - (linktext, href+)>
<!ELEMENT href - - (#PCDATA)>
<!ELEMENT linktext - - (%simpletext)+>
<!ATTLIST sect id ID #IMPLIED>
<!ATTLIST sect1 id ID #IMPLIED>
<!ATTLIST sect2 id ID #IMPLIED>
<!ELEMENT label - O EMPTY>
<!ATTLIST label id ID #REQUIRED>
<!ELEMENT ref - O EMPTY>
<!ATTLIST ref id IDREF #REQUIRED>
<!ELEMENT itemize - - (item+)>
<!ELEMENT enum - - (item+)>
<!ELEMENT item - O (p+)>
<!ELEMENT descrip - - (tag,p+)+>
<!ELEMENT tag - - (%simpletext)+>
<!ELEMENT verb - - (#PCDATA)>
<!ATTLIST verb lang (tex|perl|shell) tex>
<!ENTITY LaTeX "LaTeX">
<!ENTITY latex "LaTeX">
<!ENTITY TeX "TeX">
<!ENTITY tex "TeX">
<!ENTITY lt "<">
<!ENTITY gt ">">
<!ENTITY amp "&">
<!ENTITY dollar "$">
<!ENTITY oe "oe">
<!ENTITY OE "OE">
HTML
HTML est un langage à balises adapté à la description et à la présentation de documents hypertexte et multimédia
Ensemble fixe de balises prédéfinies
C'est un langage pouvant être décrit par SGML
http://www.w3.org/TR/html4/strict.dtd
Introduit par Tim Berners Lee et Robert Caillau au CERN en 1991.
Plusieurs évolutions, de 1.0 à 4.0
HTML met en oeuvre deux grandes idées :
l’hypertexte (1945)
les langages à balises (1970)
J.J. GIRARDOT - EMSE 10/2004 10
XML : Objectifs initiaux
Utilisation simple à travers l'Internet
Support d'une grande variété d'applications.
Compatibilité avec SGML.
Simplicité d'écriture d'outils de manipulation de documents.
Nombre de caractéristiques optionnelles réduit au strict minimum.
Lecture possible (et aisée) des documents par les individus.
Conception rapide de la norme.
Conception formelle et concise de la norme.
Simplicité de création des documents XML.
La taille prise par les balises dans un document était sans importance.
J.J. GIRARDOT - EMSE 10/2004 12
XML : Les normes
Gérées par le W3 Consortium http://www.w3.org/
XML : la norme de base
http://www.w3.org/XML/
Normalisation de certaines extensions :
Namespaces, XInclude, XML Base, Xlink, XPointer, XPath, DTD, XML Schema, XSLT, XQuery, DOM, SAX, RDF, SOAP, SMIL, SVG, Math ML…
J.J. GIRARDOT - EMSE 10/2004 9
Une évolution nécessaire
Nécessité de disposer d’un formalisme général pour :
Structurer les documents, mais aussi des données Les diffuser et les présenter sur le web
Les traiter informatiquement Plus encore …
SGML : bon candidat, mais vieux et trop complexe à mettre en oeuvre
Une complexité destinée à simplifier la création manuelle de documents
Il fallait privilégier la rigueur et l’automatisation des traitements
J.J. GIRARDOT - EMSE 10/2004 11
XML : état actuel
XML est une boite à outil pour décrire des langages à balises
Il n’existe pas de balisages prédéfinis
Chacun peut définir un balisage adapté à ses propres besoins
Chaque description de langage XML est dédiée à un domaine d’application
Ces langages peuvent partager de nombreux aspects On dispose d’outils génériques et standards pour traiter les documents
J.J. GIRARDOT - EMSE 10/2004 14
Le document XML sous forme textuelle
<recette id="RF200-153B" categorie="plat-principal">
<titre>
Carottes au beurre </titre>
<ingredients>
<ingredient>Carottes nouvelles <qt>800 g</qt></ingredient>
<ingredient>Beurre <qt>50 g</qt></ingredient>
...
</ingredients>
<preparation>
...
</preparation>
</recette>
XML : Noms de balises
Name ::= (Letter | '_' | ':') (NameChar)*
NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
| CombiningChar | Extender
Le caractère ':' dans les noms XML est réservé à l'usage des Namespaces.
L'usage du nom 'xml' (quelle qu’en soit la casse) est réservé.
Attention : majuscules et minuscules ne sont pas équivalentes dans les identificateurs.
J.J. GIRARDOT - EMSE 10/2004 13
Vue conceptuelle de XML
Un document XML est un arbre ordonné et étiqueté:
Les feuilles contiennent des données sous forme de chaînes de caractères
Chaque élément (un noeud de l'arbre) porte un label (Tag) et a un ensemble d’attributs Un attribut a un nom et une valeur.
Ces noeuds peuvent avoir des fils
recette
id="RF200-153B"
categorie="plat-principal"
titre
Carottes au beurre ingredients
Carottes nouvelles
800 g qt
ingredient ingredient
50 g Beurre qt
...
...
Vision concrète de XML
Un fichier texte (Unicode) avec un balisage et des méta-informations.
Notation abrégée pour les éléments vides : ...<foo attr="val" .../>...
...<foo attr="val" ...>...</foo>
contenu de l'élément balise de fermeture balise d'ouverture, de nom foo
un attribut, de nom attr et de valeur val
J.J. GIRARDOT - EMSE 10/2004 18
XML : syntaxe
Prologue
prolog ::= XMLDecl? Misc*
(doctypedecl Misc*)?
XMLDecl ::= '<?xml' VersionInfo
EncodingDecl? SDDecl? S? '?>’
<?xml version="1.0"?>
Commentaires
<!-- declarations for <head> & <body> -->
J.J. GIRARDOT - EMSE 10/2004 20
XML : syntaxe
Attributs
Attribute ::= Name Eq AttValue
Eq ::= S? '=' S?
AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'"
Références :
Reference ::= EntityRef | CharRef EntityRef ::= '&' Name ';'
CharRef ::= '&#' [0-9]+ ';'
| '&#x' [0-9a-fA-F]+ ';'
J.J. GIRARDOT - EMSE 10/2004 17
Document XML bien formé
Un texte est un document XML bien formé ssi:
il s'agit d'un "document" .
il respecte toutes les contraintes de la spécification.
les éléments analysés qui le composent sont bien formés Document ::= prolog element Misc*
Respecter la définition de "document" implique:
il contient un ou plusieurs éléments.
il y a exactement un élément (racine) et les autres éléments sont correctement imbriqués
J.J. GIRARDOT - EMSE 10/2004 19
XML : syntaxe
Les balises
element ::= EmptyElemTag| STag content ETag
STag ::= '<' Name (S Attribute)* S? '>’
ETag ::= '</' Name S? '>’
content ::= (element | CharData
| Reference | CDSect | PI | Comment)*
EmptyElemTag ::= '<' Name (S Attribute)*
S? '/>’
J.J. GIRARDOT - EMSE 10/2004 22
XML : codage des données
Spécification du codage des documents
Par défaut il s'agit de UTF8.
C'est une erreur que d'utiliser un autre encodage sans le spécifier
Exemples :
<?xml version="1.0" encoding='UTF-8'?>
<?xml version="1.0" encoding='ISO-8859-1'?>
Remarque : l'ASCII est un sous ensemble commun de l'UTF8 et de l'ISO-8859
DTD et XMLSchemas
DTD : version historique apparue avec SGML Syntaxe inspirée de SGML, mais non compatible Permet de décrire balises, attributs et contenus
Grammaire surtout adaptée à des documents textuels XMLSchema
Syntaxe XML
Offre plus de possibilités que les DTD
contraintes sur les types de données manipulées contraintes sur les enchaînements et nombre des contenus
possibilité de « mélanger » des schémas
J.J. GIRARDOT - EMSE 10/2004 21
Contenu textuel
Texte compris entre une balise ouvrante et la balise fermante correspondante
Caractères "<", "&" et séquence "]]>" interdits Utiliser <, & ou >
Construction spécifique
CDATA Sections
<![CDATA[<greeting>Hello, world!</greeting>]]>
Document XML valide
Un document XML est valide si :
Il est « bien formé »
Il respecte une certaine grammaire, qui indique : les caractéristiques de la racine du document les balises autorisées dans le document
les contenus autorisés de chaque balise (texte, balises)
les noms et caractéristiques des attributs autorisés pour chaque balise
Cette grammaire d'un document peut s'exprimer, pour XML, au travers de deux formalismes :
les DTD (Document Type Definition) les XML Schema
J.J. GIRARDOT - EMSE 10/2004 26
Exemples (1)
Référence à un DTD public :
<!DOCTYPE article PUBLIC
"-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd">
<!DOCTYPE doc PUBLIC
"-//Henry S. Thompson//DTD Simple XML Document//EN" "" >
Référence à un DTD local :
<!DOCTYPE praat-textgrid SYSTEM "praat-textgrid.dtd">
<!DOCTYPE report SYSTEM "report.dtd">
J.J. GIRARDOT - EMSE 10/2004 28
Exemple (3)
<!DOCTYPE cardbook [ -- Déclaration locale --
<!ELEMENT cardbook (card*)>
<!ELEMENT card (name, email, photo)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT photo EMPTY>
<!ATTLIST ...> ]>
<cardbook>
<card>
<name>Fabienne DURANT</name>
<email>fdurant@messel.emse.fr</email>
<photo img="http://messel.emse.fr/local/photos/2019/fdurant.jpeg"/>
</card>
<card>
<name>Paul DUPON</name>
<email>pdupon@messel.emse.fr</email>
<photo img="http://messel.emse.fr/local/photos/2019/pdupon.jpeg"/>
</card>
<cardbook>
J.J. GIRARDOT - EMSE 10/2004 25
XML Document défini par un DTD
Définition de la racine du document et déclaration du document type par :
<!DOCTYPE root-element [ doctype-declaration... ]>
Précise où est définie la DTD : Dans le document lui-même
elle se place entre crochets
À un autre emplacement, qui peut être
privé (mot-clef SYSTEM, identification de fichier) public (mot-clef PUBLIC, URL de document)
J.J. GIRARDOT - EMSE 10/2004 27
Exemples (2)
Document contenant son DTD
<!DOCTYPE test [
<!ELEMENT test (greeting)>
<!ELEMENT greeting #PCDATA>
]>
<test>
<greeting>Hello, World!</greeting>
</test>
J.J. GIRARDOT - EMSE 10/2004 30
Élément : modèle de contenu
EMPTY : pas de contenu ANY : n’importe quel contenu (#PCDATA | element-name | ...) :
« mélange » : chaînes de caractères et éléments listés
« Expression régulière » d’éléments :
choix: (... | ... | ...), séquence: (... , ... , ...) facteur de répétition :
optionnel : ?, zéro ou plus : *, un ou plus : +
Exemples
<!ATTLIST AUTHOR role (author|techwriter) "author">
<!ATTLIST praat-textgrid
version CDATA #REQUIRED type CDATA #REQUIRED
class NMTOKEN #FIXED "TextGrid"
xmin CDATA #REQUIRED xmax CDATA #REQUIRED
tiers (exists|none) #REQUIRED size CDATA #REQUIRED >
<!ATTLIST acm name CDATA #IMPLIED code CDATA #IMPLIED >
<!ATTLIST PUBLICATION format (html | pdf | ps)#REQUIRED>
<!ATTLIST style id ID #REQUIRED>
<!ATTLIST bibitem
type CDATA #REQUIRED label ID #REQUIRED>
J.J. GIRARDOT - EMSE 10/2004 29
Définition d'un élément
Déclaration d'élément :
Définit les caractéristiques (contenu, attribut) de tout élément qui porte ce nom.
<!ELEMENT element-name content-model>
Le nom respecte la syntaxe des identificateurs Le contenu décrit ce qui est autorisé dans la balise
rien texte
autres balises, et leur ordre éventuel mélanges de texte et d'autres balises
DTD : Attributs
<!ATTLIST element-name
attr-name attr-type attr-default ...>
attr-name Nom de l'attribut attr-type Type de l’attribut :
CDATA: n’importe quelle valeur (par défaut) (value|...) : énumération des valeurs possibles
ID, IDREF, IDREFS : ID la valeur de cet attribut doit être unique
("element identity"), IDREF la valeur de cet attribut doit correspondre à un ID (référence à un élément)
attr-default Contrainte sur l'attribut :
#REQUIRED : l’attribut doit être explicitement renseigné
#IMPLIED : l’attribut est optionnel, pas de valeur par défaut
« value »: si aucune valeur n’est fournie, cette valeur est insérée par défaut
#FIXED « value » : comme précédemment, mais seule cette valeur est autorisée
J.J. GIRARDOT - EMSE 10/2004 34
DTD : Exemple
<!ELEMENT collection (description,recipe*)>
<!ELEMENT description ANY>
<!ELEMENT recipe
(title,ingredient*,preparation,comment?,nutrition)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT ingredient EMPTY>
<!ATTLIST ingredient name CDATA #REQUIRED amount CDATA #IMPLIED unit CDATA #IMPLIED>
<!ELEMENT preparation (step*)>
<!ELEMENT step (#PCDATA)>
<!ELEMENT comment (#PCDATA)>
<!ELEMENT nutrition EMPTY>
<!ATTLIST nutrition protein CDATA #REQUIRED carbohydrates CDATA #REQUIRED fat CDATA #REQUIRED
calories CDATA #REQUIRED alcohol CDATA #IMPLIED>
J.J. GIRARDOT - EMSE 10/2004 36
Limites des DTD
Syntaxe spécifique Typage
Pas de possibilité de typer les contenus
Typage faible des valeurs d’attributs (orienté document plutôt que XML-Data)
Pas de modélisation partielle : la modélisation doit être complète
Pas d’intégration des espaces de noms
J.J. GIRARDOT - EMSE 10/2004 33
DTD : entités
Une entité est une macro-définition
définie dans la DTD ou le document lui-même pouvant être insérée dans le document
Syntaxe de définition
<!ENTITY emse "École Nationale Supérieure des Mines de Saint-
Étienne">
Syntaxe d'utilisation
&emse;
J.J. GIRARDOT - EMSE 10/2004 35
Note
Un document peut utiliser un DTD existant en le modifiant ou en ajoutant des déclarations :
<!DOCTYPE books PUBLIC "-//LBIN//DTD IEEE Magazines//EN"
"xmlarticle.dtd"
[
<!ENTITY A1003 SYSTEM "a1003.xml">
<!ENTITY A1004 SYSTEM "a1004.xml">
<!ENTITY A1005 SYSTEM "a1005.xml">
<!ENTITY A1010 SYSTEM "a1010.xml">
<!ENTITY A1017 SYSTEM "a1017.xml">
<!ENTITY A1025 SYSTEM "a1025.xml">
<!ENTITY A1045 SYSTEM "a1045.xml">
<!ENTITY A1051 SYSTEM "a1051.xml">
<!ENTITY A1067 SYSTEM "a1067.xml">
<!ENTITY A1079 SYSTEM "a1079.xml">
]>
J.J. GIRARDOT - EMSE 10/2004 38
Namespace :
qualifier les espaces de noms
Un namespace se déclare en utilisant :
l’attribut xmlns (namespace par défaut) En préfixant un nom par xmlns:
La valeur de cet attribut est une URI : le « namespace name »
Se doit d’avoir des propriétés d’unicité et de persistance
Un namespace est défini pour l’élément et tout son contenu
Un élément préfixé par un namespace est un « qualified name »
XML schema
Syntaxe XML (il existe un Schema for Schemas) Utilisation et support des Namespaces
Déclarations orientées objet (héritage, types abstraits…) Définition de types global (=top-level) et local (=inlined) Modularité (inclusion de schema et redéfinitions) Structure auto-documentée
Expression de la cardinalité des sous-éléments Valeurs nulles (absence de contenus)
Attributs et éléments par défaut Any-element, any-attribute
Unicité des contraintes et ID/IDREF attribute scope
Expressions régulières pour specifier des chardata et des attributs valides
Nombreux types de données prédéfinis pour les contenus et les attributs
J.J. GIRARDOT - EMSE 10/2004 37
Namespace : conflits de noms
Le mélange des langages XML peut provoquer des conflits de noms.
<envelope>
<body>
<documentation>
<html>
<head><TITLE>SOAP 1.1</TITLE></head>
<body>
<h1>Simple Object Access Protocol …
</body>
</html>
</documentation>
</body>
</envelope>
Namespace : exemple
<?xml version="1.0"?>
<!-- initially, the default namespace is "books" -->
<book xmlns='urn:loc.gov:books'
xmlns:isbn='urn:ISBN:0-395-36341-6’>
<title>Cheaper by the Dozen</title>
<isbn:number>1568491379</isbn:number>
<notes>
<p xmlns='urn:w3-org-ns:HTML'>
This is a <i>funny</i> book!
</p>
</notes>
</book>
J.J. GIRARDOT - EMSE 10/2004 42
Influence de XML sur HTML
HTML est un type de document à structure figée HTML devrait être un « langage XML »
Compatibilité syntaxique pour les outils informatiques XHTML offre une vision XML de HTML :
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><title>Hello world!</title></head>
<body><p>foobar</p></body>
</html>
J.J. GIRARDOT - EMSE 10/2004 44
Les outils
Librairies libXML et libXSLT de D. Veillard
Xmllint et xsltproc
Librairies JAVA
XT et XP de James Clark
Xerces et Xalan du projet Apache
J.J. GIRARDOT - EMSE 10/2004 41
XML Schema : exemple
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:b="http://businesscard.org"
targetNamespace="http://businesscard.org">
<element name="card" type="b:card_type"/>
<element name="name" type="string"/>
<element name="title" type="string"/>
<element name="email" type="string"/>
<element name="phone" type="string"/>
<element name="logo" type="b:logo_type"/>
<complexType name="card_type">
<sequence>
<element ref="b:name"/>
<element ref="b:title"/>
<element ref="b:email"/>
<element ref="b:phone" minOccurs="0"/>
<element ref="b:logo" minOccurs="0"/>
</sequence>
</complexType>
<complexType name="logo_type">
<attribute name="url" type="anyURI"/>
</complexType>
</schema>
<card
xmlns="http://businesscard.org">
<name>John Doe</name>
<title>CEO, Widget Inc.</title>
<email>john.doe@widget.com</email>
<phone>(202) 456-1414</phone>
<logo url="widget.gif"/>
</card>
J.J. GIRARDOT - EMSE 10/2004 43
Les langages de description
Il existe des DTD ou des schémas pour de nombreux usages
Graphique SVG Html XHTML
…
J.J. GIRARDOT - EMSE 10/2004 46
SAX
SAX est la norme pour les analyseurs à évènements : peu gourmands en mémoire, ils fonctionnent sur un système de
"callback".
Événements SAX
startDocument startElement endElement Characters
Exemples : XML::Parser, XP, ...
J.J. GIRARDOT - EMSE 10/2004 45
Programmation
Standardisation des api de programmation
SAX : vision événementielle d’un flot XML
DOM : Accès standard à la représentation mémoire
Des bibliothèques existent pour de nombreux langages :
C, JAVA, PERL, PHP …
DOM
Classes représentant le document XML en mémoire
classNode
appendChild, insertBefore, getAttributes, getNodeValue, getChildNodes, getFirstChild, getLastChild, getParentNode , hasAttributes , hasChildNodes …
class Element extends Node
getAttribute, getAttributeNode, getElementsByTagName, getTagName…
class CharacterData extends Node getData, setData …
class Attr extends Node
getName, getOwnerElement, getSpecified, setValue …