<XML/> Bruno GRILHERES (EADS CASSIDIAN) bruno.grilheres@cassidian.com
Sommaire Cours 1 : Introduction à XML XML, Namespaces, DTD, XML-Schema, Exemples d’applications utilisant XML Cours 2 : Transformations XML, Persistance et Recherche XML XSL, XSLT, XSL-FO XPath, XLink, XPointer, XQuery Cours 3 : Manipulation de XML en JAVA et Web Services DOM, SAX, JAXB WSDL, SOAP TP1 : Création d’un CV en XML + validation avec un XSD TP2 : Construction d’un feuille XSL pour transformation et visualisation du CV (XHTML) TP3 : Manipulation de CV en java et sérialisation en XML (JAXB)
Introduction à XML Objectif et Historique Les bases d’XML Validation XML DTD XML Schema Autres approches (RELAX-NG, Schematron) Quelques utilisations d’XML XHTML Ant/Maven Spring IOC GraphML et SVG OpenDocument
Explosion informationnelle Informations et documents dans l’entreprise Constat : Inflation du volume d’informations Coût et difficulté : Difficultés à retrouver un document Coût induit par la gestion de documents
XML : Origine et objectifs Séparation du fond de la forme. Forme = présentation à partir de la structure (style) Fond = structure + données (contenu) Multiples précurseurs dont les plus connues : SGML pour la structuration HTML pour la présentation => Approches mélangeant parfois le fond et la forme. Origines
SGML(ISO 8879) Standard Generalized Markup Language Standard international pour la définition de la structure et du contenu d’un document numérique Indépendant du type de matériel, et du système envisagé Système de balises extensibles Utilisation de DTD pour la validation de la structure Trés utilisé pendant plus de 10 ans mais trés lourd.
HTML(RFC 1866) HyperText Markup Language Sous ensemble de SGML utilisé pour la présentation d’informations sur le Web Utilisation d’un vocabulaire de balises restreint
Qu’est ce que XML ? SGML XML HTML XHTML eXtensible Markup Language Recommendation du W3C 1.0 Ed01 en 1996, 1.0 Ed05 en 2008 1.1 en 2004 XML est un méta-langage universel pour représenter les données échangées (sur le Web) qui permet au développeur de délivrer du contenu depuis les applications à d'autres applications ou aux navigateurs XML standardise la manière dont l'information est : échangée présentée archivée retrouvée transformée cryptée ... SGML XML HTML XHTML
A quoi peut servir XML ? Séparer les données de leur présentation Créer de nouveaux formats de données Echanger des données entre applications Valider, stocker et rechercher des données …
Les 10 règles de conception XML doit pouvoir être utilisé sans difficulté sur Internet XML doit soutenir une grande variété d'applications XML doit être compatible avec SGML et HTML Il doit être facile d'écrire des programmes traitant les documents XML Le nombre d'options dans XML doit être réduit au minimum, idéalement à aucune
Les 10 règles de conception Les documents XML doivent être lisibles par l'homme et raisonnablement clairs La spécification de XML doit être disponible rapidement La conception de XML doit être formelle et concise Il doit être facile de créer des documents XML La concision dans le balisage de XML est peu importante
Un exemple Entête Racine Elément Contenu Entité Attribut Commentaire Elément « vide »
Structure d’Arbre Livre Chapitre Titre A Corps … Chapitre Titre AA
XML « Buildings Blocks » En tête Une déclaration: version [, encoding, standalone] Une DTD optionnelle (Document Type Definition ) (standalone = “no”) Element Délimités par des chevrons Identifie la nature des éléments qu’ils encadrent Format classique : <element> … </element> Elément vide: <element-vide/> Attribut Couple clé-valeur à l’intérieur d’un élément <element attribut=“valeur”> Quelques règles de syntaxe : Tous les éléments doivent être fermés Les balises sont dépendantes de la casse Tous les documents XML doivent avoir un élément racine Les valeurs des attributs doivents être entre guillemets Les balises ne doivent pas se chevaucher Parler du choix attribut vs
Espace de noms / Namespaces Objectif : Eviter les conflits de noms d’élements <my:livre xmlns:my="http://bg.free.fr/my/"> Namespace par défaut xmlns="…« S’applique à tous les fils de l’élément sur lequel le namespace est déclaré.
Espace de noms / Namespaces Quelques namespaces récurrents : Xml http://www.w3.org/XML/1998/namespace RDF <rdf:RDF xmlns:rdf="http://www.w3.org/TR/REC-rdf-syntax#"> Dublin-core <dc:title xmlns:dc="http://purl.org/dc/"> SVG <svg xmlns="http://www.w3.org/2000/svg"> SOAP <SOAP-ENV xmlns:SOAP-NV="http://schemas.xmlsoap.org/soap/envelope/"> Schema <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> XHTML <xhtml:xhtml xmlns:xhtml="http://www.w3.org/1999/xhtml"> XSLT <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Validation XML Document XML ”bien formé” Document XML “valide” Syntaxe XML Correcte Document XML “valide” bien formé + Conforme aux règles d’une DTD, d’un XML Schéma, etc.
DTD DTD = Document Type Definition La DTD fournit : la liste des éléments, la liste des attributs, des notations et des entités du document XML associé ainsi que les règles des relations qui les régissent.
DTD interne et externe La DTD est déclarée dans le document XML par la balise !DOCTYPE Elle peut être : incluse dans le code source du fichier XML, ou DTD interne : <!DOCTYPE élément-racine [déclaration des éléments]> décrite dans un fichier externe, ou DTD externe : <!DOCTYPE élément-racine SYSTEM "nom_fichier.dtd">
Un exemple de DTD
DTD «Building blocks » Une DTD contient Une ou plusieurs définitions d’éléments introduites par la balise !ELEMENT : <!ELEMENT nom-élément valeur> Une ou plusieurs listes d’attributs introduites par la balise !ATTLIST: <!ATTLIST nom-élément attribut type défaut> Une ou plusieurs définitions d’entités introduites par la balise !ENTITY : <!ENTITY nom-entité "valeur"> ou <!ENTITY nom-entité SYSTEM "nom_fichier">
DTD : Eléments Combinaison d’un ou plusieurs items : Mot-clé #PCDATA (Parsed Character Data) : le contenu est une chaîne de caractères Nom d’un autre élément de la DTD Chaque item peut être suivi par un caractère facultatif d’occurrence : ? : l’item apparaît zéro ou au plus une fois + : l’item apparaît au moins 1 fois * : l’item apparaît zéro fois ou plus
DTD : Eléments Les items sont séparés par : Le caractère virgule « , » si les 2 items sont tous deux inclus dans le contenu Le caractère pipe « | » si le contenu est un choix entre les 2 items Les items peuvent être regroupés à l’aide de parenthèses pour définir des ordres de priorité ou d’occurrence
DTD : Eléments Exemples <!ELEMENT livre (chapitre+)> <!ELEMENT chapitre (titre?, corps, chapitre* image*)> <!ELEMENT chapitre (#PCDATA)> <!ELEMENT image EMPTY> Définition d’un élément livre composé de un ou plus éléments chapitre. Définition d’un élément chapitre, composé de quatre éléments : titre (facultatif), corps, chapitre (de 0 à n fois), image (de 0 à n fois) Définition d’un élément chapitre contenant une chaîne de caractères Définition d’un élément image de contenu vide
DTD : Attributs Déclaration dans la DTD par la balise !ATTLIST : <!ATTLIST nom-élément nom-attribut type valeur-défaut> Où : nom-élément est le nom d’un élément défini dans la DTD par la balise !ELEMENT attribut est le nom de l’attribut présentement défini pour l’élément nom-élément type peut prendre l’une des valeurs: CDATA : la valeur correspond au contenu de l’élément (choix1|choix2|…) : la valeur doit être l’une des choix énumérés ID : la valeur est un identifiant unique ENTITY : la valeur est une entité valeur-défaut prend l’une des valeurs : valeur : valeur par défaut donnée à l’attribut #REQUIRED : attribut obligatoire, sans valeur par défaut #IMPLIED : attribut optionnel, sans valeur par défaut #FIXED valeur : valeur fixe
DTD : Attributs Exemple <!ATTLIST image source CDATA #REQUIRED> Définition d’un attribut source (obligatoire) pour l’élément image
DTD : Entities Définition d’une entité XML Une entité est une variable utilisée pour définir du texte. L'intérêt d'une entité consiste à pouvoir remplacer autant de fois que nécessaire dans le document XML l'entité par le texte qui lui est associé. Dans le document XML, la référence à une entité est introduite par le caractère "&" suivi du nom de l’entité, et terminée par le caractère ";". Il existe 5 entités prédéfinies en XML : lt, gt, amp, apos et quot (caractères < > & ' ") Une entité est définie avec la balise !ENTITY, et dite: Interne si sa valeur est donnée dans la DTD <!ENTITY nom-entité "valeur"> Externe si sa valeur est fournie dans un fichier externe à la DTD <!ENTITY nom-entité SYSTEM "nom_fichier">
Limites des DTD Une DTD est difficile à lire Une DTD est non extensible (ce n’est pas un document XML). Une DTD ne permet pas de typer les données Une DTD ne peut prendre en compte qu’un seul espace de nom (Namespace).
Exercice : DTD
Exercice : Corrigé
XML - Schéma Une spécification du W3C (2001) pour l’écriture de règles de validation XML Specification : http://www.w3.org/XML/Schema Est lui même exprimé en XML (… Metalanguage …) XML Schéma permettent de spécifier des types de données (restrictions sur les chaînes de caractères, sur des intervalles de nombres) Ne permet pas de définir des entités comme dans les DTD. Est externe.
Un exemple de XML Schéma
Un deuxième exemple
XSD : Elements Déclaration des types de données : Type simple byte, unsignedByte, hexBinary, integer, positiveInteger, negativeInteger, int, unsignedInt, long, unsignedLong, short, unsignedShort, decimal, float, double, string, NormalizedString, token, boolean, anyURI, language, time, dateTime, duration, date, gMonth, gYear, gYearMonth, gDay, gMonthDay, etc. Restriction de types simples Type complexe
XSD : Elements Exemples <xs:element name="titre" type="xs:string"/> <xs:element name="chapitre" type="chapitreType"/> <xs:complexType name="chapitreType"> <xs:sequence> <xs:element ref="titre" minOccurs="0" maxOccurs="1"/> <xs:element ref="corps" minOccurs="1" maxOccurs="1"/> <xs:element ref="chapitre" minOccurs="0" maxOccurs="unbounded"/> <xs:element ref="image" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> Définition d’un élément titre de type chaîne de caractère Définition d’un élément chapitre, composé de quatre éléments : titre (facultatif), corps, chapitre (de 0 à n fois), image (de 0 à n fois)
XSD : Attributs Déclaration des types de données : Type simple byte, unsignedByte, hexBinary, integer, positiveInteger, negativeInteger, int, unsignedInt, long, unsignedLong, short, unsignedShort, decimal, float, double, string, NormalizedString, token, boolean, anyURI, language, time, dateTime, duration, date, gMonth, gYear, gYearMonth, gDay, gMonthDay, etc. Restriction de types simples <xs:attribute name="source" type="xs:string" use="required" value="default"/>
DTD vs XSD La DTD permet de définir facilement et rapidement des grammaires simples. XML-Schema permet de définir de manière plus formelle et complète une grammaire => complexité accrue. Un document XML-Schema respecte la syntaxe XML. Un document XML-Schema est généralement plus volumineux et encore plus difficile à lire qu’une DTD (pour un opérateur humain).
D’autres approches Relax-NG Schematron
Quelques utilisations d’XML XHTML Ant / Maven Spring IOC GraphML / SVG OpenDocument et quelques autres…
XHTML HTML + XML HTML bien formé et valide DTDs : http://www.w3.org/TR/xhtml1/dtds.html#dtds
Ant Un « Makefile » pour Java Fichier Ant en XML
Maven 2 & 3 Gestion complète du cycle de vie en Java Gestion des dépendances Java Project Object Model (POM)
Spring IOC Inversion de contrôle Injection de valeur de propriété Java à l’exécution par chargement de fichier XML Le principe est de découpler les liens de dépendances entre objets. En programmation objet, les objets de type A dépendent d'un objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut être désigné par une étiquette verbale. Il est défini par les relations externes qu'il entretient avec son...) de type B si au moins une des conditions suivantes est vérifiée : A possède un attribut de type B (dépendance par composition) ; A est de type B (dépendance par héritage) ; A dépend d'un autre objet de type C qui dépend d'un objet de type B (dépendance par transitivité) ; une méthode de A appelle une méthode de B. Si A dépend de B, cela implique que pour créer A, on ait besoin de B ce qui, en pratique, n'est pas toujours le cas. Pour supprimer la dépendance, un moyen possible consiste à créer une interface I qui contiendra toutes les méthodes que A peut appeler sur B, indiquer que B implémente l'interface I, remplacer toutes les références au type B par des références à l'interface I dans A.
Spring IOC Exemple de chargement d’une classe message contenant une chaine de caractères
GraphML GraphML Working Group 2002 Format XML pour décrire des graphes Orienté structure du graphe (et non pas présentation)
SVG Scalable Vector Graphics (W3C 1999) Format XML pour décrire des images vectorielles Permet de gérer des animations
OpenDocument OASIS 2006 Format XML pour les documents bureautiques (tableur, présentation, traitement de texte, etc.) OpenDocument = format des fichiers OpenOffice Structuration en 4 parties Contenu (content.xml) Style (style.xml) Métadonnées (meta.xml et settings.xml)
OpenDocument Exemple de tableau
Des dizaines d‘autres MathML : Notation mathématiques Xliff : Gestion des traductions VoiceML : Gestion du traitement de la parole WebLab : Document multimédia Office OpenXML : Document MS Office RDF/XML : Standard de représentation de connaissance BPEL : Standard de gestion de processus d’execution XMI : Representation de modèles (tels qu’UML) etc…
Conclusion XML Fondement de très nombreuses technologies Séparer les données de leur présentation Créer de nouveaux formats de données Echanger des données entre applications Valider, stocker et rechercher des données Fondement de très nombreuses technologies Utilisé au quotidien dans l’entreprise
Références Cours de référence Livres En ligne Jenny Benois-Pineau, Georges Gardarin, Yves Bekkers, Khaled Khelif Livres XML in a Nutshell, Third Edition Ed O’Reilly En ligne http://www.w3.org/TR/xml/ http://www.w3schools.com/xml/default.asp