La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

XML et ses applications

Présentations similaires


Présentation au sujet: "XML et ses applications"— Transcription de la présentation:

1 XML et ses applications

2 XML et ses applications
Généralités Historique Naissance de XML Déploiement d'une application XML 12 octobre 2001 Patrick Itey / Ludovic Maître

3 Patrick Itey / Ludovic Maître
Généralités Le web permet de transmettre n'importe quel type de document entre deux ordinateurs reliés au réseau Internet ou à un réseau d'entreprise. Hypertext Markup Language (HTML) est le format "natif" qui a contribué au succès du web HTML est utilisé comme format de données. 12 octobre 2001 Patrick Itey / Ludovic Maître

4 Patrick Itey / Ludovic Maître
Généralités (2) L'importance grandissante du web, et le fait que HTML ne soit pas forcément adapté au transfert de certains types de données, a conduit les ingénieux ingénieurs a créer eXtensible Markup Language (XML) pour supporter le passage à l'échelle. Le succès de XML fait qu'il est employé pour un nombre de plus en plus important d'applications. De nombreux formats complémentaires ont émergé depuis la création de XML en 1997. 12 octobre 2001 Patrick Itey / Ludovic Maître

5 Patrick Itey / Ludovic Maître
Généralités (3) Ce cours fait le tour des concepts autour de XML et présente XML et les applications dans lesquelles il est utilisé. Le document de référence concernant XML est la recommandation XML 1.0 publiée par le World Wide Web Consortium (W3C). en Anglais : en Français : 12 octobre 2001 Patrick Itey / Ludovic Maître

6 Patrick Itey / Ludovic Maître
Le web 12 octobre 2001 Patrick Itey / Ludovic Maître

7 Patrick Itey / Ludovic Maître
Le web (2) Une application sur le poste utilisateur demande des documents à une machine distante, le serveur, à une adresse (URL) (via le transport HTTP) Le serveur renvoit un document HTML à l’application qui l ’affiche à l ’écran en fonction des balises HTML: Cours <b>XML</b> Donne: Cours XML ou: Cours *XML* 12 octobre 2001 Patrick Itey / Ludovic Maître

8 Patrick Itey / Ludovic Maître
HTML Un document HTML est composé de briques (les balises) contenant du texte Les balises HTML décrivent la présentation souhaitée, pondérée par les capacités du navigateur Les balises sont prédéfinies : il y en a un nombre limité et fixe (pas d ’éléments nouveaux possibles) 12 octobre 2001 Patrick Itey / Ludovic Maître

9 Patrick Itey / Ludovic Maître
HTML (2) HTML est de l'embedded text markup (marquage texte inclus), car: Les informations sont inclues dans le texte Ex. : ceci est très <strong>important</strong> embedded <strong>important</strong> text ceci est très ...important…. markup <strong>...</strong> 12 octobre 2001 Patrick Itey / Ludovic Maître

10 Patrick Itey / Ludovic Maître
Historique 12 octobre 2001 Patrick Itey / Ludovic Maître

11 Patrick Itey / Ludovic Maître
Le W3C Besoins Organisation du W3C Processus de décision Buts 12 octobre 2001 Patrick Itey / Ludovic Maître

12 Patrick Itey / Ludovic Maître
Besoins Peur de la fragmentation Les éditeurs ajoutent des balises propriétaires à HTML -> problèmes d ’incompatibilité Guide pour les évolutions Arbitre neutre 12 octobre 2001 Patrick Itey / Ludovic Maître

13 Patrick Itey / Ludovic Maître
Organisation du W3C Le World Wide Web Consortium est une organisation à but non lucratif Dirigé par Tim Berners-Lee, l'inventeur du web. 500 membres font partie du consortium (sociétés,…) 60 personnes travaillent pour le W3C 12 octobre 2001 Patrick Itey / Ludovic Maître

14 Patrick Itey / Ludovic Maître
Organisation du W3C (2) 4 Domaines: Architecture HTTP, XML, URL/URI, DOM, XML Protocol, Jigsaw User Interface HTML, SVG, PNG, Device independence, Amaya, Internationalisation, MathML, Multimedia (SMIL), CSS, XSL, Voix Technology & society Commerce électronique, Confidentialité, Web Sémantique, XML encryption, XML Signature WAI: Web Accessibility Initiative Politique et technique 12 octobre 2001 Patrick Itey / Ludovic Maître

15 Patrick Itey / Ludovic Maître
Processus de décision Qui: mailing listes membres working groups Advisory Board Directeur 12 octobre 2001 Patrick Itey / Ludovic Maître

16 Processus de décision (2)
Conférences (WWW10), Workshops, Working Groups Meetings 12 octobre 2001 Patrick Itey / Ludovic Maître

17 Processus de décision (3)
Comment : Working drafts, Last Call Working draft, Candidate recommendation, Proposed recommendation, Recommendation 12 octobre 2001 Patrick Itey / Ludovic Maître

18 Patrick Itey / Ludovic Maître
Buts Le W3C a pour but d’harmoniser le développement des langages utilisés sur le web 7 axes ont été définis 12 octobre 2001 Patrick Itey / Ludovic Maître

19 Patrick Itey / Ludovic Maître
Accès Universel Indépendance par rapport au navigateur (device/user-agent). Ex : mobile, vocal,... Internationalisation Surfer quelle que soit la langue, le pays... 12 octobre 2001 Patrick Itey / Ludovic Maître

20 Patrick Itey / Ludovic Maître
Web Sémantique Séparation entre la forme (présentation) et le fond (données) Permet d ’automatiser le traitement de données par programmation 12 octobre 2001 Patrick Itey / Ludovic Maître

21 Patrick Itey / Ludovic Maître
Confiance Sécurité Transfert de données,… (XML Security) Respect de la vie privée Réflexions sur ce qu ’il faut faire/ne pas faire avec les données sur les utilisateurs (Platform for Privacy Preferences) Authentification Identification des serveurs, des utilisateurs 12 octobre 2001 Patrick Itey / Ludovic Maître

22 Patrick Itey / Ludovic Maître
Interopérabilité Normes communes aux OS, langages de programmation, browsers… Possibilité de relire les documents produits par des outils de différents constructeurs 12 octobre 2001 Patrick Itey / Ludovic Maître

23 Patrick Itey / Ludovic Maître
Evolutivité Prévoir le futur Créer des normes compatibles (réutilisation de l ’existant) 12 octobre 2001 Patrick Itey / Ludovic Maître

24 Patrick Itey / Ludovic Maître
Décentralisation Besoin de répartir les tâches entre les différents acteurs Exemple : Traitements applicatifs sur le serveur, présentation sur le client Pour passer à l'échelle 12 octobre 2001 Patrick Itey / Ludovic Maître

25 Patrick Itey / Ludovic Maître
Créativité Pour laisser libre les créateurs de contenu Multimédia, Audio, Animations, 3D... Intégration facile des nouvelles technologies/medias dans le cadre commun XML (SMIL...) 12 octobre 2001 Patrick Itey / Ludovic Maître

26 Patrick Itey / Ludovic Maître
Concurrence Standards propriétaires Flash, Imode (téléphones portables japonais != WAP), … Autres organisations ISO, ECMA, IETF, OASIS… 12 octobre 2001 Patrick Itey / Ludovic Maître

27 Patrick Itey / Ludovic Maître
Naissance de XML 2 acteurs : SGML: Marché confidentiel Besoins de valoriser le savoir acquis W3C Besoin de mieux structurer le web : séparation forme/contenu,... 12 octobre 2001 Patrick Itey / Ludovic Maître

28 Patrick Itey / Ludovic Maître
Naissance de XML (2) But commun W3C/SGML : Faire évoluer le web pour utiliser un successeur de SGML XML = SGML-- 12 octobre 2001 Patrick Itey / Ludovic Maître

29 Déploiement d'une application XML
Plusieurs solutions existent pour déployer XML envoi des données XML brutes au navigateur, qui efffectue alors les transformations nécessaires (en HTML, en image, en voix…) avant de présenter l'information à l'utilisateur dans le browser (ex.: XML + style) dans une application dans le browser (ex.: applet java, javascript/DHTML, flash...) 12 octobre 2001 Patrick Itey / Ludovic Maître

30 Déploiement d'une application XML (2)
transformation des données sur le serveur avant envoi dans un format directement affichable par le navigateur de l'utilisateur scripts: perl, python, jsp, xslt… template engines: cocoon, MyXML, enhydra, webmacro, Freemarker moteurs sur bases de données: oracle, coldfusion… XML frameworks: 12 octobre 2001 Patrick Itey / Ludovic Maître

31 Critères de design de XML
Les objectifs de conception de XML (extrait de la recommandation XML) 1.XML doit pouvoir être utilisé sans difficulté sur Internet 2.XML doit supporter une grande variété d'applications 3.XML doit être compatible avec SGML 4.Il doit être facile d'écrire des programmes traitant les documents XML 5.Le nombre d'options dans XML doit être réduit au minimum, idéalement à aucune 12 octobre 2001 Patrick Itey / Ludovic Maître

32 Critères de design de XML (2)
6.Les documents XML doivent être lisibles par l'homme et raisonnablement clairs 7.La conception de XML devait être préparée rapidement 8.La conception de XML doit être formelle et concise 9.Il doit être facile de créer des documents XML 10.La concision dans le balisage de XML est de peu d'importance (il est conseillé d ’être verbeux) 12 octobre 2001 Patrick Itey / Ludovic Maître

33 Patrick Itey / Ludovic Maître
XML par rapport à HTML Syntaxe plus stricte Valeur d ’attributs entre " Balises toujours fermées (pas de <br> ni <img>) Pas de balises prédéfinies XML est un métalangage Possibilité d ’utiliser ses propres balises Gère tous les jeux de caractères Support Unicode 2/ISO-10646 HTML = XML + Style 12 octobre 2001 Patrick Itey / Ludovic Maître

34 Document XML 12 octobre 2001 Patrick Itey / Ludovic Maître Prologue
Arbre de données DTD (optionnelle) Commentaires Processing Instructions Prologue 12 octobre 2001 Patrick Itey / Ludovic Maître

35 Patrick Itey / Ludovic Maître
Prologue <?xml version="1.0" encoding="ISO " standalone="yes"?> version: obligatoire encoding: unicode, default: UTF-8 peut prendre toute sorte de valeurs (voir Unicode) seul UTF-8 et UTF-16 est exigé des parseurs ex: EUC-JP, ISO UCS2... 12 octobre 2001 Patrick Itey / Ludovic Maître

36 Patrick Itey / Ludovic Maître
Prologue (2) standalone: default: no yes veut dire qu'il n'y a pas de DTD,ou que la DTD incluse est complète (n'en inclut pas d'externe) Note: l'ordre des attributs est imposé 12 octobre 2001 Patrick Itey / Ludovic Maître

37 Patrick Itey / Ludovic Maître
Eléments Les documents XML sont composés d ’éléments On appelle character data (CDATA) un mélange de texte et d ’éléments de balisage texte elements texte elements… elements: start-tag contents end-tag contents est du character-data start-tag: <element-name attributs?> end-tag: </element-name> attribut: attribut-name = "valeur d'attribut" ou attribut-name = `attribute value' 12 octobre 2001 Patrick Itey / Ludovic Maître

38 Patrick Itey / Ludovic Maître
Eléments (2) Exemple : <movie title="Star Trek: Insurrection" year="1998" > <actor name="Patrick Stewart"/> <actor name="Jonathan Frakes"/> When the crew of the Enterprise learn ... </movie> 12 octobre 2001 Patrick Itey / Ludovic Maître

39 Patrick Itey / Ludovic Maître
Eléments (3) Les documents XML peuvent être représentés sous forme d ’arbre 12 octobre 2001 Patrick Itey / Ludovic Maître

40 Patrick Itey / Ludovic Maître
Eléments (4) Un document a toujours un seul élément racine <movies> <movie>Platoon</movie> <movie>Rambo</movie> </movies> Mauvais exemple : <movie>Platoon</movie> <movie>Ramboi</movie> L ’ordre est important Platoon est vu avant Rambo 12 octobre 2001 Patrick Itey / Ludovic Maître

41 Patrick Itey / Ludovic Maître
Eléments (5) Tous les éléments doivent être terminés <body><p>paragraph</p></body> mais pas <body><p>paragraph</body> Un élément ne peut pas en chevaucher un autre <body><p></body></p> interdit ! Forme alternative pour éléments vides <hr/> (ou <hr />) <hr></hr> 12 octobre 2001 Patrick Itey / Ludovic Maître

42 Patrick Itey / Ludovic Maître
Noms d’élément (Lettre, _ ou :) + (lettres, chiffres ou _ . - ) Ex : <Ge_Force3> (idem pour noms d'attributs) Ne peut commencer par xml Mauvais : <3Dfx> <Ge Force> <xmldecls> Sensible à la casse <Toto/> != <toto/> 12 octobre 2001 Patrick Itey / Ludovic Maître

43 Patrick Itey / Ludovic Maître
Attributs Un élément XML peut contenir des attributs La valeur de l’attribut définit une propriété de l’élément Chaque attribut est unique L ’ordre des attributs est non significatif Les character data et valeurs d'attributs peuvent contenir tous caractères sauf < et & Tout attribut doit avoir une valeur Ex : <dl compact="compact"> Mauvais : <dl compact> (HTML) 12 octobre 2001 Patrick Itey / Ludovic Maître

44 Patrick Itey / Ludovic Maître
Commentaires <!-- commentaire... --> Ne doivent pas contenir de -- (compatibilité SGML) N'importe où dans character data (pas dans balises) 12 octobre 2001 Patrick Itey / Ludovic Maître

45 Processing instructions (PIs)
<? commandes pour les processeurs... ?> Les instructions de traitement indiquent aux programmes quel traitement appliquer au document Ex. : appliquer une feuille de style avec Cocoon : <?cocoon-process type="xslt"?> N'importe où dans character data (pas dans balises) 12 octobre 2001 Patrick Itey / Ludovic Maître

46 Patrick Itey / Ludovic Maître
Sections CDATA <![CDATA[ le contenu... ]]> Pour inclure du texte "en vrac" comme character data Ne doit pas contenir ]]> Interdit dans valeurs d'attributs Le tout en syntaxe non XML possibilité d ’utiliser <,&… dans une section CDATA pas de vérification ni de la syntaxe par le processeur XML 12 octobre 2001 Patrick Itey / Ludovic Maître

47 Patrick Itey / Ludovic Maître
Entités prédéfinies Les caractères < > & '  " peuvent provoquer une erreur d’interprétation par le processeur XML Pour inclure les caractères < > & ' ", il faut les échapper par des références a des entités : < < > > & & ‘  ' " " 12 octobre 2001 Patrick Itey / Ludovic Maître

48 Patrick Itey / Ludovic Maître
Well-formed, Valid, DTD Un document XML est dit well-formed s'il respecte la syntaxe XML. Il est dit valide si en plus il respecte une grammaire optionnelle, la DTD (Document Type Definition) 12 octobre 2001 Patrick Itey / Ludovic Maître

49 Déclaration du type de document
La DTD joue plusieurs rôles: vérification de la grammaire paramétrage syntaxique abréviations, inclusions… C ’est dans la DTD qu ’est décrit: quels éléments seront utilisés dans le document, le type des éléments, la structure des éléments 12 octobre 2001 Patrick Itey / Ludovic Maître

50 Déclaration du type de document (2)
Dangers de la DTD: très complexe (90% de la spécification XML décrit les régles de conception des DTD) peu puissante (peu de typage, pas d'héritage, pas de regexps) optionnelle pas en syntaxe XML !!! Mais supportée par beaucoup de programmes 12 octobre 2001 Patrick Itey / Ludovic Maître

51 Déclaration du type de document (3)
Pas de typage: on ne peux pas dire que le prix est de la forme $[0-9]+ Pas d'héritage: on ne peut pas "sous-classer" des DTDs Uniquement possibilité d’inclusion Pas d ’erreur si absence de DTD Si une DTD est définie, tout le document doit la respecter (éléments & attributs) Semblable à des regular expressions sur éléments: , | + * ? ( ) 12 octobre 2001 Patrick Itey / Ludovic Maître

52 Patrick Itey / Ludovic Maître
DTD interne, publique Interne au document <!DOCTYPE nom_de_la_DTD [ ...définitions d ’éléments et d’attributs... ]> Publique (connue par les programmes) <!DOCTYPE nom_de_la_DTD PUBLIC ID "URL" > URL optionnelle Reconnaissance basée sur l'ID Exemple: <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN ’ "http://www.w3.org/TR/REC-html40/loose.dtd"> ID = '-//W3C//DTD HTML 4.01 Transitional//EN ’ (reconnu par les programmes) 12 octobre 2001 Patrick Itey / Ludovic Maître

53 Patrick Itey / Ludovic Maître
DTD externe, mixte Externe (inclusion) <!DOCTYPE nom_de_la_DTD SYSTEM "URL" > Les DTD externes peuvent faire accès au réseau Mixte: Interne + Externe (s'ajoutent, interne lue avant externe) <!DOCTYPE nom_de_la_DTD SYSTEM "URL" [ ..définitions... ] > 12 octobre 2001 Patrick Itey / Ludovic Maître

54 Patrick Itey / Ludovic Maître
Exemple de DTD <!DOCTYPE [ <!-- DTD interne --> <!ELEMENT movie ( price?, actor+, abstract ) > <!ATTLIST movie title CDATA #REQUIRED price CDATA "0"> <!ELEMENT actor EMPTY> <!ATTLIST actor name CDATA #REQUIRED sex ( male | female ) "male" > <!ELEMENT abstract (#PCDATA) > ]> <movie title="Star Trek : Insurrection" price="$25" > <actor name="Patrick Stewart"/> <actor name= "Marina Sirtis" sex="female"/> <abstract>When the crew of the Enterprise learn …</abstract> </movie> 12 octobre 2001 Patrick Itey / Ludovic Maître

55 Déclaration d’élément
<!ELEMENT nom (content-model) > Définition d ’un élément On ne peut pas mixer texte et éléments pour la validation: (#PCDATA) ou (#PCDATA | nom1 | nom2)* ANY veut dire n'importe quel élément 12 octobre 2001 Patrick Itey / Ludovic Maître

56 Déclaration d ’attributs
<!ATTLIST element-name (attribute-name value default) ... > Définition d ’un attribut value : CDATA : texte, sauf < &, et ` ou " Enumerated : ( male | female | other ) "male" NMTOKEN : value doit obéir à la syntaxe des noms XML NMTOKENS : value = liste de nom XML séparés par espaces ID : L ’attribut doit être unique dans le document (identifiant) attention: problème lors de combinaisons de documents IDREF : Référence a l’identifiant (ID) d ’un autre élément (pas vérifié) ENTITY : doit être une entité (pointe vers des données) ENTITIES : plusieurs entités (sép. espaces) NOTATION : type (utilisé pour filtrer expansion entités) Enumerated NOTATION : plusieurs types Seuls CDATA et Enumerated sont utilisables en pratique. 12 octobre 2001 Patrick Itey / Ludovic Maître

57 Déclaration d’attributs (2)
<!ATTLIST element-name (attribute-name value default) ... > default: "valeur" : valeur par défaut si cet attribut est non spécifié #REQUIRED : attribut requis #IMPLIED : pas de défaut mis par le parseur, laisse l'application l'interprèter #FIXED : "value" doit être présent avec la bonne valeur 12 octobre 2001 Patrick Itey / Ludovic Maître

58 Patrick Itey / Ludovic Maître
Entités générales Entité interne DTD : <!ENTITY nop "a la vanille et a la fraise"> Document : Une glace &nop; SVP ! -> Une glace a la vanille et a la fraise SVP ! Entité externe parsée DTD: <!ENTITY nop "nop.txt"> nop.txt: a la vanille et a la fraise Le contenu du fichier doit être du XML valide: (contenu récursivement parsé) Peut être en encoding différent 12 octobre 2001 Patrick Itey / Ludovic Maître

59 Patrick Itey / Ludovic Maître
Notations Entité externe non parsée L ’entité ne sera pas analysée mais elle doit avoir une NOTATION DTD:<!ENTITY nop_logo "nop.png" NDATA "png" > <!NOTATION png PUBLIC "http://w3.org/Graphics/PNG" > Document: dont le logo est &nop_logo; Le parseur ne fait rien: il se contente de passer l'URL du fichier nop.png le type des données png l'URL identifiant ce qu'est ce type: à l'application, qui peut en faire ce qu'elle veut Par exemple, pour Internet Explorer la notation donne le programme à exécuter: <!NOTATION png SYSTEM "C:\Program Files\Internet Explorer\Iexplore.exe" > 12 octobre 2001 Patrick Itey / Ludovic Maître

60 Patrick Itey / Ludovic Maître
Entités paramètres Les entités paramètres ne peuvent etre utilisées que dans la DTD Elles servent à pallier le manque de modularité Les appels d ’entités paramètres se font comme ceux des entités générales, mais avec %nom; au lieu de &nom; Ex : <!ENTITY % nom "(prénom, patronyme)" > <!ELEMENT auteur %nom; > Une fois l ’entité substituée, le processeur XML intérprétera : <!ELEMENT auteur (prénom, patronyme) > 12 octobre 2001 Patrick Itey / Ludovic Maître

61 Patrick Itey / Ludovic Maître
Entités paramètres (2) Autres exemples : <!ENTITY % svg-paths-DTD SYSTEM "http://foo.net/path/to/my.dtd"> <!ENTITY % standard-DTD PUBLIC "-//W3C//DTD SVG paths//fr"> Attention: on ne peut pas inclure de DTD, uniquement des fragments (problème de l ’entete avec <!DOCTYPE … []> a l’intérieur d ’une balise) 12 octobre 2001 Patrick Itey / Ludovic Maître

62 Patrick Itey / Ludovic Maître
Conditions <![IGNORE[ ...definitions... ]]> <![INCLUDE[ ...definitions... ]]> à... ignorer: « Conditional sections are another SGML invention that got into XML because the people on the committee who had experience writing DTDs claimed that life would just be impossible without them. » - Tim Bray 12 octobre 2001 Patrick Itey / Ludovic Maître

63 Patrick Itey / Ludovic Maître
Gestion des espaces <!ATTLIST movie xml:space (default|preserve) 'preserve'> Que faire des espaces de formatage? <movie>_ ____<actor>Patrick Stewart</actor>_ ____<actor>Merin Sirtis</actor>_ </movie>_ Tous les espaces sont transmis à l'application qui doit les traiter Les parseurs doivent normaliser les fins de ligne à la unix (^M^J -> ^J) On peut déclarer l'attribut xml:space pour forcer l'application à garder l'espace mais le parseur, lui, doit transmettre les espaces à l'application. 12 octobre 2001 Patrick Itey / Ludovic Maître

64 Patrick Itey / Ludovic Maître
Gestion des langues L ’attribut xml:lang spécifie le langage: dans la DTD: <!ATTLIST poème xml:lang NMTOKEN 'fr'> <!ATTLIST poem xml:lang NMTOKEN 'en'> dans le document : <p xml:lang="en-GB">What colour is it?</p> <p xml:lang="en-US">What color is it?</p> Si il y a une DTD l ’attribut lang doit y être déclaré <!ATTLIST p xml:lang NMTOKEN 'en'> 12 octobre 2001 Patrick Itey / Ludovic Maître

65 Patrick Itey / Ludovic Maître
Texte UNICODE est un consortium définissant l'encodage des caractères (UCS: Universal Character Set) XML utilise UNICODE 2 -> ISO/IEC Standard ISO Les normes UNICODE sont gratuites, les normes ISO sont très chères. Unicode permet de représenter les caractères des langues du monde entier (européens mais aussi arabe, japonais, vietnamiens, thaï, mortes...) 12 octobre 2001 Patrick Itey / Ludovic Maître

66 Patrick Itey / Ludovic Maître
Texte (2) Chaque caractère a un numéro (code) unique, et un nom Encodés sur 16 bits 0 a 0xFFFF (0 a 65,536 ), dans un plan UCS = 17 plans: 0 a 0x10FFFF (0 a 1,114,111) premier plan: langues réellement utilisées (europe, arabe, japon) premiers 256 chars (0 a FF) = ASCII 8 bits caractères combinatoires ("touches mortes") Appel d ’un caractère Unicode dans un document XML par &<code ISO>; Ex : &0x41; affiche A 12 octobre 2001 Patrick Itey / Ludovic Maître

67 Patrick Itey / Ludovic Maître
Atomicité des données HTML et SGML sont des formats de documents XML doit représenter des données : le mélange texte/balises est mal adapté! Quand utiliser attributs, quand des sous-éléments? Il faut faire un choix suivant le type de traitement a effectuer (attributs plus faciles / rapides a accéder qu’éléments) sur les données et leur réutilisabilité possible (éléments extensibles et plus faciles a maintenir) 12 octobre 2001 Patrick Itey / Ludovic Maître

68 Atomicité des données (2)
Xml: Différentes représentations de la même donnée <prix>$14</prix> <prix devise="US dollar">14</prix> <prix valeur="$14"/> <prix devise="US dollar" valeur="14"/> <prix> <devise>US dollar</devise> <valeur>14</valeur> </prix> java: Prix { Devise devise; int valeur; }; 12 octobre 2001 Patrick Itey / Ludovic Maître

69 Patrick Itey / Ludovic Maître
Eléments ou attributs? Attributs non structurés + faciles à traiter pas upgradables: valeur="14 » valeur=<nombre valeur='14' base='16'/> -> illegal! ou: <prix devise="US dollar" valeur="14" base='16'/> -> non modulaire! Eléments plus lisibles par humain, mais lourd! <prix><valeur><int>14</int></valeur></prix> Utilisation de sous-langages : $14, 16Fr (autant de sous-parseurs) Autre exemple : chemins de SVG : <path d="M l0 30 l 7 50 m 0 43 L-50 50"/> 12 octobre 2001 Patrick Itey / Ludovic Maître

70 Eléments ou attributs? (2)
Avis commun: Attribut si valeur "finale" - mais peut-on en être sûr? Elément si peut être structuré Le contenu d'un élément est soit du texte, soit des éléments mais jamais de mélange! réutiliser des DTD existantes (mais qualités variables et philosophie de design variables) validation? 12 octobre 2001 Patrick Itey / Ludovic Maître

71 Patrick Itey / Ludovic Maître
Attribut identifiant Problème : Un arbre ne permet pas de partager des objets Ou de représenter des graphes Il faut alors utiliser des attributs identifiants (ID) <livre nom='livre1' <auteur idref="#465"/> </livre> <personne id="#465" nom="Trent" prenom="Gary"/> 12 octobre 2001 Patrick Itey / Ludovic Maître

72 Attribut identifiant (2)
Conseil: ne pas les déclarer ces attributs comme ID et IDREF dans la DTD, car pas modulaire: <personne id="#4946" nom="Trent" prenom="Gary"/> <devise id="#4946" nom="US Dollar" cours="0.8616"/> L'application ne mélangera pas devises et personnes, mais le processeur XML déclenchera une erreur! Toutes les balises sont mises "à plat" par le processeur, les liens sont recrées par l'application à partir des IDs Plaide pour des éléments identifiants, on ne peut pas pointer vers des attributs 12 octobre 2001 Patrick Itey / Ludovic Maître

73 Patrick Itey / Ludovic Maître
Sérialisation La technique des IDs permet de régler le problème attributs/éléments, mais pas dans l ’esprit de XML éléments = relations is-a (type) attributs = relations has-a (champs) Les id servent à marquer un élément Convention dans pour pointer vers un objet (ici #id) Autres attributs = valeurs finales Le document peut être résumé à une liste d'éléments vides : <livre id="#86" nom="Star Trek 5" prix="#324" auteur="#68"/> <prix id="#324" valeur="14" devise="USDollar"/> <personne id="#68" nom="#96" naissance="1954/10/06"/> <nom id="#96" prenom="Trent" patronyme="Gary"/> Solution extrême, non politiquement correcte, n'utilisant pas les outils XML, à garder en tête pour les schemas! 12 octobre 2001 Patrick Itey / Ludovic Maître

74 Patrick Itey / Ludovic Maître
Namespaces Recommendation W3C, Jan 1999. But: éviter les collisions de noms d'éléments et d'attributs <livre> <titre>Star Trek 5</titre> <-- 1ere balise titre <auteur> <nom>Trent Gary</nom> <titre>réalisateur</titre> <-- 2de balise titre </auteur> </livre> Note: ce n'est un problème QUE pour la validation! Solution: qualifier tout élément ou attribut par un namespace identifié par une URL: <{http://www.isbn.org/books/fr/dtd}titre> <{http://www.inria.fr/dtds/titres}titre> 12 octobre 2001 Patrick Itey / Ludovic Maître

75 Préfixes de namespaces
On factorise les URLs par des préfixes locaux au document que l'on peut choisir aussi courts ou significatifs que désirés. Déclaration par l'attribut xmlns:prefixe, s'appliquant au contenu (scope lexical) <livres xmlns:isbn="http://www.isbn.org/books/fr/dtd" xmlns:inria="http://www.inria.fr/dtds/titres"> <livre><isbn:titre>Ordinateurs et société</isbn:titre>… <inria:titre>écrivain</inria:titre> ... ou: <livres xmlns:a="..." xmlns:b="..."> <livre><a:titre>Ordinateurs et société</a:titre>... <b:titre>écrivain</b:titre> ... 12 octobre 2001 Patrick Itey / Ludovic Maître

76 Préfixes de namespaces (2)
Quel que soit le préfixe choisi, l ’application doit se comporter de manière identique, et traiter les données en fonction de l ’URL Le namespace par défaut: pour les éléments : "" (vide) pour les attributs : celui de l'élément se déclare par xmlns="URL", pour la portée (scope) de l'élément 12 octobre 2001 Patrick Itey / Ludovic Maître

77 Problèmes des namespaces
"patch" à la norme XML Mal intégré (pas dans les DTDs) Outils doivent se mettre à jour (vérifier!) Pose des problèmes de fond pour l'interaction entre normes Permet une sorte de sous-classage: ajout d ’informations étrangères dans du xml existant Namespaces sont là pour rester Permettent de mélanger des XMLs existants(SVG dans XHTML...) sans réinventer d'autres langages Ne jamais se servir du nom d'élément brut ou du préfixe directement! ne pas regarder si l'élément est de nom isbn:titre, mais regarder si l'élément est de nom titre dans le namespace 12 octobre 2001 Patrick Itey / Ludovic Maître

78 Patrick Itey / Ludovic Maître
Schemas XML Schémas a été crée pour résoudre les problèmes de la DTD, et mieux traiter les données En syntaxe XML Supportent les namespaces Types prédéfinis Déclaration de nouveaux types élémentaires (Simple type = types) Combinaison de types (Complex type = classes) Héritage Modularité 12 octobre 2001 Patrick Itey / Ludovic Maître

79 Patrick Itey / Ludovic Maître
Schemas (2) XML Schemas, démarré en fin 1998, encore en candidate recommendation Prometteur mais très complexe La seule spécification W3C qui a un "tutorial" officiel! (primer) Spéccifications en 3 parties : structures datatypes primer 12 octobre 2001 Patrick Itey / Ludovic Maître

80 Patrick Itey / Ludovic Maître
Déclaration Déclarations dans le namespace des schemas <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"> <xsd:... /> <-- déclaration d ’élément, de type…. </xsd:schema> Déclaration des éléments et attributs similaire aux DTDs : <xsd:element name="remarque" type="xsd:string"/> Attributs déclarés dans la déclaration des éléments : <xsd:complexType name="livre"> <xsd:attribute name="date_publi" type="xsd:date"/> </xsd:complexType> 12 octobre 2001 Patrick Itey / Ludovic Maître

81 Patrick Itey / Ludovic Maître
Types prédéfinis Primitive Datatypes string boolean decimal float double duration dateTime time date gYearMonth gYear gMonthDay Atomic, built-in "Hello World" {true, false} 7.08 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN P1Y2M3DT10H30M12.3S format: CCYY-MM-DDThh-mm-ss format: hh:mm:ss.sss format: CCYY-MM-DD format: CCYY-MM format: CCYY format: --MM-DD Note: 'T' is the date/time separator INF = infinity NAN = not-a-number 12 octobre 2001 Patrick Itey / Ludovic Maître

82 Patrick Itey / Ludovic Maître
Types prédéfinis (2) Primitive Datatypes gDay gMonth hexBinary base64Binary anyURI QName NOTATION Atomic, built-in format: ---DD (note the 3 dashes) format: --MM-- a hex string a base64 string a namespace qualified name a NOTATION from the XML spec 12 octobre 2001 Patrick Itey / Ludovic Maître

83 Patrick Itey / Ludovic Maître
Types simples Au lieu de juste PCDATA et CDATA: <xsd:element name="prix" type="xsd:float"/> Ni contenu ni attributs Entités via le type token: <xsd:element name="eacute" type="xsd:token" fixed="é"/> t<eacute/>l<eacute/> -> télé Regular expressions (Unicode) via le type pattern : <xsd:simpleType name="PrixEnDollars"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[$] *[0-9]+([.][0-9][0-9])"/> </xsd:restriction> </xsd:simpleType> 12 octobre 2001 Patrick Itey / Ludovic Maître

84 Patrick Itey / Ludovic Maître
Listes Une liste d ’octets : <xsd:simpleType name="numéroDeTéléphone"> <xsd:list itemType="xsd:unsignedByte"/> </xsd:simpleType> <xsd:element name="téléphone" type="numéroDeTéléphone"> <téléphone> </téléphone> 12 octobre 2001 Patrick Itey / Ludovic Maître

85 Patrick Itey / Ludovic Maître
Unions <xsd:simpleType name="numéroDeTélMémoTechnique"> <xsd:union memberTypes="xsd:string numéroDeTéléphone"/> </xsd:simpleType> <xsd:element name="téléphone" type="numéroDeTél"> <téléphone> </téléphone> <téléphone>INRIA Sophia</téléphone> 12 octobre 2001 Patrick Itey / Ludovic Maître

86 Patrick Itey / Ludovic Maître
Restrictions Permettent de construire de nouveaux types en réduisant les possibilités Exemple : nombres à 2 chiffres: 0 <= nombre < 100 <xsd:simpleType name="nombre_2_chiffres"> <xsd:restriction base="xsd:nonNegativeInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> 12 octobre 2001 Patrick Itey / Ludovic Maître

87 Patrick Itey / Ludovic Maître
Facettes Les restrictions sont des facettes d'un type. Toutes (15) les facettes ne s'appliquent pas forcément à tous les types: length, minLength, maxLength, pattern, enumeration, whiteSpace, max Inclusive, max Exclusive, min Inclusive, min Exclusive, precision, scale, encoding, period, duration 12 octobre 2001 Patrick Itey / Ludovic Maître

88 Patrick Itey / Ludovic Maître
Types complexes Comme des classes: dérivations à partir d'autres types: On ajoute des sous-éléments avec le type sequence: <xsd:complexType name="typeAdresseFrance"> <xsd:sequence> <xsd:element name="numéroDeRue" type="xsd:string"/> <xsd:element name="rue" type="xsd:string"/> <xsd:element name="code" type="xsd:positiveInteger"/> <xsd:element name="ville" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="pays" type="xsd:string" use="required" value="FRANCE"/> </xsd:complexType> 12 octobre 2001 Patrick Itey / Ludovic Maître

89 Patrick Itey / Ludovic Maître
Types complexes (2) numéroDeRue, rue, code, et ville sont des noms locaux à typeAdresseFrance, pas de conflits de nommage Contraintes d'occurrence : généralise les opérateurs de regular expressions ? * + … <xsd:element name="parents" type="nom" minOccurs="0" maxOccurs="2"/> 12 octobre 2001 Patrick Itey / Ludovic Maître

90 Restrictions de types complexes
On peut restreindre les types du type père (redéfinir la plage de valeur d ’un attribut du type père,...) On peut contrôler l'usage des types final: permet d'interdire la dérivation d'un type par restriction, extension ou les deux. <xsd:complexType name="typeAdresse" final="restriction"> On ne pourra pas réutiliser ce type dans un autre type 12 octobre 2001 Patrick Itey / Ludovic Maître

91 Restrictions de types complexes (2)
fixed: permet de contrôler quelles facettes seront utilisables <xsd:restriction base="xsd:string"> <xsd:length value="2" fixed="true"/> </xsd:restriction> On pourra étendre ce type mais jamais modifier le nombre de lettres Types abstraits Contraint à la dérivation pour usage <xsd:element name="adresse" type="xsd:string" abstract="true"/> 12 octobre 2001 Patrick Itey / Ludovic Maître

92 Groupes de substitution
Déclare des types "utilisables à la place" (~ interfaces) <xsd:element name="inconnu" type="xsd:string" substitutionGroup="prix"/> <xsd:element name="variable" type="xsd:string" substitutionGroup="prix"/> 12 octobre 2001 Patrick Itey / Ludovic Maître

93 Patrick Itey / Ludovic Maître
Inclusion de schemas <xsd:include schemaLocation="URL"/> Possible de redéfinir les types d ’un schéma inclus ! ici, on inclus et surcharge le type Adresse dans le schéma inclus <xsd:redefine schemaLocation="URL"> <xsd:complexType name="Adresse">...</xsd:complexType> </xsd:redefine> et en changeant le namespace <xsd:import namespace="URL" schemaLocation="URL"> ... redéfinitions ... </xsd:import> 12 octobre 2001 Patrick Itey / Ludovic Maître

94 Patrick Itey / Ludovic Maître
Valeur nulle Pour dire que la valeur est indéfinie <xsd:element name="téléphone" type="xsd:string" nullable="true"/> Si la valeur est null, on ne connaît pas le No, Si il n ’y a pas d'élément, on sait qu'il n'y a pas de No 12 octobre 2001 Patrick Itey / Ludovic Maître

95 Patrick Itey / Ludovic Maître
Contraintes d'unicité <xsd:unique name="clefPersonne"> <xsd:selector xpath="/contacts/personne"/> <xsd:field </xsd:unique> définit un pseudo-champ clefPersonne qui vérifie qu ’il n'y a pas 2 champs numéro identiques dans toutes les personnes dans contacts. (syntaxe XPath) 12 octobre 2001 Patrick Itey / Ludovic Maître

96 Patrick Itey / Ludovic Maître
Annotations Commentaires, mais en XML <xsd:annotation> <apache:cocoon>Instructions pour Cocoon</apache:cocoon> </xsd:annotation> Peut avoir un attribut source, avec comme valeur l ’URL du document contenant l ’annotation 12 octobre 2001 Patrick Itey / Ludovic Maître

97 Clés et références de clés
Permet de créer des références entre données <xsd:key name="numSociété"> <xsd:selector xpath="/contacts/société"/> <xsd:field </xsd:key> <xsd:keyref name="refNumSociété" refer="numSociété"> <xsd:selector xpath="/contacts/personne"/> <xsd:field xpath="./refNumSociété"/> </xsd:keyref> Exemple: <personne nom="Tim Berners-Lee"> <refNumSociété>3</refNumSociété> </personne> <société numéro="3"> <nom>World Wide Web Consortium</nom> </société> 12 octobre 2001 Patrick Itey / Ludovic Maître

98 Validateurs de Schemas
En ligne de commande : XSV by Henry Thompson ftp://ftp.cogsci.ed.ac.uk/pub/XSV/XSV12.EXE En API Java : xerces by Apache IBM Schema Quality Checker (Note: ce outil sert uniquement à valider des schémas, pas des instances de documents.) MSXML4.0 12 octobre 2001 Patrick Itey / Ludovic Maître

99 Validateurs de Schemas (2)
GUI : XML Spy Turbo XML 12 octobre 2001 Patrick Itey / Ludovic Maître

100 Patrick Itey / Ludovic Maître
Exemple de schema <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema” targetNamespace="http://www.books.org” xmlns="http://www.books.org" elementFormDefault="qualified"> <xsd:element name="BookStore"> <xsd:complexType> <xsd:sequence> <xsd:element name="Book" maxOccurs="unbounded"> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Author" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="Publisher” type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 12 octobre 2001 Patrick Itey / Ludovic Maître

101 XML dans une application
XML peut occuper différents rôles dans une application client serveur Dans une application XML peut être utilisé : sur la couche présentation sur la couche application sur la couche données Des sous-ensembles de XML ont été développés pour des fonctions clés : présentation, liens entre documents, dialogue inter-applications,… XML peut être utilisé sur le client et sur le(s) serveur(s) Deux stratégies possibles : traitement de XML sur le client : navigateurs webs modernes (Mozilla/NS6, IE 6, x-smiles), clients puissants (PC…) traitement sur le serveur : navigateurs légers, couches applicatives et données 12 octobre 2001 Patrick Itey / Ludovic Maître

102 Positionnement de XML dans une architecture multi-tiers
Client Serveur web Navigateur web Serveur d’application, servlets, pages dynamiques, CGI... Requête Réponse XSLT, FO, SVG, XHTML +CSS XSLT, FO, SVG, XHTML +CSS XSP, JSP 1.2, XForms... HTTP, WebDAV, BEEP + Xlink, Xpath, Xpointer Bases de données relationnelle, objet, XML, fichier... Application Application RDF, Xquery, ESQL, XML... HTTP XML Soap XMLSignature XMLEncryption ... Serveur 12 octobre 2001 Patrick Itey / Ludovic Maître

103 Patrick Itey / Ludovic Maître
Sous-ensembles de XML SMIL Synchronized Multimedia Integration Language : spécifie les timings d’animations (sons, vidéo...) MathML 2 specs : structure et présentation des formules Micropayments : payer de petits achats en grand nombre CC/PP (Composite Capability/Preference Profiles) : RDF pour négocier contenu entre browser et serveurs Device Profile : description du device de rendu pour négocier via CC/PP P3P (Platform for Privacy Preferences Project) : Protection de la vie privée par les technos web VoiceXML (Voice eXtensible Markup Language) : reconnaissance vocale XML encryption : encryption de parties de documents XML XML Signature : signature éléctronique XML Protocols : communication via XML de machine à machine, par diverses couches (dont HTTP); 1ere étape: SOAP WAP / WML : consortium externe (Wapforum) 12 octobre 2001 Patrick Itey / Ludovic Maître

104 XML sur la couche présentation
Cette partie présente différents sous-ensembles de XML utilisés sur la couche présentation d ’une application (certains peuvent également servir sur les autres couches) Pour utiliser ces sous-ensembles dans un document XML il faut déclarer leur namespace dans les éléments XML Exemple : <livres xmlns:isbn="http://www.isbn.org/books/fr/dtd" xmlns:inria="http://www.inria.fr/dtds/titres"> 12 octobre 2001 Patrick Itey / Ludovic Maître

105 Patrick Itey / Ludovic Maître
XHTML eXtensible Hypertext Markup Language : reformulation de HTML en XML (syntaxe compatible avec XML) Version 1.0 : recopie HTML en XML Versions 1.1 : HTML de base architecture modulaire pour frames, lists, forms, tables, images, script... (une trentaine) possibilité de modules custom (tags sur mesure) 12 octobre 2001 Patrick Itey / Ludovic Maître

106 XHTML : Différences avec HTML (1)
noms d’éléments en minuscules : <h1>, mais pas : <H1> tous les éléments doivent être fermés: <img/>, <hr/> ou <hr></hr> tous les éléments doivent être correctements imbriqués : <ul><li>et un <ul><li>et un </li> <li>et deux</li> </ul> </li> <li>et deux</li> </ul> 12 octobre 2001 Patrick Itey / Ludovic Maître

107 XHTML : Différences avec HTML (2)
Pour afficher correctement dans les vieux navigateurs web, laisser un espace avant le / pour les élements vides : <hr /> <br /> 12 octobre 2001 Patrick Itey / Ludovic Maître

108 Patrick Itey / Ludovic Maître
Xmlbase Reproduit le tag base de html Utilisé pour déterminer la cible des liens (xlink) relatifs <doc xml:base="http://example.org/today/"> Click <link xlink:type="simple” xlink:href="new.xml">here</link> </doc> comme html mais avec portée lexicale (scope) cherche la destination du lien dans l’ordre: une base dans une structure englobante : la xml:base du document URL d’accès au document (URL http, adresse XML Protocol) défaut fourni par l’application 12 octobre 2001 Patrick Itey / Ludovic Maître

109 Patrick Itey / Ludovic Maître
ruby (1) Standard pour des annotations en marge de documents Nom et concepts en usage en asie, ruby aurait du aller dans les feuilles de style CSS mais ne rentrait pas dans le modèle ruby base: l’objet principal: <rb> <rbc> ruby text : les explications: <rt> <rtc> 12 octobre 2001 Patrick Itey / Ludovic Maître

110 Patrick Itey / Ludovic Maître
ruby (2) <ruby xml:lang="ja" class="pronunciation annotation"> <rbc> <rb>æ</rb><rb>è¤</rb><rb>ä¿¡</rb><rb>ç·</rb> </rbc> <rtc class="pronunciation"> <rt>ãã</rt><rt>ã¨ã</rt><rt>ã®ã¶</rt><rt>ã</rt> </rtc> <rtc class="annotation"> <rt rbspan="4" xml:lang="en">W3C Associate Chairman</rt> </rtc> </ruby> 12 octobre 2001 Patrick Itey / Ludovic Maître

111 Patrick Itey / Ludovic Maître
HyperLiens 3 sous ensembles : Xlink, XPointer, Xpath Le problème des liens HTML: on doit modifier le document source <a href=”doc#section”></a> on doit modifier le document destination <a name=”section” /> liens uniques monodirectionnels : on ne peut pointer sur une zone Création de 3 normes: XPath est un langage pour décrire des endroits d’un document XPointer spécifie des “cibles” via Xpath XLink décrit des liens entre des XPointers 12 octobre 2001 Patrick Itey / Ludovic Maître

112 Patrick Itey / Ludovic Maître
Xpath (1) Utilisé par XPointer, XSL, XForms… Permet d’associer à tout objet XML une chaîne permetant d’y accéder ou chemin d’accès (“location paths”) Des expressions permettent de faire des calculs sur ces paths Le modèle de données de Xpath reprend l’organisation du document : nodes attributs text 12 octobre 2001 Patrick Itey / Ludovic Maître

113 Patrick Itey / Ludovic Maître
Xpath (2) <film titre=”Startrek V" prix=”E14"> <acteur nom=”Norman Die"/> <acteur nom=”Mona Cko"/> “Espace, frontière de l’infini…” </film> XPath matches /film/acteur[2] <acteur nom=”Mona Cko"/> Norman DieMona Cko /film/acteur <acteur nom=”Norman Die"/> <acteur name=”Mona Cko"/> /film/text() “Espace, frontière de l’infini…” 12 octobre 2001 Patrick Itey / Ludovic Maître

114 Patrick Itey / Ludovic Maître
Nœuds (1) Comme le système de fichier unix : / = root Un chemin qui commence par / est un chemin absolu, qui commence depuis la racine du document: /film/acteur Un chemin qui ne commence pas par / est un chemin relatif au noeud courant traité par l’applicationour Un chemin qui commence par // selectionne toutes les sous/parties: Exemple : <x><y><z/></y><t><y><z>foo</z></y></t><z>1</z></x> “//y/z” : <z/>, <z>foo</z> “//z” : <z/>, <z>foo</z>, <z>1</z> 12 octobre 2001 Patrick Itey / Ludovic Maître

115 Patrick Itey / Ludovic Maître
Nœuds (2) Exemple : <x><y><z/></y><t><y><z>foo</z></y></t><z>1</z></x> * remplace tout un niveau de hiérarchie “/*/*/*/*” : <z>foo</z> *à la fin sélectionne tout le contenu “//y/*” : <z/>, <z>foo</z> .. pour remonter “//y/z/..” : <y><z/></y>, <y><z>foo</z></y> 12 octobre 2001 Patrick Itey / Ludovic Maître

116 Patrick Itey / Ludovic Maître
Attributs: Préfixés Exemple : <circle col=”red”><disc><rect col=”blue”/></disc></circle> = contenu de l’attribut : blue @* sélectionne tous les attributs : red blue 12 octobre 2001 Patrick Itey / Ludovic Maître

117 Patrick Itey / Ludovic Maître
Prédicats Suivent le path, entre crochets [ ] Sélection parmi les noeuds qui matchent Nombre N: sélectionne le fils numéro N (démarre à 1) : //y[2] Expressions: s’électionne tous les nœuds qui matchent l’expression Exemple : : Sélectionne tous les fils de nom d’élement section et d’attribut type valant “attention” Fonctions: //acteur[last()] le dernier fils de author //acteur[position() = last() - 1] l’avant dernier fils de acteur! En fait langage complexe: trouve tous les éléments de nom acteur n’ayant pas d’attributs! 12 octobre 2001 Patrick Itey / Ludovic Maître

118 Patrick Itey / Ludovic Maître
Axes La syntaxe précédente est une abbréviation de la forme générale : axe::noeud[predicat] on choisit le nœud on prend un ensemble de noeuds sur un axe : parent, fils, attributs, texte… on restreint via les expressions prédicat Exemples : descendant-or-self::author[1] = //author[1] attribute:: self:: = . parent:: = .. 12 octobre 2001 Patrick Itey / Ludovic Maître

119 Patrick Itey / Ludovic Maître
Xpath (fin) XPath est très puissant et a les possibilités d’un vrai langage de programmation Il est difficile à maîtriser car concis et aussi très difficile à implémenter efficacement (prédicats) Xpath est de plus en plus utilisé par les outils Similtude avec les regular expressions : permet d’exprimer la logique d’une action de facon portable entre langages Danger: pour XPath, un “noeud” veut dire aussi bien attribut que élement 12 octobre 2001 Patrick Itey / Ludovic Maître

120 Patrick Itey / Ludovic Maître
Xpointers (1) Basé sur Xpath Donne le contexte à XPath (root du document) Permet de sélectionner une partie de documents XML sans la modifier Les documents peuvent être énormes, ou non modifiables (CD-ROM ou site web distants) Référence complète de la forme URL#xpointer(xpath) Exemple : 12 octobre 2001 Patrick Itey / Ludovic Maître

121 Patrick Itey / Ludovic Maître
Xpointers (2) XPath ne pouvait spécifier que des noeuds, XPointer peut spécifier des points: endroits sans taille entre 2 noeuds caractères dans une chaîne Exemple : xpointer(end-point(//A/B[2])) Xpointer peut aussi sp’écifier des plages : tout entre 2 points Exemple : xpointer(//A/B/C[1] to //A/B[3]) Un XPointer peut être: une ID, comme en HTML une liste de pointers (dans ce cas prend le premier qui matche: xpointer(author)xpointer(auteur)xpointer(éditeur)…) 12 octobre 2001 Patrick Itey / Ludovic Maître

122 Patrick Itey / Ludovic Maître
Xlink Juin 2001: Specification 1.0, specification jeune mais en développement depuis un moment: consensus Spécifie liens entre Xpointers multidirectionnels :vers plusieurs cibles peuvent être définis ailleurs que dans document source ou cible Définis dans le namespace “http://www.w3.org/1999/xlink” Pas d’élements de nom link, mais un attribut dans le namespace xlink transforme un élement en lien. Exemple : <mon_élément xmlns:xlink="http://www.w3.org/1999/xlink" ... /> <go xlink:type="arc" xlink:from="A" xlink:to="B" /> 12 octobre 2001 Patrick Itey / Ludovic Maître

123 Patrick Itey / Ludovic Maître
Types Simples (HTML) pointent vers une URL : <image xmlns:xlink="http://www.w3.org/1999/xlink” xlink:type="simple" xlink:href=”inria.gif"/> Locator établit une cible: <cible xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="locator" xlink:href=”inria.html" xlink:label="locator1"/> Arc spécifie un lien entre 2 locators: <relation xmlns:xlink= "http://www.w3.org/1999/xlink" xlink:type="arc" xlink:from="locator1" xlink:to="locator2"/> title donne une lien utile pour un être humain resource est comme locator mais pour des cibles internes au document extended peut avoir N sources et N destination 12 octobre 2001 Patrick Itey / Ludovic Maître

124 Patrick Itey / Ludovic Maître
Attributs L’attribut arcrole d’éfinit une URL descriptive L’attribut show indique comment/si il faut afficher le lien. Il peut prendre les valeurs replace, new, embed, none Exemple : <image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show=”embed” xlink:href="koala.gif"/> L’attirbut actuate indique quand déclencher le lien. Il peut prendre les valeurs onRequest, onLoad, other, none 12 octobre 2001 Patrick Itey / Ludovic Maître

125 Patrick Itey / Ludovic Maître
Xlink (fin) Les liens de part leur puissance servent à bien plus que de simple liens HTML Ils permettent de structurer des données et d’exprimer des relations de bases de données Mais les Xlink sont encore très peu implémentés dans les outils actuels ... ni même dans les normes, XHTML ne s’en sert pas ! 12 octobre 2001 Patrick Itey / Ludovic Maître

126 Patrick Itey / Ludovic Maître
CSS (1) Comment représenter du XML abstrait? en ajoutant des informations de présentation : le style CSS Cascading style sheets : Historique (pas en syntaxe XML!) CSS2, CSS3… Permet de décorer les noeuds avec des attributs de style prédéfinis “cascade” car il peut y avoir plusieurs style sheets (defaut, site, browser, utilisateur) Syntaxe : hiérarchie_de_noeuds . classe { attribut: valeur; ... } Ne modifie pas la structure du XML : manipulation facile (javascript) limite dans le styling (ordre des éléments) pas limité à un monde textuel : CSS vocal, CSS graphique (SVG) solution permettant d’utiliser XML comme remplacant de HTML 12 octobre 2001 Patrick Itey / Ludovic Maître

127 Patrick Itey / Ludovic Maître
CSS (2) <?xml version="1.0"?> <?xml-stylesheet type="text/css"?> <guide xmlns:HTML="http://www.w3.org/Profiles/XHTML-transitional"> <HTML:STYLE> restaurant { display: block; font-weight: bold; margin-top: 1em;} menu { font-size: large; margin-left: 1cm;} </HTML:STYLE> <restaurant>Le sucrier</restaurant> <menu>menu provencal</menu> </guide> Le sucrier menu provencal 12 octobre 2001 Patrick Itey / Ludovic Maître

128 Patrick Itey / Ludovic Maître
CSS (3) CSS1: juste attributs graphiques (couleurs, fontes...) (NS 4.x, IE 4.x) CSS2: positionnement sur la page (layout), modèle de boîtes (Mozilla,Opera) CSS3: débute... modularisation pour application universelle. Solution très intéressante, en utilisant des attributs de style spécifique au domaine, car permet de garder la structure intacte pour agir dessus après Mais doit être implémentée par le browser, donc moins populaire car support aléatoire 12 octobre 2001 Patrick Itey / Ludovic Maître

129 Patrick Itey / Ludovic Maître
XSL XSL est un héritier de DSSSL, une langage de mise en forme basé sur scheme (lisp) et manipulant du SGML La communauté DSSSL voulait un langage qui lui permette d’imprimer différentes versions d’un document : avec la puissance d’un langage de programmation sans prendre en compte l’interactivité sur la version finale (évènements) Ce qui a entrainé la création de XSL pour répondre à ces besoins avec XML La partie Formatting Objets (style) s’est révelée plus complexe que prévue Comme il il y avait un énorme besoin pour transformer du XML en XML (ou autres) on a séparé XSL en XSLT (abstrait) et FO (style) XSL n’est qu’un filtre, il faut autre chose (template engines) pour gérer plusieurs documents 12 octobre 2001 Patrick Itey / Ludovic Maître

130 Patrick Itey / Ludovic Maître
XSL-FO (1) Peu utilisé et encore en développement Besoins mal définis (PDF? web? SVG?) But: que les browsers puissent directement montrer des Fos Mais politiquement non web-correct: FOs pas adaptables (taille de police?) Conseil: à éviter. regarder plutot SVG et CC/PP 12 octobre 2001 Patrick Itey / Ludovic Maître

131 Patrick Itey / Ludovic Maître
XSL-FO (2) Exemple: <fo:page-sequence master-name="A4" initial-page-number="1" language="en" country="us"> <fo:static-content flow-name="xsl-region-before"> <fo:block>The Periodic Table</fo:block> </fo:static-content> <fo:static-content flow-name="xsl-region-after"> <fo:block>p. <fo:page-number/></fo:block> </fo:static-content> <fo:flow flow-name="xsl-region-body"> <xsl:apply-templates select="//ATOM"/> </fo:flow> </fo:page-sequence> 12 octobre 2001 Patrick Itey / Ludovic Maître

132 Patrick Itey / Ludovic Maître
XSLT (1) Principe : un document XML + une feuille de style XSLT + un processeur XSLT = un document XML (ou autre format de sortie, HTML...) Une feuille de style XSLT (“stylesheet”) est une succession de régles de réecriture: les xsl:template Que fait le processeur XSLT ? parse le document XML en mémoire trouve les noeuds de l’arbre en mémoire (DOM) qui matchent les règles XSL genère un nouvel arbre DOM à partir des instructions de ces règles imprime le XML résultant Volonté d’être déclaratif mais possibilité d’être procédural (javascript) pour pouvoir tout faire 12 octobre 2001 Patrick Itey / Ludovic Maître

133 Patrick Itey / Ludovic Maître
XSLT (2) <xsl:stylesheet version=’1.0’ xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’> <xsl:template match="bold"> <P><B><xsl:value-of select="."/></B></P> </xsl:template> </xsl:stylesheet> Résultat avec <bold>hello!</bold> : <P><B>hello!</B></P> L’utilisation dépend de l’outil, en général : xt file.xml file.xsl > result.xml (avec le processeur XSLT xt de James Clark) Attention! Internet Explorer 5 a un vieux moteur XSLT Le type de résultat est déterminé par l’élément xsl:output : <xsl:output method="xml" />, <xsl:output method="html" />… Depuis java : Une API standard émerge: TRaX. 12 octobre 2001 Patrick Itey / Ludovic Maître

134 Patrick Itey / Ludovic Maître
Eléments XSLT (1) Une stylesheet XSL est une suite de modèles : <xsl:templates attributs>contenu</xsl:templates> Les attributs disent comment matcher : match=”XPath-expression” name=”nom_de_la_règle” contenu est ce qui sera émis en remplacement On peut réappliquer XSL au contenu en englobant dans un xsl:apply-templates Ce qui n’est pas dans le namespace de XSL est émis inchangé 12 octobre 2001 Patrick Itey / Ludovic Maître

135 Patrick Itey / Ludovic Maître
Eléments XSLT (2) xsl:stylesheet, xsl:transform (élement racine de la stylesheet) xsl:include, xsl:import (importé non prioritaire) xsl:strip-space, xsl:preserve-space (contenu: liste de noms d’élements) xsl:output, xsl:decimal-format (format de sortie) xsl:key (IDs genéralisées, sorte de XPointers) xsl:namespace-alias (renommer préfixe en sortie) xsl:attribute-set (ensemble d’attributs) xsl:variable, xsl:param (variables et valeurs par defaut) 12 octobre 2001 Patrick Itey / Ludovic Maître

136 Traitements avec XSLT (1)
Dans le contenu, on a des fonctionnalités de: Création de nouveaux éléments XML: <xsl:element name=”toto” namespace=”URL” use-attribute-sets=”xxx”/> + xsl:attribute, xsl:text, xsl:processing-instruction, xsl:comment… Extraction de données: <xsl:value-of select=”XPATH-expr”/> + xsl:copy, xsl:copy-of Langage de programmation: contrôle de flux : xsl:if, xsl:for-each, xsl:choose, xsl:when, xsl:otherwise, xsl:apply-templates Traitement de données: conversions, xsl:sort, xsl:number 12 octobre 2001 Patrick Itey / Ludovic Maître

137 Traitements avec XSLT (2)
Difficultés: comprendre comment matcher (XPath) quand ré-appliquer aux sous élements difficile à “compiler” SUN promet une solution: “translets” ? XSLT = un langage de prog. sans debugger avec une syntaxe horrible (mais n’effraie pas les non-programmeurs ;-) 12 octobre 2001 Patrick Itey / Ludovic Maître

138 Patrick Itey / Ludovic Maître
XSLT pull (1) Traditionnel: on définit en XSL tous les élements du source et on en “extrait” (pull) certains tags, comme pour extraire d’une base de données. <livres> <livre titre=”Starship Titanic”><prix>$14</prix></livre> <livre titre=”Dune”><prix>$29</prix></livre> </livres> <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method=”html” omit-xml-declaration="yes" indent="yes" /> <xsl:template match="/"> <table border="1”><tr><th>Livre</th><th>Prix</th></tr> <xsl:apply-templates/> </table> </xsl:template> <xsl:template match="livre"> <tr> <td><xsl:value-of <td><xsl:value-of select="prix[text()]"/></td> </tr> </xsl:template> </xsl:transform> 12 octobre 2001 Patrick Itey / Ludovic Maître

139 Patrick Itey / Ludovic Maître
XSLT pull (2) <table border="1"> <tr> <th>Livre</th><th>Prix</th> </tr> <tr> <td>Starship Titanic</td><td>$14</td> </tr> <tr> <td>Dune</td><td>$29</td> </tr> </table> Livre Prix Starship Titanic $ Dune $29 12 octobre 2001 Patrick Itey / Ludovic Maître

140 Patrick Itey / Ludovic Maître
XSLT push (1) Autre approche: mélanger XML et XSL dans un seul document XSL Tout est copié, sauf les tags redéfinis Semblable à de la programmation classique, évite les pièges Xpath Sur le même XML que précédement: <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method=’html’ omit-xml-declaration="yes" indent="yes" /> <xsl:template match="/"> <html> <table border=’1’><tr><th>Livre</th><th>Prix</th></tr> <xsl:for-each select="*/livre"> <tr><td><xsl:value-of <td><xsl:value-of select="prix[text()]"/></td></tr> </xsl:for-each> </table> </html> </xsl:template> </xsl:transform> 12 octobre 2001 Patrick Itey / Ludovic Maître

141 Patrick Itey / Ludovic Maître
XSLT push (2) <html> <table border="1"> <tr> <th>Livre</th><th>Prix</th> </tr> <tr> <td>Starship Titanic</td><td>$14</td> </tr> <tr> <td>Dune</td><td>$29</td> </tr> </table> </html> Livre Prix Starship Titanic $ Dune $29 méthode “quick and dirty”, utile pour ajouter des “macro-tags” dans documents mais pourquoi ne pas utiliser plutot un vrai langage/script de programmation? 12 octobre 2001 Patrick Itey / Ludovic Maître

142 Patrick Itey / Ludovic Maître
XSLT + CSS ? Peut être la meilleure combinaison: Génerer du (X)HTML + CSS depuis du XML via XSLT (ou autre) Soit, pour l’exemple, générer la structure en HTML : <html> <table border="1" class=”livres”> <tr class=”livres_head”> <th>Livre</th><th>Prix</th> </tr> <tr> <td class=”titre”>Starship Titanic</td> <td class=”prix”>$14</td> </tr> <tr> <td class=”titre”>Dune</td><td class=”prix”>$29</td> </tr> </table> </html> et du CSS (ou mieux, CSS2) pour le look: td.titre { color: orange; } 12 octobre 2001 Patrick Itey / Ludovic Maître

143 Patrick Itey / Ludovic Maître
SVG (1) Pouvoir faire des dessins sur le web: structurés et vectoriels, donc plus petits Gardant de la sémantique (texte sélectionnable) mais permettant un rendu de très haute qualité SVG, Scalable Vector Graphics, 1.0 depuis le 5 sept 2001) Combine puissance de postscript et filtres à la photoshop En XML et CSS, avec liens, namespaces, DOM, etc… L’exempel suivant crée une image en 35 lignes de SVG 12 octobre 2001 Patrick Itey / Ludovic Maître

144 Patrick Itey / Ludovic Maître
SVG (2) <?xml version="1.0" encoding="ISO "?> <svg x="10" y="30" width="430" height="370" viewBox=" "> <title>Example filters01.svg - introducing filter effects</title> <desc>An example which combines multiple filter primitives to produce a 3D effect.</desc> <defs> <filter id="MyFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="450” height="450"> <feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/> <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/> <feSpecularLighting in="blur" surfaceScale="5" specularConstant=".75” specularExponent="20" lighting-color="white" result="specOut"> <fePointLight x="-5000" y="-10000" z="20000"/> </feSpecularLighting> <feComposite in="specOut" in2="SourceAlpha" operator="in" result="specOut"/> <feComposite in="SourceGraphic" in2="specOut" operator="arithmetic” k1="0" k2="1" k3="1" k4="0" result="litPaint"/> <feMerge> <feMergeNode in="offsetBlur"/> <feMergeNode in="litPaint"/> </feMerge> </filter> </defs> 12 octobre 2001 Patrick Itey / Ludovic Maître

145 Patrick Itey / Ludovic Maître
SVG (3) <rect x="1" y="1" width="198" height="118" fill="#888888" stroke="blue"/> <g filter="url(#MyFilter)"> <g> <path fill="none" stroke="#D90000" stroke-width="10" d="M50,90 C0,90 0,30 50,30 L150,30 C200,30 200,90 150,90 z"/> <path fill="#D90000" d="M60,80 C30,80 30,40 60,40 L140,40 C170,40 170,80 140,80 z"/> <g fill="#FFFFFF" stroke="black" font-size="45" font-family="Verdana"> <text x="52" y="76">SVG</text> </g> </g> </g> </svg> Ce qui donne : 12 octobre 2001 Patrick Itey / Ludovic Maître

146 XML sur la couche application
XML est aussi utilisé sur et par la couche application La couche application sert à gérer la partie logique d’une application et gère les opérations à effectuer en réponse aux actions de l ’utilisateur… 2 cas d ’utilisation de XML sur la couche application : dialogue inter-applicatifs (Webservices,…) container des fonctions de l ’application (langages de script compatibles XML) Toutes les opérations sont effectivement implementées dans un langage de programmation (Java, python,…) On peut les encapsuler dans du XML et les réutiliser sous forme de bibliothèque de balises (taglib) 12 octobre 2001 Patrick Itey / Ludovic Maître

147 Patrick Itey / Ludovic Maître
JSP 1.2 Les Java Server Page version 1.2 sont compatibles avec XML (respectent la syntaxe) Le programmeur peut définir ses propres bibliothèques de balises qui correspondront à autant de fonction écrites en Java. 12 octobre 2001 Patrick Itey / Ludovic Maître

148 Patrick Itey / Ludovic Maître
XSP eXtensible Server Page est utilisé dans le système de publication XML open source Cocoon <xsp:page> <xsp:structure> <xsp:include>java.text.SimpleDateFormat</xsp:include> </xsp:structure> <xsp:logic> private static String timeOfDay(String format) { if (format == null || format.length() == 0) { format = "hh:mm:ss";} return SimpleDateFormat.getInstance().format(new Date(), format); } </xsp:logic> <user-root> <p>It's now <xsp:expr>timeOfDay(request.getParameter("timeFormat"));</xsp:expr></p> </user-root> <xsp:page> 12 octobre 2001 Patrick Itey / Ludovic Maître

149 Patrick Itey / Ludovic Maître
RDF Resource Description Framework Sous ensemble de XML utilisé pour exprimer des meta-donnéees (propriétés, “meta-data”) sur des documents XML Exemple : les balises <author> ou <auteur> veulent dire la même chose. RDF est l’implémentation d’un mécanisme très général pour faire cela. RDF modélise en XML des relations entre 2 objets: Containers: groupes de ressources (objets, relations) Statements: application de relations sur les membres de groupes de ressources 12 octobre 2001 Patrick Itey / Ludovic Maître

150 Patrick Itey / Ludovic Maître
RDF : Syntaxe <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://description.org/schema/"> <rdf:Description about="http://books.org/StarshipTitanic"> <s:author>http://chez.com/TerryJones</s:author> </rdf:Description> </rdf:RDF> syntaxe abrégée: <rdf:Description about="http://books.org/StarshipTitanic” s:author="http://chez.com/TerryJones" /> RDF est peu utilisé : technologie générale (trop?) 12 octobre 2001 Patrick Itey / Ludovic Maître

151 Patrick Itey / Ludovic Maître
Xforms Nouvelle norme pour remplacer les formulaires de HTML en XML (XHTML) Séparation entre modèle de données (XForms model) et présentation (HTML, WML, Palm...) Transfert des informations par HTTP, en XML Vérifications et calculs locaux par un langage de contraintes Ordres pour lier (binding) l’affichage aux données avec XPath Pages multiples données: <p><status id="is_married">yes</status></p> xform: <checkbox ref=’id(“is_married”)’> <caption>Are you married?</caption> <help>We need this to determine your tax allowance</help> </checkbox> rendu : Are you married? 12 octobre 2001 Patrick Itey / Ludovic Maître

152 Patrick Itey / Ludovic Maître
Web services “Web services” est un mot à la mode recouvrant toutes les technologies pour que des programmes puissent s’échanger des informations via le web. Censé remplacer RPC, CORBA, DCOM, et les bricolages sur HTTP+HTML Un ensemble de groupes en évolution, par ordre de stabilité: XML-Protocols (SOAP) pour le transport (XML sur HTTP) (Simple Object Access Protocol) UDDI répertoire de services (Universal Description, Discovery and Integration) WSDL description des services, et de comment les utiliser (Web Services Definition Language) XKMS pour la sécurité (XML Key Management Specification) XLANG/XAML pour fournir un modèle transactionnel XAML “2-phase commit” XLANG “compensatory actions” (undo) ebXML ancien effort dans ce domaine (electronic business XML) 12 octobre 2001 Patrick Itey / Ludovic Maître

153 Patrick Itey / Ludovic Maître
XML Protocols : SOAP Permet d’appeler des fonctions/méthodes à distance de façon simple: sur HTTP (ou d’autres protocoles (SMTP) : SOAP est un meta-protocole!) Les données sont en XML SOAP 1.1 est une première instance de XML Protocols poussée par Microsoft (architecture .NET) après une lutte interne avec XML-data D’autres protocoles supportant plus de modes de transport (SMTP…) devraient apparaître SOAP 1.2 est en cours d’élaboration Principe : Une Enveloppe qui contient header (info de transaction, sécurité...) body (l’appel de méthode lui-même) 12 octobre 2001 Patrick Itey / Ludovic Maître

154 Patrick Itey / Ludovic Maître
SOAP: exemple POST HTTP/1.0 Content-Type: text/xml; charset="utf-8" Content-Length: 587 SOAPAction: "http://www.SmartHello.com/HelloApplication#sayHelloTo" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Header> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns1:sayHelloTo xmlns:ns1="Hello" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <name xsi:type="xsd:string">World</name> </ns1:sayHelloTo> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 12 octobre 2001 Patrick Itey / Ludovic Maître

155 Patrick Itey / Ludovic Maître
UDDI: exemple <find_business generic="1.0" xmlns="urn:uddi-org:api"> <name>Microsoft</name> </find_business> <businessList generic="1.0" operator="Microsoft Corporation" truncated="false" xmlns="urn:uddi-org:api"> <businessInfos> <businessInfo businessKey="0076B468-EB27-42E5-AC CFF462A3"> <name>Microsoft Corporation</name> <serviceInfos> <serviceInfo businessKey="0076B468-EB27-42E5-AC CFF462A3" serviceKey="1FFE1F71-2AF3-45FB-B788-09AF7FF151A4"> <name>Web services for smart searching</name> </serviceInfo> </businessInfo> </businessInfos> </businessList> 12 octobre 2001 Patrick Itey / Ludovic Maître

156 Patrick Itey / Ludovic Maître
WSDL WSDL permet de décrire pour le web service des: Types : la définition des types des données manipulées Messages : les messages envoyés avec types acceptés Operations : une action de haut niveau (composée de messages, requêtes, réponses...) Port Types : les ports (URLs HTTP) et les messages qu’ils acceptent Bindings : les opérations à faire sur un Port Type Port : un service élémentaire : binding + URL Service : l’ensemble des ports 12 octobre 2001 Patrick Itey / Ludovic Maître

157 Les Web Services aujourd’hui
Système “meta” complexe. Microsoft veut le rendre facile à mettre en oeuvre depuis sa plateforme .NET Enorme intéret actuellement. SOAP va marcher, les autres… ? 12 octobre 2001 Patrick Itey / Ludovic Maître

158 Traitement des documents XML
Pour utiliser des documents XML dans un programme il faut les parser. Le parsing consiste a lire un document XML pour en construire une représentation en mémoire sous forme d’arbre. Génèrer un document XML à partir d’un arbre est très facile, peu d’outils proposent cette fonctionnalité (qui est en général implémentée par le développeur) Implémentations rapides et libres des normes (xerces, sax,…) 12 octobre 2001 Patrick Itey / Ludovic Maître

159 Patrick Itey / Ludovic Maître
SAX API java de niveau lexical, puis adaptation à d’autres langages (python...) permet aux applications d’utiliser n’importe quels parseurs XML via SAX découpe le flux d’entrée en tokens, et déclenche des fonctions sur chaque évenements = méthodes de handlers efficace: permet de traiter des gigas de données avec peu de mémoire bas niveau: convient à tous usage, faible overhead. SAX 1: XML 1.0, SAX 2: gère namespaces Code à écrire : l’application doit construire l’arbre… 12 octobre 2001 Patrick Itey / Ludovic Maître

160 Patrick Itey / Ludovic Maître
Evénements SAX XML Evènements SAX <?xml version="1.0"> start document <doc> start element: doc <para style=”normal”> start element: (para, attributes-list) Hello, world! characters: Hello, world! </para> end element: para </doc> end element: doc end document Il existe d’autres évènements : ignorableWhitespace, processingInstruction,... 12 octobre 2001 Patrick Itey / Ludovic Maître

161 Patrick Itey / Ludovic Maître
Utilisation de SAX écrire les handlers: DocumentHandler, DTDHandler, EntityResolver, ErrorHandler instancier un (des) parseur particulier SAXparser=xml.sax.drivers.drv_xmlproc.SAX_XPParser() SAXparser=xml.sax.saxexts.make_parser("xmlproc") SAXparser=xml.sax.saxexts.make_parser() positionner ses handlers SAXparser.setDocumentHandler(DocumentHandler()) SAXparser.setErrorHandler(ErrorHandler())… lancer le parsing SAXparser.parse(sys.argv[1]) SAX: “norme” de fait d’un individu qui s’est imposée (J.Clark) 12 octobre 2001 Patrick Itey / Ludovic Maître

162 Patrick Itey / Ludovic Maître
SAX Exemple (1) import org.xml.sax.AttributeList; import org.xml.sax.HandlerBase; import org.xml.sax.Parser; import org.xml.sax.Locator; import org.xml.sax.SAXException; /* Exemple d  ’ utilisation de SAX - NotifyStr.java */ public class NotifyStr extends HandlerBase { static public void main(String[] argv) { try { // get class object for SAX Driver (com.ibm.xml.parser.SAXDriver for XML4J) Class c = Class.forName(argv[0]); // create instance of the class Parser parser = (Parser)c.newInstance(); // create document handler, NotifyStr notifyStr = new NotifyStr(); // and register it parser.setDocumentHandler(notifyStr); parser.parse(argv[1]); } catch (Exception e) {e.printStackTrace();} } 12 octobre 2001 Patrick Itey / Ludovic Maître

163 Patrick Itey / Ludovic Maître
SAX Exemple (2) public NotifyStr() {} public void startDocument() throws SAXException { System.out.println("startDocument is called:"); } public void endDocument() throws SAXException { System.out.println("endDocument is called:"); public void startElement(String name, AttributeList amap) throws SAXException { System.out.println("startElement is called: element name=" + name); for (int i = 0; i < amap.getLength(); i++) { String attname = amap.getName(i); String type = amap.getType(i); String value = amap.getValue(i); System.out.println(" attribute name="+attname+" type="+type+" value="+value); public void endElement(String name) throws SAXException { System.out.println("endElement is called: " + name); 12 octobre 2001 Patrick Itey / Ludovic Maître

164 Patrick Itey / Ludovic Maître
DOM : besoins Historique : Javascript dans browsers pour pouvoir "faire bouger" Le langage doit pouvoir accéder au document HTML dans le browser: <a href="" onMouseOver="this.fillcolor=’red’ ”> Problème: Netscape et Internet Explorer avaient des APIs différentes pour manipuler le document (DHTML). Besoin d’une API commune, le DOM Document Object Model (1998) Historiquement pour HTML et javascript, puis pour XML et tout langage DOM API abstraite, instanciée en bindings pour les langages javascript, java, C++, perl, python, tcl,... Permet de manipuler n’importe quel arbre utilisé souvent par les parseurs eux-même 12 octobre 2001 Patrick Itey / Ludovic Maître

165 Patrick Itey / Ludovic Maître
DOM (1) DOM, norme officielle W3C DOM ne spécifie que l’interface au niveau source pas de compatibilité binaire entre implémentations les données ne sont même pas forcément implémentées sous forme d’arbre ne fait que créer / manipuler l’arbre, pas load/save. DOM level1, puis DOM level2 (namespaces: methodes postfixées par NS), DOM level3 en préparation (load/save) 12 octobre 2001 Patrick Itey / Ludovic Maître

166 Patrick Itey / Ludovic Maître
DOM (2) Un DOM est constitué de noeuds (nodes), de différents types: Document, Element, Attr, Text, CDATAsection, Entity, Notation, Comment, Processing Instruction, EntityReference, DocumentType, DocumentFragment Attributs sont des Nodes mais ne sont pas connectés dans l’arbre (pas retournés par la méthode node.childNodes). Les fils des attributs sont des noeuds texte et/ou EntityReference: foo=”a&bar;x” est un attribut à 3 fils. 12 octobre 2001 Patrick Itey / Ludovic Maître

167 Patrick Itey / Ludovic Maître
DOM Principes (1) API à plusieurs visages: Node : générique, tout est un noeud. Simple et efficace, mais on perd le typage statique (approche Netscape) Objet : plus lisible et typée mais moins efficace (en java et COM) Type element, attributs, etc... (approche Microsoft) Implémentation de DOM : DOM Core + spécialisation par domaine Exemple en SVG : p.setX(45) au lieu de p.setAttributeNS(null, “x”, “450”); 12 octobre 2001 Patrick Itey / Ludovic Maître

168 Patrick Itey / Ludovic Maître
DOM Principes (2) Le problème : les objets DOM sont non typés (tout est un noeud), donc on perd toutes les contraintes de type. Des prosélytes de la programmation objet proposent des interfaces objet (JDOM) Il faut considérer DOM comme une interface à fournir à l’extérieur, pas comme une façon de structurer ses données Mais, comme beaucoup d’outils ont une interface DOM, permet de très vite maquetter 12 octobre 2001 Patrick Itey / Ludovic Maître

169 Patrick Itey / Ludovic Maître
DOM Exemple /* Exemple avec le parser xml d’Ibm (XML4J) - SimpleParse.java */ import org.w3c.dom.Document; import com.ibm.xml.parser.Parser; import java.io.FileInputStream; public class SimpleParse { public static void main(String[] argv) { try { // Open specified file. FileInputStream is = new FileInputStream(argv[0]); // Start to parse Parser parser = new Parser(argv[0]); Document doc = parser.readStream(is); if (parser.getNumberOfErrors() > 0) { System.exit(1); } // Codes for process the document will be here } catch (Exception e) { e.printStackTrace(); } } 12 octobre 2001 Patrick Itey / Ludovic Maître

170 Patrick Itey / Ludovic Maître
DOM Specs Manipulation de l’arbre: DOM Core. Package org.w3c.dom.* Fournit des objets et des méthodes abstraits à implémenter par les parseurs (class Node,… méthodes getFirstChild(), getNextSibling, getParentNode(),…) DOM Level 3 : Modularisation et séparation en plusieurs modules 12 octobre 2001 Patrick Itey / Ludovic Maître

171 Patrick Itey / Ludovic Maître
DOM Views Gérer les différentes vues sur le même document Clicks dans une vue : dans quel noeud du document? 12 octobre 2001 Patrick Itey / Ludovic Maître

172 Patrick Itey / Ludovic Maître
DOM Events Comment avoir des évènements sur les nodes Actions de l’utilisateur passage de la souris, click, focus Modification de structure du document ajout de noeud, suppression… 12 octobre 2001 Patrick Itey / Ludovic Maître

173 Patrick Itey / Ludovic Maître
DOM Style Comment manipuler en mémoire les styles sheets N’importe quel type de style sheets et CSS en particulier 12 octobre 2001 Patrick Itey / Ludovic Maître

174 Patrick Itey / Ludovic Maître
DOM Traversal & Range Comment parcourir l’arbre itérateurs = "déroule" l’arbre comme si à plat TreeWalkers = garde la structure Filtres sur noeuds Comment spécifier une plage (range) de nœuds entre 2 points de l’arbre 12 octobre 2001 Patrick Itey / Ludovic Maître

175 XML sur la couche donnée
XML est principalement un format de stockage des données Il existe plusieurs possibilités pour utiliser XML sur la couche donnée : utilisation de système de gestion de bases de données nativement XML (Ozone, Xindice [ex dbXML],...) mapping entre une base de données relationnelle et des objets, méthodes et propriétés de chaque instance ensuite stockées / envoyées en XML développé à la main, aides dans certaines architectures (Container Managed Persistence dans J2EE,…) 12 octobre 2001 Patrick Itey / Ludovic Maître

176 Patrick Itey / Ludovic Maître
Conclusion XML et surtout la cohorte de sous-ensembles spécialisés qui l’accompagnent répondent à la plupart des besoins XML permet de combiner des applications très différentes en utilisant un langage commun XML est réçent mais sa croissance et son adoption sont rapides Il faut faire son choix entre les nombreux sous-ensembles, parfois en doubles, et miser sur ceux qui resteront 12 octobre 2001 Patrick Itey / Ludovic Maître

177 Patrick Itey / Ludovic Maître
Références Le site du W3C : w3.org Spécification XML annotée : xml.com/axml/axml.html Tutoriaux : java.sun.com/xml Site généraliste - xml.com Info sur logiciels commerciaux : xmlsoftware.com Info sur logiciels open-source : xml.apache.org - Le site de Robin Cover et google.com ! 12 octobre 2001 Patrick Itey / Ludovic Maître


Télécharger ppt "XML et ses applications"

Présentations similaires


Annonces Google