2. Organisation d'un document XML

2.1. Introduction

La description d'un document XML suit un formalisme très précis, et un vocabulaire particulier. Commençons par présenter ces notions. Nous utiliserons le document suivant comme exemple dans toute cette partie.

Exemple 5. Document exemple

<?xml version="1.0" encoding="UTF-8"?>

 <!-- un premier marin -->
 <galilee:marin  id="12" 
               xmlns:galilee="http://www.galilee.org/cours-xml">
	 <galilee:nom>Surcouf</galilee:nom>
	 <galilee:prenom>Robert</galilee:prenom>
	 <galilee:remarque  lang="FR">Capitaine corsaire</galilee:remarque>
 </galilee:marin>

2.2. Nœuds dans un document XML

Un document XML est composé de nœuds. Dans la pratique, un nœud peut être :
  • le document lui-même, représenté par son nœud racine ;
  • un espace de nom, défini dans ce document ;
  • une processing instruction , il s’agit le plus souvent du nœud <?xml version… ?>
  • des commentaires ;
  • des éléments XML ;
  • des attributs XML ;
  • du contenu textuel des éléments.
Voici quelques nœuds du document donné en exemple :
  • <galilee:marin> : est le document ;
  • <galilee:nom>Surcouf</galilee:nom> : est un élément ;
  • id="12" : est un attribut ;
  • <!-- un premier marin --> est un commentaire.

2.3. Relations entre nœuds dans un document XML

On définit les relations suivantes :
  • relation parent : tous les éléments et les attributs ont un parent. Dans notre exemple, marin est parent de nom et prenom.
  • relation enfant : un nœud peut avoir autant d’enfants que l’on veut. Dans notre exemple, marin a deux enfants : nom et prenom, le nœud nom n’a pas d’enfant.
  • relation frère ( sibling ) : deux nœuds sont frères s’ils ont même père. Dans notre exemple, nom et prenom sont frères.
  • relation ancêtre ( ancestor ) : les ancêtres d’un nœud sont son père, le père de son père, etc… jusqu’au nœud racine, ancêtre de tous les nœuds du document XML.
  • relation descendants : les fils, fils des fils, etc… Le nœud racine du document a pour descendance l’intégralité des nœuds du document XML.

2.4. Ordre dans un document

Il est fondamental de comprendre que les nœuds dans un document XML sont ordonnés. Deux fichiers web.xml ayant une liste de servlets déclarées dans un ordre différent ne sont pas équivalents. D’ailleurs Tomcat ne va pas charger ces servlets dans le même ordre, ce qui peut conduire à des comportements différents de l’application web.

2.5. Valeurs atomiques dans un document XML

Les valeurs atomiques, au sens où l’on ne peut pas les diviser, sont les nœuds qui n’ont ni parents, ni enfants. Sur l’exemple précédent :
  • Robert est un nœud texte, atomique ;
  • "12" est un nœud texte également, atomique.
Les nœuds et les éléments atomiques constituent les items d'un document XML.

2.6. Notion de PCDATA et CDATA

PCDATA est un acronyme qui signifie Parsed Character DATA . Un document XML peut être représenté dans un fichier texte simplement. Un tel texte, dans le langage XML est composé de PCDATA, c'est-à-dire de chaînes de caractères qu'un analyseur XML va analyser afin de les traduire en nœds, et autres éléments. Dans un bloc de PCDATA, certains caractères ont une signification particulière : notamment < et >. La question se pose alors : comment peut-on utiliser le caractère < pour ce qu'il est, sans que l'analyseur XML ne l'interprête comme un début de balise ? XML nous donne en fait deux solutions, toutes les deux parfaitement valides et utilisables. Lorsque l'on veut utiliser des caractères spéciaux dans des textes XML, qui ne doivent pas être pris en compte par l'analyseur XML, on utilise des entités HTML. Une entité HTML est un caractère spécial, écrit sous forme de code, placé entre les caractères & et ;. Par exemple, l'entité pour le signe < est &lt;. On peut utiliser le code numérique du caractère quand il n'a pas de nom (ici lt signifie lesser than , et désigne le caractère plus petit que ), précédé du caractère #. Pour notre exemple, &lt; est équivalent à &#60;. Cette approche est possible lorsque l'on a quelques caractères à prendre en compte. Elle n'est plus utilisable si le volume de caractères spéciaux devient trop important. C'est là que la notion de CDATA apparaît. Une portion CDATA dans un document XML est une portion entière de ce document qui n'est pas prise en compte par l'analyseur. On peut ainsi avoir plusieurs pages de CDATA, comportant tous les caractères spéciaux que l'on veut, sans perturber l'analyseur XML. Nous avons déjà vu que la valeur des attributs étaient de type CDATA dans les DTD. Une portion de texte CDATA apparaît entre les balises <![CDATA[ et ]]>

Exemple 6. Exemple de CDATA

<?xml version="1.0" encoding="UTF-8"?>

 <!-- un premier marin -->
 <galilee:marin  id="12" 
               xmlns:galilee="http://www.galilee.org/cours-xml">
	 <galilee:nom>Surcouf</galilee:nom>
	 <galilee:prenom>Robert</galilee:prenom>
	 <galilee:remarque  lang="FR">Capitaine corsaire</galilee:remarque>
	 <galilee:description><![CDATA[
	Ici une portion de texte non <analysée> !
	 ]]></galilee:remarque>
 </galilee:marin>	

Cette notion a été créée pour permettre l'inclusion simple de XML ou de code source dans des éléments XML.
API Java pour XML
Retour au blog Java le soir
Cours & Tutoriaux
Table des matières
Introduction
1. Un peu d'histoire
2. Les API Java pour XML
Un premier exemple
1. Introduction
2. Structure de base d’un fichier XML
2.1. Un fichier XML simple
2.2. Notion d’espaces de noms
3. Un premier code pour lire un fichier XML
3.1. Lecture avec Dom4J
Description d’un document XML
1. Introduction
2. Organisation d'un document XML
2.1. Introduction
2.2. Nœuds dans un document XML
2.3. Relations entre nœuds dans un document XML
2.4. Ordre dans un document
2.5. Valeurs atomiques dans un document XML
2.6. Notion de PCDATA et CDATA
3. Document Type Definition (DTD)
3.1. Attacher un document à une DTD
3.2. Contenu d’une DTD
3.3. Exemple de DTD, analyse de web-app_2_3.dtd
4. XML Schema
4.1. Introduction
4.2. Un premier schéma
4.3. Attacher un document XML à un schéma
4.4. Types simples
4.5. Attribut
4.6. Restriction sur une déclaration
4.7. Types complexes
4.8. Contraindre un contenu simple
Lire et écrire du XML
1. Introduction
2. Utilisation de DOM4J
2.1. Introduction
2.2. Un premier exemple simple
2.3. Organisation de l'API
2.4. Classe Namespace
2.5. Classe QName
2.6. Interface Node
2.7. Interface Branch
2.8. Interface Document
2.9. Interface Element
2.10. Interface Attribute
2.11. Interface Text
3. Utilisation de Xerces
3.1. Introduction
3.2. Présentation de SAX
3.3. Présentation de DOM
Analyseur SAX en Xerces
1. Introduction
2. Création d'un analyseur SAX
2.1. Introduction
2.2. Objet DefaultHandler
2.3. Exemple d'analyse d'un fichier
3. Présentation de l'API
3.1. Interface ContentHandler
3.2. Interface ErrorHandler
3.3. Interface DTDHandler
3.4. Interface EntityResolver
3.5. Interface LexicalHandler
Manipuler un DOM en Xerces
1. Introduction
2. Création d'un DOM
3. Présentation de l'API
3.1. Organisation de l'API
3.2. Interface Node
3.3. Interface NodeList
3.4. Interface Element
3.5. Interface Attr
3.6. Interface CharacterData
3.7. Interface Comment
3.8. Interface CDATASection
3.9. Interface Text
3.10. Interface Entity
3.11. Interface EntityReference
3.12. Interface ProcessingInstruction
3.13. Interface Document
3.14. Interface DocumentFragment
3.15. Interface DocumentType
Interroger un document en XPath
1. Introduction, notion de nœud XML
2. Une première requête XPath
2.1. Un premier document à interroger
2.2. Une première requête
2.3. Forme d'une requête XPath