Le XML peut se définir de la façon suivante :
« XML (Extensible Markup Language ou langage de balisage extensible) est un standard du World Wide Web Consortium qui sert de base pour créer des langages balisés spécialisés; c'est un ‘méta langage’. Il est suffisamment général pour que les langages basés sur XML, appelés aussi dialectes XML, puissent être utilisés pour décrire toutes sortes de données et de textes.Il s'agit donc partiellement d'un format de données. »
(ref. http://fr.wikipedia.org/wiki/XML).
Un langage balisé est un langage permettant de décrire des structures de données dont le début et la fin sont délimités par un texte (ou un marqueur) pré-défini, nommé une balise.
En XML, la structure de donnée théorique utilisée est celle de l’arbre. Un arbre est un ensemble de nœuds, il contient un nœud racine unique, puis chaque nœud peut lui-même contenir un ensemble de nœuds fils (cf. Figure). Pratiquement, les nœuds de l’arbre se transcrivent dans un document XML par des éléments qui sont délimités par une balise ouvrante et une balise fermante (tags en anglais), exemple : <pont> et </pont> qui est l’élément racine de ce document d’exemple (cf. Figure). A l’intérieur de ces balises, on trouvera des attributs qui permettent de caractériser l’élément plus finement (par exemple dans l’illustration suivant « unite » est un attribut de l’élément « hauteur-max ») ou encore des textes (toujours dans l’illustration suivante, 15 est le texte de l’élément « hauteur-max »).
Figure : document et arbre XML
Pour structurer des données il va être nécessaire de définir les balises et la structure d’arbre correspondante. XML permet de faire cela, car il s’agit d’un « méta-langage » dans le sens où il va permettre de définir des vocabulaires spécifiques. Les balises de XML ne sont pas fixées (en noms et en nombres). L’utilisateur (ou plus précisément le concepteur) a l’entière possibilité de les définir ; l’ensemble des balises ainsi obtenues s’appelle le vocabulaire (ensemble des mots utilisés dans un contexte particulier). Par exemple <pont/>, <pile/>, <tablier/> … constituent le vocabulaire du franchissement routier. Le second point est la contrainte sur la façon dont ces balises (i.e. ces mots) vont s’imbriquer ; cela constitue ce que l’on appelle généralement la grammaire. Mais que se passe-t-il lors d’un échange ? Comment le récepteur du document XML peut savoir de quel « sujet traite le document » reçu ?
Pour cela, XML intègre la notion de modèle de document. Un document XML peut faire référence à un modèle qui décrit à la fois le vocabulaire et la grammaire. De cette façon, le récepteur sera en mesure de valider que le document reçu correspond bien au modèle qui a été défini par ailleurs. Fournir un document XML permet de dire « voici mes données », fournir le modèle permet de dire « voici quelle est la structure et la sémantique de ces données ».
Pour définir ce modèle, appelé schéma XML, les concepteurs XML disposent d’un langage de définition, lui-même écrit en XML.
Les schémas XML permettent de définir des éléments, leur structure mais aussi des types de données particuliers.
De nombreux outils permettent de vérifier si une structure de données XML est conforme à un schéma XML ; cette opération est appelé la « validation ». Cette validation vérifie que la structure de données est définie dans le schéma et que sa structure, et les données qui la composent, sont conformes à la définition qui en est fait dans le schéma.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE facture SYSTEM "facture.dtd"> <?xml-stylesheet href="style.xsl" type="text/xsl"?> <facture>..</facture>Un élément est constitué de: Balise de début (contenant d'éventuels attributs) + éventuel contenu + balise de fin
Un document bien formé: respecte la syntaxe XML.
Un document valide: obéit aux règles définies dans le schéma (DTD ou XSD).
Le parser XML attend par défaut de l'utf-8
On peut spécifier manuellement de l'iso-8859-1
<?xml version="1.0" encoding="iso-8859-1" ?>
Si l'on veut forcer le processeur à ignorer un contenu d'élément on peut utiliser la syntaxe suivante:
<!CDATA[mon contenu non parsé]]>
Pour créer un DTD interne, faire débuter le fichier xml par:
<!DOCTYPE facture [mon DTD]>
On peut aussi mixer: faire suivre l'appel à un DTD externe par des ordres DTD entre [ et ]
Pour faire appel à un DTD de document xml standardisé (ici HTML), faire débuter le fichier xml par:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
On peut faire suivre l'identifiant par une url au cas où le parseur ne connait pas.
<!ELEMENT facture (origine , delai? , emetteur , destinataire , liste-produits)> <!ELEMENT html (head, body)> <!ELEMENT table (tr+)> <!ELEMENT date (#PCDATA)> <!ELEMENT br EMPTY> <!ELEMENT p ANY>
Différents types de contenus possibles: ANY, EMPTY, #PCDATA
Outre la virgule (liste ordonnée), on peut employer la barre verticale (|) pour séparer les éléments.
<!ATTLIST client nom CDATA #REQUIRED prenom CDATA #REQUIRED> <!ATTLIST prix valeur CDATA #REQUIRED monnaie CDATA 'EUR'> <!ATTLIST code type (ISBN | ISSN ) #REQUIRED >
L'élément client a pour attributs obligatoires nom et prénom.
L'élément prix a pour attribut obligatoire valeur et un attribut monnaie avec 'EUR' comme valeur par défaut.
L'élément code a pour attribut obligatoire type qui peut être soit "ISBN" soit "ISSN".
Les types de données possibles pour les attributs des DTD XML sont :
Attribut spécial:
<!ATTLIST document xml:space (default|preserve) "preserve">
(texte préformaté comme avec <PRE>). S'applique aussi aux éléments descendants.
Identifiée par un nom et possédant un contenu.
Après définition d'une entité, celle-ci peut être appelée dans le document pour récupérer son contenu.
Utilisation d'entités par un document xml sans DTD, ajouter une ligne DOCTYPE:
<!DOCTYPE ListeCommande [<!ENTITY avertissement "Salut a tous!">]>
<!DOCTYPE ListeCommande [<!ENTITY % isolat1 SYSTEM "isolat1.ent"> %isolat1;]>
Définition d'entités
Se fait toujours dans un DTD.
<!ENTITY avertissement "Toute copie est illégale">
Idem pré-processeur. Appel dans le document xml par: <texte>&avertissement;</texte>
<!ENTITY monTexte SYSTEM "fichier.txt">
Entité externe: utilisation de fichier.txt qui contient du texte ou du xml
Entités paramétriques
Uniquement utilisable dans le DTD, reconnaissable par ajout du signe %.
<!ENTITY % lang "EN|FR|IT|ES|DE">
<!ATTLIST livre langue (%lang;) "EN">
<!ENTITY % isolat1 PUBLIC "ISO 8879-1986//ENTITIES Added Latin 1//EN" "ISOlat1.ent"> %isolat1;
ou plus simplement:
<!ENTITY % isolat1 SYSTEM "isolat1.ent">
%isolat1;
le fichier isolat1.ent contient lui même des définitions d'entités:
<!ENTITY nbsp " " >
...
Seules entités prédéfinies (en plus des numériques):
' "e; < > &
å décimal
é hexadécimal
Si plusieurs langages XML sont entremélés dans un document: on préfixe à chaque fois les noms d'éléments par le langage auquel ils se rapportent.
On définit en général tous les préfixes des langages qui seront utilisés dans un document au niveau de l'élément racine.
<nomLanguage:livre xmlns:nomLanguage="http://www.site.fr/nomLanguage/n°version" xmlns:lang2="lang2">
XML Autority: permet de générer DTD à partir d'un document XML bien formé, gestion graphique du schéma DTD.
X-Metal: Editeur pouvant aussi servir à l'utilisateur final (saisie de formulaires). Il nécessite un DTD. Attention écrase les DTD existant à l'ouverture.
IE5 et NN6 incluent un parseur XML.
MSXML4 plus compatible avec la norme (XSL1.0 XML-Schema)
xt processeur XSL
FOP parseur XSL-FO