XML « Extensible Markup Language »
================================================================================
XML = Recommandation du W3C
http://www.w3.org/TR/REC-xml/
Source d'infos
http://www.xml.org/
Extensible dans le sens où il supporte la définition de nouvelles balises
Compatible avec SGML, aucun lien direct avec HTML
XHTML = HTML reformulé en XML
Plusieurs langages dérivés du XML: RDF, SVG, ODF, XForms, etc.
Définit la structure (contenu), aucune information de mise en page (forme)
Idée = transmission de contenus structurés entre applications, organisations...
SYNTAXE XML
-----------
XML est sensible à la casse
convention: écrire les balises en minuscule
ÉLÉMENT
1. chaque « élément » a une balise ouvrante et une fermante
---
---
2. les balises fermantes doivent respecter l'ordre d'apparition des balises
d'ouverture (pas de chevauchement)
---
---
= ok
---
---
= illégal, chevauchement de « nom » et « tel »
3. élément vide peut être écrit avec raccourci syntaxique
---
ou
(raccourci syntaxique)
---
4. les « attributs » d'un élément sont écrits dans la balise ouvrante
leurs valeurs doivent êtres encadrées par guillements (simples ou doubles)
987-3000
plusieurs attributs sont séparés par espaces
987-3000
5. valeur d'un élément (son contenu):
- texte ou
- autre balise ou
- les deux (contenu mixte)
COMMENTAIRES
INSTRUCTIONS DE TRAITEMENT (Processing instructions)
nom_application instructions ?>
(rarement utilisé)
INSTRUCTIONS AU PARSEUR
(utilisé par DTD)
DOCUMENT XML
le « document » xml =
XML Declaration + « élément racine »
1. Le « XML Declaration » (première ligne de contenu)
valeur par défaut d'encoding = UTF-8
2. « élément racine » DOIT exister et est unique (pas deux racines)
= illégal, redondance peut exister mais pas à la racine du document
ex. de document XML:
---
---
DOCUMENT « BIEN FORMÉ »
-----------------------
document bien formé (well formed) =
se conformer à la syntaxe XML définie par W3C
http://www.w3.org/TR/REC-xml/
(une seule page web)
= structure arborescente
vs structure relationnelle (base de données relationnelle)
dans un élément, insère valeur (ex.: texte)
Exemple d'un document complet en XML:
---
bottin.xml
---
Zoro, Davin
123-4567
Thibault, Mélanie
987-3000
---
« self-documenting document », XML conçu pour que ce soit human readable
on peut représenter le no de tél de façon plus détaillée:
---
residence
987-3000
---
XML donne une autre façon de le faire, avec les « attributs »
---
987-3000
987-3000
---
bonne pratique d'utiliser l'attribut seulement pour « qualifier » le contenu
élément d'information simple qui qualifie
DOCUMENT « VALIDE »
-------------------
Un coup que la « syntaxe » est respectée (analogie = code qui compile),
le document peut être comparé à une « grammaire » (référence)
pour voir si il s'y conforme.
bien formé = vérification de la syntaxe
valide = vérification de la grammaire (logique)
Cette grammaire s'appelle un Schéma
3 types de Schéma: DTD, Schema, Relax NG
Le parser doit supporter un des 3 types.
L'ensemble des éléments d'un document = un vocabulaire
DTD (Document Type Declaration)
-------------------------------
DTD provient de SGML, permet de valider:
- structure
- valeur (mais grossièrement, ne gère pas les types,
valeur = text (PCDATA) ou éléments)
Syntaxe de DTD n'est pas en XML
DÉFINITION DE LA DTD
La DTD peut être :
- incorporée au document xml ou, mieux
- définie dans un document séparé (mieux car réutilisable par d'autres docs)
- définition locale (relative à l'envrionnement) ou
- définition publique (associée à un catalogue public)
Syntaxe générale de la définition de la DTD:
Appel de définitions externes:
Locales:
où nom de fichier = URI (path)
Publiques:
un nom logique est donné et grâce à « PUBLIC »
le lien avec la position physique (URI) peut être fait ailleurs
Si plusieurs URI sont données, lit première, sinon prend l'autre, sinon...
(if else)
exemple:
Contenu de la DTD:
La DTD contient, entre les crochets [ ], les :
- déclarations des éléments (nom et valeurs permises)
- déclarations des attributs
- déclarations des entités
- contrôles d'occurences
Attention, si une DTD externe est utilisée, commencer le contenu de celle-ci
directement par les déclarations des éléments, attributs, entités, etc.
NE PAS ÉCRIRE :
DÉCLARATION D'UN ÉLÉMENT
où nom-element :
- commence par une lettre
(reste peut avoir ".", "-", "_", ":"..., pas de contrainte longueur)
où valeurs-permises :
- soit le mot réservé PCDATA + # devant pour dire que = mot réservé
(#PCDATA): pour le texte seulement (utiliser les entités dans texte)
- soit EMPTY pout élément qui sera TOUJOURS vide
- soit ANY (pour texte ou autre éléments) (rare, trop permissif)
- soit le nom d'autres éléments (qui devront aussi être déclarés)
avec, optionnellement, des contrôles d'occurence
exemples
ou
ou
ou
ou
DÉCLARATION DES ATTRIBUTS
Les attributs modifient la signification d'un élément.
Dans la DTD, un attribut est déclaré par
- le nom de l'élément auquel il se rattache
- son nom (de l'attribut) (ne jamais commencer par "xml:")
- son type
- sa valeur par défaut (optionnel)
- contrainte de validité (optionnelle)
Déclaration d'un attribut
La déclaration d'un attribut vient après la déclaration d'un élément
exemple:
lire:
trois usage possible pour le numéro de téléphone,
par défaut = résidence
Appel d'un attribut (exemple)
343-6630
Types possibles:
- CDATA (chaîne de caractères, pas PCDATA mais bien CDATA)
- types énumérés (donner son énumération avec « | » pour dire « ou »)
- NMTOKEN ou NMTOKENS (respectivement un ou plusieurs « mots »)
Contraintes de validité possibles:
- #REQUIRED = attribut obligatoire
- #IMPLIED = attribut optionnel et sans valeur par défaut
- #FIXED = attribut utilise toujouts valeur implicite (à déclarer)
= constante, rare
DÉCLARATION DES ENTITÉS
L'entité est une chaîne de caractères qui peut être appelée par un raccourci
déclaré. Utilisé pour simplifier rédaction.
(La chaîne de caractères pourrait être un fichier txt...)
Certaines entités sont prédéfinies, notamment pour représenter caractères
réservés de XML
http://www.w3.org/TR/REC-xml/#sec-predefined-ent
4 types d'entités:
générales interne, générale externe
paramètres interne, paramètre externe
où
générale = utilisées par fichier XML
paramètre = utilisées par DTD
Déclaration des entités générales (exemple):
Appel des entités GÉNÉRALES INTERNES (exemple):
&droits;
Déclaration des entités paramètres (exemple):
(l'espace entre le « % » le nom de l'entité est important)
Appel des entités PARAMÈTRES INTERNES (exemple):
noter l'appel = %usage; et non &usage;
utile de déclarer l'entité « usage »
si doit être utilisé plusieurs fois dans DTD
Déclaration des entités EXTERNES
même mécanisme que déclaration des DTD externes
(utiliser SYSTEM pour local ou
PUBLIC si fait référence à catalogue public)
CONTRÔLES D'OCCURENCES
Pour chaque élément déclaré, il est possible de
définir la séquence d'éléments (sous-éléments) permis.
, = ET
| = OU
? = 0 ou 1 fois
+ = 1 ou plusieurs fois
* = 0 ou plusieurs fois
(notations proches des patterns matching et de notation UML)
comme dans pattern matching, peut imbriquer ces contrôles d'occurences
exemples:
(a,b) = a ET b
(a|b) = a OU b
(a,b?) = a ET (b 0 ou 1 fois)
(a,b+) = a ET (b 1 ou plusieurs fois)
(a|b*) = a OU (b 0 ou plusieurs fois)
(a,b)* = (a ET b) 0 ou plusieurs fois (illimité)
(a, (b|c)) = a ET (b OU c)
(a, a+) = a au moins 2 fois
exemples concrets:
lire: l'élément « p »
contient 0 ou plusieurs fois (du texte OU élément « emph »)
(où « emph » resterait à déclarer)
l'élément « div » contient 0 ou plusieurs fois (l'élément « p » OU
l'élément « liste » OU l'élément « note »)
(où les éléments « liste » et « note » resteraient à déclarer)
lire: « bottin » a 0 ou plusieurs « entree »
lire: « entree » a un « nom » ET un ou plusieurs « tel »
Exemple d'un document XML valide car respecte sa DTD INTERNE
---
bottin.xml
---
]>
Zoro, Davin
123-4567
Thibault, Mélanie
987-3000
---
Exemple d'un document XML valide car respecte sa DTD EXTERNE ET LOCALE
---
bottin.xml
---
Zoro, Davin
123-4567
Thibault, Mélanie
987-3000
---
---
bottin.dtd
---
---
NOTA: quand la DTD est externe, le fichier commence directement avec
le CONTENU de la DTD.
C'est comme si le contenu du fichier était loadé dans le
du fichier XML
donc l'appel « SYSTEM "bottin.dtd" » remplace « [ contenu ] »
SCHEMA
------
http://www.w3.org/XML/Schema
***à compléter***
Défini par W3C, écrit en XML et valide les formats (types).
à la manière des langages
Ne permet pas de faire des validations interchamps
Plus fort que DTD
RELAX NG
--------
Écrit en XML, notation simplifiée (gère autres choses?)
ESPACES DE NOMS (NAMESPACES, NS)
----------------------------
En travaillant avec de multiples fichiers XML ou avec un fichier
utilisant divers vocabulaires de XML il est impératif de préciser
chaque vocabulaire.
Ainsi, 2 éléments au même nom mais provenant de vocabulaires différents
se verront « qualifiés », ils auront chacun un nom qualifié
pour les différencier.
Le vocabulaire est une collection de noms.
Les différents termes sont définis dans un Schéma (un des 3 types vus).
Un alias (raccourci) fait référence à l'URI de Schéma.
Déclaration d'un espace de noms:
Les déclarations d'espace de noms se font dans
la balise ouvrante d'un élément.
Ces déclarations ont des portées similaires à la déclaration de variables
dans les langages de programmation: elles s'appliquent à
- l'élément en question et
- ses sous-éléments (éléments fils, éléments inclus dans cet élément)
Elles peuvent être déclarées dans n'importe quelle balise ouvrante.
Un espace de nom par défaut n'a pas d'alias.
Dans un même élément, plusieurs espaces de noms peuvent être déclarés
(incluant un espace de nom par défaut).
Donc déclarer un (ou plusieurs) NS dans l'élément racine applique ce NS
à tout le document.
Exemple:
Davin Baragiotta
Zoro, Davin
123-4567
Thibault, Mélanie
987-3000
Le NS par défaut est défini dans "bottin.dtd"
donc le nom bottin est compris au sens de la DTD bottin.dtd
Tous les éléments ou attributs commençant par:
rdf -> sont compris au sens du langage RDF définit par le W3C
(utilisation des noms réservés à ce langage)
(pas d'utilisation dans cet exemple)
dc -> sont compris au sens définis par le Dublin Core
soit, pour :
« An entity primarily responsible for making the content
of the resource. »
(définition obtenue en suivant l'URI donnée par le NS de « dc »)
NOMS QUALIFIÉS (QNAME)
Nom qualifié = prefixe:nom-de-base
où
prefixe = alias déclaré (xmlns:prefixe=" ")
nom-de-base = nom de l'élément ou de l'attribut
QName s'appliquent à la fois aux noms d'éléments et aux noms d'attributs
qui utilisent un préfixe.
(Si le préfixe est absent car le nom de base utilise
l'espace de nom par défaut,
alors on ne devrait pas parler de « nom qualifié »)
TRAITEMENT DE DOCUMENTS
-----------------------
Manière d'accéder aux données.
Demander au parser de le représenter sous forme de SAX ou DOM.
DOM
Norme du W3C
1. lit le document XML et en
2. fait une représentation en mémoire,
3. va créer API, noms de méthodes pour manipuler éléments
( « facilités » pour traiter le document)
SAX
Norme de facto largement utilisée
1. lit le document XML et
2. a une série d'événements
3. pour chaque événement on lui dit quoi faire mais
ne se souvient pas d'étape précédante
ne construit pas l'arbre en mémoire
souvent, pour construire DOM, utilise SAX
DOM plus lourd
SAX est relativement plus simple
JDOM
Voulait simplifier les choses
Structure en mémoire (DOM) mais l'API change
JAXB
solution en Java
« Java API for XML binding »
prend un schema (xsd), crée une classe à partir du schéma
Avantages et inconvénients de la structure de données XML:
base de données relationnelles vs XML un peu comme
ArrayList versus LinkedList en Java...
les BD utilisent souvent des tables de hachage...
impact sur:
- accès
aujourd'hui la plupart des ordi ont parsers XML
TRANSFORMATION DU XML
---------------------
avec XSL ou XSLT, peut transformer en autres choses
ex.: XML - XSLT -> XML
ex.: XML - XSLT -> XHTML
transformer une structure en une autre structure
XSLT = XML StyleSheet Transform Language
XSLT = document XML
de façon déclarative peut faire transformation
XSL-FO
permet de sortir en format FO (norme, = document XML)
FO = Formatting object
ex.: XML - XSL-FO -> FO
de ça peut faire PDF, RTF, OpenOffice, etc.
--------------------------------------------------------------------------------
XML et le reste permettent de : SÉPARER LA FORME ET LE CONTENU
éditeur XMLmind = libre