1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages...

128
O.Curé [1 ]

Transcript of 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages...

Page 1: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [1 ]

1. Introduction à XML

Ouvrages recommandés :• XML in a nutshell � S. Means & E.R. Harold - Edition O'Reilly (Bibliothèque UMLV)•XML pocket reference 2nd edition � R. Eckstein & M.Casabianca � Edition O'Reilly (Bibliothèque UMLV)• XML in theory and practice � C.Bates - Edition Wiley

Page 2: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [2 ]

Evolution de l'information� Ordre de grandeur :

� 1Mo : 1 gros roman

� 200Mo : ce que mémorise un être humain dans sa vie.

� 900Mo : information contenue dans le génome d'une cellule humaine.

� 1To : estimation de la taille d'un HD en 2007. Toutes les conversations d'un être humain dans sa vie au format MP3.

� 20To : bibliothèque du congrès à Washington (que le texte), 20 millions d'ouvrages.

� 200To : archives du net en 2003 12 milliards de pages.

� 3Po : Bibliothèque du congrès scannerisée (textes + images).

� 100Eo : total du flux d'information dans le cerveau humain durant sa vie (Von Neumann).

� Eo (Exa), Zo (Zetta) et Yo (Yotta).

Page 3: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [3 ]

Web et stockage� Coût du stockage :

� 1970 : 20 000F / Mo

� 1998 : 2F / Mo

� 2004 : < 0,005f / Mo

� Capacité de stockage est multipliée par 3,5 tous les 18 mois (plus que la loi de Moore).

� Le 1/10/2004, Google référençait 4 285 199 774 de pages Web. 15 à 20% de l'existant ?

� Un exemple : Medline regroupe 11 millions d'articles provenant de 3600 journaux sur les 30 dernières années.

Page 4: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [4 ]

Technologies du Web

� 3 générations de sites Web :

� Sites statiques : 100% HTML.

� Sites dynamiques (sens données et non DHTML) => e-commerce.

� Sites 'intelligents" => sites e-commerce avec :

� Gestion de la relation client sur Internet (CRM et IRM) : personnalisation, profiling, filtrage collaboratif actif (FCA), etc.

� Data-mining, web-mining, etc..

à lire : "Customer.com" disponible sur http://www.psgroup.com/book/overview.html

Page 5: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [5 ]

Technologies du Web (suite)

� Emergence du web : 1992

� 3 générations de sites Web : statique, dynamique et « intelligente ».

� 1ère génération : statique � 100% HTML

� Les autres générations exploitent l'architecture client-serveur.

� HTTP + CGI

� HTTP + template + scripting

� Serveur de présentation

Page 6: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [6 ]

HTTP + CGI

� CGI = Common Gateway Interface

� Repose sur l'exécution de programmes sur le serveur en lui passant des arguments à travers l'URL.

� Limites :

� Montée en charge importante est difficile

� Peu robuste.

� Code source peu maintenable et lourd.� Exemples : Perl, Tcl, shells, etc..

Page 7: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [7 ]

HTTP + modèle + langage script serveur

� Un modèle (template) est une page HTML contenant du code, écrit dans un langage script, exécuté du côté serveur.

� Propose une séparation entre le code applicatif et la page HTML. Le serveur est chargé de la génération du code HTML.

� Limites :

� Caractère propriétaire des balises.

� Réutilisabilité et structuration.� Ex : PHP et coldfusion

Page 8: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [8 ]

Serveur de présentation

� Proche de la solution précédente mais avec une couche d'architecture plus globale et inclusion de composants.

� Deux grandes solutions sont disponibles :

� ASP.net (Active Server Pages)

� ASP était la 1ère solution sur le marché.� Possibilité de développer dans de nombreux

langages (VB, C#, etc..).� J2EE : Servlets, JSP (Java Server Pages) et java

beans.

� Indépendant de la plate-forme.

Page 9: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [9 ]

Serveur d'applications

� Objectif : fournir une mise en oeuvre logique applicative sous la forme de composants. Ces derniers doivent être persistants et particulier à des transactions, de manière distribuée.

� Ce middleware offre des fonctions techniques comme : l'équilibrage de charge, la tolérance aux pannes, la gestion de cache, service de nommage et de localisation => fonctions vitales dans le cadre d'applications Internet fortement centralisées.

Page 10: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [10 ]

J2EE� Architecture Java reposant sur l'orienté objet (héritage,

encapsulation et polymorphisme).

� Servlets, JSP, JavaBeans, JSTL (JavaServer Tag Libraries) => profite du modèle MVC (Modèle Vue Contrôleur).

� Gestion des transactions (JTA).

� Gestion des BD (JDBC).

� Gestion des messages (JMS, JavaMail).

� Gestion des objets distribués (RMI-IIOP).

� Gestion de renommage des services (JNDI).

� Solutions : BEA logic, Websphere, Enhydra, Jboss, Jonas

Page 11: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [11 ]

Le Web

� Le Web révolutionne l'accès à l'information.

� Des millions de sites, des milliards de pages et des technologies diverses : statique/dynamique, internet/ intranet/extranet .

� HTML est un support pour l'information distribuée à destination des êtres humains mais n'est pas adapté pour les applications, pourtant ce besoin devient incontournable.

Page 12: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [12 ]

Constat du Web

HTML (HyperText Markup Language) est un langage permettant de présenter l'information à l'écran (navigateur).

Pas d'échange de données

Pas de traitement de données en dehors de l'affichage

HTML est le support du Web actuel, un Web syntaxique.

Problèmes engendrés :

Moteur de recherche

e-commerce

Publication de services

Page 13: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [13 ]

Contraintes du Web

Domaine hétérogène : Machines, Systèmes, Environnement de développement

Grand nombre d'applications différentes

Indépendance données / application.

Transformation des données pour un transfert opérationnel.

XML est la réponse :

Contenu alphanumérique (format ASCII) (semi-)structuré avec des balises

Indépendant de l'application

Transformation facile (XSL)

Page 14: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [14 ]

Objectifs de XML� Définir un contexte de structuration de données:

� conception concise et claire � utilisable facilement sur Internet � compatible avec SGML� développement de programmes associés facile � minimum d'option (flexibilité maximum) � le plus lisible possible (auto-documenté)� pas de contrainte particulière sur la syntaxe � faciliter et accélérer la préparation de documents

=> XML est un méta-langage universel pour les données. Le modèle de données est fondé sur des arbres et le langage de représentation est basé sur le balisage.

Page 15: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [15 ]

XML est d'actualité� Car il répond bien à différent besoins:

� Structuration aisée des données� Échange facile sur le WWW

� Car il �généralise� certaines technologies existantes:� HTML, WAP, iMode, PDA, etc..� �SGBD texte�

� Car il peut être omniprésent� Format de données� Protocoles

Page 16: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [16 ]

Historique� Descendant de SGML (ISO 8879, 1986)

� GML (Generalized Markup Language) en 1969 (Goldfard, Mosher, Lorie; IBM)

� SGML = Standard Generalized Markup Language� Invention: 1970�s (avant le WWW)� Spécification = 150 pages � Tous les languages de �markup� (très puissant)� Application SGML connue : HTML� Très complexe (pas d�implémentation unifiée)

à lire : http:java.sun.com/xml/birth_of_xml.html

Page 17: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [17 ]

Historique (suite)

� 1990 : HTML 1 (Berners-Lee; CERN)

� 1994 : World Wide Web Consortium (W3C - www.w3.org)

� 1995 : HTML 2

� 1996 first draft de XML

� 1997 : HTML 3.2 en 1997

� 1998 : Publication de la recommandation XML

� 2004 : Publication de la recommandation XML 1.1.

Page 18: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [18 ]

Famille XML� XML : Représentation de données� DTD (Document Type Definition): Structure du document� XSD (XML Schema Definition) = DTD en XML� XLink (XML Linking Language): Liens étendus � XHTML = « HTML aux normes XML »� DOM (Document Object Model): Modèle de données� SAX (Simple API for XML): Parser� XPath: Structuration du parsing (parcours du DOM)� XSL (eXtended Stylesheet Language): Traitement� FO (Formatting Objects): Formattage de texte� XML Query Language: Requêtes (Quilt, XML-QL, XQL,etc)� SVG : Scalable Vector Graphics : Dessin vectoriel� ..

Page 19: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [19 ]

Exemple XML

<?xml version="1.0" ?>

<personne>

<nom>Curé</nom>

<prenom>Olivier</prenom>

</personne>

Page 20: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [20 ]

XML bien formé

� Contient un ou plusieurs éléments� Non vide

� Un seul point de départ � Racine� Début de son analyse unique

� Imbrication correcte (arbre)� Structure hiérarchique

� Fait référence à des entités bien formées� Références externes� Document distribué

Page 21: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [21 ]

Syntaxe

� Similaire à HTML:� <balise attribut=�valeur�>contenu</balise>� <balise> : une balise d'ouverture� <balise/> : balise de fermeture � Pour un élément vide : <balise/>� élément = sous-arbre� élément vide: <balise attribut=�valeur�/>� attribut=�valeur� (Importance de

guillements!)� Commentaire:

� <!-- ceci est un <commentaire>, jusqu�ici -->

Page 22: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [22 ]

Syntaxe (2)

� Respect de la casse pour les balises� Noms d�attributs en minuscules� Certains caractères interdits

� $, ... lié au traitement (XSL)� Certains caractères déconseillés

� +,-,� pour les noms des attributs (perturbe les calculs)

� Chaque attribut a un nom unique� valeur obligatoire� valeur entre guillemets

Page 23: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [23 ]

Imbrication exemple

<personne>

<nom>Curé</nom>

<prenom>Olivier</prenom> Ok

</personne>

<personne>

<nom>Curé</nom>

<prenom>Olivier</personne> Pas Ok en XML

</prenom>

Page 24: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [24 ]

Document XML

� Déclaration XML <?xml � ?>� Version version=�1.0�

� 1.0 ou 1.1� Encodage

encoding=�ISO-8859-1�� UTF-8, UTF-16, ISO-10646-UCS-2, ISO-10646-UCS-4, ISO-8859-1 à

ISO-8859-9, ISO-2022-JP, Shift_JIS, EUC-JP� Document indépendant ou non standalone=�yes�

� yes, no

� Instructions pour le traitement <?processing-instruction�?>� pour les applications qui traitent le document� Un document - plusieurs utilisations

Page 25: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [25 ]

Document XML (2)

� Déclaration XML <?xml � ?>� Instructions pour le traitement <?processing-instruction�?

>

� Déclaration de type de document <!DOCTYPE racine �>� DTD / Schema� Attributs DTD

� SYSTEM (URL) ou PUBLIC (Details et URL)� Associe une structure au document

� Commentaire <!-- texte -->� Texte ignoré durant l�analyse

� Contenu <racine>�</racine>� Arborescence de balises avec/sans attributs� Contenus de balises

Page 26: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [26 ]

Exemple

<?xml version="1.0" standalone="yes"?>

<adresses>

<personne>

<type statut= "mcf"/>

<nom>Curé</nom>

<prenom>Olivier</prenom>

<adresse>IFIS, Univ-mlv</adresse>

</personne>

<personne> .... </personne>

</adresses>

Page 27: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [27 ]

Attribut "standalone"

� définir l'existence d'une DTD externe

� Si la valeur est "no", le document n'est pas standalone et dépend d'une DTD externe.

� Si la valeur est "yes", le document est standalone et il n'y a pas de DTD externe.

Page 28: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [28 ]

Exemple XML (arbre)

Entête

adresses

personne

type nom prenom adresse

personne

type nom prenom adresse

Page 29: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [29 ]

Modélisation XML

� 2 approches pour la modélisation de documents XML :

� Orientée donnée (data-centric) : structure régulière, ordre des éléments n'est pas important => stockage dans des SGBDR et SBGDOO.

� Orientée document (document-centric) : structure peu régulière, ordre des éléments est important => stockage NXD (Native XML Databases).

Page 30: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [30 ]

Sections littérales� Il est interdit de placer dans le contenu des caractères comme "<",

">", "&".

� Le document suivant est incorrect :

<?xml version="1.0"?>

<code>if (i>5 && j<10)

</code>

� La section CDAta permet d'inclure du texte qui ne sera pas analysé par le parseur :

<?xml version="1.0"?>

<condition>

<![CDATA [if (i>5 && j<10) ]]>

</condition>

Page 31: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [31 ]

URx� URI (Uniform Resource Identifier): Un identifiant

générique permettant de distinguer sur Internet des ressources concrètes et/ou abstraites.

� Les URIs proposent une syntaxe pour accéder à des ressources d'une manière indépendante du protocole (extension possible).

� Il existe 2 types d'URI :

� Les URL (Uniform Resource Locator) pour les ressources concrètes.

� Les URN (Uniform Resource Name) pour les ressources abstraites.

� Possibilité de spécifier des chemins complets ou relatifs.

Page 32: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [32 ]

URx (2)

� Une URI comprend 2 parties séparées par ':' :

Schéma extrait du 'Dictionary of XML technologies and the Semantic Web", V. Goreimenko, Ed. Springer-Verlag. 2004

Page 33: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [33 ]

URx (3)� Schema-name peut prendre les valeurs

suivantes : http, ftp, mailto, file, news.

� La notion d'URI est une base du Web Sémantique.

� Une URL (Uniform Resource Locator) est une localisation, un sous-ensemble d'une URI décrivant une ressource concrète,accessible sur Internet et localisée à une adresse (URL).

� Exemple : http://www.univ-mlv.fr/

Page 34: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [34 ]

URx (4)

� Une URN (Uniform Resource Name) est un sous-ensemble d'une URI spécifiant le nom d'une ressource générique abstraite, généralement unique et sans localisation.

� Contrairement à une URL, une URN peut se référer à une chose qui n'existe pas sur Internet.

� Peut se référer à une "chose" du monde réelle : un chien ou un théorème.

� L'accès et la récupération ne passe pas forcément par un traitement informatique.

Page 35: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [35 ]

URx (5)

� Une URN permet de définir des noms avec une syntaxe proche d'une URL mais ce n'est pas nécessairement une ressource Internet.

� Une URN est composée de 3 parties séparées par des ':' :

Page 36: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [36 ]

XML namespaces

� XML Namespaces : � permet le mélange de vocabulaires. � offre les avantages suivants :

� "Marquer" les éléments et attributs avec des espaces de noms.

� Valider des documents contenant des éléments et attributs provenant de différénts espaces de noms.

� Version actuelle : Namespaces in XML 1.1 (Recommandation du 02/2004).

Page 37: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [37 ]

Déclaration des espaces de noms

� Déclaration par une URI en associant à un préfixe, à l'aide de l'attribut xmlns.

� Déclaration :

<balise xmlns:préfixe="uri">

� Exemple

<recette xmlns:food="http://www.food.com">

� L'association n'est valable que dans les descendants de l'élément qui contient la déclaration.

� L'association est appliquée aux éléments et attributs.

Page 38: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [38 ]

Utilisation des espaces de noms (suite)

� Une déclaration xmlns sans préfixe est considérée comme définissant l'espace de noms par défaut et est appliquée à l'ensemble des éléments de la zone.

� Utilisation d'un espace de noms : <préfixe:élément>

� Exemple :

<Books xmlns='http://www.oreilly.com'

xmlns:Songline='http://www.songline.com'>

<Book>

<Title>XML Pocket Reference</Title>

<ISBN>0-596-00133-9</ISBN>

</Book>

<Songline:CD>18231</Songline:CD>

</Books>

Page 39: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [39 ]

XML namespaces (fin)

� En règle générale, on utilise une URL pour définir un espace de noms mais cet URL ne doit pas nécessairement pointé sur un schéma (DTD, XML schéma) ou autres documents.

� Un espace de noms n'est pas une localisation Internet où réside des ressources physiques.

� C'est une méthode de création de noms uniques permettant d'éviter les collisions entre noms d'éléments.

Page 40: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [40 ]

Noms qualifiés

� Un nom qualifié (ou Qname) est un nom d'élément ou d'attribut de la forme :

namespace_prefix : local_part

� Exemple :

book:title nom qualifié

person:title nom qualifié

title nom non-qualifié

Page 41: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [41 ]

XHTML

� Reformulation de HTML en tant qu'application XML

� Avantages :� Syntaxe plus rigoureuse� Possibilité d'utiliser les applications

XML standard� Importation de fragments de

documents d'autres espaces de noms

Page 42: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [42 ]

Conclusion

� XML est un conteneur:� Ne dit pas comment définir les balises� Ne dit pas comment structurer l'information

� XML est simple:� Texte� Peu de contraintes

� XML est standard:� Echange de document� Format "central"� Outil existants

� XML n'est pas:� Un language de programmation� Une solution miracle�.

Page 43: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [43 ]

2. Schémas XML

Ouvrages recommandés :• XML in a nutshell � S. Means & E.R. Harold - Edition O'Reilly (Bibliothèque UMLV)• XML Schéma � E. Van Der Vlist � Edition O'Reilly (Bibliothèque UMLV).

Page 44: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [44 ]

Introduction

� Comment échanger des données d'un langage XML à un autre.

� Il faut décrire formellement les deux langages : des schémas

� Réaliser une transformation en utilisant les schémas.

� Plusieurs solutions pour définir des schémas :

� DTD (Document Type Definition)

� XML Schema

� RelaxNG

Page 45: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [45 ]

Document valide

� Un document 'valide' est un document qui respecte la grammaire définie dans un schéma.

� Différent de 'bien formé', condition nécessaire pour un document XML, qui indique que le document respecte les règles standards d'écriture d'un doc. XML.

� Document 'valide' <=> structure OK

� Document 'bien formé' <=> syntaxe OK

Page 46: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [46 ]

DTD

� Structure le document� DTD=Classe / Document=instance� Contraint la syntaxe� Exemple:

� Livre = Titre + Contenu� Titre = TEXT� Contenu = Chapitre(s) + References� Chapitre = Section(s) �

Page 47: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [47 ]

DTD - élément

� Déclaration des éléments: <!ELEMENT � >� <!ELEMENT UL (LI)+>� Déclaration implicite de leur imbrication => structure

d�arbre� Syntaxe

� X* : 0 ou plus occurrence(s) de X� X+ : 1 ou plus occurrence(s) de X� X? : X est présent une fois au plus� -X : pas d�occurences de X� X¦Y : X OU Y� X,Y : X ET Y (dans l�ordre)� X&Y : X ET Y (pas forcément dans l�ordre)� EMPTY, ANY : Vide ou quelconque� #PCDATA : contient du texte

Page 48: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [48 ]

DTD � élément (2)

� On peut définir des modèles de contenu autorisant le mélange de données et éléments.

� Syntaxe :(#PCDATA | nomElement1 | ... | nomElementn)

� Exemple d'une déclaration

<!ELEMENT p (#PCDATA | em | exposant | indice)*>

<!ELEMENT em (#PCDATA |exposant|indice)*>

<!ELEMENT exposant (#PCDATA)>

<!ELEMENT indice (#PCDATA)>

� Exemple d'utilisation

<p> un paragraphe contenant du texte <em> mis en evidence</em> ou <exposant> exposant </exposant></p>

Page 49: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [49 ]

DTD - attribut

� Déclaration des attributs: <!ATTLIST � >� <!ATTLIST TD

  valign (top|middle|bottom|baseline) #IMPLIED  ... >

� Déclaration de leur nécessité (syntaxe contrainte)� CDATA : caractères� ID : Lettres uniquement, et unique sur le document� IDREF: Reference sur ID� IDREFS : Plusieurs valeurs de ID� ENTITY, ENTITIES� NMTOKEN, NMTOKENS (utilisation avancée)

Page 50: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [50 ]

DTD � attribut (2)

� Déclaration des attributs: <!ATTLIST � >� <!ATTLIST TD

  valign (top|middle|bottom|baseline) #XXX >� 4 valeurs possibles pour XXX :

� La valeur par défaut de l'attribut� REQUIRED et chaque élément instance devra

posséder cet attribut.� IMPLIED et la présence de cet attribut est

facultative.� FIXED : fixe la valeur de cet attribut pour tout

élément instance. Il n'est pas nécessaire de répéter cet attribut.

Page 51: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [51 ]

Exemple avec DTD

<?xml version="1.0"?>

<!DOCTYPE famille SYSTEM "ele1.dtd">

<famille>

<personne>

<nom>Durand</nom>

<prenom>Jean</prenom>

<age>28 ans</age>

</personne>

<personne>

<nom>Durand</nom>

<prenom>Marie</prenom>

<age>20 ans</age>

</personne>

</famille>

Page 52: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [52 ]

Et sa DTD

<?xml version="1.0" encoding="ISO-8859-1"?>

<!ELEMENT famille (personne+)>

<!ELEMENT personne (nom, prenom,age)>

<!ELEMENT nom (#PCDATA)>

<!ELEMENT prenom (#PCDATA)>

<!ELEMENT age (#PCDATA)>

Le nom du fichier est ele1.dtd

Page 53: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [53 ]

Un autre exemple

<?xml version="1.0"?>

<!DOCTYPE famille SYSTEM "att1.dtd">

<famille>

<personne

nom="Durand"

prenom="Jean"

age = "28 ans"/>

<personne

nom="Cure"

prenom="Marie"

age = "20 ans"/>

</famille>

Page 54: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [54 ]

Et sa DTD

<?xml version="1.0" encoding="ISO-8859-1"?>

<!ELEMENT famille (personne+)>

<!ELEMENT personne EMPTY>

<!ATTLIST personne

nom CDATA #REQUIRED

prenom CDATA #REQUIRED

age CDATA #REQUIRED>

Le nom du fichier est att1.dtd

Page 55: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [55 ]

DTD - Doctype

� Une PI (ou Processing Instruction) qui s'insère dans le prologue d'un document XML dans le but d'associer une DTD au document.

� Possibilité de déclarer la DTD en interne du document ou en externe.

� En externe, il existe 2 déclarations différentes :

� Avec le mot réservé "SYSTEM"

� Avec le mot réservé "PUBLIC"

Page 56: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [56 ]

DTD � Interne au document

<?xml version="1.0"?>

<!DOCTYPE articles [

<!ELEMENT articles (article+)><!ELEMENT article (nom)><!ELEMENT nom (#PCDATA)>]><articles>

<article><nom>X1090AB</nom>

</article><article>

<nom>Y9968AZ</nom></article>

</articles>

Le nom de l'élément racine du document

Page 57: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [57 ]

DTD � Externe au document

Page 58: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [58 ]

DTD � externe avec SYSTEM

� Syntaxe avec localisation absolue:<!DOCTYPE livre SYSTEM "/home/user1/dtds/livre.dtd">

<!DOCTYPE livre SYSTEM "<

http://www.toto.com/dtds/livre.dtd>">

� Syntaxe avec localisation relative:<!DOCTYPE livre SYSTEM "dtds/livre/dtd">

<!DOCTYPE livre SYSTEM "../../dtds/livre.dtd">

� Un SID (System Identifier) est une URI permettant d'accéder à une DTD.

SID

Page 59: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [59 ]

DTD � externe avec PUBLIC

� Méthode rarement utilisée, elle permet d'accéder via un identifiant officiellement déclaré à une DTD publique. Il est nécessaire de déclarer un tel identifiant auprès d'organismes : ISO, GCA (American Graphic Communication Association).

� La définition prévoit de définir un second identifiant qui correspond à un identifiant SYSTEM.

Page 60: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [60 ]

DTD � externe et interne

� On peut mélanger les sources (externe et interne) de DTD. Lecture de DTD interne avant l'externe.

� Exemple :<?xml version="1.0">

<!DOCTYPE famille SYSTEM "dtds/famille.dtd"

[ ... ] >

<famille>

...

</famille>

Page 61: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [61 ]

DTD � Entités

� Une séquence de caractères (nom de l'entité) utilisée pour représenter une autre séquence de caractères (contenu de l'entité).

� Une entité est déclaré dans une DTD.

� Déclaration d'une entité générale (ne peut s'appliquer dans la DTD).

<!ENTITY nom "contenu">

� Exemple (code Unicode pour copyright)

<!ENTITY copyright "&#xa9">

Dans le document : <copyright> &copyright; 2004</copyright>

Page 62: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [62 ]

DTD � Entités (2)

� Une entité paramètrée s'applique dans une DTD.

� Déclaration :

<!ENTITY % nom contenu>

� Exemple

<!ENTITY % pcdata "#PCDATA">

<!ELEMENT titre %pcdata;>

Page 63: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [63 ]

DTD � Entités externes

� Permet de copier le contenu d'un document XML dans le document courant.

� Déclaration

<!ENTITY contenudoc1 SYSTEM "

http://www.toto.com/doc1.xml">

<document>

&contenudoc1;

</document>

Page 64: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [64 ]

DTD � Entités non analysées

� Permet de copier le contenu d'un document quelconque dans le document courant.

� Déclaration

<!ENTITY image1 SYSTEM "

http://www.toto.com/image/photo1.gif" NDATA

GIF89a>

<image src="image1"/>

� En général l'attribut (ici src) est du type ENTITY ou ENTITIES.

Page 65: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [65 ]

Limites de DTD

� Syntaxe non XML

� Pas de support des espaces de noms

� Modularité limitée

� Modèle limité :

� Contraintes de structures trop simplistes (nombre, modèle mixte, etc.).

� Pas de contraintes sur les données

� Autres solutions :

� XML Schema (W3C), RelaxNG (OASIS)

Page 66: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [66 ]

XML Schema

� Développé par le W3C� Norme officielle� Modèle riche et évolué� Syntaxe XML� Exploitation des espaces de noms� Mais verbeux et complexe

Page 67: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [67 ]

XSD - Les types

� Notion centrale de type :

� Chaque élément (attribut) possède un type.

� Approche objet : il existe de types de base et on peut dériver de nouveaux types.

� Catégories :

� Types simples (simpleType)

� Un élément de ce type ne peut contenir d'autres éléments. Un attribut présente un type simple.

� Types complexes (complexType)

� Les éléments qui contiennent d'autres éléments et/ou des attributs.

Page 68: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [68 ]

Structure d'un schéma XML

� C'est un document XML bien formé(arbre) avec :� Une racine schema,

� Une suite de définitions de types, d'éléments et d'attributs

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema

">

...

</xsd:schema>

Page 69: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [69 ]

XSD : définition d'un élément

� Au niveau global

� Dans la définition d'un type complexe

� Avec un élément element :

� Attribut name : nom de l'élément.� Attribut type : type de l'élément.� Attribut fixed : valeur de l'élément fixée ou à préciser.� Attribut default : valeur par défaut lorsque l'élément est

présent mais avec un contenu vide.� Attribut minOccurs, maxOccurs : spécifier les cardinalités

min et max.� En donnant un type sans nom, on doit définir le type de

l'élément directement comme descendant du noeud element.

Page 70: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [70 ]

XSD : définition d'un attribut

� Au niveau global

� Dans la définition d'un type complexe

� Avec un élément attribut :

� Attribut name : nom de l'attribut.� Attribut type : type de l'attribut (forcément un type simple,

éventuellement obtenu par dérivation).� Attribut fixed : valeur de l'élément fixée.� Attribut default : valeur par défaut.

Page 71: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [71 ]

XSD � types simples

� string, � boolean, � float, decimal, integer, nonPositiveInteger,

negativeInteger, nonNegativeInteger, positiveInteger� timeDuration, timeInstant, time, timePeriod, date, month,

year, century� UriReference� ID, IDREF, ENTITY, NOTATION, QName, Name � On peut restreindre chaque type à l'aide de facets et on

obtient alors un type dérivé, toujours simple :� Valeur minimale ou/et maximale� Longueur (min, max, exacte)� Nombre de chiffres� Expression régulière� Énumération des valeurs possibles.� etc..

Page 72: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [72 ]

XSD � Exemple de dérivation de types simples

<xsd:simpleType name="smallInt">

<xsd:restriction base="xsd:integer">

<xsd:minInclusive value="0"/>

<xsd:maxInclusive value="100"/>

</xsd:restriction>

</xsd:simpleType>

Page 73: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [73 ]

XSD � types complexes

� Construction à base de séquence(s) :� Élément sequence

� Contenu indique les fils exigés par le type à l'aide des éléments element :

� Attribut ref : permet d'utiliser un élément déjà défini

� Attribut minOccurs et maxOccurs : définition des cardinalités

� Contenu mixte : attribut mixed="true" pour l'élément complexType

� On précise les attributs à l'aide d'attribut :

� Attribut ref : permet d'utiliser un attribut déjà défini

� Attribut use : précise si l'attribut est optional, prohibited ou required .

Page 74: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [74 ]

XSD � types complexes (2)

� L'attribut content de l'élément complexType peut prendre les valeurs suivantes :� elementOnly, la valeur par défaut, et le contenu de l'élément

est composé d'un ou plusieurs élément(s).

� textOnly pour un contenu du type string.

� empty pour un contenu vide

� mixed pour définir un contenu mixte.

� Exemple :

<xsd:element name="personne">

<xsd:complexType content="empty">

<xsd:attribute name="nom" type="xsd:string">

....<personne nom="Durand"/>

Page 75: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [75 ]

XSD - Schema (exemple)

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">

<xsd:element name="article" >

  <xsd:complexType content="elementOnly">

    <xsd:element name="titre" type="xsd:string"

minOccurs="1" />

    <xsd:element name="auteur" type="xsd:string"

minOccurs="1" />

    <xsd:element name="date" type="xsd:string"

minOccurs="1" />

    <xsd:element name="lieu" type="xsd:string"

minOccurs="1" />

  </xsd:complexType>

</xsd:element>

</xsd:schema>

Page 76: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [76 ]

Exemple avec schéma<?xml version="1.0"?>

<famille

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="ele1.xsd">

<personne>

<nom>Durand</nom>

<prenom>Jean</prenom>

<age>28 ans</age>

</personne>

<personne>

<nom>Durand</nom>

<prenom>Marie</prenom>

<age>20 ans</age>

</personne>

</famille>

Page 77: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [77 ]

Et son schéma<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="famille">

<xsd:complexType>

<xsd:sequence>

<xsd:element ref="personne" minOccurs="1" maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="personne">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="nom" type="xsd:string"/>

<xsd:element name="prenom" type="xsd:string"/>

<xsd:element name="age" type="xsd:string"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

Page 78: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [78 ]

XSD - Conclusion

� Bien plus complexe et riche que DTD

� Un vrai langage qui demande un étude des documents officiels (http://www.w3.org/XML/Schema) :

� XML Schema Part 0 : Primer

� XML Schema Part 1 : Structures

� XML Schema Part 2 : Datatypes� XML Schema 1.1. en cours de développement.

Page 79: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [79 ]

RelaxNG

� Développé par le consortium OASIS (1)

� Norme compact et simple

� Norme modulaire

� Syntaxe XML (Fusion de Trex et Relax)

� Exploitation des espaces de noms

� Mais n'est pas la norme du Web (W3C)

� Mais son contenu est moins riche que XML Schema.

1 : http://www.oasis-open.org

Page 80: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [80 ]

Relax NG

� Spécification de décembre 2001 (1)

� Buts :

� Proposer une syntaxe XML

� Avec support des espaces de noms

� Proposant un modèle plus efficace que les DTD (modèle non ordonné)

� Support de types de données complexes (non inclus par défaut).

1 : http://relaxng.org/spec-20011203.html

Page 81: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [81 ]

Document XML et son schéma Relax NG

<addressBook> <card> <name>John Smith</name> <email>[email protected]</email> </card> <card> <name>Fred Bloggs</name> <email>[email protected]</email> </card></addressBook>

<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0"> <zeroOrMore> <element name="card"> <element name="name"> <text/> </element> <element name="email"> <text/> </element> </element> </zeroOrMore></element>

Schéma Relax NG

<!DOCTYPE addressBook [<!ELEMENT addressBook (card*)><!ELEMENT card (name, email)><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)>]>Schéma DTD

Page 82: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [82 ]

Relax NG

� Les éléments Relax NG sont obligatoirement dans http://relaxng.org/ns/structure/1.0

� Les éléments servent à définir des patterns (modèles) qui seront comparés au document pour savoir si celui-ci est valide.

� Eléments :

� Element : declaration d'un élément avec nom comme attribut

� Gestion des répétitions : par défaut (une occurence), oneOrMore, zeroOrMore, optionnal (un au plus).

� Text : du texte.

Page 83: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [83 ]

Schematron

� Un langage de schéma structuré pour documents XML.

� Fonctionne en effectuant des concordances avec des expressions Xpath. Exploite la syntaxe XSL.

� Aussi utilisé pour l'annotation de document XML en générant automatique des éléments.

� Détails : http://www.schematron.com

Page 84: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [84 ]

3. API Java et XML

Ouvrages recommandés :• Java et XML 2nd édition� B. McLaughlin - Edition O'Reilly (Bibliothèque UMLV)• XML in theory and practice � C. Bates � Edition Wiley

Page 85: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [85 ]

Pourquoi Java et XML

� Java : code portable (write once, run anywhere)

� XML : données portables � On peut aussi utiliser d'autres

langages :� Visual Basic : parser de Internet

Explorer 6, spécifique à une plate-forme

Page 86: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [86 ]

Autres langages

� C++ : plusieurs parsers (Xercès, IE6, etc.), complexe

� Perl : librairies XML importantes� Python : librairies XML importantes,

exploitation marginale.� Lisp et Scheme : librairies XML

intéressantes, optimisation importante (parsing Scheme + rapide que C++)

Page 87: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [87 ]

Java et XML

� Java est populaire� Java et XML évoluent dans des

environnements similaires : applications réseaux, interopérables et systèmes hétérogènes (indépendance de la plate-forme).

Page 88: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [88 ]

Traiter du XML

� Parser : "a computer program that divides code up into functional components" (hyperdictionary.com).

� Ecrire un parser est une tâche complexe (implémentation, optimisation, etc.). On profite donc des parsers disponibles (libres/ propriétaires) => compatibilité ascendante, évolution ?

� Nécessité de changer de parser sur la durée de vie d'une application.

Page 89: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [89 ]

JAXP (Java API for XML Parsing)

� Une initiative de Sun Microsystems pour créer une API indépendante de la structure des données et des traitements.

� JAXP est une API standard pour les traitements et transformations associés à XML.

Page 90: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [90 ]

JAXP (2)

� JAXP supporte DOM et SAX (les deux principales API).

� JAXP propose des méthodes qui peuvent être exploitées avec des API compatibles.

� Un parser est chargé lors de l'exécution par une classe factory (cf. Design pattern, décrit comment les classes peuvent être instanciées et chargées au moment de l'exécution).

� Exemple :

javax.xml.parsers.SAXParserFactory charge un parser SAX.

javax.xml.parsers.DocumentBuilderFactory charge un constructeur DOM

Page 91: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [91 ]

Xerces

� Xerces (Apache foundation) propose un parser SAX et DOM.

� Compatibilité avec les recommandations du W3C : XML 1.0, Namespaces, XML Schema 1.0, DOM level 2 avec SAX 2, JAXP 1.1

� Xerces 2 supporte XML Schema

Page 92: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [92 ]

API Java pour XML

� API de bas niveau (low-level API) : elle permet un traitement direct des documents XML

� La sortie est du XML

� Puissantes et efficaces

� Nécéssitent une bonne connaissance de XML

� Les solutions : SAX (Simple API for XML), DOM (Document Object Model), JDOM, JAXP.

Page 93: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [93 ]

API Java pour XML(2)

� API de haut niveau (high-level API) : elle exploite une API de bas niveau.

� Divers formats en sortie

� Développement rapide et facile mais traitement lourd

� Temps d'apprentissage de l'API important

� Solution : XML Data Binding (transforme un document XML et objets Java).

Page 94: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [94 ]

Parser XML

� Un parser est un programme qui va lire un document XML et analyser sa structure.

� On peut aussi dire qu'un parser transforme un document XML en une structure de donnée qui peut être manipulée.

� Quelques fonctionnalités :

� Assure que le document est bien formé.

� Si un schéma existe, assure que le document est valide.

Page 95: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [95 ]

Parser XML (2)

� Arguments pour choisir un parser : efficacité, conformité aux normes (W3C).

� Solutions : Xercès (Apache), XP, XML4J (IBM), Crimson (Sun), MSXML (Microsoft), Oracle XML Parser.

Page 96: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [96 ]

Parser XML (3)

� En général, on utilise un parser de la manière suivante :� Création d'un objet parser� On pointe cet objet sur un document

XML� On réalise des traitements (par exemple

créer une page web ou bien générer un bon de commande en PDF).

Page 97: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [97 ]

SAX (Simple API for XML)

� SAX est une API XML événementielle (event-driven).

� Elle ne construit pas une représentation du document XML en mémoire.

� Le programme reçoit des notifications lorsque le parser reconnaît des parties spécifiques d'un document XML. Les notifications (events) sont gérées par des gestionnaires de notifications (event handlers). 3 types de event handlers :

� DTDHandler : accès au contenu de la DTD� ErrorHandler : accès aux erreurs d'analyse� ContentHandler : accès au contenu du document.

Page 98: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [98 ]

Evénements avec SAX

Le document :

<?xml version="1.0"?>

<personne>

<prenom>Pierre</prenom>

<nom>Durand</nom>

</personne>

Les événements :

start document

start element: personne

start element: prenom

characters: Pierre

end element: prenom

start element: nom

characters: Durand

end element: nom

end element: personne

end document

Page 99: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [99 ]

Le paquetage org.xml.sax

� org.xml.sax� Contient des interfaces et classes

permettant la manipulation de documents.

� Interfaces

� AttributeList, Attributes, ContentHandler,

DocumentHandler, DTDHandler, EntityResolver,

ErrorHandler, Locator, Parser, XMLFilter, XMLReader

� Classes

� HandlerBase, InputSource

Page 100: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [100 ]

Interface ContentHandler

� Cette interface permet de notifier :� Le début et la fin d'un document.� Le début et la fin d'un élément.� Les données� Les espaces de noms� Les "processing instructions" (PI)� D'ignorer les 'espaces'.

Page 101: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [101 ]

Interface ContentHandler (2)

� Méthodes� characters : gère les noeuds textuels� startDocument et endDocument : gère

le début et la fin d'un document.� startElement et endElement : gère le

début et la fin d'un élément.

� CF. javaDoc

Page 102: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [102 ]

Interface XMLReader

� Le point d'entrée d'une application SAX est l'interface XMLReader qui contient les méthodes qui vont permettre :

� De contrôler la manière dont va opérer le parser.

� D'activer/ désactiver certaines fonctionnalités de SAX (gestion des espaces de noms).

� D'instancier des objets pouvant recevoir des notifications.

� D'initialiser le flux d'entrée du parser.

Page 103: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [103 ]

Un exemple (1)

import org.xml.sax.*;

import org.xml.sax.XMLReader;

import org.xml.sax.helpers.XMLReaderFactory;

import org.xml.sax.helpers.DefaultHandler;

import org.xml.sax.SAXException;

import java.io.IOException;

class MonHandler extends DefaultHandler {

public void startDocument() throws SAXException {

System.out.println("Debut du document");

}

public void endDocument() throws SAXException {

System.out.println("Fin du document");

}

public void startElement(String namespaceURI, String localName, String

qName, Attributes atts) {

System.out.println("Debut de balise");

System.out.println(" Nom local :" +localName);

System.out.println("Length ="+atts.getLength());

for(int cpt=0;cpt<atts.getLength();cpt++)

System.out.println(atts.getLocalName(cpt)+" = "+ atts.getValue(cpt));

}

Page 104: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [104 ]

Un exemple (2)public void endElement(String namespaceURI, String localName, String

qName) {

System.out.println("Fin de balise :"); }

}

public class Ex2SAX {

private String docName;

public Ex2SAX(String docName) {

this.docName = docName;

MonHandler monHandler = new MonHandler();

try {

XMLReader parser =

XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser

");

try {

parser.setContentHandler(monHandler);

parser.setFeature("http://xml.org/sax/features/validation", true);

parser.parse(docName); }

catch (IOException ioexc) {

System.out.println("PB acces a ele1.xml");}

}

catch (SAXException saxexc) {

System.out.println("Pb SAX" + saxexc.getMessage()); } }

Page 105: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [105 ]

Un exemple (3)

public static void main(String[] args) {

System.out.println("Exemple - SAX");

if(args.length==1)

{

Ex2SAX exSax = new Ex2SAX(args[0 ]);

}

else

System.out.println("1 argument requis");

}

}

Page 106: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [106 ]

Bilan SAX

� Avantages :

� utilisation mémoire et performance de traitement sont indépendantes de la taille du document.

� Traitement possible avec une lecture complète du document.

� Inconvénients :

� Le développeur est responsable de la structure de donnée qui stocke les informations.

� Pas adaptée à un accès aléatoire aux données du document.

Page 107: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [107 ]

DOM (Document Object Model)

� Une recommendation du W3C.

� N'est pas conçu spécifiquement pour le langage Java.

� Représente le contenu et le modèle d'un document quelque soit le langage de programmation.

� Architecture en couches

� Le niveau 1 détaille les fonctionnalités et la navigation dans un document (pas nécessairement du XML).

� Le niveau 2 ajoute des fonctionnalités pour XML, HTML et CSS.

� Le niveau 3 (Load and Save) est une recommandation (avril 2004)

Page 108: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [108 ]

DOM (suite)

� En analysant un document XML avec DOM, on obtient un arbre qui représente le contenu du document (texte, éléments et attributs).

� DOM ne fournit pas d'information sur le codage du document (attention aux espaces).

Page 109: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [109 ]

Exemple d'arbre DOM<catalog>

<book id="101">

<title>XML in a Nutshell</title>

<author>Elliotte Rusty Harold, W.

Scott Means</author>

<price>39.95</price>

</book>

<book id="121">

<title>Who Moved My Cheese</title>

<author>Spencer, M.D. Johnson,

Kenneth H. Blanchard</author>

<price>19.95</price>

</book>

</catalog>

Page 110: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [110 ]

Exemple DOMimport javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node; import org.w3c.dom.NodeList;

public class Ex1Dom {

private String uri; private Document doc;

private int docNd, eleNd, attNd, txtNd;

private static long debut, fin;

public Ex1Dom(String uri) {

this.uri = uri;

doc = null; docNd = 0; eleNd = 0; attNd = 0; txtNd = 0;

try {

DocumentBuilderFactory dbf =

DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

debut = System.currentTimeMillis(); doc = db.parse(uri);

fin = System.currentTimeMillis();

if (doc != null) { count(doc); printStats(); }

}

Page 111: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [111 ]

Exemple DOM (2)catch (Exception e) {

System.err.println("Erreur : " + e.getMessage());}

}

public void count(Node node) {

int type = node.getNodeType();

switch (type)

{

case Node.DOCUMENT_NODE: {

docNd++; processChild(node); break;

}

case Node.ELEMENT_NODE: {

eleNd++; System.out.println(node.getNodeName());

NamedNodeMap atts = node.getAttributes();

if(atts.getLength()>0) attNd += atts.getLength();

processChild(node); break;

}

Page 112: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [112 ]

Exemple DOM (3) case Node.TEXT_NODE: {

txtNd++; break;}

} // ferme le switch

} // ferme la méthode count

public void processChild(Node node) {

NodeList sousNd;

sousNd = node.getChildNodes();

for(int cpt=0;cpt<sousNd.getLength();cpt++)

count(sousNd.item(cpt));

}

public void printStats() {

System.out.println("Document node = "+docNd);

System.out.println("Element nodes = "+eleNd);

System.out.println("Attribute nodes = "+attNd);

System.out.println("Text nodes = "+txtNd);

System.out.println("Duree parsing = "+Long.toString(fin-debut)

+" ms");

}

Page 113: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [113 ]

Exemple DOM (4)public static void main(String[] args) {

Ex1Dom ex1Dom = new Ex1Dom(args[0]);

}

}// ferme la classe Ex1Dom

Page 114: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [114 ]

Bilan de DOM

� Structure arbre propose une bonne solution pour la navigation dans le document.

� Construction de l'arbre en un seul passage (pas d'analyse partiel du document).

� Construction en mémoire => attention aux documents volumineux.

� Avantages :

� Accès aléatoire

� Ecriture dans le document.

Page 115: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [115 ]

JDOM� Une réponse à ceux qui trouvent SAX et DOM

compliqués.

� Comme DOM, JDOM propose un arbre du contenu du document.

� JDOM inclut des adaptateurs qui utilisent des parsers SAX et DOM en tâche de fond.

� JDOM est spécifique à Java alors que DOM est neutre en terme d'exploitation d'un langage de programmation. JDOM exploite de nombreuses caractéristiques de Java (collections, surcharge de méthodes, etc..).

� JDOM est une API open-source : www.jdom.org

Page 116: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [116 ]

JDOM (2)

� JDOM n'est pas un parser, c'est une représentation en Java d'un document XML.

� L'exploitation de JDOM repose donc sur l'utilisation d'un parser pour lire les documents XML. JDOM accepte également les événements SAX et les arbres de DOM.

� Pour faciliter ce mécanisme, JDOM propose le package org.jdom.input. Ce package contient des classes builder. Nous utiliserons le plus souvent SAXBuilder et DOMbuilder.

Page 117: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [117 ]

Builders

SAXBuilder builder = new SAXBuilder( );

Document doc = builder.build(new

FileInputStream("contents.xml"));

� Ou pour DOM:

DOMBuilder builder = new DOMBuilder( );

Document doc = builder.build(myDomDocumentObject);

� Attention, DOMBuilder exploite SAX pour construire l'arbre DOM puis une traduction intervient pour obtenir l'arbre JDOM. C'est moins rapide que d'exploiter SAX pour construire l'arbre JDOM.JDOMBuilder est adapté lorsque l'entrée est déjà un arbre DOM pas pour un flux texte XML.

Page 118: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [118 ]

Gérer la sortie

� Les classe XMLOutputter, mais aussi DOMOutputter et SAXOutputter sont disponibles.

� Exemple:XMLOutputter outputter = new

XMLOutputter();

outputter.output(jdomDocObject,"new

FileOutputStream("resultat.xml"));

Page 119: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [119 ]

Modèle de JDOM

• La classe Document est la représentation d'un document XML et la super classe des classes de JDOM•Element et Attribute représentent respectivement un élément et un attribut XML.

Page 120: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [120 ]

Element

� Avec DOM, le contenu d'une balise est un noeud.

� Avec JDOM, la classe Element propose une méthode getText(). � Plus intuitif pour un développeur Java.

Page 121: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [121 ]

Création d'un document

Element elementRacine = new

Element("racine");

Document document = new

Document(elementRacine);

Page 122: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [122 ]

Exemple JDOMimport java.io.File; import org.jdom.Document;

import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter;

public class JDomOne

{

public static void main(String[] argv)

{

if (argv.length == 0 || (argv.length == 1 && argv[0].equals("-

help")))

{

System.out.println("1 argument necessaire (document xml).");

System.exit(1);

}

try

{

SAXBuilder sb = new SAXBuilder();

Document doc = sb.build(new File(argv[0]));

XMLOutputter xo = new XMLOutputter();

xo.output(doc, System.out);

}

catch (Exception e)

{ e.printStackTrace(); }

}

}

Page 123: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [123 ]

Data Binding

� Le data binding est le processus de représenter des bits de données (issues d'un fichier texte, d'une base de données, d'un document XML) sous une forme de données dans un langage de programmation (sur lesquelles il sera possible de réaliser des opérations).

� Du XML data binding en Java permet de transformer un document XML en des objets Java.

Page 124: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [124 ]

Lexique du data binding

� Marshalling : convertir des données en mémoire vers un média de stockage (BD, fichier texte, XML). Ex : convertir des objets Java en un document XML.

� Unmarshalling : convertir les données d'une structure de stockage vers des données en mémoire. Ex : convertir d'un document XML vers des objets Java.

� Round-tripping : terme exprimant un cycle complet de marshalling-unmarshalling.

� Une API efficace doit permettre une équivalence sémantique lors d'un cycle complet (round-tripping).

Page 125: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [125 ]

Architecture JAXB

Page 126: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [126 ]

Génération de classes

� Elle se base sur le schéma du document XML.

� Suivant l'API : DTD, XML schema ou RelaxNG.

� Les solutions :� Castor (Exolab) , Zeus (Enhydra) , JAXB

(Sun), JaxMe (Apache).

Page 127: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [127 ]

Problèmes

� Problème de typage des données dans le langage de programmation.

Page 128: 1. Introduction à XMLperso.univ-mlv.fr/ocure/coursXML3.pdf · Introduction à XML Ouvrages recommandés : • XML in a nutshell – S. Means & E.R. Harold ... => XML est un méta-langage

O.Curé [128 ]

4. Divers