<page>
    <title>Extensible Markup Language</title>
    <id>3332</id>
    <revision>
      <id>31554586</id>
      <timestamp>2008-07-13T21:21:57Z</timestamp>
      <contributor>
        <username>Zorrobot</username>
        <id>179160</id>
      </contributor>
      <minor />
      <comment>robot  Modifie: [[ml:എക്സ്എംഎല്‍]]</comment>
      <text xml:space="preserve">{{Infobox format de données
|nom          = Extensible Markup Language
|image        =
|extension    = .xml
|mime         = application/xml, text/xml
|développeur  = [http://www.w3.org/ World Wide Web Consortium]
|genre        = [[langage de balisage]]
|conteneur de =
|contenu par  =
|origine de   = 
|standard     = [http://www.w3.org/TR/2006/REC-xml-20060816/ 1.0 (4&lt;sup&gt;e&lt;/sup&gt; édition)]
[http://www.w3.org/TR/2006/REC-xml11-20060816 1.1 (2&lt;sup&gt;e&lt;/sup&gt; édition)]
|spécification = 2
}}

'''XML''' (''eXtensible Markup Language'' {{en}}&lt;ref&gt;Ce nom est une idée de [[James Clark]], elle est très bien expliquée par [[Tim Bray]] dans sa [http://www.xml.com/axml/notes/TheCorrectTitle.html spécification annotée]. Comme en [[anglais]] la lettre '''X''' se prononce « eks », elle peut être utilisée dans les sigles pour abréger un ou plusieurs mots commençant par ce même son comme ''eXtensible'' ou ''eXperience'' ([[XP]]). Un bon nombre de langages ont également affiché leur parenté avec XML en s'adjoignant un X, comme [[XHTML]].&lt;/ref&gt;, « langage de balisage extensible ») est un [[langage informatique]] de [[Langage de balisage|balisage]] ''générique''. Le [[World Wide Web Consortium]] (W3C), promoteur de standards favorisant l'échange d'informations sur [[Internet]], recommande la syntaxe XML pour exprimer des langages de balisages ''spécifiques''. De nombreux langages respectent la syntaxe XML : [[XHTML]], [[Scalable Vector Graphics|SVG]], [[XSLT]], etc.

Son objectif initial est de faciliter l'échange automatisé de contenus entre [[système d'information|systèmes d'informations]] hétérogènes ([[Interopérabilité informatique|interopérabilité]]). XML est une simplification de [[Standard Generalized Markup Language|SGML]] dont il retient les principes essentiels comme :
* la structure d'un document XML est définissable et validable par un [[DSDL|schéma]], 
* un document XML est entièrement [[Langage de transformation XML|transformable]] dans un autre document XML. 

Cette syntaxe est reconnaissable par son usage des ''chevrons'' (&amp;lt; &amp;gt;).

== Objectif initial ==

L'objectif initial de XML est expliqué au début de la spécification du {{date|10|février|1998}}, la phrase est toujours d'actualité : « {{lang|en|''Its goal is to enable generic SGML to be served, received, and processed on the web in the way that is now possible with HTML.''}} »[http://www.w3.org/TR/1998/REC-xml-19980210 {{en}}], « Son but est de permettre à du SGML générique d'être transmis, reçu et traité sur le web de la même manière que l'est HTML aujourd'hui. »[http://pages.videotron.com/fyergeau/w3c/xml10/REC-xml-19980210.fr.html {{fr}}]. [[Standard Generalized Markup Language|SGML]] est un [[langage de balisage]], employé dans les industries de la documentation et de l'édition. En adoptant cette syntaxe pour [[Hypertext Markup Language|HTML]], [[Tim Berners-Lee]] confrontait une technologie complexe à de plus en plus d'utilisateurs. L'objectif d'[[Extensible Markup Language|XML]] était de définir un langage aussi générique, mais plus simple : « {{lang|en|''XML has been designed for ease of implementation''}} »[http://www.w3.org/TR/1998/REC-xml-19980210 {{en}}], « XML a été conçu pour une facilité de mise en œuvre »[http://pages.videotron.com/fyergeau/w3c/xml10/REC-xml-19980210.fr.html {{fr}}].

Un groupe de travail a réuni au sein du [[World Wide Web Consortium]] (W3C) de grands noms dans le monde [[Standard Generalized Markup Language|SGML]] (dont [[Jon Bosak]], [[James Clark]], etc.) ; il est à l'origine de la spécification signée par :
* Michael Sperberg-McQueen, alors éditeur en chef de la [[DTD]] [[TEI]] ;
* Tim Bray, qui a notamment conduit l'informatisation du ''[[Oxford English Dictionary]]'' ;
* Jean Paoli ([[Microsoft]]).
Tim Bray, dans son ''Annotated XML Specification'' [http://www.xml.com/axml/testaxml.htm {{en}}] « la spécification XML annotée », explique plus longuement le contexte qui a rendu possible ce standard, en mentionnant notamment les contributions décisives de [[James Clark]]. À la lumière des années passées, cette spécification a rempli l'objectif qu'elle se fixait, XML a été largement suivi et favorise l'[[Interopérabilité en informatique|interopérabilité]]. Plusieurs choix ont contribué à ce succès.

* '''[[Unicode]]''' - Par défaut, SGML était en [[ASCII]] ([[alphabet latin]] sans [[lettre accentuée]]). Il apportait un système d'encodage pour les autres signes, les entités caractères que l'on trouve encore parfois en HTML (ex. : &lt;code&gt;&amp;amp;eacute;&lt;/code&gt; pour '''é'''). En 1996, apparaît la version 2.0 d'[[Unicode]], [[Extensible Markup Language|XML]] adoptera cet encodage par défaut.
* '''Délimitation explicite du contenu''' - SGML était orienté pour la saisie humaine de textes structurés, sur des machines moins puissantes qu'aujourd'hui. Il autorisait beaucoup de raccourcis. HTML conserve par exemple les balises à fermeture optionnelle (ex. : &amp;lt;li&gt;). Ces possibilités compliquaient l'implémentation de la norme. En XML, toute balise ouverte doit être fermée.
* '''[[Espace de noms]]''' - SGML insistait surtout sur la validation, sur la conformité à un modèle contraignant. XML prévoyait un usage plus souple de l'information structurée, il spécifie un moyen de faire cohabiter plusieurs vocabulaires de balises dans un même document.

Au delà de HTML, le W3C avait d'autres projets pour lesquels une syntaxe plus facilement extensible était nécessaire. Ces directions ont annoncé une très grande plasticité de XML pour de nombreux usages. [[Standard Generalized Markup Language|SGML]] était une technologie de niche, sa simplification l'a universalisé avec [[Internet]]. Il pénètre désormais la plupart des secteurs de l'informatique. Mais avant de détailler ces utilisations, il peut être utile de préciser un peu ce que c'est.

&lt;!--
Est-ce l'endroit pour ce genre de développements ?

{{Détail|Métadonnée}}
: ''Voir aussi : [http://www.xml.com/pub/a/98/06/rdf.html RDF and metadata, sur le site officiel XML]''
--&gt;&lt;!--
Cette idée est intéressante et doit trouver sa place.

La disponibilité d'une syntaxe standard et d'outils de manipulation réduit significativement le coût du [[cycle de développement]], permettant à des programmes de modifier et de valider, sans connaissances préalables, des documents écrits dans ces langages. En effet, avant l'avènement du populaire langage généraliste de description de données qu'est XML, les concepteurs de logiciels avaient pour habitude de définir leurs propres formats de fichiers ou leurs propres langages pour partager les données entre programmes (à l'exception de quelques standards professionnels tels qu'[[EDIFACT]]). Ceci nécessitait de concevoir et de programmer des analyseurs '''syntaxiques''' dédiés.
--&gt;

== Comparaison à d'autres formats ==

Pour savoir à quoi ressemble du XML, le mieux est certainement d'en voir. Commençons par un exemple simplifié. Il propose une transposition du début de cet article dans un langage XML appliqué à la documentation technique, [[DocBook]].
&lt;source lang=&quot;xml&quot;&gt;
  &lt;!-- Un petit document XML, en Docbook --&gt;
  &lt;article xmlns=&quot;http://docbook.org/ns/docbook&quot;&gt;
    &lt;title&gt;Extensible Markup Language&lt;/title&gt;
    &lt;para&gt;
      &lt;acronym&gt;XML&lt;/acronym&gt; (Extensible Markup Language, 
      « langage de balisage extensible »)...
    &lt;/para&gt;
  &lt;/article&gt;
&lt;/source&gt;

Dans ce code, chacun peut identifier des portions de texte (ex. : Extensible, XML…) et des mots clés encadrés de chevrons (&lt;, &gt;) : &lt;article&gt;, &lt;title&gt;, &lt;para&gt;… Ce document est ouvert par le mot clé &lt;article&gt;, et clos par &lt;/article&gt;. Notez la barre oblique, elle signifie la fermeture de la balise article. En XML, une balise doit toujours être ''fermée''. À l'intérieur de cet ''article'', il y a un titre (&lt;[http://docbook.org/tdg5/en/html/title.html title]/&gt;), un paragraphe (&lt;[http://docbook.org/tdg5/en/html/para.html para]/&gt;), et un acronyme (&lt;[http://docbook.org/tdg5/en/html/acronym.html acronym]/&gt;).

Ce qui est spécifique à XML, c'est le choix des chevrons pour identifier les balises, et l'obligation de les fermer. Les mots clés ne sont pas définis par la norme XML, mais par le vocabulaire choisi. En [[XHTML]], l'élément racine aurait été &lt;[http://www.w3.org/TR/REC-html40/struct/global.html#edef-HTML html]&gt;, en [[XSLT]], cela peut être &lt;[http://www.w3.org/TR/xslt#element-stylesheet xsl:stylesheet]&gt; ou &lt;[http://www.w3.org/TR/xslt#element-transform xsl:transform]&gt;. Ceci illustre la nature extensible d'XML. Ce n'est pas un jeu de noms réservés (ex. : echo, for, public, function, class…), mais plutôt des caractères réservés permettant de définir un « langage ».

Cet exemple illustre une autre spécificité de ce format. À part SGML, peu d'autres syntaxes permettent de séparer la définition sémantique de l'information (qu'est-ce qui est titre, lien, section…), de l'apparence qu'on lui souhaite (aujourd'hui un titre est souligné, demain on le voudra peut-être en bleu). Cela fait d'XML un excellent format pour conserver des textes ou des données. Pour s'en convaincre, regardons ce que la même information donne dans d'autres formats.

=== Formats binaires ([[Microsoft]] [[Word]])  ===

Les [[logiciel]]s, surtout pour le grand public, aboutissent généralement à des [[fichier (informatique)|fichier]]s. Le format se soucie d'abord d'être fiable et performant, mais est-il échangeable ? Le format d'enregistrement natif du [[traitement de texte]] [[Word]] est l'exemple du {{Référence nécessaire|format binaire le plus déployé}}. Il n'est pas lisible par l'humain. Le texte est difficile à extraire, le lien avec sa structuration (gras, italique…) est difficile à reconstruire. Dans la pratique, un document Word pose beaucoup de problèmes de conservation sur le long terme.

  ÐÏ�ࡱ�á    &gt; � þÿ !  #   �   þÿÿÿ  ÿÿ% �  ð�¿ � �  a�  � bjbj%ç%ç                  
  Extensible Markup Language
  XML  (Extensible Markup Language, « langage de balisage extensible »)
  � i � �  8  @ñÿ� 8 � � N o r m a l   �  
 � CJ� _H��aJ� mH��sH��tH��N �@� � N � � T i t r e   1   � � 
  ÿ
  '''[... beaucoup d'informations binaires supprimées ]'''
  ÿ
  ÿÿÿÿ�	�  À  F�   Document Microsoft Word  MSWordDoc �   Word.Document.8 ô9²q

L'éditeur, [[Microsoft]], propose désormais un format d'enregistrement en XML.

=== RTF ([[Rich Text Format]]) ===

Afin de favoriser l'échange avec d'autres [[traitement de texte|traitements de texte]], [[Microsoft]] proposa [[Rich Text Format|RTF]] ''Rich Text Format'' « format texte riche » (1987). Ce n'est pas un format binaire, les commandes sont inscrites en texte lisible, mais elles ne sont pas destinées à être écrites par un humain.

  {\rtf
  {\f2\fs36\b '''Extensible Markup Language'''}\par
  {\b '''XML'''} '''(Extensible Markup Language,''' 
  '''« langage de balisage extensible »)...'''
  \par
  }

On retrouve le besoin d'encadrer du contenu avec un marqueur (ici les accolades {}), d'attacher des propriétés à ces groupes. Ainsi, {\b XML} indique que les lettres XML sont en gras, ''bold'' : \b. Pour le titre, humains comme logiciels ne peuvent pas l'identifier par &quot;\f2\fs36\b&quot;, ce code indique en fait l'apparence du paragraphe (gras, gros…). Ce format a montré qu'il pouvait fonctionner dans des logiciels, mais sa croissante complexité instruit sur ses limites. Il est difficilement extensible, et en tous cas, inutilisable pour structurer la sémantique d'un texte.

===[[TeX|T&lt;sub&gt;E&lt;/sub&gt;X]]===

[[Donald Knuth]], auteur de ''[[The Art of Computer Programming]]'' « l'Art de la programmation » s'est interrompu en 1977, excédé par la mauvaise qualité d'impression de ses ouvrages. Il développa [[TeX|T&lt;sub&gt;E&lt;/sub&gt;X]], une syntaxe très élaborée destinée à l'écriture humaine, spécialement puissante pour les équations mathématiques. On remarquera que [[Rich Text Format|RTF]] lui a repris ses séparateurs (''\'', ''{'', ''}''), mais pas son système de [[Macro-définition|macros]] pour factoriser les commandes.
&lt;source lang=&quot;latex&quot;&gt;
  \documentclass[a4paper, 11pt]{article}
  \title{Extensible Markup Language}
  \begin{document}
    \maketitle
  \end{document}
&lt;/source&gt;

[[TeX|T&lt;sub&gt;E&lt;/sub&gt;X]] reste le standard de l'édition scientifique de qualité, en particulier pour la mise en forme des équations complexes. Toutefois, cela reste un langage de programmation d'apparence, et même avec les macros, il n'est pas conçu dès le départ pour structurer un contenu indépendamment de sa destination.

===[[wiki]]===
Une syntaxe [[wiki]] sait aussi séparer le contenu de la présentation.

&lt;pre&gt;
  =Extensible Markup Language=

  '''XML''' (Extensible Markup Language, 
  « langage de balisage extensible »)...
&lt;/pre&gt;

Cependant, cette structuration repose ici sur des séquences de caractères particulières (&lt;nowiki&gt;===, '''&lt;/nowiki&gt;). Or, le nombre de caractères sans signification n'est pas indéfini. Un tel format peut être approprié pour un seul type de document, mais ce n'est pas une syntaxe générique et facilement extensible.

=== XML, format textuel, structuré, et extensible ===

Comparé aux langages plus haut, XML est une syntaxe générique et extensible. Il permet de structurer une grande variété de contenus, car son “langage” (vocabulaire et grammaire) peut être redéfini. 
&lt;!--
TODO : csv

v pas très intéressant tous comptes fait v

===Éléments et attributs===
La structuration XML repose sur un modèle d'arbre permettant beaucoup plus de finesse de balisage que toutes les syntaxes plus haut, en particulier les ''attributs''. Les liens (X)HTML en sont certainement l'exemple le plus déployé.
&lt;source lang=&quot;xml&quot;&gt;
   &lt;-- Un lien lien en xhtml - -&gt;
   &lt;a href=&quot;http://www.w3.org/&quot; title=&quot;World Wide Web Consortium&quot;&gt;W3C&lt;/a&gt;
&lt;/source&gt;

Une portion de texte, ''W3C'', est ici muni de deux informations plus longues :
* la forme développée de l'acronyme ''World Wide Web Consortium'' dans l'attribut @title,
* une URL de référence, ''http://www.w3.org/'' désignée par l'attribut @href.

Si le balisage devait être encore plus précis, les milieux académiques ont élaboré un vocabulaire très raffiné pour encoder les textes, [[TEI]]. 
&lt;source lang=&quot;xml&quot;&gt;
  &lt;-- ''exemples d'attributs XML, en TEI ''- -&gt;
  &lt;p&gt;'''... est une spécification du '''
     &lt;orgName key=&quot;org0405&quot; type=&quot;fondation&quot; reg=&quot;World Wide Web Consortium&quot;&gt;'''W3C'''&lt;/orgName&gt; ...
  &lt;/p&gt;
&lt;/source&gt;

L'élément &lt;[http://www.tei-c.org/release/doc/tei-p5-doc/html/ref-orgName.html orgName]&gt; balise le nom d'une organisation. De plus, il porte les attributs :
* @key : le code de l'organisation dans un annuaire auquel le document peut être relié
* @type : une catégorie de classification
* @reg : la forme « régulière » du nom de l'organisation

Pour un système d'informations souhaitant maintenir cette rigueur, XML est irremplaçable. Non seulement il structure un contenu, mais il permet de lui ajouter des informations supplémentaires. 

Cette première approche par l'exemple permet d'illustrer l'aspect extensible d'XML, la séparation du contenu et de la présentation. Ont aussi été introduites les notions de [[#text|texte]], [[#element|éléments]] et [[#attribut|attributs]] qui sont détaillées plus bas.
--&gt;

==Composants d'un document XML : les nœuds==

La plupart des composants d'un document XML&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-white-space document]&lt;/ref&gt; peuvent être représentés par un [[Arbre (informatique)|arbre]]. 
Ce sont donc des nœuds.
Ce modèle fait d'ailleurs l'objet d'une définition très précise ([[Document Object Model|DOM]] ''Document Object Model'' « modèle objet de document (XML) »), afin de permettre à des langages de programmation de manipuler du XML. Nous nous limiterons à énumérer les types de nœuds fondamentaux, que l'on peut identifier dans l'exemple artificiel suivant.
&lt;source lang=&quot;xml&quot;&gt;
  &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
  &lt;!-- '''Commentaire''' --&gt;
  &lt;élément-document xmlns=&quot;http://exemple.org/&quot; xml:lang=&quot;;fr&quot;&gt;
    &lt;élément&gt;Texte&lt;/élément&gt;
    &lt;élément&gt;élément répété&lt;/élément&gt;
    &lt;élément&gt;
      &lt;élément&gt;Hiérarchie récursive&lt;/élément&gt;
    &lt;/élément&gt;
    &lt;élément&gt;Texte avec&lt;élément&gt;élément&lt;/élément&gt;mêlé&lt;/élément&gt;
    &lt;élément/&gt;&lt;!-- élément vide --&gt;
    &lt;élément attribut=&quot;valeur&quot;&gt;&lt;/élément&gt;
  &lt;/élément-document&gt;
&lt;/source&gt;

&lt;span id=&quot;document&quot;/&gt;
===La racine du document &lt;code&gt;/&lt;/code&gt;===

En informatique, un arbre a généralement une et une seule racine (ce qui n'a pas d'ancêtres).
La racine d'un document XML se situe donc derrière tous les nœuds (sauf le [[#prologue|prologue]], qui n'est pas un nœud). Dans un langage d'accès à un document XML, [[XPath]], la racine du document est notée avec la barre oblique '''/''', comme l'arbre d'un [[système de fichiers]] Unix.

Pour être bien formé, un document XML doit avoir un et un seul élément à la racine, parfois désigné par &quot;élément document&quot;. La racine accepte aussi les commentaires, et des instructions de traitement, mais surtout pas de texte.

&lt;span id=&quot;element&quot;/&gt;

=== Les éléments &lt;code&gt;&lt;élément/&gt;&lt;/code&gt; ===

L'élément&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-starttags les éléments]&lt;/ref&gt; a un '''nom''', précisément qualifié, et peut porter tous les types de nœuds : attributs, texte, éléments… Le fait qu'un élément puisse avoir des enfants texte '''et''' des enfants éléments a beaucoup de conséquences pour en faire un [[format de données]] très souple (comparé par exemple à une [[Table (algèbre relationnelle)|table]] relationnelle). La qualification des noms contribue aussi à la précision sémantique des contenus balisés.

Un exemple de [[notice bibliographique]] permettra de mieux montrer le potentiel de ce format, il utilise le vocabulaire [[Dublin Core]].
&lt;source lang=&quot;xml&quot;&gt;
  &lt;ex:collection 
    xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;
    xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
    xmln:ex=&quot;http://exemple.org&quot;&gt;
    &lt;dc:title&gt;[[Astérix le Gaulois]]&lt;/dc:title&gt;
    &lt;ex:livre&gt;
      &lt;dc:title&gt;[[Astérix chez les Belges]]&lt;/dc:title&gt;
      &lt;dc:creator&gt;[[René Goscinny]]&lt;/dc:creator&gt;
      &lt;dc:creator&gt;[[Albert Uderzo]]&lt;/dc:creator&gt;
      &lt;dc:type&gt;Text&lt;/dc:type&gt;
      &lt;dc:description&gt;
        &lt;b&gt;Astérix chez les Belges&lt;/b&gt; est un album de 
        &lt;a href=&quot;http://fr.wikipedia.org/wiki/Bande_dessinée&quot;&gt;bande dessinée&lt;/a&gt; 
        de la série Astérix le Gaulois créée par René Goscinny et Albert Uderzo.
        Cet album publié en 1979 est le dernier de la série écrit par René Goscinny.
      &lt;/dc:description&gt;
    &lt;/ex:livre&gt;
  &lt;/ex:collection&gt;
&lt;/source&gt;

; répétable : Une même propriété peut être répétée. L'exemple montre comment indiquer qu'un livre a plusieurs auteurs ([http://dublincore.org/documents/dcmi-terms/#creator dc:creator]). Dans un format tabulaire, avec un nombre de colonnes défini, ce n'est pas impossible, mais moins spécifié. 
; ordonné : L'ordre des éléments est conservé. Quel que soit le langage employé, un outil XML doit permettre de distinguer le premier auteur du second (ex. : en [[XPath]], &lt;code&gt;/ex:collection/ex:livre/dc:creator['''1''']&lt;/code&gt; = &quot;René Goscinny&quot;, &lt;code&gt;/ex:collection/ex:livre/dc:creator['''2''']&lt;/code&gt; = &quot;Albert Uderzo&quot;).
; hiérarchique : Les éléments XML sont imbricables. Ceci rend ce format particulièrement adapté à représenter des arbres. Ici, on s'est limité à 2 niveaux (&lt;code&gt;/ex:collection/ex:livre&lt;/code&gt;), une collection avec un titre (Astérix le Gaulois), et un exemple d'ouvrage de cette collection (Astérix chez les Belges). XML permet une récursivité complète. Par exemple, un livre, ou une thèse, peut être formaté très économiquement avec un élément &lt;[http://docbook.org/tdg5/en/html/section.html section]&gt;. La partie 2.3.5 correspondra à une structure d'imbrication XML &lt;code&gt;/section[2]/section[3]/section[5]&lt;/code&gt;. 
; mélangeable : Enfin, ce qui fait qu'XML est plus qu'un [[format de données]], c'est la possibilité de ''mélanger'' du texte et des éléments. L'exemple montre comment le texte de la description ([http://dublincore.org/documents/dcmi-terms/#description dc:description]) est enrichi avec des balises [[XHTML]] (du gras &amp;lt;[http://www.w3.org/TR/html4/present/graphics.html#edef-B b]&gt; et un lien &amp;lt;[http://www.w3.org/TR/html4/struct/links.html#edef-A a]&gt;).

'''Noms qualifiés''' - Cette souplesse, et l'eXtensibilité de XML est contrôlée par la qualification des noms. Vous aurez remarqué dans l'exemple de code que la plupart des éléments sont des liens. Comme il s'agit de standards, ils disposent d'une documentation officielle en ligne. Pour une notion commune comme un titre, cela ne semble pas nécessaire. Mais pour des noms beaucoup plus ambigus, comme ''type'', il est très important de déterminer le vocabulaire dans lequel interpréter le mot. Ainsi, [[Dublin Core]] est un vocabulaire de [[métadonnée]]s bibliographiques, [http://dublincore.org/documents/dcmi-terms/#type type] qualifiera des types de document : Text, Image, Sound… Dans un vocabulaire dédié à la documentation informatique comme [[Docbook]], [http://docbook.org/tdg5/en/html/type.html type] a le sens de [[type de données]].

'''xmlns=&quot;URI&quot;''' - En XML, les noms d'éléments devraient toujours être identifiés par une [[URI]]. C'est l'objet des attributs '''xmlns:*''' sur l'élément racine de l'exemple (&lt;code&gt;xmlns:'''dc'''=&quot;http://purl.org/dc/elements/1.1/&quot;&lt;/code&gt;) et des préfixes sur certains noms ('''dc''':type est identifié par l'URI de l'attribut xmlns:'''dc'''). Il n'est pas nécessaire ici de détailler plus cette syntaxe. L'essentiel est de retenir qu'en XML, le nom d'un élément ne se choisit pas au hasard, qu'il résulte d'un travail de modélisation, qu'il est précisément identifié.

&lt;span id=&quot;text&quot;/&gt;

=== Le texte ===

Un nœud texte&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#syntax le texte]&lt;/ref&gt; n'a pas d'enfants, il est toujours contenu dans un élément. Par défaut, il sera traité comme de l'[[Unicode]] en [[UTF-8]] ou [[UTF-16]]. XML permet de spécifier d'autres encodages dans le prologue (ex. : &lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;&lt;/code&gt;). Ce simple choix a déjà apporté une énorme simplification aux problèmes d'encodages que l'on rencontre encore en informatique.

Le traitement des espaces et sauts de lignes en XML&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-white-space espaces vides]&lt;/ref&gt; peut apporter quelques surprises. Sous sa forme texte, un fichier XML sera probablement indenté par son auteur. La recommandation n'oblige pas un processeur XML à conserver ces espaces non significatifs, sauf instructions particulières (exemple : bloc préformaté &lt;[http://www.w3.org/TR/REC-html40/struct/text.html#edef-PRE pre]&gt;). Il en résulte que le texte XML proposé à un processeur peut ne pas revenir à l'identique après traitement, ce qui cause des désagréments dans certaines applications.

'''texte mêlé''' - Dans le cas des textes mêlés (ex. : &lt;code&gt;&amp;lt;p&gt; du texte en &amp;lt;b&gt;gras&amp;lt;/b&gt; dans un paragraphe&amp;lt;/p&gt;&lt;/code&gt;), l'élément parent a plusieurs enfants texte et éléments qui se succèdent, ce n'est pas le texte qui contient un élément (ex. : p/node()[1]=&quot;du texte en &quot;, p/node()[2]=&quot;&amp;lt;b&gt;gras&amp;lt;/b&gt;&quot;, p/node()[3]=&quot; dans un paragraphe&quot;). Cette petite remarque n'a d'importance que dans certaines interfaces de manipulation XML (DOM), elle permet aussi de fixer la définition.

&lt;span id=&quot;attribut&quot; /&gt;

===Les attributs, &lt;code&gt;&lt;élément attribut=&quot;valeur&quot;/&gt;&lt;/code&gt;===

Un attribut est un nom et une valeur, la valeur peut être vide &lt;element attribut=&quot;&quot;/&gt;, mais pas nulle &lt;s&gt;&lt;element attribut&gt;&lt;/s&gt; (cette écriture était permise en [[Standard Generalized Markup Language|SGML]], on la rencontre encore parfois à propos d'[[Hypertext Markup Language|HTML]], mais elle n'est pas acceptée en XML). Un nom d'attribut a les mêmes possibilités de qualification qu'un nom d'élément.

La valeur est un texte sans élément (ni autres nœuds). Un attribut est toujours porté par un élément. Un attribut est unique. La répétition d'un attribut de même nom sur le même élément provoquera une erreur du processeur XML. L'ordre des attributs n'est pas significatif, et peut ne pas être conservé dans certains traitements. &amp;lt;element attribut1=&quot;valeur1&quot; attribut2=&quot;valeur2&quot;/&gt; et &amp;lt;element attribut2=&quot;valeur2&quot; attribut1=&quot;valeur1&quot;/&gt; sont équivalents pour un processeur XML, même s'ils sont écrits différemment.

&lt;!-- TODO

'''@xml:*''' - La qualification des attributs peut être illustrée l'espace de noms réservé par XML.
XML spécifie plusieurs attributs avec un URI réservée, &lt;code&gt;@xml:lang&lt;/code&gt;&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-lang-tag @xml:lang]&lt;/ref&gt;, &lt;code&gt;@xml:space&lt;/code&gt;&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-white-space @xml:space]&lt;/ref&gt;, &lt;code&gt;@xml:id&lt;/code&gt;&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/xml-id/ @xml:id]&lt;/ref&gt;, &lt;code&gt;xml:base&lt;/code&gt;&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/xmlbase/ xml:base]&lt;/ref&gt;
--&gt;

&lt;span id=&quot;comment&quot;/&gt;

===Les commentaires &lt;code&gt;&amp;lt;!-- --&gt;&lt;/code&gt;===

En XML, les commentaires&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-comments commentaires]&lt;/ref&gt; sont délimités par &lt;code&gt;&amp;lt;!--&lt;/code&gt; et &lt;code&gt;--&amp;gt;&lt;/code&gt;
Son contenu ne sera pas interprété. &lt;code&gt;&amp;lt;!-- &lt;element&gt; je suis mal formé mais dans un commentaire --&gt;&lt;/code&gt;. Comme la chaîne de caractères &lt;code&gt;--&lt;/code&gt; indique la fin du commentaire, elle ne peut pas apparaître dans le contenu du commentaire, qui ne peut pas non plus finir par trois tirets.

'''Style''' - Il est théoriquement possible de traiter le contenu des commentaires XML avec un processeur. Un exemple où cela peut être utile : transformer de la programmation en XML (exemple : [[XSLT]]) afin d'en fournir la documentation. Mais il s'agit d'un cas limite, une application XML ne doit pas s'appuyer sur le contenu des commentaires.

&lt;span id=&quot;prologue&quot;/&gt;

===Le prologue===

En XML, le prologue&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-prolog-dtd prologue]&lt;/ref&gt; est constitué de la déclaration XML &lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&gt;&lt;/code&gt;, et de la déclaration de type de document (DOCTYPE). La déclaration XML est obligatoire à partir de la version 1.1. La déclaration DOCTYPE avait une grande importance en SGML. Elle attache le document traité par un processeur à son schéma ([[DTD]], ''Document Type Definition'', « Définition de Type de Document »),
afin de le valider, et d'interpréter certains raccourcis (les entités). Désormais, il existe plusieurs langages de validation, et parfois plusieurs manières de les attacher. La déclaration DOCTYPE n'a plus la même importance.

===Autres nœuds===

Afin d'être complet on mentionnera aussi :
* Les instructions de traitement&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-pi Instructions de traitement]&lt;/ref&gt;, &lt;code&gt;&amp;lt;?xml-stylesheet href=&quot;transform.xsl&quot; type=&quot;text/xsl&quot;?&gt; &amp;lt;?clé valeur?&gt;&lt;/code&gt;, des nœuds destinés aux logiciels traitant le XML ;
* Les sections d'échappement&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-cdata-sect sections d'échappement]&lt;/ref&gt;, &lt;code&gt;&amp;lt;![CDATA[&amp;lt;ceci&gt; ne sera pas considéré comme un élément ]]&gt;&lt;/code&gt;.&lt;!--
Notions à retenir qui ne sont pas traitées

un document doit être ''bien formé''
XML est sensible à la casse
Un document XML peut aussi être affiché par certains [[navigateur web|navigateurs web]] (par exemple [[Internet Explorer]] ou [[Mozilla]]) en utilisant une feuille de style [[Feuilles de style en cascade|CSS]].

--&gt;


&lt;span id=&quot;utilisations&quot;/&gt;

== Utilisations et langages dérivés ==
{{Article détaillé|:catégorie:XML}}

[[Standard Generalized Markup Language|SGML]] était une syntaxe générique, permettant de définir des langages spécialisés, comme [[Hypertext Markup Language|HTML]], mais il était surtout dédié au [[langage de balisage|balisage]] de documents. En simplifiant SGML, les concepteurs d'XML prévoyaient d'élargir l'usage des chevrons (&amp;lt; &amp;gt;) à bien d'autres emplois, comme par exemple, la programmation. Les premiers langages basés sur XML par le [[World Wide Web Consortium|W3C]] dessinent plusieurs directions d'utilisation.

* 1999, [[Resource Description Framework|RDF]] ''Resource Description Framework''[http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/ {{en}}] « cadre de description de ressource »[http://www.la-grange.net/w3c/REC-rdf-syntax/ {{fr}}]. Ce modèle abstrait vise à définir un réseau de [[métadonnée]]s adapté au web, représentable en XML.
* 1999, [[XSLT]] ''eXtended Stylesheet Language Transformations'' « langage XML de feuilles de style, transformations ». Afin d'employer XML, il faut pouvoir le transformer. [[James Clark]] avait écrit un langage équivalent pour SGML  (DSSSL, 1996), avec [[XSLT]], il propose une syntaxe XML, permettant par exemple de transformer un contenu XML vers (x)HTML, ou XSL-FO.
* 2000, [[XSL-FO]] ''eXtended Stylesheet Language -  Formatting Object'' « langage XML de feuilles de style - Formatage d'objets ». [[XSL-FO]] est un langage de description de document permettant de composer un livre, ou un document [[Portable Document Format|PDF]]. C'était un complément indispensable à XML pour les industries de l'édition. 
* Enfin, il fallait une nouvelle syntaxe schéma tenant compte des espaces de noms pour remplacer les [[Document Type Definition|DTD]]s (ce qui deviendra [[XML Schema]]).

Quelques mois après sa sortie, XML est donc utilisé pour encoder des données, programmer des transformations, représenter un objet imprimable, et définir le schéma d'un document XML. Ceci annonce la variété des utilisations de cette syntaxe. Quelques années après, le catalogue est beaucoup plus important, couvrant des usages comme :

* [[langage de balisage]] de documents, 
* [[format de données]], 
* [[langage de description de format de document]] ([[DSDL]]), 
* langage de représentation (texte, image…), 
* [[langage de programmation]], 
* [[protocole de communication]]. 

Ces catégories permettent une classification approximative des langages à base XML (ou acceptant une expression XML). La liste des [[:catégorie:XML|langages]] plus bas repère quelques spécifications marquantes. Elles ont fait date dans le monde XML. Les succès, ou les critiques, permettent aussi de montrer à quoi XML est bon, et là où il est parfois discuté.&lt;!--

Hors sujet ?

« Il trouve son aboutissement dans le [[Web sémantique]], avec l'utilisation massive d'éléments de [[métadonnée]]s. »

FAUX. La structuration du web sémantique reste tout à fait embryonnaire par rapport à ce qui se fait en docbook ou en TEI. Les métadonnées ne sont pas un document.

Pourquoi ne pas mettre ce lien en bibliographie ?

Voir : [http://www.xml.com/pub/a/2005/01/26/simile.html SIMILE Practical metadata for the semantic web]
--&gt;

===[[Langage de balisage|Balisage de document]]===

Le balisage de document est le métier initial d'XML. Les [[DTD]] [[Standard Generalized Markup Language|SGML]] publiques comme [[Text Encoding Initiative|TEI]] et [[Docbook]] l'ont adopté. XML aurait pu permettre l'apparition de nombreux autres schémas. On assiste plutôt à l'apparition de vocabulaires spécialisés, et combinables à l'exemple de la modularisation XHTML&lt;ref&gt;{{en}} [http://www.w3.org/TR/xhtml-modularization/ {{lang|en|XHTML Modularization 1.1], {{lang|en|W3C Working Draft 5 July 2006}}&lt;/ref&gt; :

* [[XHTML]] - ''eXtensible HyperText Markup Language'',  [[Langage de balisage]] [[hypertexte]]
* [[Docbook]] - documentation technique, 1991 à 1997 [[O'Reilly]], 1998 à … [[OASIS]],  ([[Norman Walsh]]). 
* [[Text Encoding Initiative|TEI]] - ''Text Encoding Initiative'', balisage de textes académiques, 1987, 1994, 1999, 2002, [http://www.tei-c.org/ Text Encoding Initiative].
* [[Description archivistique encodée|EAD]] ''Encoded Archival Description'', description archivistique, 1993, 2002, [[Bibliothèque du Congrès]].
* [[NITF]] ''News Interchange Text Format'', échange d'articles de presse, 2000, 2002, [[International Press Telecommunications Council|IPTC]].
* [[NewsML]] ''News Markup Language'', balisage de dépêche de presse, 2000, 2002, [[International Press Telecommunications Council|IPTC]].

=== Format de données ===

XML s'est imposé comme format de référence pour l'échange de [[donnée]]s, notamment de [[métadonnées]]&lt;!-- entre systèmes d'informations hétérogènes ([[Interopérabilité informatique|interopérabilité]])--&gt;. L'exemple d'un transfert d'informations entre [[base de données relationnelles]] permettra d'illustrer les avantages et limites de ce format pour cet usage.

L'exportation d'une [[Table (algèbre relationnelle)|table]] peut se faire en [[Comma-separated values|csv]]. Mais ce format comporte vite des limites à grande échelle (Internet). Il n'est pas auto-documenté (encodage du texte, séparateurs, ordre et nom des colonnes ?). Il demande une documentation externe rarement automatisée entre les partenaires. Que faire lorsque les tables source et destination n'ont pas des structures identiques ? Pour cette raison, on peut préférer des échanges en [[SQL]] (à la fois [[langage de définition de données]] et [[langage de manipulation de données]]). Cependant, malgré de nombreux efforts de normalisation, SQL comporte beaucoup de risques d'incompatibilité entre les implémentations [http://sqlzoo.net/]. XML est une solution plus robuste. On peut en constater l'efficacité sur Internet avec la [[Syndication]]. Il n'y a pas d'exemple connu d'échange de [[métadonnées]] réparties sur autant de &quot;clients&quot; et de &quot;serveurs&quot;.

'''Verbosité ?''' - Comparé à l'export CSV d'une table, XML réplique le ''nom de la colonne'' pour chaque ''cellule'' (une fois pour un attribut, deux fois pour un élément). Le poids du fichier généré est supérieur à celui d'un fichier CSV. Dans des contextes où la bande passante est coûteuse (ex. : [[téléphonie mobile]]), cela n'a pas semblé poser de problème ([[Wireless Markup Language|WML]]), car ces répétitions se compressent très bien ([[ZIP (format de fichier)|zip]]).

'''Traitement lourd ?''' - Traiter du XML demande des bibliothèques dédiées (processeur XML).
Cela n'ajoute pas vraiment du temps de développement supplémentaire, du moins pour des équipes formées. Pour des petites tâches, un [[parseur]] ligne à ligne est parfois plus simple. Mais si la donnée se destine à se complexifier, à s'échanger plus largement, il vaut mieux choisir XML dès le départ.

'''XML : données ou document ?''' - Cette section est l'occasion de marquer la distinction entre ''XML données'' et ''XML document''. Il ne s'agit pas d'une différence dans la syntaxe, mais dans ses usages, ses outils et ses communautés d'utilisateurs. Par SGML, XML vient du [[document électronique|document]]. On lui a reproché par exemple ne pas avoir (nativement) de [[typage fort]]. On rencontre un mouvement analogue mais contraire en [[SQL]]. C'est originalement un format de données, on lui demande de plus en plus de traiter du texte. ([[Système de gestion de contenu|CMS]] [[LAMP]]). En ce qui concerne XML, cette opposition se traduit dans la direction des efforts de spécification ([http://www.w3.org/TR/xmlschema-2/ types de données XML Schema], [http://www.w3.org/TR/xpath20/ XPath 2.0], [http://www.w3.org/TR/xslt20/ XSLT 2.0]) avec des réactions du monde documentaire ([[Relax NG]]). 

* [[Resource Description Framework|RDF]] - ''[[Resource Description Framework]]'' Réseaux de [[métadonnée]]s, © 1997 à 2006 [[World Wide Web Consortium|W3C]].
* [[RSS (format)|RSS]] ''Rich Site Summary'', ''RDF Site Summary'' et ''Really Simple Syndication'', 1999 à…, (principe plus que norme).
* [[Atom]] - syndication, 2003, [[IETF]].
* [[Web Ontology Language|OWL]] - Ontologies ([[World Wide Web Consortium|W3C]])
* [[Geography Markup Language|GML]] - Données géographiques ([[Open Geospatial Consortium]])
* [[Dublin Core]] - bibliographie ([http://dublincore.org dublincore.org])
* [http://www.loc.gov/standards/mods/ MODS] - bibliographie ([[Bibliothèque du Congrès]], USA)
* [[METS]] - échange de collection de fichiers ([[Bibliothèque du Congrès]], USA)
* [[BiblioML]] - bibliographie ([[Bibliothèque nationale de France]])
* [[EbXML]] - [[commerce électronique]] ([[OASIS]])
* [[XBRL]] - Données comptables
* [[XMI]] - XML Metadata Interchange

=== [[DSDL|Langages de schéma]] ===

Un processus XML complet comporte une étape de validation des documents. C'est le rôle d'un [[DSDL|schéma]] de définir ces règles de validité. Faut-il que ce schéma soit en XML ? La question ne se posait pas en [[Standard Generalized Markup Language|SGML]], qui connaissait surtout les [[DTD]]s, une syntaxe texte. Les limites rencontrées alors concernaient surtout la documentation des éléments et attributs déclarés[http://dtdparse.sourceforge.net/ {{en}}]. La documentation est très importante pour la réussite d'un standard XML. Celles de [http://www.docbook.org/tdg5/en/html/docbook.html Docbook] ou [http://www.tei-c.org/release/doc/tei-p5-doc/html/ TEI] constituent des livres complets, avec même des versions imprimées.

Ces communautés ont attendu avec impatience ce que donnerait [[XML Schema]]. Les nombreux outils de documentation automatiques qui sont apparus, avec un simple jeu d'[[XSLT]]s, prouvent l'intérêt d'XML comme [[langage de description de format de document]]. Cependant, pour des choses simples, XML Schema s'est avéré difficile. Est-ce l'effet de trop de concessions ? Toujours est-il que malgré le nombre d'éditeurs derrière le [[World Wide Web Consortium|W3C]], la communauté est très intéressée par [[Relax NG]], de [[James Clark]]. Ce modèle accepte une syntaxe XML, et depuis 2003, propose aussi une forme compacte, textuelle, qui n'est pas XML.

Autrement dit, il n'y a plus de réponse unique. Un schéma XML peut se définir dans un vocabulaire XML, ou autrement. L'évolution actuelle est de pouvoir combiner plusieurs langages de schémas, notamment le [[typage fort]] d'[http://www.w3.org/TR/xmlschema-2/ XML Schema], avec des motifs [[XPath]] pour [[Schematron]], dans du [[Relax NG]]&lt;ref&gt;Eric van der Vlist, ''RELAX NG'', « W3C XML Schema Type Library », O'Reilly &amp; Associates, 2003 {{ISBN|0596004214}} {{lire en ligne|lien=http://books.xmlschemata.org/relaxng/relax-CHP-8-SECT-1.html}}&lt;/ref&gt;.

* [[DTD]] ''Document Type Definition'' « définition de type de document », [[Organisation internationale de normalisation|ISO]].
* [[XML Schema]] langage de Schéma XML, [[World Wide Web Consortium|W3C]], 2001.
* [[Relax NG]], DSDL acceptant une forme XML et une syntaxe compacte, [[Organisation internationale de normalisation|ISO]], 2001.
* [[Schematron]], validation par motifs, [[Organisation internationale de normalisation|ISO]], 2001.

=== Langages de représentation ===

On vante souvent [[Extensible Markup Language|XML]] pour sa faculté de séparer contenu, présentation et traitement. Attention, XML rend cette séparation possible, mais il n'interdit pas de tout mélanger, comme dans certaines pages [[XHTML]] sur Internet. En tous cas, ce format extensible a prouvé qu'il pouvait conserver la présentation des documents pour les applications les plus exigeantes. La variété des applications l'utilisant en est la preuve.

* [[OpenDocument]] - tous les documents bureautiques, [[OpenOffice.org]], 2001.
* [[Word]] - le format natif de [[microsoft]] [[Word]] ([[Traitement de texte interactif|traitement de texte]]) est en XML depuis sa version 2003. 
* [[XSL-FO]] - ''eXtensible Stylesheet Language - Formatting Objects'', langage extensible de stylage - formatage d'objets, [[World Wide Web Consortium|W3C]], 2001.
* [[Scalable Vector Graphics|SVG]] - ''Scalable Vector Graphics'', graphiques vectoriels 2D,  [[World Wide Web Consortium|W3C]], 2003.
* [[MathML]] - formules mathématiques, [[World Wide Web Consortium|W3C]], 1999, 2001, 2003.
* [[Synchronized Multimedia Integration Language|SMIL]] - ''Synchronized Multimedia Integration Language'', Intégration multimédia, [[World Wide Web Consortium|W3C]], 1998, 2005.
* [[X3D]] - 3D multimédia, [[consortium Web3D]].

=== Langages de programmation ===

Dans de nombreuses applications, il est parfois pratique de développer un langage spécialisé, à usage local. Avec un [[DSDL|schéma]], un dialecte [[Extensible Markup Language|XML]] dispose d'une [[Grammaire formelle|grammaire]] (un peu comme [[Forme de Backus-Naur|BNF]]). En guise de [[compilateur]], il suffit par exemple d'une transformation [[XSLT]] qui génère du code [[Java (langage)|Java]], comme pour une bibliothèque de balises (''taglibs''). Cet exemple montre comment la syntaxe XML permet de définir des langages de programmation. 

En théorie, la structure en arbre d'XML permet de représenter la hiérarchie d'un [[Programmation orientée objet|programme objets]], ou l'imbrication des instructions d'un [[Programmation impérative|langage impératif]]. En pratique, les boucles sont le cas limite à partir duquel XML devient trop verbeux. Par contre, cette écriture est remarquablement adaptée aux [[Programmation déclarative|syntaxes déclaratives]] (configuration, définition d'[[Environnement graphique|interface]]), et même, popularise les [[Programmation fonctionnelle|algorithmes fonctionnels]] ([[XSLT]], logique d'une application web).

Il en résulte que l'on trouve de plus en plus d'XML dans les logiciels. Dans certains [[framework]]s de développement web, il est possible de monter une application complète et complexe, en n'éditant que du XML.

* [[XSLT]] - ''Extended Stylesheet Language Transformations'', transformation de document XML, [[World Wide Web Consortium|W3C]], 1999.
* [[XML Query]] - requête et transformation XML, [[World Wide Web Consortium|W3C]], 2005.
* [[Apache Ant|ANT]] - scripts de compilation, [[Apache Software Foundation|ASF]].
* [[Servlet]] - serveur d'application [[Java (langage)|Java]], configuration et logique fonctionnelle, [[Sun Microsystems]].
* [http://logging.apache.org/log4j/ Log4j] - ''[[Historique (informatique)|log]] for [[Java (langage)|Java]]'', configuration d'une bibliothèque d'historique, 1996, © 1999-2006, [[Apache Software Foundation|ASF]].
* [[UIML]] - ''User Interface Markup Language'', définition d'[[Environnement graphique|interface]], [[OASIS]], 1997.
* [[XUL]] - ''XML-based User interface Language'', définition d'interface, [[Mozilla]], 2000.
* [[XAML]] - définition d'interface, [[Microsoft Windows Vista|Windows Vista]], 2006.
* [[MXML]], [[Flex]] - définition d'interface, [[Macromedia]].

=== Protocoles d'échanges ===

Un protocole spécifie l'échange de contenus et d'instructions, entre un client et un serveur. [[HTTP]] est un modèle de protocole (qui n'est pas XML mais textuel). XML permet de baliser des contenus et d'écrire des instructions de programmation. L'universalisation de la connexion HTTP comme des processeurs XML explique pourquoi XML devient une solution courante pour créer un nouveau protocole.
* [[XForms]] - formulaires web ([[World Wide Web Consortium|W3C]])
* [[OAI]] - ''Open Archive Initiative'' Protocole Archives ouvertes, 2000, 2002 (OAI)
* [[Simple Object Access Protocol|SOAP]] - [[RPC]] par [[HTTP]] ([[World Wide Web Consortium|W3C]])
* [[WSDL]] - Services web ([[World Wide Web Consortium|W3C]])
* [[WebDAV]] - Lecture/Ecriture distante par [[HTTP]]  ([[IETF]])
* [[Jabber]]/[[XMPP]] - Messagerie instantanée et présence, multimédia ([[IETF]])

=== Langages associés ===

Les langages associés à XML sont des syntaxes qui ne sont pas en XML mais très attachées à XML.
[[Feuilles de style en cascade|CSS]] illustrera bien la notion. Il peut être contenu dans un attribut (@xhtml:style), dans un élément (&amp;lt;xhtml:style&gt;), 
ou relié à un document XML par une instruction de traitement (&amp;lt;?xml-stylesheet href=&quot;common.css&quot; type=&quot;text/css&quot;?&gt;).
[[XPath]] fournit un autre exemple de spécification entièrement dédiée à XML, mais qui est justement sans éléments ou attributs,
afin d'être associé à un langage XML ([[XSLT]]).

* [[Feuilles de style en cascade|CSS]] (Cascading Style Sheet)
* [[DTD]] (Document Type Definition)
* [[Espace de noms]]
* [[Standard Generalized Markup Language|SGML]]
* [[XPath]]

=== Conclusion, étape suivante ? ===

En 2001, on demandait à [[James Clark]], un expert XML et SGML, ''[http://www.ddj.com/184404686 {{lang|en|What's the next step for XML?}}]'' « Quelle est l'étape suivante pour XML » ? Il répondit d'abord que cela revenait à demander quelle est l'étape suivante pour le texte [[ASCII]] ou pour les fichiers à lignes délimitées. XML est en effet devenu un format aussi universel qu'[[Unicode]] pour structurer des contenus, comme un [[esperanto]] de l'[[informatique]]. 

Qu'un arbre XML permette de représenter beaucoup de choses ne signifie pas que ce soit toujours la forme la plus adaptée, chaque utilisation a ses cas limites. Ainsi l'arbre bute sur un motif simple : l'intersection. Considérez ce texte tuilé : '''en gras ''et''' en italique''. Le '''''et''''' appartient à deux zones, chose simulable mais pas native dans un arbre. On peut en faire une représentation [[XHTML]] comme ceci &lt;code&gt;&amp;lt;strong&gt;en gras &amp;lt;em&gt;et&amp;lt;/em&gt;&amp;lt;/strong&gt; &amp;lt;em&gt;en italique&amp;lt;/em&gt;&lt;/code&gt;, dont on voit d'ailleurs qu'elle n'est pas unique, car la notion d'intersection est perdue. Ce détail se démultiplie dans les applications [[WYSIWYG]] qui produisent du XML (traitement de texte, [[Scalable Vector Graphics|SVG]]), rendant la source générée de moins en moins lisible par un humain. Ce détail amènera peut-être un nouveau format.

Selon James Clark en 2001, la nouveauté ne viendrait plus du format, mais de l'intégration applicative pour le traiter, c'est encore vrai en 2007.

== Outils et processus XML==
XML a désormais prouvé qu'il était une syntaxe très générique de balisage, propre à de nombreux usages. Cette réussite s'explique par des implémentations concurrentes de nombreuses [[Interfaces de programmation|interfaces de programmation]] (''APIs'') précisément spécifiées. Comment entre-t-il dans un processus applicatif ? 

Pour détailler ces étapes, considérons le processus le plus simple, accessible depuis quelques années dans [[Internet Explorer]] ou [[Firefox]]. Ces navigateurs permettent de consulter des fichiers dans un XML sémantique (qui ne contient que des contenus, sans présentation), et de les voir comme des pages accompagnées de couleurs et de navigation. Ils sont transformés par le client, à l'aide d'une feuille [[XSLT]]. Prenons par exemple le site de [http://norman.walsh.name/2006/09/28/xprocfpwd.xml Norman Walsh]&lt;ref&gt;Ou celui de [http://www.jenitennison.com/index.xml Jeni Tennison] et de plusieurs autres.&lt;/ref&gt;. La source de la page servie ressemble à ceci :
&lt;source lang=&quot;xml&quot;&gt;
  &lt;?xml version='1.0' encoding='utf-8'?&gt;
  &lt;?xml-stylesheet href=&quot;/style/browser.xsl&quot; type=&quot;text/xsl&quot;?&gt;
  &lt;essay xmlns=&quot;http://docbook.org/ns/docbook&quot; xml:lang=&quot;en&quot; version='5.0'&gt;
    &lt;info&gt;
      &lt;title&gt;XProc: An XML Pipeline Language&lt;/title&gt;
  &lt;!-- ... --&gt;
&lt;/xml&gt;
&lt;/source&gt;

Ce n'est pas du [[XHTML]] (ou du [[Hypertext Markup Language|HTML]]) mais du [[DocBook]]. Les navigateurs ne sont pas capables de lire cette grammaire pour lui donner de la présentation. La page apparente est le résultat d'une transformation, signalée au navigateur par l'écriture &lt;?xml-stylesheet href=&quot;/style/browser.xsl&quot; type=&quot;text/xsl&quot;?&gt;. Le fichier ''browser.xsl'' explique comment transformer du DocBook en HTML. Le processus est immédiat, il est intéressant de le détailler, car on le retrouve dans des applications XML plus complexes.

#'''produire''' : le document DocBook doit avoir été produit ou résulter d'un import ;
#'''entrée''' : dans le navigateur, un [[analyseur syntaxique|parser]] lit le fichier XML pour construire un objet informatique, et vérifie que le document est bien formé ;
#'''transformation''' : le document DocBook est transformé en XHTML ;
#'''inclusions''' : dans certains contextes, il est possible d'inclure des fichiers qui deviendront des nœuds ;
#'''validation''' : le document peut être validé, pour vérifier que sa structure est conforme au schéma docbook ;
#'''sortie''' : le navigateur s'occupe de rendre le résultat de la transformation en une page pour un utilisateur.

Cette succession canonique d'étapes illustre ce que peut être le ''tuyau'' d'un processus XML complet. Elles vont maintenant être expliquées pour montrer comment elles peuvent apparaître dans d'autres contextes applicatifs plus complexes.

=== Exporter et Produire ===

Une organisation qui a déjà son système d'informations qui n'est pas basée sur XML peut se demander comment produire du XML. Il existe de nombreuses manières d'exporter et de produire du XML, afin de rentrer dans une chaîne de processus XML.

* [[Traitement de texte]], la plupart des logiciels bureautiques proposent un export XML, quand ils ne sont pas nativement XML ([[OpenOffice.org]], [[Microsoft Word]]). Le plus simple est parfois d'enregistrer en HTML, récupérable moyennant un petit traitement. Il suffit de regarder les formats disponibles avec la fonctionnalité '''Enregistrer sous''' de son logiciel habituel.
* [[SQL]], la plupart des [[Système de gestion de base de données|SGBD]] proposent un export XML.
* Un [[éditeur XML]] est le meilleur moyen de faire produire par un humain un document correspondant exactement au schéma attendu.

Dans le cas en introduction, Norman Walsh utilise un simple [[éditeur de texte]], [[emacs]].

=== [[Analyse syntaxique|Parseurs]] et [[Interface de programmation|interfaces de programmation]] (API) ===

Avant d'entrer dans un processus XML, un contenu doit être « xmlisé ». Cette opération est effectuée par un processeur XML. Les [[Analyse syntaxique|parseurs]] les plus répandus sont :

* [[MSXML]] - ''Microsoft Core XML Services'', le parseur XML [[Microsoft]], 2000-2006, intégré au [[système d'exploitation]] [[Microsoft Windows|Windows]], accessible aux langages [[Microsoft]], notamment en [[JavaScript]] sur le navigateur [[Internet Explorer]].
* [http://xmlsoft.org/ libxml2] - Le processeur XML libre du [[système d'exploitation]] [[linux]], accessible en [[Python (langage)|Python]] [http://xmlsoft.org/python.html], [[PHP: Hypertext Preprocessor|PHP]] [http://fr.php.net/libxml], et en [[Ruby]] [http://libxml.rubyforge.org/]
* [http://xerces.apache.org/xerces2-j/ Xerces] - XML [[Java (langage)|Java]] Parser, le parseur XML par défaut d'une [[machine virtuelle Java]], accessible en [[Java (langage)|Java]]
* [http://expat.sourceforge.net/ Expat] - Le parseur XML de [[James Clark]], notamment embarqué par les navigateurs [[mozilla]] ([[firefox]]).
* [http://vtd-xml.sourceforge.net VTD-XML]

Il en existe beaucoup d'autres, en particulier en Java, adaptés à différents cas particuliers : ouvrir une API plus simple, accepter des documents mal formés comme HTML, traitements plus simples (notamment pour les documents longs). 

Une fois « xmlisé », un document est accessible à différents langages, selon des [[Interface de programmation|interfaces de programmation]] standardisées. On distingue généralement l'approche [[Document Object Model|DOM]], modèle objet en mémoire, et l'approche [[Simple API for XML|SAX]], génération d'événements.

*[[Document Object Model|DOM]], ''Document Object Model'', constitue un objet en mémoire de la totalité d'un document XML. Cette API permet l'accès direct à tous les nœuds de l'arbre (éléments, texte, attributs), pour les lire, ou les modifier. Il est par exemple très utilisé sur les [[navigateur web]] avec [[JavaScript]]. Cette norme est écrite par le [[World Wide Web Consortium|W3C]].
*[[Simple API for XML|SAX]], ''Simple API for XML'', est une alternative intéressante à DOM pour le traitement de documents longs. Quand un document entre dans un processeur XML, du code SAX peut capturer des événements, comme l'ouverture et la fermeture d'une balise, afin par exemple, d'écrire dans une base de données. À l'inverse, il est possible de générer des événements SAX, par exemple à partir de la lecture d'une base de données, afin de produire un document consommé par une autre étape d'un processus XML.
* [[VTD-XML]]

D'autres API existent, comme [[JDOM]], [[dom4J]] ([[Java (langage)|Java]]), ou [[Streaming API for XML|StAX]]. Il n'est toutefois pas nécessaire de “programmer” pour traiter du XML, notamment avec des langages de transformation comme [[XSLT]]. Dans le cas en introduction, votre navigateur charge automatiquement le document docbook, et passe le contenu à une transformation xslt.

=== Transformation ===

{{Article détaillé|Langage de transformation XML}}

La transformation est l'étape d'un processus XML qui prend un document dans un certain schéma pour le transposer dans un autre espace de noms. L'exemple en introduction permet de bien comprendre l'opération. Soit un document textuel qui ne comporte que du contenu. Il sera nécessaire de lui ajouter au moins de la navigation avant de le diffuser sur Internet ; on en voudra aussi une version imprimée ([[Portable Document Format|pdf]]). La facilité de transformer un document XML, notamment avec [[XSLT]], est une raison importante pour choisir ce format.

===Inclusions===
Un document XML peut être constitué de plusieurs fichiers. Il y a deux normes actuellement concurrentes.
* les entités externes&lt;ref group=&quot;XML&quot;&gt;[http://www.w3.org/TR/REC-xml/#sec-external-ent entités externes]&lt;/ref&gt;, issues de [[Standard Generalized Markup Language|SGML]], résolues a priori par un parseur validant, avant tout traitement du document.
* &lt;code&gt;xinclude&lt;/code&gt;&lt;ref&gt;[http://www.w3.org/TR/xinclude/ xinclude]&lt;/ref&gt;, un élément XML dédié, pouvant être traité comme une étape séparée.
Les spécifications et les implémentations privilégient maintenant '''xinclude''', bien que son adoption ait pu être discutée&lt;ref&gt;{{en}}[http://norman.walsh.name/ Norman Walsh], [http://norman.walsh.name/2005/04/01/xinclude XInclude, xml:base, and validation].&lt;/ref&gt;.

Considérons l'exemple d'un catalogue de produits pour voir les effets de l'un et de l'autre. On aura chaque produit sous la forme d'un document XML, et un document maître qui assemble toutes les références. En entités, cela s'explique ainsi.
&lt;source lang=&quot;xml&quot;&gt;
  &lt;!DOCTYPE catalogue [
    &lt;!ENTITY article001 SYSTEM &quot;articles/article001.xml&quot;&gt;
    &lt;!ENTITY article002 SYSTEM &quot;articles/article002.xml&quot;&gt;
  ]&gt;
  &lt;!-- Un exemple d'inclusion par résolution d'entité externe --&gt;
  &lt;catalogue xmlns=&quot;http://exemple.net/ns&quot;&gt;
    &lt;titre&gt;catalogue&lt;/titre&gt;
    &amp;article001;
    &amp;article002;
  &lt;/catalogue&gt;
&lt;/source&gt;

On remarquera que les entités sont déclarées en entête de document, puis appelées par une écriture du type &amp;amp;entité;. Cette syntaxe est initialement prévue pour des raccourcis, afin de factoriser l'écriture de variables comme un nom de produit ou une société. Ce mécanisme a été étendu pour résoudre les problèmes d'encodage en ASCII avant l'[[Unicode]]. Ce sont les entités caractère comme &amp;amp;eacute;=&amp;amp;#E9;=é. Pour le cas d'une inclusion d'un fichier, cela demande deux déclarations, celle du lien, celle de son appel. Ce moyen reste massivement employé par les sociétés qui ont connu SGML, d'autant que son support est beaucoup plus généralisé que celui d'xinclude.

La résolution a priori des inclusions peut avoir des inconvénients, en particulier pour des documents maître très lourds que l'on peut vouloir travailler sans leur dépendances. [http://www.w3.org/TR/xinclude/ Xinclude] permet cela, ainsi que de générer ces relations automatiquement ([[XSLT]]).
&lt;source lang=&quot;xml&quot;&gt;
  &lt;!-- Un exemple d'inclusion par xinclude --&gt;
  &lt;catalogue xmlns=&quot;http://exemple.net/ns&quot;
    xmlns:xi=&quot;http://www.w3.org/2001/XInclude&quot;&gt;
    &lt;titre&gt;catalogue&lt;/titre&gt;
    &lt;xi:include href=&quot;articles/article001.xml&quot;/&gt;
  &lt;/catalogue&gt;
&lt;/source&gt;

On retrouve cette évolution vers la modularisation d'XML où l'inclusion devient une étape optionnelle d'un processus.

=== Validation ===
La validation est l'opération automatique qui vérifie la conformité d'un document XML à son schéma. Elle a pour but de délivrer des messages comme ''il n'y a pas de titre au chapitre 5'', ou bien, ''la date de fabrication est dans le futur''. La précision et la convivialité de cette vérification dépendent de la [[DSDL|syntaxe]] utilisée.

En [[Standard Generalized Markup Language|SGML]], la validation s'effectuait toujours avant l'entrée d'un document XML dans un processus. On parlait de [[Analyse syntaxique|parser]] validant. Il n'y avait alors qu'un seul langage de validation (les [[Document Type Definition|DTDs]]) déclarés d'une seule manière à l'intérieur du document XML (la déclaration ''DOCTYPE'', Type de document). La pratique a montré que la validation n'est pas toujours nécessaire, et même, contre performante. Dans d'autres cas, plusieurs étapes de validation peuvent être utiles, par exemple, une pour vérifier la structure de l'arbre XML, une autre pour vérifier les liens. L'évolution va vers une étape de validation distincte, déclarée à l'extérieur du document, et gérée selon les besoins du logiciel.

Les parseurs XML gardent l'ancien usage de conserver les [[Bibliothèque logicielle|bibliothèques logicielles]] de validation. Cependant la fonctionnalité peut être débranchée, ou appelée séparément. Il existe aussi des bibliothèques uniquement dédiées à la validation. Le déploiement actuel rend la validation XML nativement accessible à la plupart des systèmes, et dans la plupart des [[langages de programmation]].

* [[MSXML]] - ''Microsoft Core XML Services'', validation [[DTD]] et [[XML Schema]].
* [http://xmlsoft.org/ libxml2] - Validation [[DTD]] et [[Relax NG]] (le support [[XML Schema]] est partiel, surtout pour le typage de données au sein de [[Relax NG]]).
* [http://xerces.apache.org/xerces2-j/ Xerces] - XML [[Java (langage)|Java]] Parser, validation [[DTD]] et [[XML Schema]].
* [http://www.thaiopensource.com/relaxng/jing.html Jing] - ''a [[Relax NG]] validator in [[Java (langage)|Java]]'', un validateur qui n'est pas un parseur pour [[Relax NG]] et [[Schematron]].
* [[XSLT]] - Une transformation [[XSLT]] permet une validation très précise sur un type de document, c'est couramment utilisé dans une application web pour rendre à l'utilisateur des messages plus conviviaux, cet outil suffit aussi pour utiliser une implémentation [[Schematron]].

=== Sorties ===

Dans le cas en introduction, le navigateur est le consommateur final de XML, sous la forme de xhtml. Chaque langage XML de représentation ([[XSL-FO]], [[Scalable Vector Graphics|SVG]]…) peut être consommé par une application utile à l'utilisateur. Certains formats peuvent être traités par plusieurs [[bibliothèques logicielles]].

* {{en}} [http://xml.apache.org/batik/index.html Apache Batik], [[Application Programming Interface|API]] [[Java (langage)|Java]] traitant des documents SVG (ex. : export [[JPG]], [[Portable Network Graphics|PNG]]).
* {{en}} [http://xmlgraphics.apache.org/fop/index.html FOP, le sérialiseur XSL-FO d'Apache]
* {{en}} [http://www.renderx.com/ XEP], processeur XSL-FO et SVG commercial, RenderX.

=== « Tuyaux » (''XML Pipeline'') === 
Les étapes décrites plus haut sont en cours de normalisation par le [[World Wide Web Consortium|W3C]] (''[http://www.w3.org/XML/Processing/ XML Processing Model Working Group]''). La [http://www.w3.org/TR/xproc-requirements/#terminology terminologie] est officialisée. Ces idées ont déjà des implémentations concurrentes dans plusieurs [[framework]]s ([[Apache Cocoon]], Orbeon Presentation Server…). L'idée de ''tuyaux'' XML existe avant d'avoir été spécifiée.

Un tuyau est une entrée (''Input Document''), une sortie (''Output Document''), et une chaîne d'étapes (''Step''). Ces étapes traitent un flux XML (''XML Information Set'', ''Infoset'' [http://www.w3.org/TR/xml-infoset/]). La notion de flux d'information n'est pas spécifique à XML, on la retrouve à grande échelle dans l'informatique [[Réseau informatique|réseau]], ou très simplement en ligne de commande [[Unix]], avec le ''[[Pipe (homonymie)|pipe]]'' ([[Barre verticale||]]). L'originalité réside dans la structuration propre à XML. Les octets traités par ces tuyaux sont des documents structurés. Les étapes sont standardisées et combinables. Elles sont définies par des composants (''components'') paramétrables (''parameter''), le tout en XML.

== Conclusion ==

Les principes de la syntaxe XML s'acquièrent en quelques heures, avec un simple [[éditeur de texte]]. Tout utilisateur de [[traitement de texte]] gagne à y être sensibilisé, afin de comprendre les principes de la rédaction structurée. Connaître ce formalisme peut motiver à utiliser les styles (ex. : les titres hiérarchiques), afin de produire des documents récupérables, par exemple pour [[Hypertext Markup Language|HTML]] et [[Internet]]. Un développeur web ne peut plus ignorer XML. Il en manipule pour rendre son [[HTML dynamique]], sous la forme d'un [[Document Object Model|DOM]]. Avec le [[web 2.0]] et [[Asynchronous JavaScript and XML|AJAX]], ces standards pénètrent sa pratique quotidienne. Le développement serveur est lui aussi confronté de plus en plus souvent à des composants configurables en XML, particulièrement en [[Java (langage)|Java]]. Enfin, ce formalisme s'accompagne de pratiques, de [[motif de conception|motifs de conception]] (''design patterns''), complètement adaptés aux architectures [[Modèle-Vue-Contrôleur|MVC]] (Modèle Vue Contrôleur). XML et les standards attachés pénètrent tous les secteurs de l'informatique. Il y a quelques années, on pouvait se demander, pourquoi XML ? Maintenant, la charge de la preuve est de l'autre côté, il faut de sérieux arguments pour y échapper.

== Notes et références ==
{{en}} [http://www.w3.org/TR/REC-xml/#sec-white-space {{lang|en|Extensible Markup Language (XML) 1.0}}], {{lang|en|W3C Recommendation 16 August 2006}} : 
&lt;references group=&quot;XML&quot; /&gt;

Autres référénces :
&lt;references /&gt;

== Voir aussi ==
{{Wikibooks|Programmation XML|la programmation XML}}

* [[:Catégorie:XML|Index alphabétique]] de tous les articles reliés à XML.
* [[#utilisations|Utilisations]], section de cet article classant des dialectes XML.

Autres technologies et théories intéressant XML :

* [[ASN.1]]
* [[Interopérabilité informatique]]
* [[langages de balisage]]
* [[Parser]]
* [[Standard Generalized Markup Language|SGML]]
* [[S-expression]]
* [[TeX|T&lt;sub&gt;E&lt;/sub&gt;X]]

Applications XML/DTD relatives à la documentation technique :

* [[Darwin Information Typing Architecture]]
* [[DocBook]]

== Liens externes ==
* {{dmoz|XML|http://dmoz.org/World/Fran%C3%A7ais/Informatique/Formats_de_donn%C3%A9es/Langages_de_balisage/XML}}
* ''Spécification XML 1.1'' [http://www.yoyodesign.org/doc/w3c/xml11/ {{fr}}] [http://www.w3.org/TR/xml11/ {{en}}]
* ''Spécification XML 1.0'' [http://pages.videotron.com/fyergeau/w3c/xml10/REC-xml-19980210.fr.html {{fr}}] [http://www.w3.org/TR/REC-xml/ {{en}}]


{{Portail|Informatique|Écriture}}

[[Catégorie:Normes et standards informatiques]]
[[Catégorie:Standard du web]]
[[Catégorie:Codage des données]]
[[Catégorie:XML]]
[[Catégorie:Format ouvert]]
[[Catégorie:Format de sérialisation de données]]

[[af:XML]]
[[ar:لغة الرقم القابلة للامتداد]]
[[bat-smg:XML]]
[[bg:XML]]
[[bn:এক্সটেনসিভ মার্কআপ ল্যাংগুয়েজ]]
[[bs:XML]]
[[ca:Extensible Markup Language]]
[[cs:Extensible Markup Language]]
[[da:Extensible Markup Language]]
[[de:Extensible Markup Language]]
[[en:XML]]
[[eo:XML]]
[[es:XML]]
[[et:XML]]
[[eu:XML]]
[[fa:اکس‌ام‌ال]]
[[fi:XML]]
[[ga:XML]]
[[gl:XML]]
[[he:XML]]
[[hi:क्षमल]]
[[hr:XML]]
[[hu:XML]]
[[ia:XML]]
[[id:Extensible markup language]]
[[is:XML]]
[[it:XML]]
[[ja:Extensible Markup Language]]
[[ko:XML]]
[[lo:XML]]
[[lt:XML]]
[[lv:Valoda XML]]
[[ml:എക്സ്എംഎല്‍]]
[[ms:XML]]
[[nl:Extensible Markup Language]]
[[nn:XML]]
[[no:XML]]
[[pl:XML]]
[[pt:XML]]
[[ro:XML]]
[[ru:XML]]
[[simple:XML]]
[[sk:XML]]
[[sl:XML]]
[[sq:XML]]
[[sr:XML]]
[[sv:XML]]
[[tg:XML]]
[[th:เอกซ์เอ็มแอล]]
[[tk:XML]]
[[tr:GeniÅŸletilebilir iÅŸaretleme dili]]
[[uk:XML]]
[[vi:XML]]
[[zh:可扩展置标语言]]</text>
    </revision>
  </page>