Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

mardi 13 mai 2014

Cours XML Partie 1

5/13/2014 02:31:00 PM Posted by Ahmed

Généralités

  • XML eXtensible Markup Language (langage extensible de balisage)
  • groupe de travail XML formé par le W3C en 1996 sous l'égide de Jon Bosak de Sun Microsystems (avec des spécialistes du SGML Working Group)
  • versions de la norme :
    • 1.1 février 2004 mise à jour pour utiliser Unicode 3 (si les nouvelles fonctionnalités ne sont pas utilisées il faut créer des documents en version 1.0)
    • 1.0 quatrième édition du W3C du 16 août 2006 - recommandation du W3C
    • 1.0 troisième édition du W3C du 4 février 2004
    • 1.0 seconde édition du W3C du 6 octobre 2000
    • 1.0 du 10 février 1998
  • format public
  • méta-langage = un langage qui permet de définir d'autres langages
  • sous-ensemble de SGML, but = rendre SGML utilisable sur le web.
  • permet de concevoir votre langage de balisage personnalisé pour un ensemble de classes de documents (vous pouvez inventer des balises pour répondre à un besoin spécifique : un langage pour votre bibliothèque par exemple).
  • un langage défini par XML est appelé vocabulaire XML ou application XML.
  • le langage de balisage créé est généralement défini par une définition de type de document ou DTD (elle définit les éléments qui composeront le vocabulaire, les attributs de tous les éléments, ainsi que les entités).
  • utilisé pour échanger des données entre applications, stocker les préférences d'applications, créer des documents pour le web, ...
  • pour en savoir plus : XML 1.0 troisième édition
Pourquoi XML ?
Le web est confronté à deux problèmes :
  • HTML n'est pas extensible, il ne peut pas répondre aux besoins spécifiques de tous les domaines (mathématiques, chimie, musique, astronomie...) et ne définit plus le contenu du document ;
  • SGML qui permettrait de définir de nouveaux langages de balisage spécifiques est complexe.
XML apporte une réponse à ces problèmes.
Caractéristiques de HTML
  • HTML est une application SGML.
  • HTML est restrictif : il définit un ensemble d'éléments et attributs fixe, qui permet de décrire un document simple (en-têtes, corps, ce dernier contenant des paragraphes, listes, tableaux, illustrations, ...). De manière plus formelle HTML 4.0 est une DTD de SGML (et XHTML1.0 est à présent une DTD XML), c'est-à dire qu'une grammaire définit tous les éléments et attributs autorisés.
  • L'ajout de nouveaux éléments est impossible, on ne peut pas créer des balises pour définir pour le document une structure de type résumé, chapitre, index, bibliographie.
  • HTML qui devait décrire le contenu du document s'est orienté vers la présentation du contenu :
    • à l'origine, l'idée du créateur de HTML était de fournir aux auteurs un outil d'échange de données indépendant des plate-formes et de l'affichage :
      • HTML devait décrire les différentes parties d'un document simple à l'aide d'éléments (Hn, P, STRONG, CITE, ...),
      • les navigateurs devaient se charger de l'affichage final du document.
    • Des éléments d'affichage ont été rajoutés pour personnaliser les pages web (B, I, FONT, CENTER, TABLE dans la version 3.2, FRAME dans la version 4.0) et des éléments ont été détournés (emploi de BLOCKQUOTE pour créer une marge gauche alors que cette balise est censée introduire une citation entre guillemets)
    • Le W3C a supprimé les éléments relatifs à la présentation au profit des feuilles de style CSS, cependant il subsistera des pages HTML non conformes pendant plusieurs années.
  • Les documents HTML sont rarement conformes aux règles établies par la DTD, les attributs sont rarement entre guillemets, les éléments ne sont pas toujours correctement imbriqués..., ceci est en partie la faute des navigateurs qui essayent d'afficher tous les documents HTML, même s'ils ne sont pas valides.
Caractéristiques de XML
  • XML est un sous-ensemble de SGML, dont les caractéristiques inutiles pour la publication sur le web ont été supprimées, la création de DTD est plus simple qu'avec SGML.
  • il est destiné à décrire le contenu du document, pas son affichage (les feuilles de style CSS et XSL gèrent l'affichage).
  • il est flexible, on peut définir ses balises, et les utiliser dans un ou plusieurs documents (DTD externe)
  • le document ne sera affiché que s'il est bien formé et valide (s'il suit une DTD).
  • il est lisible pour l'humain (l'information contenue sera toujours accessible, contrairement aux fichiers de certains logiciels, par exemple, il est impossible de visualiser du RTF sans un logiciel qui connaisse ce format)
  • le document XML est un texte qui n'est pas destiné à être lu par l'humain (mais le fait que ce soit un texte permet aux experts d'utiliser un éditeur de texte pour corriger le fichier).
Pourquoi XML ?
Le web est confronté à deux problèmes :
  • HTML n'est pas extensible, il ne peut pas répondre aux besoins spécifiques de tous les domaines (mathématiques, chimie, musique, astronomie...) et ne définit plus le contenu du document ;
  • SGML qui permettrait de définir de nouveaux langages de balisage spécifiques est complexe.
XML apporte une réponse à ces problèmes.
Caractéristiques de HTML
  • HTML est une application SGML.
  • HTML est restrictif : il définit un ensemble d'éléments et attributs fixe, qui permet de décrire un document simple (en-têtes, corps, ce dernier contenant des paragraphes, listes, tableaux, illustrations, ...). De manière plus formelle HTML 4.0 est une DTD de SGML (et XHTML1.0 est à présent une DTD XML), c'est-à dire qu'une grammaire définit tous les éléments et attributs autorisés.
  • L'ajout de nouveaux éléments est impossible, on ne peut pas créer des balises pour définir pour le document une structure de type résumé, chapitre, index, bibliographie.
  • HTML qui devait décrire le contenu du document s'est orienté vers la présentation du contenu :
    • à l'origine, l'idée du créateur de HTML était de fournir aux auteurs un outil d'échange de données indépendant des plate-formes et de l'affichage :
      • HTML devait décrire les différentes parties d'un document simple à l'aide d'éléments (Hn, P, STRONG, CITE, ...),
      • les navigateurs devaient se charger de l'affichage final du document.
    • Des éléments d'affichage ont été rajoutés pour personnaliser les pages web (B, I, FONT, CENTER, TABLE dans la version 3.2, FRAME dans la version 4.0) et des éléments ont été détournés (emploi de BLOCKQUOTE pour créer une marge gauche alors que cette balise est censée introduire une citation entre guillemets)
    • Le W3C a supprimé les éléments relatifs à la présentation au profit des feuilles de style CSS, cependant il subsistera des pages HTML non conformes pendant plusieurs années.
  • Les documents HTML sont rarement conformes aux règles établies par la DTD, les attributs sont rarement entre guillemets, les éléments ne sont pas toujours correctement imbriqués..., ceci est en partie la faute des navigateurs qui essayent d'afficher tous les documents HTML, même s'ils ne sont pas valides.
Caractéristiques de XML
  • XML est un sous-ensemble de SGML, dont les caractéristiques inutiles pour la publication sur le web ont été supprimées, la création de DTD est plus simple qu'avec SGML.
  • il est destiné à décrire le contenu du document, pas son affichage (les feuilles de style CSS et XSL gèrent l'affichage).
  • il est flexible, on peut définir ses balises, et les utiliser dans un ou plusieurs documents (DTD externe)
  • le document ne sera affiché que s'il est bien formé et valide (s'il suit une DTD).
  • il est lisible pour l'humain (l'information contenue sera toujours accessible, contrairement aux fichiers de certains logiciels, par exemple, il est impossible de visualiser du RTF sans un logiciel qui connaisse ce format)
  • le document XML est un texte qui n'est pas destiné à être lu par l'humain (mais le fait que ce soit un texte permet aux experts d'utiliser un éditeur de texte pour corriger le fichier).

Structure d'un document

Un document XML, comme nous l'avons vu comporte des éléments avec ou sans attributs qui fournissent des méta-informations sur l'information i.e. sur le contenu du document. Un document XML comporte :
  • un prologue qui contient toutes les informations autres que les données ou les éléments
  • l'arbre des éléments avec un élément racine
  • éventuellement des commentaires

Prologue

Déclaration XML

<?xml version="1.0" [encoding = "encodage"] [standalone = "yes|no"] ?>
Cette déclaration (qui est en fait une instruction de traitement) contient des informations pour le processeur. Elle indique que ce document est conforme à la version 1.0 de la norme XML. Elle peut préciser le jeu de caractères utilisés dans le document (encoding) et s'il y a des références externes ou non (standalone).

Déclaration de type de document (DTD)

La DTD peut être incluse dans le document ou être dans un fichier externe. Elle est placée dans un fichier si elle doit servir dans plusieurs documents XML différents.
DTD externe
<!DOCTYPE element_racine SYSTEM|PUBLIC [nom] uri_DTD>
<!DOCTYPE element_racine SYSTEM "uri_DTD">
<!DOCTYPE element_racine PUBLIC "nom" "uri_DTD">
DOCTYPE permet de déclarer le type du document, le nom de l'élément racine est précisé. SYSTEM indique que la DTD est stockée sur l'ordinateur à l'adresse précisée. PUBLIC est utilisé quand la DTD est publiée pour beaucoup de personnes, dans ce cas le processeur XML peut utiliser le nom pour retrouver cette DTD (ex une DTD publiée par le W3C), en cas d'échec il utilise l'uri.
DTD interne
La DTD interne se déclare entre crochets dans le DOCTYPE.<!DOCTYPE librairie [
  <!ELEMENT livre (titre, auteur, editeur..., commentaire?)>
  <!ELEMENT titre (#PCDATA)>
  ...
  <!ELEMENT commentaire (#PCDATA)>
]>

Instructions spécifiques pour les applications utilisant le document

Les instruction de traitement ou PI (processing instruction) permettent aux développeurs de placer des informations spécifiques pour une application à l'intérieur du document. Ces informations seront transmises à l'application. Elles ont la forme :
<?Application instruction+?>
On peut les utiliser dans n'importe quelle partie du document cependant elles sont en général utilisées dans le prologue.
<?XML ENCODING="UTF-8"?> ajoute une instruction pour donner la méthode de codage de caractères : 8 bits.
pour que IE5 puisse visualiser un document XML avec une feuille de style CSS on utilisera l'instruction de traitement :
<?xml-stylesheet type="text/css"?>
Voici un document XML bien formé qui n'utilise pas de DTD
<?xml version="1.0"?>
<greeting>Hello, world!</greeting>

Arbre des éléments

Représentation du document sous forme d'arbre

Tout document structuré peut être représenté sous forme d'arbre. Prenons par exemple un fichier HTML :<HTML>
    <HEAD>
        <TITLE>essai</TITLE>
    </HEAD>
   <BODY>
        <P>Un texte <EM>important</EM> !</P>
        <P>autre texte</P>
    </BODY>
</HTML>
arbre
Il y a des parents, des enfants, des frères. HTML est le parent des éléments HEAD et BODY qui sont des frères. EM est un enfant de P qui est un enfant de BODY. Le document a donc une structure logique. L'élément document, est l'élément racine qui contient tous les autres éléments et données du document (<HTML>...</HTML>).
Les noeuds d'un document XML peuvent être du type :
  • Document
  • Element (un élément)
  • Attr (un attribut)
  • Text (texte)
  • Comment (commentaires)
  • ProcessingInstruction (instruction de traitement)
  • Namespace (domaine de nom)
La racine de l'arbre n'est pas l'élément qui englobe tous les autres, comme avec HTML mais un élément de type Document qui comporte :
  • un fils correspondant à l'élément racine (celui qui englobe tous les autres dans le document)
  • 0, 1 ou plusieurs fils de type ProcessingInstruction
  • 0, 1 ou plusieurs fils Comment
  • 0, 1 ou plusieurs fils Namespace

Éléments

Un élément non vide est constitué de trois parties, une balise ouvrante qui peut contenir des attributs, un contenu (des donnés et/ou d'autres éléments) et une balise fermante.
Les éléments vides ne contiennent ni texte, ni autres éléments, ils peuvent avoir des attributs.
Un nom d'élément doit commencer par une lettre ou un souligné, il peut comporter des chiffres, des lettres, des traits d'union, des points, double-points ou soulignés.
Il faut noter que les éléments sont sensibles à la casse, l'exemple ci-dessous est illégal :
<titre>...</TITRE>
Domaines de noms
Une nom d'élément peut être divisé en deux parties : domaine_de_nom:nom_element. Par exemple,xsl:template indique que l'élément template fait partie de xsl.
L'utilisation des domaines de noms n'est pas obligatoire, mais celà permet d'éviter les collisions lorsqu'on fusionne des éléments de mêmes domaines d'activité provenant de différentes sources.
les espaces de noms sont déclarés dans le document avec l'attribut xmlns:id, l'url permet de donner un domaine de nom par défaut (il peut y avoir plusieurs attributs de domaines de noms dans l'élément)
<element xmlns:prefixe=uri>
La portée est limitée à l'élément (si on le place dans la racine = tout le document). Mais on peut rencontrer dans les éléments inclus une autre déclaration de domaine de noms avec un préfixe identique, il remplace alors le précédent.
le préfixe permet d'associer un nom à un domaine de noms (utilisé quand il y a plusieurs domaines de noms dans l'élément parent). <pref:element>...</pref:element>

Attributs

propriete = "valeur"
propriete = 'valeur'
Les attributs peuvent être facultatifs ou obligatoires, ils donnent des informations supplémentaires sur les éléments. Ils apparaissent uniquement dans la balise ouvrante d'un élément.
Attributs réservés
xml:lang
Sa valeur indique le langage de l'élément. Cette valeur est un code de langue ISO 639 (en minuscules) : fr, en, it,... suivi s'il y a des variantes pour la langue d'un tiret et d'un code de pays ISO 3166 (en majuscules). <livre xml:lang="en-US">
xml:space = "default | preserve"
Sa valeur indique si un espace blanc à l'intérieur d'un élément est significatif et ne doit pas être altéré par le processeur XML. Avec default le processeur XML est libre de faire ce qu'il veut avec les espaces. Si un élément doit se comporter comme le <pre> de HTML il faut utiliser preserve.

Entités

Internes
Appel d'une entité dans un document : &nom_entite;
Les caractères réservés de XML sont remplacés par des entités internes. Ces caractères sont les mêmes qu'en HTML :& < > " '. Les entités qui permettent de les représenter sont respectivement &amp; &lt; &gt; &quot; &apos;
Tous les caractères peuvent être remplacés par une entité qui donne leur code &#code_car; (par ex. &#65; pour le A).
Ces deux types d'entités étaient particuliers car prédéfinis, vous pouvez si vous le souhaitez définir vos propres entités par le biais de la DTD. La déclaration suivante :
<!ENTITY deg "&#176;">permettra d'utiliser l'abréviation &deg; dans le document, par exemple :
il fait 25&deg;C.
Les entités peuvent appeler d'autres entités et peuvent provoquer leur inclusion dans le document XML.
Externes
Les entités externes ne sont pas contenues dans le document courant, le processeur XML ignore le contenu de l'entité et le transmet à l'application. Les entités non parsées peuvent être utilisées pour les fichiers images, les fichiers sons, les fichiers vidéo... Elles sont appelées comme valeur d'un attribut (comme en HTML on avait le chemin de l'image comme valeur de l'attribut src de l'élément img). Dans un document XML, l'attribut doit être déclaré de type ENTITY dans la DTD et la déclaration d'entité doit spécifier une NOTATION déclarée. Voici un extrait de DTD qui définit plage comme une notation JPEG et l'utilise comme valeur de l'attribut source de l'élément vide image.
    <!-- extrait de la DTD -->
    <!NOTATION JPEG SYSTEM "Joint Photographic Experts Group">
    <!ENTITY plage SYSTEM "plage.jpg" NDATA JPEG>
    <!ATTLIST image source ENTITY #REQUIRED>

    <!-- appel dans le document -->
    <image source="plage"/>
NB : les graphiques sont simplement des liens vers une image plutôt que vers un texte, ils peuvent donc être créés de n'importe quelle manière supportée par les spécifications XLink et XPointer. Ils peuvent aussi être incorporés avec le mécanisme NOTATION et ENTITY.

Encodage des caractères

Le xml prend mieux en charge les caractères accentués que le HTML où on utilise des appels d'entités (par exemple : &eacute; pour é). Les spécifications XML indiquent que tous les processeurs XML devront accepter les codages UTF-8 et UTF-16 de la norme ISO 10646 qui couvre la plupart des langages humains.
ISO 646 : code ASCII, codage sur 7 bits (128 caractères) utilisé pour les langues non accentuées comme l'anglais (le 8eme bit de l'octet est un bit de contrôle).
ISO 8859/1 : codage sur 8 bits (256 caractères, le 8eme bit code les accents) pour les langues européennes accentuées (les 128 premiers caractères sont les mêmes que ceux de l'ISO 646).
ISO 10646 : permet de coder toutes les langues européennes et asiatiques. Grâce à des combinaisons d'adressage ou UTF (UCS Transformation Format) il permet d'utiliser un nombre variable de bits, selon les besoins d'une langue, UTF-8 (codage de 8 bits à 48 bits les 128 premiers car sont identiques au code ASCII, par contre il est incompatible avec ISO 8859-1 au delà du code 126), UTF-16 (jusqu'à 32 bits par combinaison).
Unicode : 16 bits permet de coder l'arabe, le chinois, ... en fonction du degré de codage, on a des appelations différentes : UCS-4 code sur 4 octets (32 bits), et UCS-2 code sur 16 bits (c'est le standard unicode).
L'encodage se précise dans la déclaration xml :
<?xml version="1.0" encoding="UTF-16"?>
Tous les ordinateurs ne peuvent pas prendre en charge le jeu de caractères avancé, le dénominateur commun reste l'ASCII. Les autres caractères peuvent être appelés par un codage (numéro ISO 10646) par exemple &#38; on peut aussi déclarer une entité pour les représenter :
<!ENTITY deg "&176;">
Il fait 30&deg; celsius.

Commentaires

<!-- commentaire -->
Les commentaires sont autorisés dans le document (après le prologue). Ils peuvent inclure n'importe quel type de données sauf le --, ils ne peuvent pas apparaître à l'intérieur des balises. Le processeur ne les transmet pas forcément à une application.<p <!-- balise ouvrante de paragraphe --> >

Sections CDATA

<![CDATA[ ... ]]> Section de données que le processeur XML n'interprétera pas Ces sections permettent de passer des caractères réservés à une application (par exemple un signe mathématique <).