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