Les technologies XML Cours 3 Web et change
Les technologies XML Cours 3 : Web et échange de données Février 2017 - Version 1. 0 - 1
Avènement du Web A partir des années 2000, l’augmentation des capacité réseau et infrastructure à conduit les entreprises à fournir à leur client et partenaire de plus en plus de services « à la demande » . De plus la prolifération des « providers Internet » à aussi contribuer à la démocratisation des technologies dites « web » . Ainsi le protocole HTTP s’est imposé comme fondement « réseau » de la plupart des échanges entre application. 2
Protocole HTTP - Definition L'Hyper. Text Transfer Protocol, plus connu sous l'abréviation HTTP — littéralement « protocole de transfert hypertexte » — est un protocole de communication client-serveur développé pour le World Wide Web. HTTPS (avec S pour secured, soit « sécurisé » ) est la variante du HTTP sécurisée par l'usage des protocoles SSL ou TLS. HTTP est un protocole de la couche application. Il peut fonctionner sur n'importe quelle connexion fiable, dans les faits on utilise le protocole TCP comme couche de transport. Source Wikipedia 3
Protocole http - Définition La version actuelle de http est la version 1. 1. Elle a été publié par IETF en Février 2014 dans les RFC 7230 à 7237. HTTP est un protocole client-serveur à commande : c’est-à-dire qu’il demande à un serveur de faire quelques choses et de renvoyer quelques choses à l’appelant. La commande est encapsulé dans une requête les éventuels retour dans une réponse. 4
Protocole http - Fonctionnement La requête est composée d’une zone d’entête et d’un corps. Les entêtes sont codifiées mais extensibles Le corps référence une URI et une méthode à exécuter. 5
Protocole http - Fonctionnement La réponse est composée d’une zone d’entête et d’un corps. Les entêtes sont codifiées mais extensibles Le corps comporte ou pas du contenu et peut être facultatif selon la méthode utilisée. 6
Protocole http – Les méthodes GET C'est la méthode la plus courante pour demander une ressource. Une requête GET est sans effet sur la ressource, il doit être possible de répéter la requête sans effet. HEAD Cette méthode ne demande que des informations sur la ressource, sans demander la ressource elle-même. POST Cette méthode est utilisée pour transmettre des données en vue d'un traitement à une ressource. L' URI fourni est l'URI d'une ressource à laquelle s'appliqueront les données envoyées. Source Wikipedia 7
Protocole http – Les méthodes OPTIONS Cette méthode permet d'obtenir les options de communication d'une ressource ou du serveur en général. CONNECT Cette méthode permet d'utiliser un proxy comme un tunnel de communication. TRACE Cette méthode demande au serveur de retourner ce qu'il a reçu, dans le but de tester et effectuer un diagnostic sur la connexion. PUT Cette méthode permet de remplacer ou d'ajouter une ressource sur le serveur. L'URI fourni est celui de la ressource en question. PATCH Cette méthode permet, contrairement à PUT, de faire une modification partielle d'une ressource. DELETE Cette méthode permet de supprimer une Source Wikipedia ressource du serveur. 8
Données – Problématique 1/2 Informations et documents dans l’entreprise Constat : q Inflation du volume d’informations Coût et difficulté : q Difficultés à retrouver un document q Coût induit par la gestion de documents 9
Données – Problématique 2/2 1986 : SGML Objectifs adaptabilité, simple, intelligence, portable, gestion des liens complexe, Inconvénients 1991 : HTML difficilement portable gestion de liens 1998 : XML puissance de SGML, simplicité du HTML non adaptable, non intelligent 10
W 3 C Le WORLD WIDE WEB Consortium crée des standards pour le Web. Le W 3 C en 7 points… Accès universel (internationalisation, web mobile…) Web sémantique (RDF, XML…) Confiance (signatures électroniques, collaboratif…) Intéropérabilité (consensus industriel) Evolutivité (simplicité, modularité, compatibilité…) Décentralisation (systèmes répartis, tolérance aux erreurs) Multimédia (SVG, SMIL, HTML 5) Pour plus d’informations : www. w 3 c. org 11
XML – Définition 1/2 e. Xtensible Markup Language Recommandation (norme) du W 3 C Spécifiant un langage Constitué d’un ensemble d’éléments appelés balises Utilisable pour créer d’autres langages 2 concepts fondamentaux Structure, contenu et présentation sont séparés Les balises ne sont pas figées 12
XML – Définition 2/2 Conséquences : XML est un format de document XML est un format de données XML est un mode de structuration de l’information XML est un méta-langage 13
XML - Caractéristiques Richesse sémantique de SGML Compatible SGML Dédié au traitement des données Soutenant une grande variété d’applications Assurant un entretien aisé Intelligent Facilité de mise en œuvre de HTML Simple et lisible Portable et facilement utilisable sur Internet Assurant un développement aisé 14
XML - Exemple (1) <dd> Ma chanson (identification de la définition d'un terme) <ul> <li> par l'auteur</li> <li> Producteur : Dupond</li> <li> Editeur : Maison edition</li> <li> Duree : 6: 20</li> <li> Date : 1978</li> <li> Artiste : Toto</li> </ul> </body> </html> Ex. HTML 6. html 15
XML - Exemple (2) XML <SONG> <TITLE> Ma chanson </TITLE> <COMPOSER> par l’auteur</COMPOSER> <PRODUCER> Dupond</PRODUCER> <EDITOR> Maison edition</EDITOR> <DURATION> 6: 20</DURATION> <DATE> 1978</DATE> <ARTIST> Toto</ARTIST> </SONG> Balises “propriétaires” compréhensibles à la profession, dérivation des langages proprétaires. XML sépare le contenu de son aspect ( à la différence de HTML ou tout peut être mélangé) 16
XML – Applications 1/2 GED et Gestion de Contenu : GED traditionnelle : statique, redondante, lourde Apports d’XML : dynamique, cohérence, intelligence EDI : Exploitation des données : complexe, rigide Apports d’XML : simplicité, flexibilité, intelligence 17
XML – Applications 2/2 Interopérabilité de SI hétérogènes : Architectures existantes : complexité, dépendances Apports d’XML : simplicité, flexibilité, indépendance Commerce électronique : Exploitation de l’information : complexe, statique Apports d’XML : relation client personnalisée Documents XML comme BD 18
STRUCTURE D’UN DOCUMENT XML 19
SPECIFICATIONS DU LANGAGE XML Résumé des spécifications : Un document doit commencer par une déclaration XML Toutes les balises avec un contenu doivent être fermées Toutes les balises sans contenu doivent se terminer par les caractères /> Le document doit contenir un et un seul élément racine Les balises ne doivent pas se chevaucher Les valeurs d’attributs doivent être entre guillemets La casse doit être respectée pour toutes les occurrences de noms de balise (MAJUSCULES ou minuscules). Un document respectant ces critères est dit “bien formé” 20
Arbre d’un document XML 1/2 Exemple de fichiers XML : 21
Arbre XML, types des nœuds 2/2 Arbre correspondant : 22
DTD – Définition 1/7 DTD = Document Type Definition La DTD fournit : la liste des éléments, la liste des attributs, des notations et des entités du document XML associé ainsi que les règles des relations qui les régissent. 23
DTD – Définition 2/7 Résumé des spécifications : Une DTD (grammaire) permet de déclarer : q un type d’élément, q une liste d’attribut d’un élément, q une entité Chaque balise du langage doit faire l’objet d’une seule déclaration Un document XML est dit “valide” s’il possède une DTD et si sa syntaxe est conforme aux règles de la DTD Un document “valide” est obligatoirement “bien formé” 24
DTD – Définition 3/7 La DTD est déclarée dans le document XML par la balise !DOCTYPE Elle peut être : incluse dans le code source du fichier XML, ou DTD interne : <!DOCTYPE élément-racine [déclaration des éléments]> décrite dans un fichier externe, ou DTD externe : <!DOCTYPE élément-racine SYSTEM "nom_fichier. dtd"> 25
DTD – Définition 4/7 Exemple de DTD interne <? xml version="1. 0" standalone="yes"? > Comme vous définissez une DTD interne, votre fichier est indépendant (standalone). <!DOCTYPE parent [ Début de la DTD interne avec parent comme élément de racine. <!ELEMENT parent (garcon, fille)> L’élément racine parent contiendra les sous-éléments garcon et fille. <!ELEMENT garcon (#PCDATA)> <!ELEMENT fille (#PCDATA)> #PCDATA indique au Parser XML que l'élément garcon contient des données exprimées en chiffres ou en lettres. Idem pour l'élément fille. ]> Fin de la DTD <parent> <garcon>François</garcon> <fille>Elisabeth</fille> </parent> Racine du document XML. Fin du document XML. 26
DTD – Définition 5/7 Exemple de DTD externe : reprise de l’exemple précédent, en version DTD externe <? xml version="1. 0" standalone="no"? > Fichier XML. Comme vous définissez une DTD externe, votre fichier n’est plus indépendant (standalone). <!DOCTYPE parent SYSTEM "parent. dtd"> Déclaration de la DTD externe dans le Fichier parent. dtd. <parent> <garcon>François</garcon> <fille>Elisabeth</fille> </parent> Racine du document XML. <!ELEMENT parent (garcon, fille)> <!ELEMENT garcon (#PCDATA)> <!ELEMENT fille (#PCDATA)> Fin du document XML. Fichier parent. dtd L’élément racine parent contiendra les sous-éléments garcon et fille. #PCDATA indique au Parser XML que l'élément garcon contient des données exprimées en chiffres ou en lettres. Idem pour l'élément fille. 27
DTD – Définition 6/7 La DTD contient : Une ou plusieurs définitions d’éléments introduites par la balise !ELEMENT : <!ELEMENT nom-élément valeur> Une ou plusieurs listes d’attributs introduites par la balise !ATTLIST : <!ATTLIST nom-élément attribut type défaut> Une ou plusieurs définitions d’entité introduites par la balise !ENTITY : <!ENTITY nom-entité "valeur"> ou <!ENTITY nom-entité SYSTEM "nom_fichier"> 28
DTD – Définition 7/7 Espaces de nom XML Namespaces est une recommandation permettant d’utiliser le vocabulaire (les balises) de 2 DTD distinctes sans risque d’ambigüité. Inconvénients des DTD : Une DTD est difficile à lire Une DTD est non extensible (ce n’est pas un document XML). Une DTD ne permet pas de typer les données Une DTD ne peut prendre en compte qu’un seul espace de nom (Namespace). 29
DTD - Eléments 1/4 Chaque balise d’un document XML valide doit être déclarée à l’aide d’un élément dans la DTD associée. Un élément est défini par la balise !ELEMENT : <!ELEMENT nom-élément valeur-élément> Où : nom-élément est une balise du document XML valeur-élément prend l’une des trois formes: q (contenu) Déclaration d’un élément à contenu explicite. Exemple : <!ELEMENT sujet (#PCDATA)> q EMPTY Déclaration d’un élément vide. Utilisé en HTML pour les sauts de ligne (BR), image, filet horizontal (HR) etc. Exemple : <!ELEMENT br EMPTY> q ANY Déclaration d’un élément pouvant contenir tout type de donnée. Exemple : <!ELEMENT note ANY> 30
DTD - Eléments 2/4 Contenu explicite : Combinaison d’un ou plusieurs items : Mot-clé #PCDATA (Parsed Character Data) : le contenu est une chaîne de caractères Nom d’un autre élément de la DTD Chaque item peut être suivi par un caractère facultatif d’occurrence : ? : l’item apparaît zéro ou au plus une fois + : l’item apparaît au moins 1 fois * : l’item apparaît zéro fois ou plus Les items sont séparés par : Le caractère virgule « , » si les 2 items sont tous deux inclus dans le contenu Le caractère pipe « | » si le contenu est un choix entre les 2 items Les items peuvent être regroupés à l’aide de parenthèses pour définir des ordres de priorité ou d’occurrence 31
DTD - Eléments 3/4 Exemples <!ELEMENT agenda (contact*)> Définition d’un élément agenda composé de zéro ou plus éléments contact. <!ELEMENT contact (nom, prenom? , telephone+)> Définition d’un élément contact, composé de trois éléments : nom, prenom (facultatif), telephone (au moins 1 fois) <!ELEMENT nom (#PCDATA)> Définition d’un élément nom contenant une chaîne de caractères Idem pour élément prenom Idem pour élément telephone <!ELEMENT prenom (#PCDATA)> <!ELEMENT telephone (#PCDATA)> <!ELEMENT image EMPTY> Définition d’un élément image de contenu vide 32
DTD - Eléments 4/4 Exemples 33
PCDATA (parsed character data). C’est le texte qui sera analysé par l’analyseur syntaxique ( parser). Il rechera les entités et balises. Les caractères à analyser ne doivent pas contenir &, <, >, - ces caractères doivent être représentés par les entités & < and > 34
CDATA (character data). C’est le texte que ne sera pas analyser par l’analyseur syntaxique. Les balises ne seront pas analysées et les entités ne seront pas interprétées. 35
DTD – Attributs 1/3 Les balises ouvrantes et les balises vides peuvent contenir des couples nom-valeur des attributs XML : <GREETING LANGUAGE = “English”> Hello everybody </GREETING> nom valeur Les attributs possibles d’un élément du document XML sont déclarés dans la DTD associée. 36
DTD – Attributs 2/3 Déclaration dans la DTD par la balise !ATTLIST : <!ATTLIST nom-élément nom-attribut type valeur-défaut> Où : nom-élément est le nom d’un élément défini dans la DTD par la balise !ELEMENT attribut est le nom de l’attribut présentement défini pour l’élément nom-élément type peut prendre l’une des valeurs: q CDATA : la valeur correspond au contenu de l’élément q (choix 1|choix 2|…) : la valeur doit être l’une des choix énumérés q ID : la valeur est un identifiant unique q ENTITY : la valeur est une entité q ANY – un type quelconque valeur-défaut prend l’une des valeurs : q valeur : valeur par défaut donnée à l’attribut q #REQUIRED : attribut obligatoire, sans valeur par défaut q #IMPLIED : attribut optionnel, sans valeur par défaut q #FIXED valeur : valeur fixe ( le parseur renvoie un erreur si l’auteur souhaite modifier cete valeur). 37
DTD – Attributs 3/3 Exemples : <!ELEMENT GREETING (#PCDATA)> <!ATTLIST GREETING LANGUAGE CDATA “English”> Définition d’un carré et de son attribut largeur : DTD : <!ELEMENT carre EMPTY> <!ATTLIST carre largeur CDATA “ 0”> XML : <carre largeur=“ 100”> Liste de moyens de paiement: DTD <!ATTLIST paiement moyen (especes|cheque|CB) “CB”> XML <paiement moyen=“cheque”> <!--. . . --> <paiement moyen=“CB”> 38
DTD – Entité 1/4 Définition et rappel d’une entité XML Une entité est une variable utilisée pour définir du texte. L'intérêt d'une entité consiste à pouvoir remplacer autant de fois que nécessaire dans le document XML l'entité par le texte qui lui est associé. Dans le document XML, la référence à une entité est introduite par le caractère "&" suivi du nom de l’entité, et terminée par le caractère "; ". Il existe 5 entités prédéfinies en XML : lt, gt, amp, apos et quot (caractères < > & ' ") Une entité est définie avec la balise !ENTITY, et dite: Interne si sa valeur est donnée dans la DTD <!ENTITY nom-entité "valeur"> Externe si sa valeur est fournie dans un fichier externe à la DTD <!ENTITY nom-entité SYSTEM "nom_fichier"> 39
DTD – Entité 2/4 Entités standards < < > > & & " " ' ' 40
DTD – Entité 3/4 Exemple de document XML avec DTD interne et entité interne "titre" : <? xml version="1. 0"? > <!DOCTYPE introduction [ <!ENTITY titre "Introduction au language XML" > <!--. . . --> ]> <introduction > &titre; <!--. . . --> </introduction > 41
DTD – Entité 4/4 Exemple de document XML avec DTD interne et entité externe "chapitre 1" : <? xml version="1. 0" ? > <!DOCTYPE livre [ <!ENTITY chapitre 1 SYSTEM "chapitre 1. xml"> ]> <livre> <titre>Titre du livre</titre> &chapitre 1; </livre> Contenu du fichier "chapitre 1. xml" : <? xml version="1. 0" ? > <chapitre> <titre>titre du chapitre 1</titre> <section>1ère section</section> <section>2ème section</section> </chapitre> 42
XML-SCHEMA 1/4 En réponse aux lacunes des DTD, une alternative a été proposée comme recommandation : il s’agit de XML-Data dont XML-Schema est un sous-ensemble. Cette nouvelle norme achève de faire d’XML un format pivot… La version 1. 1 de XML Schema (datée de mai 2001) se compose de 3 normes : XML Schema tome 0 : Introduction XML Schema tome 1 : Structures XML Schema tome 2 : Types de données 43
XML-SCHEMA 2/4 Les documents XML-Schema sont des documents : respectant la syntaxe XML, permettant de décrire la structure d’un document XML d’une façon beaucoup plus complète que les DTD. XML-Schema permet en effet de : spécifier la typologie des données que va contenir le document XML décrit par le XML-Schema, gérer une quarantaine de types de données simples, gérer des types complexes, gérer les occurrences données. 44
XML-SCHEMA 3/4 Exemple de document XML-Schema : 45
XML-SCHEMA 4/4 Référence à un XML-Shema dans un document XML : L’espace de nommage xsi correspond aux instances de documents XML respectant les contraintes définies dans un document XML-Schema. Le W 3 C a défini une librairie de balises et attributs pouvant être utilisés par ces documents. 46
Constituants d’un XML-SCHEMA 1/8 Déclaration de l’entête : L’élément <xsd: schema> permet de déclarer un document XML-Xchema. <? xml version="1. 0" encoding="ISO-8859 -1" ? > <xsd: schema xmlns: xsd="http: //www. w 3. org/2001/XMLSchema"> <!--balise schema obligatoire --> L’attribut target. Namespace permet de préciser l’espace de nommage de ce type de documents. L’attribut element. Form. Default précise si les documents XML respectant cette grammaire doivent référer à cet espace de nommage. 47
Constituants d’un XML-SCHEMA 2/8 Déclaration des types de données : Il est possible de déclarer un type de données q soit dans la déclaration d’un élément (local) q soit hors de la déclaration de l’élément (global) XML-Schema permet d’utiliser des données : q q de type prédéfini (string, int…) de type complexe dont le type est une restriction de type dont le type est une extension de type 48
Constituants d’un XML-SCHEMA 3/8 Déclaration des types de données : Types prédéfinis : q byte, unsigned. Byte, hex. Binary, integer, positive. Integer, negative. Integer, int, unsigned. Int, long, unsigned. Long, short, unsigned. Short, decimal, float, double… q string, Normalized. String, token q boolean, any. URI, language q time, date. Time, duration, date, g. Month, g. Year. Month, g. Day, g. Month. Day q ID, IDREFS, ENTITY, ENTITIES, NOTATIN, NMTOKENS Exemple : <xsd: element name="comment" type="xsd: string"/> 49
Constituants d’un XML-SCHEMA 4/8 Déclaration des types de données : Types complexes : Exemple : le type de données Type. Adresse se compose de 6 éléments Numero, Rue 1, Rue 2, Ville, CP et Pays : 50
Constituants d’un XML-SCHEMA 5/8 Déclaration des types de données : Restriction de type existant : Exemple : le type de données string comprend 6 attributs optionnels : pattern, enumeration, length, minlength, maxlength, whitespace. Si on désire représenter un choix Oui/Non (restriction sur l’attribut enumeration) : 51
Constituants d’un XML-SCHEMA 6/8 Déclaration des types de données : Extension / dérivation de type existant : Exemple : si l’on souhaite créer un type Personne contenant en plus du nom et du prénom, un élément de type Adresse (extension du type Adresse vu précédemment) : 52
Constituants d’un XML-SCHEMA 7/8 Déclaration des éléments : 53
Constituants d’un XML-SCHEMA 8/8 Déclaration des attributs : 54
Conclusion : DTD versus XML-SCHEMA La DTD permet de définir facilement rapidement des grammaires simples. et XML-Schema permet de définir de manière plus formelle et complète une grammaire mais c’est au prix d’une complexité accrue. Un document XML-Schema respecte la syntaxe XML. Un document XML-Schema est généralement plus volumineux et plus difficile à lire qu’une DTD (pour un opérateur humain). 55
Exemple de XML-XSD <? xml version="1. 0" encoding="ISO-8859 -1" standalone="no" ? > <cave xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: no. Namespace. Schema. Location='td 2. xsd'> <appellation id="01" nom="Saint Estèphe"> <chateau id="0101"> <nom> Chateau Bellevue</nom> <adresse> 12 Rue du Pont</adresse> <téléphone> 0556124321</téléphone> </chateau> <chateau id="0102"> <nom> Chateau Le Bernadot</nom> <adresse> 21 Avenue du Cygne</adresse> <téléphone> 0556324231</téléphone> </chateau> </appellation> </cave> 56
XSD <? xml version="1. 0" encoding="ISO-8859 -1"? > <xsd: schema xmlns: xsd='http: //www. w 3. org/2001/XMLSchema'> <xsd: element name="cave"> <xsd: complex. Type> <xsd: sequence> <xsd: element ref="appellation" min. Occurs='1' max. Occurs='unbounded'/> </xsd: sequence> </xsd: complex. Type> </xsd: element> <xsd: element name="appellation"> <xsd: complex. Type> <xsd: sequence> <xsd: element ref="chateau" min. Occurs='0' max. Occurs='unbounded'/> </xsd: sequence> <xsd: attribute name="id" type="xsd: integer" use='required'/> <xsd: attribute name="nom" type="xsd: string"/> </xsd: complex. Type> </xsd: element> 57
<xsd: element name="chateau"> <xsd: complex. Type> <xsd: sequence> <xsd: element ref="nom" min. Occurs='1' max. Occurs='1'/> <xsd: element ref="adresse"/> <xsd: element ref="téléphone"/> </xsd: sequence> <xsd: attribute name="id" type="xsd: integer" use='required'/> </xsd: complex. Type> </xsd: element> <xsd: element name="nom" type="xsd: string"/> <xsd: element name="adresse" type="xsd: string"/> <xsd: element name="téléphone" type="xsd: decimal"/> </xsd: schema> 58
TRANSFORMATION D’UN DOCUMENT XML 1/2 Les outils destinés à transformer les représentent ceux-ci comme un arbre de documents XML nœuds XML. XSL est le langage qui permet d’écrire des feuilles de style. Une feuille de style est constituée d’un ensemble de règles de transformations, s’appliquant chacune à un ou plusieurs nœuds de l’arbre et permettant de transformer ce nœud en un nouveau nœud de l’arbre résultat. XPath est le langage qui permet d’adresser une partie ou plusieurs parties d’un document, c’est à dire un ou plusieurs nœuds du document XML. 59
TRANSFORMATION D’UN DOCUMENT XML 2/2 Transformation effectuée par un processeur XSL Selon http: //www. w 3. org/Style/XSL/ 60
… XLL / XLink / XPointer … Le langage XLL est un langage de description de liens comportant deux parties : XLink et XPointer. XLink permet de manipuler des liens plus complexes que les liens hypertextes HTML (liens vers n’importe quel balise ou attribut, liens bidirectionnels) et de décrire le comportement d’un lien. XPointer permet non seulement de localiser une position dans un document mais aussi une plage de document. 61
XSLT 1/6 XSL : e. Xtensible Stylesheet Language. Objectifs : Ce langage déclaratif permet de transformer un document XML en : un autre document XML, HTML, WML, SMIL un document papier: PDF, La. Te. X du texte 62
XSLT 2/6 Principes : Le langage XSLT décrit des règles pour transformer un document XML. Ces règles de transformations s’appliquent chacune à un ou plusieurs nœuds de l’arbre et spécifient la transformation à effectuer sur un nœud pour le transformer en un nouveau nœud de l’arbre résultat. Un processeur XSLT lit d’une part un document XML et d’autre part un document XSLT et génère un nouveau document en appliquant les règles de transformation. 63
XSLT 3/6 Fonctions de base (transformations) offertes par une feuille de style XSLT : extraction de données génération de texte suppression de contenu (noeuds) déplacement de contenu (noeuds) duplication de contenu (noeuds) tri de données Site de référence : http: //www. laltruiste. com/coursxsl/sommaire. html http: //www. w 3. org/ 64
XSLT 4/6 Dans l’exemple qui suit, on souhaite transformer un document XML en document HTML : Document XML source: <personne id="0001"> <nom>Durand</nom> <prenom>Martine</prenom> </personne> Document HTML cible : <html> <body> <p><b>Durand</b> Martine</p> </body> </html> 65
XSLT 5/6 Document XSLT correspondant : <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: output method="html" indent="yes" encoding="ISO-88591"/> <xsl: template match="personne"> <html> <body> <p> <b> <xsl: value-of select="nom"/> </b> <xsl: value-of select="prenom"/> </p> </body> </html> </xsl: template> </xsl: stylesheet> 66
XSLT 6/6 En résumé : XSL est un langage XML permettant de définir des feuilles de style Les composants d’un document XSL sont : q XSLT : pour manipuler les documents q XPath : pour naviguer dans la structure hiérarchique des documents q XSL Formatting Objects : pour définir la mise en forme des documents 67
Processeurs XSLT Processeur coté client – intégré au navigateur Mozilla Fire. Fox, Internet Explorer 6. 1. 68
XPATH XPath est le résultat d’un effort d’homogénéisation de la syntaxe et de la sémantique de fonctions communes à XSLT et XPointer pour adresser des parties d’un document. XPath permet d’effectuer des requêtes dans un document XML. XPath est aux documents XML, ce qu’est SQL aux bases de données. XPath est utilisé par XSLT pour faire de la transformation de documents XML. 69
SYNTAXE XPATH 1/8 La syntaxe de base XPath est semblable à l’adressage dans un système de fichiers. Ex. : Documents XML : <annuaire type=”LDAP”> <entree> <nom>Pierre Martin</nom> <phone>0556010101</phone> </entree> <nom>Martine Durand</nom> </entree> </annuaire> Syntaxe XPath : /annuaire/entree/nom Résultat : <nom>Pierre Martin</nom> <nom>Martine Durand</nom> 70
SYNTAXE XPATH 2/8 Recherche simple : 71
SYNTAXE XPATH 3/8 Autre exemple : <A> <B att=”fr”> <C>Bonjour</C> <D/> </B> <B att=”en”> <C>Hello</C> </B> <D id=” 12”> <G> <H/> </G> </D> <D id=” 10”/> <EE/> <DE/> </A> 72
SYNTAXE XPATH 4/8 Recherche par contexte : 73
SYNTAXE XPATH 5/8 Recherche par prédicats : 74
SYNTAXE XPATH 6/8 Recherche par prédicats (suite) : 75
SYNTAXE XPATH 7/8 Utilisation d’opérateurs : Exemple : Requête: //*[@att=’en’ and name()=’B’] Réponse: <B att=”en”> <C>Hello</C> </B> 76
SYNTAXE XPATH 8/8 Quelques exemples : 77
STRUCTURE D’UN DOCUMENT XSLT 1/6 Structure d’un document XSLT : <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: import href=". . . "/> <xsl: include href=". . . "/> <xsl: strip-space elements=". . . "/> <xsl: preserve-space elements=". . . "/> <xsl: output method=". . . "/> <xsl: key name=". . . " match=". . . " use=". . . "/> <xsl: decimal-format name=". . . "/> <xsl: attribute-set name=". . . ">. . . </xsl: attribute-set> <xsl: variable name=". . . ">. . . </xsl: variable> <xsl: param name=". . . ">. . . </xsl: param> <xsl: template match=". . . ">. . . </xsl: template> <xsl: template name=". . . ">. . . </xsl: template> </xsl: stylesheet> 78
STRUCTURE D’UN DOCUMENT XSLT 2/6 L’élément racine : <xsl: stylesheet> L’attribut version indique la version de XSLT exigées par la feuille de styles L’attribut xmlns: xsl indique l’URI de l’espace de nom xsl (il est possible de déclarer plusieurs espaces de nom). Les éléments fils de <xsl: stylesheet> sont appelés éléments de premier niveau 79
STRUCTURE D’UN DOCUMENT XSLT 3/6 <xsl: import> et <xsl: include> permettent d’inclure des règles d’un document XSLT dans un autre. La différence entre ces 2 instructions résident dans la gestion des conflits en terme d’application des règles : q avec xsl: import les règles importées ont une préséance moindre que celles du programme importateur (l’ordre d’importation est important) q avec xsl: include il n’y a pas de notion de préséance xsl: incude doit être le premier élément de premier niveau du programme. 80
STRUCTURE D’UN DOCUMENT XSLT 4/6 <xsl: output> permet de définir le format de sortie. Exemple : <xsl: output method=“html” indent=“yes” encoding=“iso-8859 -1”/> Cette déclaration précise que : q le document cible est le format HTML, q le fichier cible sera indenté, q les caractères du fichier XML d’entrée sont encodé selon la norme iso-8859 -1. 81
STRUCTURE D’UN DOCUMENT XSLT 5/6 <xsl: output> (suite) : La notion d’encoding a son importance si le fichier XML contient des caractères accentués et est déclaré avec l’entête <? xml version="1. 0" encoding="iso-8859 -1"? > En effet le fichier XML sera correctement transformé si l’on déclare le même encodage au niveau du XML et du XSLT. 82
STRUCTURE D’UN DOCUMENT XSLT 6/6 <xsl: strip-space> et <xsl: preserve-space> : <xsl: strip-space elements="liste_éléments"/> permet la suppression des espaces blancs superflus pour les éléments énumérés dans la liste. q Exemple : <xsl: strip-space elements="nom prenom"/> <xsl: preserve-space elements="liste_éléments"/> permet de préserver les espaces blancs tels quels pour des éléments énumérés dans une liste. q Exemple : <xsl: preserve -space elements="adresse"/> 83
LES REGLES DE TRANSFORMATION 1/11 <xsl: template> définit une règle XSLT : Un document XSLT se compose d’un ensemble de règles (template) permettant de construire le résultat. L’application d’une règle produit un fragment du document résultat. L’ordre des règles n’a pas d’importance. Une règle s’applique dans le contexte d’un nœud de l’arbre. Le corps d’une règle se compose d’un ensemble d’instructions. 84
LES REGLES DE TRANSFORMATION 2/11 <xsl: template match="pattern" name= "qname"> : L'attribut match est un motif (XPath) qui identifie le ou les nœud(s) source pour lesquels la règle s'applique. Cet attribut est exigé à moins que l'élément <xsl: template> ait un attribut name. Exemple : <xsl: template match="personne"> - <B><xsl: value-of select="nom"/></B> <xsl: value-of select="prenom"/> </xsl: template> Si un template contient du texte ou des éléments XML (autres que des instructions XSL), ces éléments seront écrits sur la sortie. Il est néanmoins conseillé d’utiliser les fonctions de création d’élément XML. 85
Exemples <? xml version="1. 0" encoding="ISO-8859 -1" standalone="no"? > <? xml-stylesheet type="text/xsl" href="presentation 1. xsl"? > <exposition> <tableau> <titre>Déjeuner sur l'herbe</titre> <artiste>Edouard Manet</artiste> </tableau> <titre>Déjeuner des Canotiers</titre> <artiste>Auguste Renoir</artiste> </tableau> <titre>Waterloo Bridge, le soleil dans le brouillard</titre> <artiste>Claude Monet</artiste> </tableau> <titre>Mardi Gras, soleil couchant, boulevard Montmartre</titre> <artiste>Camille Pissaro</artiste> </tableau> <titre>Les Joueurs de cartes</titre> <artiste>Paul Cézanne</artiste> </tableau> </exposition> 86
Exemples (XSL) <? xml version="1. 0" encoding="ISO-8859 -1"? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: output method="html" indent="yes" encoding="ISO-8859 -1"/> …… - la mise en forme html <xsl: template match="/exposition"> <td><xsl: value-of select="tableau/titre"/></td> <td><xsl: value-of select="tableau/artiste"/></td> </tr> </table> -le 1 élément uniquement </body> </html> </xsl: template> </xsl: stylesheet> 87
Exemples …… <html> <body> <table border="1" cellspacing="0" cellpadding="3"> <tr bgcolor="#FFFF 00"> <td>Titre</td> <td>Artiste</td> </tr> <xsl: for-each select="tableau"> <tr> <td><xsl: value-of select="titre"/></td> <td><xsl: value-of select="artiste"/></td> </tr> </xsl: for-each> </table> </body> </html> </xsl: template> </xsl: stylesheet> 88
LES REGLES DE TRANSFORMATION 3/11 Les fonctions de création de noeuds: Création d’un élément : <xsl: element name=qname> Création d’un attribut : <xsl: attribute name=qname> valeur Création de texte : <xsl: text> texte Création d’instructions de traitement : <xsl: processing-instruction name=qname> Création de commentaires : <xsl-comment> text 89
LES REGLES DE TRANSFORMATION 4/11 <xsl: value-of> et <xsl: copy-of> <xsl: value-of> crée un nœud de type texte correspondant au résultat de l’évaluation de l’expression. q Syntaxe : <xsl: value-of select="expr"/> q Exemples : <xsl: value-of select="nom"/> <xsl: value-of select="montant@devise"/> <xsl: copy-of> fournit un moyen simple pour copier le nœud courant. q Syntaxe : <xsl: copy select="pattern"/> q Exemple : <xsl: copy-of select="personne"/> 90
LES REGLES DE TRANSFORMATION 5/11 Les instructions <xsl: if> et <xsl-choose>: L’attribut test spécifie une expression. Après évaluation de cette expression, le résultat est converti en booléen. Si le résultat est vrai alors le contenu du modèle est appliqué, sinon rien. Exemples : <xsl: if test="@devise=‘EURO‘"> <img src="euro. gif"> </xsl: if> <xsl: choose> <xsl: when test="@devise=‘EURO‘"> <img src="euro. gif"> </xsl: when> <xsl: otherwise> <img src="dollar. gif"> </xsl: otherwise> </xsl: choose> 91
LES REGLES DE TRANSFORMATION 6/11 L’instruction de répétition <xsl: for-each> : Cet élément permet d'appliquer des règles de style sur chaque nœud identique d'un template. Le contenu de cette instruction est un modèle. Exemple : <xsl: for-each select="personne"> <tr> <td><xsl: value-of select="nom"/></td> <td><xsl: value-of select="prenom"/></td> </tr> </xsl: for-each> 92
LES REGLES DE TRANSFORMATION 7/11 <xsl: sort> permet d'effectuer un tri sur des données selon des critères spécifiés : Lorsqu'un élément <xsl: apply-templates> ou <xsl: for-each> a un ou plusieurs fils <xsl: sort>, les nœuds sélectionnés sont triés et traités en fonction des clés de tri spécifiés. Lorsque des éléments xsl: sort sont utilisés dans xsl: for-each, ils doivent apparaître en premier. Exemple : <xsl: for-each select="personne"> <xsl: sort select="nom" order="ascending" data-type="text" case-order="lower-first"/> </xsl: for-each> 93
LES REGLES DE TRANSFORMATION 8/11 <xsl: apply-templates> permet d’appliquer un modèle de manière récursive aux fils du nœud courant : En l'absence de l'attribut <xsl: apply-templates> traite courant, y compris les nœuds select, l'instruction tous les fils du nœud textuels. Exemple : <xsl: template match="personne"> <table> <xsl: apply-templates select="nom"> <xsl: sort select="nom" order="ascending"/> </xsl: apply-templates> </table> </xsl: template> <xsl: template match="nom"> <tr>…</tr> 94 </xsl: template>
LES REGLES DE TRANSFORMATION 9/11 Il existe trois façons d’appeler un template : Sélectionner les nœuds à traiter à l’aide d’une requête XPath et leur appliquer les templates correspondants : <xsl: apply-templates select="nom"> Appliquer les templates correspondants à tous les fils du nœud courant : <xsl: apply-templates/> Appeler un template grâce à son nom (à la manière d’un sous-programme). Contrairement aux deux méthodes précédentes, on ne l’applique pas à un ensemble de sous-éléments du nœud courant mais à ce même nœud (pas de changement de contexte). <xsl: call-template name="nom"> 95
LES REGLES DE TRANSFORMATION 10/11 Sélection d’une règle parmis plusieurs règles candidates: Il existe des priorités implicites qui permettent au processeur de choisir On peut aussi donner explicitement une priorité Lorsque le choix est impossible, le processeur s’arrête. Priorités implicite : plus c’est spécifique, plus c’est prioritaire Priorité - 0. 5 : Les motifs simples (autres qu’un nom d’élément ou d’attribut) tels que * par exemple. Priorité 0 : Les motifs constitués d’une seule étape XPath, avec un nom d’élément ou d’attribut et sans prédicat. Priorité 0. 5 : Tous les autres (prédicats, plusieurs étapes) 96
LES REGLES DE TRANSFORMATION 11/11 Les modes: Leur raison d’être réside dans le fait qu’un même nœud peut être traité par plusieurs règles (un chapitre par exemple peut être traité une fois pour construire l’index et une autre fois pour publier le contenu). Pour distinguer les deux règles, on les distinguera par mode. <xsl: template match=“CHAPITRE" mode="INDEX"> <a href="#{TITRE}"><xsl: value-of select="TITRE"/></a> </xsl: template> <xsl: template match="CHAPITRE"> <a name="{TITRE}"/> <h 1><xsl: value-of select="TITRE"/></h 1> <p><xsl: value-of select=“TEXTE"/></p> <br/> </xsl: template> 97
VARIABLES ET PARAMETRES 1/2 <xsl: variable> définit une variable XSLT : Syntaxe de la déclaration : <xsl: variable name="MIN">0</xsl: variable> <xsl: variable name="MAX" select="99"/> Syntaxe de l’invocation : <xsl: apply-templates select="personne[$MIN]"> <xsl: text name="MAX">Max : {$MAX}</xsl: text> La portée d’une variable est limitée à l’élément dans lequel elle a été définie. Une fois déclarée, la valeur d’une variable ne peut être modifiée par la suite. 98
VARIABLES ET PARAMETRES 2/2 <xsl: param> définit un paramètre XSLT: Syntaxe de la déclaration : <xsl: param name="MIN">0</xsl: param> <xsl: param name="MAX" select="99"/> La principale différence entre une variable et un paramètre est qu’un paramètre peut être passé en paramètre à un template. Cela se fait de la manière suivante : <xsl: param name="MIN">0</xsl: param> <xsl: call-template name="annee"> <xsl: with-param name="MIN" select="$MIN+1"/> </xsl: call-template> 99
FONCTIONS XSLT 1/2 XSLT fournit un certain nombre de fonctions : La fonction format-number convertit son premier argument en une chaîne utilisant le motif de formatage spécifié par le second argument. Ce motif de formatage est composée d’un préfixe optionnel, d’un motif de formatage et d’un suffixe optionnel. Le motif de formatage est une séquence de caractères spéciaux définis dans le tableau suivant : Exemples : <xsl: value-of select="format-number($REMISE, ’ ##% ’)"/> <xsl: value-of select="format-number(PRIX, ’##, ##0. 00 FF ’)"/> 100
FONCTIONS XSLT 2/2 Caractères de formattage de la fonction format-number : 101
CONCLUSION SUR XSLT Avantages d’XSLT : A partir d’un même document XML, on peut générer plusieurs formats en sortie (HTML, WML…) Inconvénients d’XSLT : Bien que la version 1. 0 ait été stabilisée, les outils implémentant XSLT ne respectent pas tous la recommandation (fonctionnalités manquantes, ajout de fonctionnalités et d’éléments propriétaires). XSLT versus CSS : XSLT peut tout à fait être utilisé de manière combinée avec les CSS, en particulier quand la cible est du HTML 4 ou du XHTML 1. 102
Représentation JSON (Javascript Object Notation) est un format de donnée textuelle. Il est permet de représenter de l’information structurée et en particuliers des Objets Javascript. Il est décrit dans la RFC 7159 de l’IETF. En ce sens c’est un « concurrent » d’XML. 103
Représentation JSON n’utilise que deux types d’éléments structurels : 1. Des paires nom/valeur 2. Des listes ordonnées de valeurs Ces éléments structurels peuvent représenter trois types de données : 1. Des objets 2. Des tableaux 3. Des éléments génériques (tableau, objet, booléen, nombre, string, null) 104
Représentation JSON contrairement à XML ne se veut pas universel et ne peut être étendu. Toutefois, il est moins verbeux qu’XML et aussi « lisible » que lui. JSON ne peut être validé et il est donc à la charge du développeur de vérifier si les éléments récupérés sont bien ceux attendus. Un document JSON représente un Objet Javascript. 105
Représentation JSON Le type MIME application/json est utilisé pour transporter un document JSON sur HTTP. Historiquement, l’opérateur eval était utilisé pour « transformer » une chaine de caractère en Object javascript. Pour des raisons de sécurité, les navigateurs « modernes » intègrent nativement JSON et fournissent l’objet Natif JSON pour évaluer les documents JSON var data = JSON. parse(json_data); 106
- Slides: 106