Support de cours technologie et application m.youssfi

  • Published on
    08-Jul-2015

  • View
    3.045

  • Download
    1

DESCRIPTION

Support Technologie XML : - Concepts XML - DTD, Shmas XML - XSL, Xpath - XQuery - Application de XML : - SVG - JDOM - Web Services

Transcript

Technologie XMLTechnologie XML-- Concepts XML Concepts XML -- DTD, DTD, ShmasShmas XMLXML-- XSL, XSL, XpathXpath-- XQueryXQuery-- Application de XML :Application de XML :-- SVGSVG-- JDOMJDOM-- Web ServicesWeb Servicesmed@youssfi.netMohamed YoussfiLaboratoire Signaux Systmes Distribus et Intelligence Artificielle (SSDIA)ENSET, Universit Hassan II Casablanca, MarocEmail : med@youssfi.netSupports de cours : http://fr.slideshare.net/mohamedyoussfi9Chane vido : http://youtube.com/mohamedYoussfiRecherche : http://www.researchgate.net/profile/Youssfi_Mohamed/publicationsM.YoussfiTechnologie XMLTechnologie XMLPar M.Youssfimed@youssfi.netmed@youssfi.netM.YoussfiProgrammeProgramme Technologie XML XML, DTD, Schmas XML XSL , XPath , Xquery Xquery Applications de XML SVG Web Servicesmed@youssfi.netM.YoussfiOrigine de XMLOrigine de XMLSGMLHTMLStandard Generalized Markup Language( Spare les donnes la structure des donnes et la mise en forme )Hyper Text Markup Language( Mlange les donnes et la mise en forme )med@youssfi.netHTMLXMLeXtensible Markup Language( Spare les donnes la structure des donnes et la mise en forme )M.YoussfiXML est au cur des systmes XML est au cur des systmes dinformationsdinformationsServeur dapplication J2EEApplication JEEServeur dapplication IISApplication .netXMLFichiers XML dont le contenu est gnrDynamiquement et povient dune sourceDe donne comme une BD relationnelleSGBDOracleSGBDSQL ServerXMLFichier.xml Fichier.xmlFichier.xmlClient LegerXMLAjaxFlashXML ParserXML ParserFichiers XML dont le contenu Est crs manuellementPour configurer lapplicationmed@youssfi.netM.YoussfiXML ?XML ? XML est un langage dchange de donnes structurs entre applications de diffrents systmes dinformations. Les donnes dun fichier XML sont organise dune manire hirarchique Les donnes dun fichier XML peuvent provenir des bases de donnes relationnelles. (Documents XML Dynamiques)Dynamiques) Les fichiers XML sont galement utiliss en tant que fichiers de configuration dune application. ( Documents XML Statiques ) Pour lire un fichier XML, une application doit utiliser un parseur XML. Un parseur XML est une API qui permet de parcourir un fichier XML en vue den extraire des donnes prcises.med@youssfi.netM.YoussfiCorrespondance entre XML et Correspondance entre XML et Bases de donnes relationnellesBases de donnes relationnellesBDRelationnelleFichier XMLSGBDRApplicationSQLParseur XMLApplicationXPathmed@youssfi.netM.YoussfiXML?XML? Le parseur XML permet de crer une structure hirarchique contenant les donnes contenues dans le document XML. Il existe deux types de parseurs XML: DOM (Document Object Model) : permet daccder et dagir dune manire directe sur le DOM (Document Object Model) : permet daccder et dagir dune manire directe sur le contenu et la structure de larbre XML. SAX (Simple API for XML) : permet de ragir sur le contenu et la structure dune document XML pendant une lecture squentielle.med@youssfi.netM.YoussfiExemple de document XMLExemple de document XML biblio+BiblioReprsentation graphique de larbre XMLetudiant+@code@nom@prenom@agelivre+@id@titre@datePret@renduEtudiant Etudiant Etudiantlivre livre livremed@youssfi.netM.YoussfiStructure dun document XMLStructure dun document XMLDocument XMLFichier XMLQui contient Les donnesDTDOu Schmas XMLFeuille de styleXSLPour la prsentationUn document XML se compose de 3 fichiers :Qui contient Les donnesOu Schmas XMLPour dclarerLa structureDu fichier XMLXSLPour la prsentationDes donnes duFichier XML Le fichier XML stocke les donnes du document sous forme dun arbre DTD ( Data Type Definition ) ou Schmas XML dfinit la structure du fichier XML La feuille de style dfinit la mise en forme des donnes de la feuille xml med@youssfi.netM.YoussfiSyntaxe dun document XMLSyntaxe dun document XML Un document XML est compos de deux parties : Le prologue, lui mme composs de plusieurs parties Une dclaration XML, qui permet de dfinir : la version de XML utilise, le codage des caractres la manire dont sont stockes les informations de balisage Une dclaration de type de document (DTD) qui permet de dfinir Une dclaration de type de document (DTD) qui permet de dfinir la structure logique du document et sa validit. Une transformation dfinie par une feuille de style (CSS ou XSL) qui permet de dfinir la prsentation. L'instance qui correspond au balisage du document proprement-dit ( Donnes sous forme darbre ).med@youssfi.netM.YoussfiTerminologies XMLTerminologies XML Balise Cest un mot clef choisi par le concepteur du document qui permet de dfinir un lment. Exemple : Elment Cest un objet XML dfini entre une balise de dbut et une balise de fin. La balise de fin porte le mme nom que la balise de dbut, mais elle est prcde d un "slash".mais elle est prcde d un "slash". Contenu de l lment Un lment peut contenir aussi dautre lments Attribut Une lment peut tre qualifi par un ou plusieurs attributs. Ces attributs ont la forme clef="valeur". med@youssfi.netM.YoussfiDocument XML bien formDocument XML bien form Pour qu'un document soit bien form, il doit obir 4 rgles : Un document XML ne doit possder qu'une seule racine Tous les lments doivent tre ferms Les lments contenus et contenant doivent tre imbriqus. La valeurs des attributs s'crit entre guillemetsmed@youssfi.netM.YoussfiDocument XML bien formDocument XML bien form Un document XML ne doit possder qu'un seul lment racine qui contient tous les autres. Un document XML est un arbre.Document bien form :Document mal form : TSIG Etudes1755 heuresTSIG Etudes1755 heuresmed@youssfi.netM.YoussfiDocument XML bien formDocument XML bien form Tous les lments doivent tre ferms A chaque balise ouvrant doit correspondre une balise fermante. A dfaut, si un lment n'a pas de contenu, il est possible d'agrger la balise fermante la balise ouvrant en terminant celle-ci par un "slash".Document bien form:Document mal form :TSIG EtudesTSIG Etudesmed@youssfi.netM.YoussfiDocument XML bien formDocument XML bien form Les lments contenus et contenant doivent tre imbriqus. Tous les lments fils doivent tre contenus dans leur pre. Si un document XML est un arbre, un lment est une branche.Document mal form :Document bien form :TSIG EtudesTSIG Etudesmed@youssfi.netM.YoussfiDocument XML bien formDocument XML bien form La valeurs des attributs s'crit entre guillemets.Document mal form :Document bien form :TSIG EtudesTSIG Etudesmed@youssfi.netM.YoussfiDocument XML valideDocument XML valide Un document XML valide est un document XML bien form qui possde une DTD (Document Type Definition) ou un schma XML La DTD est une srie de spcifications dterminant les rgles structurelles des documents xml qui lui sont associs.associs. La DTD spcifie : Le nom des balises associes tous les lments, Pour chaque balise, les attributs possibles et leur type, Les relations contenant-contenu entre les lments et leur cardinalit, Les entits (raccourcis) internes et externesmed@youssfi.netM.YoussfiDclaration des lmentsDclaration des lments La dclaration d une nouvelle balise se fait grce l instruction ELEMENT. La syntaxe est: Le Contenu peut tre choisi parmi cinq modles: Modle texte #PCDATA exemple Pour dclarer une balise qui reoit du textePour dclarer une balise qui reoit du texteTexte Modle squence d lments fils : Une squence dfinit les lments fils autoriss apparatre dans une balise. Exemple : ...emailenete corps signaturemed@youssfi.netM.YoussfiDclaration des lmentsDclaration des lments Modle squence d lments fils : Chaque nom d lment peut tre suffix par un indicateur d occurrence. Cet indicateur permet de prciser le nombre d instances de l lment fils que l lment peut contenir. Ces indicateurs sont au nombre de 3. element? : Indique que l lment peut apparatre zro ou une fois; element+ : Indique que l lment peut apparatre une ou plusieurs fois;fois; element* : Indique l lment peut apparatre zro, une ou plusieurs fois. L absence de cet indicateur d occurrence indique que l lment peut apparatre une seule fois au sein de son lment parent. On peut utiliser les parenthses pour affecter un indicateur d occurrence plusieurs lmentmed@youssfi.netM.YoussfiDclaration des lmentsDclaration des lments Modle squence d lments fils : (suite) Exemple:Nous pourrons alors crire :.. . .. .. . .. . Le choix le plus libre qu une dfinition de document puisse accorder correspond la dfinition suivante : med@youssfi.netM.YoussfiDclaration des lmentsDclaration des lments Modle mixte : Le modle mixte nat de l utilisation conjointe de #PCDATA et d lments fils dans une squence. Un tel modle impose d utiliser un ordre libre et de disposer #PCDATA en premire position. De plus l indicateur d occurrence doit tre *. Exemple : En compltant ces dclarations par les deux suivantes :la balise p peut tre alors utilise :Dans son livre "la huitime couleur" , Tirry Pratchet nous raconte les aventures du premier touriste du Disque-Monde , le dnomm Deux Fleursmed@youssfi.netM.YoussfiDclaration des lmentsDclaration des lments Modle Vide. Le mot EMPTY permet de dfinir une balise vide. La balise de HTML reproduite en XML en constitue un parfait exemple : Une balise vide ne pourra en aucun cas contenir un lment fils. Un lment vide peut avoir des attributs.Un lment vide peut avoir des attributs. Modle diffrent. Ce dernier modle permet de crer des balises dont le contenu est totalement libre. Pour utiliser ce modle, on utilise le mot ANY Exemple : l lment disque peut tre utilis librement.med@youssfi.netM.YoussfiDclaration dDclaration d attributsattributs La dclaration d attributs dans une DTD permet de prciser quels attributs peuvent tre associs un lment donne. Ces attributs reoivent de plus une valeur par dfaut. La syntaxe de dclaration d un attribut est : Il est possible de dclarer plusieurs attribut au sein d une mme balise ATTLIST.ATTLIST. Exemples:OU:nom CDATA #REQUIRED prenom CDATA #REQUIRED> med@youssfi.netM.YoussfiDclaration dDclaration d attributsattributs Les types dattributs les plus courants sont: Type CDATA : signifie que la valeur de l attribut doit tre une chane de caractres; Type NMTOKEN : signifie que la valeur de l attribut doit tre une chane de caractres ne contenant pas despaces et de caractres spciaux; Type ID : Ce type sert indiquer que l'attribut en question peut servir d'identifiant dans le fichier XML. Deux lments ne pourront pas possder le mme attribut possdant la mme valeur.servir d'identifiant dans le fichier XML. Deux lments ne pourront pas possder le mme attribut possdant la mme valeur. Type numr : une liste de choix possible de type (A|B|C) dans laquelle A, B, C dsignent des valeurs que l attribut pourra prendre. Une valeur boolenne peut donc tre reprsente par en XML par les deux dclarations suivantes:med@youssfi.netM.YoussfiDclaration dDclaration d attributsattributs Le terme Prsence permet de dfinir comment doit tre gre la valeur de l attribut. Il existe 4 types de prsences : La valeur par dfaut de l attribut ( comme dans le cas de l exemple de l lment boolean ) #REQUIRED Indique que l attribut doit tre prsent dans la #REQUIRED Indique que l attribut doit tre prsent dans la balise et que sa valeur doit tre obligatoirement spcifie. #IMPLIED Indique que la prsence de l attribut est facultative; #FIXED "valeur " Fixe la valeur de l attribut.med@youssfi.netM.YoussfiDclaration dDclaration d entitsentits Une entit dfinit un raccourcis vers un contenu qui peut tre soit une chane de caractres soit le conteu dun fichier. La dclaration gnrale est : Exemple d entit caractres:c est comme si je dfinie une constante eacaute qui reprsente le caractre . Exemple dentit chane de caractres: Pour utiliser cette entit, on crit : &ADN; Exemples d entit relative au contenu d un fichier: Pour utiliser une entit dans un document XML, on crit:&nom-entit;med@youssfi.netM.YoussfiExemple 1Exemple 1 Un oprateur Tlcom fournit priodiquement, loprateur de rglementation des tlcoms ANRT un fichier XML qui contient les clients de cet oprateur. Chaque client possde plusieurs abonnements et chaque abonnement reoit plusieurs factures. Un exemple de fichier XML correspondant ce problme est le suivant :reglee="non"/> med@youssfi.netM.YoussfiTravail demandTravail demand1. Faire une reprsentation graphique de larbre XML.2. Ecrire une DTD qui permet de valider ce document XML3. Crer le fichier XML4. Ecrire une feuille de style XSL qui permet de transformer le document XML en une page HTML qui permet dafficher pour chaque client la liste de ses abonnement en affichant le montant total des factures de chaque abonnementmed@youssfi.netM.YoussfiCorrig : DTDCorrig : DTDcode NMTOKEN #REQUIREDnom CDATA #REQUIRED>operateur+client+abonnement@code@nom@num@type+facture@type@dateAb@numFact@dateFact@montant@regleemed@youssfi.netM.YoussfiCorrig : XSLCorrig : XSLNom Client : NumTypeDateTotal Facturesmed@youssfi.netM.YoussfiApplicationApplicationSGMBSocit GnraleNous souhaitons concevoir un format de fichier XML changs entre la bourse et ses diffrents partenaires.Un exemple de fichier XML manipul est le suivant :Socit Gnrale2000-11-01.. med@youssfi.netM.YoussfiExemple daplicationExemple daplicationQuestions :1. Faire une reprsentation graphique de larbre XML2. Ecrire la DTD qui permet de dclarer la structure du document XML. (on suppose que le fichier XML contient deux de types de socits banque et assurance)3. Ecrire un schma XML quivalent.4. Ecrire une feuille de style qui permet dafficher les cotations des socits de type banque. med@youssfi.netM.YoussfiSchmasSchmas XMLXMLmed@youssfi.netM.YoussfiStructure dun document XMLStructure dun document XMLDocument XMLFichier XMLQui contient Les donnesDTDOu Schmas XMLFeuille de styleXSLPour la prsentationUn document XML se compose de 3 fichiers :Qui contient Les donnesOu Schmas XMLPour dclarerLa structureDu fichier XMLXSLPour la prsentationDes donnes duFichier XML Le fichier XML stocke les donnes du document sous forme dun arbre DTD ( Data Type Definition ) ou Schmas XML dfinit la structure du fichier XML La feuille de style dfinit la mise en forme des donnes de la feuille xmlmed@youssfi.netM.YoussfiApports des schmas Apports des schmas Conu pour pallier aux dficiences pr cites des DTD, XML Schema propose, en plus des fonctionnalits fournies par les DTD, des nouveauts : Le typage des donnes est introduit, ce qui permet la gestion de boolens, d'entiers, d'intervalles de temps... Il est mme possible de crer de nouveaux types partir de types existants. La notion d'hritage. Les lments peuvent hriter du La notion d'hritage. Les lments peuvent hriter du contenu et des attributs d'un autre lment. Les indicateurs d'occurrences des lments peuvent tre tout nombre non ngatif. Le support des espaces de nom. Les Schmas XML sont des documents XML ce qui signifie dun parseur XML permet de les manipuler facilement.med@youssfi.netM.YoussfiStructure de base dun schma xmlStructure de base dun schma xml Comme tout document XML, un Schema XML commence par un prologue, et a un lment racine. L'lment racine est l'lment xsd:schema. Les lments du XML schma sont dfinis dans lespace nomhttp://www.w3.org/2000/10/XMLSchema qui est prfix par xsd. Cela signifie que tous le lments de XML schma commencent par le prfix xsd ()med@youssfi.netM.YoussfiDclarations d'lments Dclarations d'lments Un lment, dans un schma, se dclare avec la balise . Par exemple, remarque est un lment de type simple contacts est un lment de type complexemed@youssfi.netM.YoussfiDclarations d'attributs Dclarations d'attributs Un attribut, dans un schma, se dclare avec la balise . Un attribut ne peut tre que de type simple Exemple: Ici on dclare que contacts est un lment de type complexe et quil possde un attribut maj de type date med@youssfi.netM.YoussfiContraintes doccurrences pour les attribusContraintes doccurrences pour les attribus L'lment attribute d'un Schema XML peut avoir trois attributs optionnels : use : indique le prsence , il peut prendre pour valeur required(obligatoire), optional(facultatif) ou prohibited (ne doit pas apparaitre) default : pour indiquer la valeur par dfaut fixed : indique l'attribut est renseign, la seule valeur que fixed : indique l'attribut est renseign, la seule valeur que peut prendre l'attribut dclar est celle de l'attribut fixed. Cet attribut permet de "rserver" des noms d'attributs pour une utilisation future, dans le cadre d'une mise jour du schma. Exemple :med@youssfi.netM.YoussfiPremier Exemple schma xmlPremier Exemple schma xmlcatalogue+produit@code@designation>M.Youssfi med@youssfi.netFichier XML respectant le Fichier XML respectant le schma prcdentschma prcdentcatalogue+produit@code@designationM.Youssfi med@youssfi.netDclaration d'lment ne contenant que du Dclaration d'lment ne contenant que du texte avec un (ou plusieurs) attribut(s)texte avec un (ou plusieurs) attribut(s) Un tel lment est de type complexe, car il contient au moins un attribut. Afin de spcifier qu'il peut contenir galement du texte, on utilise l'attribut mixed de l'lment . Par dfaut, mixed="false"; il faut dans ce cas forcer mixed="true". Par exemple: Par exemple:med@youssfi.netM.YoussfiDclaration et rfrencement Dclaration et rfrencement Il est beaucoup plus avantageux, pour des raisons de clart, d'ordonner ces dclarations, ainsi qu'on peut le voir sur cet exemple:med@youssfi.netM.YoussfiTypes Types AtomiquesAtomiquesmed@youssfi.netM.YoussfiTypes simples : ListesTypes simples : Listes Les types listes sont des suites de types simples (ou atomiques). Il est possible de crer une liste personnalise, par "drivation" de types existants. Par exemple, Un lment conforme cette dclaration serait 01 44 27 60 11. Il est galement possible d'indiquer des contraintes plus fortes sur les types simples ; ces contraintes s'appellent des "facettes". Elles permettent par exemple de limiter la longueur de notre numro de tlphone 10 nombres. med@youssfi.netM.YoussfiTypes simples: UnionsTypes simples: Unions Les listes et les types simples intgrs ne permettent pas de choisir le type de contenu d'un lment. On peut dsirer, par exemple, qu'un type autorise soit un nombre, soit une chane de caractres particuliers. Il est possible de le faire l'aide d'une dclaration d'union. Par exemple, sous rserve que le type simple numroDeTlphone ait t pralablement dfini (voir prcdemment), on peut dclarer... Les lments suivants sont alors des "instances" valides de cette dclaration :18Pompiersmed@youssfi.netM.YoussfiTypes complexesTypes complexes Un lment de type simple ne peut contenir de sous-lment ou des attributs. Un type complexe est un type qui contient soit des lments fils, ou des contient soit des lments fils, ou des attributs ou les deux. On peut alors dclarer, Des squences d'lments, Des types de choixmed@youssfi.netM.YoussfiTypes complexes: squences dlments:Types complexes: squences dlments: Nous savons dj comment, dans une DTD, nous pouvons dclarer un lment comme pouvant contenir une suite de sous-lments, dans un ordre dtermin. Il est bien sr possible de faire de mme avec un schma. On utilise pour ce faire l'lment xsd:sequence, qui reproduit loprateur, du langage DTD. Exemple: med@youssfi.netM.YoussfiTypes Complexes : Choix dlmentTypes Complexes : Choix dlment On peut vouloir modifier la dclaration de type prcdente en stipulant qu'on doive indiquer soit l'adresse d'une personne, soit son adresse lectronique. Pour cela, il suffit d'utiliser un lment xsd:choice : med@youssfi.netM.YoussfiTypes Complexe : Elment AllTypes Complexe : Elment All Llment All indique que les lments enfants doivent apparatre une fois (ou pas du tout), et dans n'importe quel ordre. Cet lment xsd:all doit tre un enfant direct de l'lment xsd:complexType. Par exemple med@youssfi.netM.YoussfiIndicateur doccurrencesIndicateur doccurrences Pendant la dclaration dun lment, on peut indiquer le nombre minimum et le nombre maximum de fois quil doit apparatre On utilise pour cela les attributs minOccurs et maxOccurs: minOccurs prend par dfaut la valeur 1 et peut minOccurs prend par dfaut la valeur 1 et peut prendre les autres valeurs positives maxOccurs prend par dfaut la valeur 1 et peut prendre les autres valeurs positive ou unbounded(infini).med@youssfi.netM.YoussfiDrivationDrivation Les types simples et complexes permettent dj de faire plus de choses que les dclarations dans le langage DTD. Il est possible de raffiner leur dclaration de telle manire qu'ils soient une "restriction" une "restriction" ou une extension d'un type dj existant, en vue de prciser un peu plus leur forme. Nous allons nous limiter dans ce cours d'initiation la restriction des types simples. med@youssfi.netM.YoussfiDrivation : Restriction de typesDrivation : Restriction de types Une "facette" permet de placer une contrainte sur l'ensemble des valeurs que peut prendre un type de base. Par exemple, on peut souhaiter crer un type simple, appel MonEntier, limit aux valeurs comprises entre 0 et 99 inclus. On drive ce type partir du type simple prdfini nonNegativeInteger, en utilisant la facette maxExclusive. med@youssfi.netM.YoussfiDrivation : Restriction de typesDrivation : Restriction de types Il existe un nombre important de facettes qui permettent de : fixer, restreindre ou augmenter la longueur minimale ou maximale d'un type simple numrer toutes les valeurs possibles d'un type numrer toutes les valeurs possibles d'un type prendre en compte des expressions rgulires fixer la valeur minimale ou maximale d'un type (voir l'exemple ci-dessus) fixer la prcision du type...med@youssfi.netM.YoussfiDrivation : Exemples de facettesDrivation : Exemples de facettes Limiter les diffrentes valeurs possible dun type:med@youssfi.netM.YoussfiDrivation : Exemples de facettesDrivation : Exemples de facettes Limiter la longueur dune chane de caractres: med@youssfi.netM.YoussfiDrivation : Exemples de facettesDrivation : Exemples de facettes Expressions rgulires pour une adresse email: med@youssfi.netM.YoussfiXML est au cur des systmes XML est au cur des systmes dinformationsdinformationsServeur dapplicationApplicationServeur dapplicationApplicationXMLFichiers XML dont le contenu est gnrDynamiquement et povient dune sourceDe donne comme une BD relationnelleSGBDSGBDXMLFichier.xml Fichier.xmlFichier.xmlClient LegerXMLAjaxFlashXML ParserXML ParserFichiers XML dont le contenu Est crs manuellementPour configurer lapplicationmed@youssfi.netM.YoussfiCorrespondance entre XML et Correspondance entre XML et Bases de donnes relationnellesBases de donnes relationnellesBDRelationnelleFichier XMLSGBDRApplicationSQLParseur XMLApplicationXPathmed@youssfi.netM.YoussfiStructure dun document XMLStructure dun document XMLDocument XMLFichier XMLQui contient Les donnesDTDOu Schmas XMLFeuille de styleXSLPour la prsentationUn document XML se compose de 3 fichiers :Qui contient Les donnesOu Schmas XMLPour dclarerLa structureDu fichier XMLXSLPour la prsentationDes donnes duFichier XML Le fichier XML stocke les donnes du document sous forme dun arbre DTD ( Data Type Definition ) ou Schmas XML dfinit la structure du fichier XML La feuille de style dfinit la mise en forme des donnes de la feuille xml med@youssfi.netM.YoussfiApplicationApplication Un service denvoi des mandats tablit mensuellement un rapport qui contient les mandats envoys. Chaque mandat concerne un expditeur et un concerne un expditeur et un destinataire. Lexpditeur est dfini par son cin, son nom, son prnom et sa ville. Le destinataire est dfini galement par son cin, son nom, son prnom et sa ville. med@youssfi.netM.YoussfiApplicationApplication Un exemple de fichier XML correspondant ce problme est le suivant : med@youssfi.netM.YoussfiTravail faireTravail faire Faire une reprsentation graphique de larbre XML Ecrire une DTD qui permet de dclarer la structure du document XML Ecrire le schma XML qui permet de dclarer la structure du document XML Crer le fichier XML valide respectant ce schma. Ecrire une feuille de style XSL qui permet de transformer le document XML en document HTML suivant :med@youssfi.netM.YoussfiXSLXSL--XPATHXPATHmed@youssfi.netM.YoussfiIntroduction XSLIntroduction XSL XSL signifie eXtensive Stylesheet Langage, ou langage extensible de feuille de style. XSL est un langage de feuille de style. Il est aussi un trs puissant manipulateur d'lments. Il permet de transformer un document XML source en un autre, permettant ainsi, l'extrme, d'en bouleverser la structure. permettant ainsi, l'extrme, d'en bouleverser la structure. XSL est un outil privilgi de production de fichiers HTML partir de sources XML. Un fichier XSL tant un fichier XML, il doit respecter les normes de syntaxe de ce format. med@youssfi.netM.YoussfiStructure dun document XSLStructure dun document XSLmed@youssfi.netM.YoussfiSlection dlments et dattributsSlection dlments et dattributs Slection dun lment: Syntaxe: L'oprateur / permet de dfinir le chemin d'accs aux lments slectionner Par exemple, section/paragraphe slectionne les lments section du noeud courant et pour chaque lment section, slectionne les lments paragraphe qu'il contient. En d'autres termes, cette expression slectionne les petits-fils paragraphe du noeud courant qui ont pour pre un noeudsection. Un nom d'lment peut tre remplac par * dans une expression. Par exemple, */paragraphe slectionne tous les petits-fils chapitrevolumePara. Par exemple, */paragraphe slectionne tous les petits-fils paragraphe quel que soit leur pre. L'utilisation de // permet d'appliquer la recherche aux descendants et non pas seulement aux fils directs. Par exemple, section//paragraphe slectionne tous les lments paragraphedescendant d'un lment section fils direct du noeud courant. Le caractre . slectionne le noeud courant. Par exemple, .//paragraphe slectionne tous les descendants paragraphe du noeud courant. La chane .. slectionne le pre du noeud courant. Par exemple, ../paragraphe slectionne tous les noeuds paragraphe frres du noeud courant. sectionPara.introPara.resumePara.med@youssfi.netM.YoussfiSlection dun lment : Utilisation du DOMSlection dun lment : Utilisation du DOM Il est galement possible de "naviguer" dans les branches de l'arborescence dudocument XML, en utilisant les ressources du DOM. Diffrents types de syntaxes sont possibles, fondes sur une expression de laforme Element[Expression]. Par exemple : elt[i] : o i est un nombre entier dsigne le i-me descendant direct d'un mme parent ayant le nom indiqu. Par exemple, paragraphe[3] dsigne le 3me enfant de l'lment courant, portant le nom d'un mme parent ayant le nom indiqu. Par exemple, paragraphe[3] dsigne le 3me enfant de l'lment courant, portant le nom paragraphe. Attention, la numrotation commence 1 et non 0. elt[position()>i] : o i est un nombre entier slectionne tous les lments prcds d'au moins i lments de mme nom comme descendants du mme parent. Par exemple, paragraphe[position()>5] slectionne tous les lments paragraphe dont le numro d'ordre est strictement suprieur 5. elt[position() mod 2 =1] : Slectionne tout lment qui est un descendant impair. med@youssfi.netM.YoussfiSlection dun lment : Utilisation du DOMSlection dun lment : Utilisation du DOM elt[souselt] : Slectionne tout lment elt qui a au moins un descendant souselt ( ne pas confondre avec elt/souselt, qui slectionne tout lment souselt ayant pour parent elt...). elt[.="valeur"] : Slectionne tout lment elt elt[.="valeur"] : Slectionne tout lment eltdont la valeur est valeur. elt[first-of-any()] : Slectionne le premier lment elt fils de l'lment courant. elt[last-of-any()] : Slectionne le dernier lment elt fils de l'lment courant. med@youssfi.netM.YoussfiSlection dun AttributSlection dun Attribut Les attributs d'un lment sont slectionns en faisant prcder leur nom par le caractre @. Les rgles relatives la slection des lments s'appliquent galement aux attributs : section[@titre] : slectionne les lments section qui ont un attribut titre. section[@titre='Introduction'] : slectionne les lments section[@titre='Introduction'] : slectionne les lments section dont l'attribut titre a pour valeur Introduction. Si l'on veut afficher le contenu de l'attribut, on le fait prcder du caractre @. Par exemple, permet l'affichage du titre de l'lment paragraphe fils de l'lment courant.med@youssfi.netM.YoussfiOprateurs logiquesOprateurs logiques Les oprateurs logiques not(), and et orpeuvent tre utiliss, comme par exemple section[not(@titre)] slectionne les lments section qui n'ont pas d'attribut titre. titre. Attention : lorsque, dans la DTD par exemple, l'attribut est dfini comme ayant une valeur par dfaut, mme s'il n'est pas explicit dans le document XML, il est considr comme existant. med@youssfi.netM.YoussfiElments de XSLT Elments de XSLT Cet lment permet d'insrer la valeur d'un nud dans la transformation. Ce nud est valu en fonction d'une expression. Cette expression peut correspondre un lment, un attribut ou tout autre nud contenant une valeur. L'utilisation de cet lment est de la forme : Elments de XSLT Elments de XSLT Cet lment insre un nouvel lment dans la transformation. Le nom de l'lment est donn par l'attribut name. L'utilisation de cet lment est de la forme : name correspond au nom de l'lment crer. name correspond au nom de l'lment crer. use-attribute-sets correspond au jeu d'attributs associer l'lment cr. Par exemple : permet de crer dans le fichier HTML un lment de paragraphe renfermant le contenu de l'lment texte du document XML. textemed@youssfi.netM.YoussfiElments de XSLT Elments de XSLT Cet lment dfinit un attribut et l'ajoute l'lment rsultat de la transformation. L'utilisation de cet lment est de la forme : valeur name correspond au nom de l'attribut ajouter dans le contexte courant. valeur correspond la valeur lui donner. Par exemple : test.gif permet d'ajouter l'lment image l'attribut src et de lui affecter la valeur test.gif, ce qui a pour effet de produire en sortie l'lment suivant : On aurait pu, de manire tout fait quivalente, crire test.gif med@youssfi.netM.YoussfiElments de XSLT Elments de XSLT Cre une boucle dans laquelle sont appliques des transformations. Son utilisation est de la forme : .. .. select correspond au jeu de nuds devant tre parcouru par la boucle. Exemple d'utilisation : med@youssfi.netM.YoussfiElments de XSLT Elments de XSLT Permet dappliquer les transformation un jeu dlments en utilisant les templatesdfinis. Exemple: Exemple:.med@youssfi.netM.YoussfiElments de XSLT Elments de XSLT Cet lment permet d'effectuer un tri sur un jeu de nuds. Il doit tre plac soit dans un lment soit dans un lment . L'utilisation de cet lment est de la forme : select permet de spcifier un nud comme cl de tri. data-type correspond au type des donnes trier. Dans le cas o le type est number, les donnes sont converties puis tris. order correspond l'ordre de tri. Cet attribut vaut ascending ou descending. lang spcifie quel jeu de caractres utiliser pour le tri ; par dfaut, il est dtermin order correspond l'ordre de tri. Cet attribut vaut ascending ou descending. lang spcifie quel jeu de caractres utiliser pour le tri ; par dfaut, il est dtermin en fonction des paramtres systme. case-order indique si le tri a lieu sur les majuscules ou minuscules en premier. Par exemple : Dans cet exemple, la liste des livres est classe dans l'ordre alphabtique dcroissant des noms d'auteur.ymed@youssfi.netM.YoussfiElments de XSLT Elments de XSLT Cet lment permet la fragmentation du modle dans certaines conditions. Il est possible de tester La prsence d'un attribut, La prsence d'un lment, De savoir si un lment est bien le fils d'un autre, De tester les valeurs des lments et attributs. L'utilisation de cet lment est de la forme : Action Exemple d'utilisation: Ce Livre est en franaismed@youssfi.netM.YoussfiElments de XSLT Elments de XSLT Cet lment permet de dfinir une liste de choix et d'affecter chaque choix une transformation diffrente. Chaque choix est dfini par un lment et un traitement par dfaut peut tre spcifi grce l'lment . Exemple d'utilisation : Ce livre est en franais.Ce livre est en anglais.Ce livre est dans une langue non rpertorie.med@youssfi.netM.YoussfiElments de XSLT Elments de XSLT L'lment sert crer les variables dans XSLT. Il possde les attributs suivants : name : cet attribut est obligatoire. Il spcifie le nom de la variable. select : expression XPath qui spcifie la valeur de la variable. Par exemple : On notera la prsence des guillemets imbriqus quand il s'agit d'affecter On notera la prsence des guillemets imbriqus quand il s'agit d'affecter une chane de caractres une variable. La porte d'une variable est limite aux lments-frres et leurs descendants. Par consquent, si une variable est dclare dans une boucle xsl:for-each ou un lment xsl:choose ou xsl:if, on ne peut s'en servir en-dehors de cet lment. Une variable est appele en tant prcde du caractre $ : . On peut utiliser une variable pour viter la frappe rptitive d'une chane de caractres, et pour faciliter la mise jour de la feuille de style.med@youssfi.netM.YoussfiElments de XSLT Elments de XSLT L'lment peut tre appel indpendamment d'une slection d'un nud. Pour cela, il faut renseigner l'attribut name, et l'appeler l'aide de l'lment .. Par exemple Il suffit alors de l'appeler avec med@youssfi.netM.YoussfiElments de XSLT Elments de XSLT et Un paramtre est cr avec l'lment , et pass un modle avec l'lment . Les deux ont deux attributs : name, obligatoire, qui donne un nom au paramtre ; select, une expression XPath facultative permettant de donner une valeur par dfaut au paramtre. Par exemple, on peut imaginer un template permettant Par exemple, on peut imaginer un template permettant d'valuer le rsultat d'une expression polynmiale : Ce template peut tre appel comme suit: permet d'afficher le rsultat de 2*3.4^2-5*3.4+2. med@youssfi.netM.YoussfiXPATHXPATH Comme son nom l'indique, XPath est une spcification fonde sur l'utilisation de chemin d'accs permettant de se dplacer au sein du document XML. Le XPath tablit un arbre de noeuds correspondant au document XML. La syntaxe de base du XPath est fonde sur l'utilisation d'expressions. d'expressions. Chaque valuation d'expression dpend du contexte courant. Une des expressions les plus importantes dans le standard XPath est le chemin de localisation. Cette expression slectionne un ensemble de nuds partir d'un nud contextuel. med@youssfi.netM.YoussfiXPATH : Chemin de localisationXPATH : Chemin de localisation La syntaxe de composition d'un chemin de localisation peut tre de type abrg ou non abrg. Un chemin de localisation est compos de trois parties : un axe, dfinissant le sens de la relation entre le nud courant et le jeu de nuds localiser; un nud spcifiant le type de nud localiser; 0 n prdicats permettant d'affiner la recherche sur le jeu de nuds rcuprer. 0 n prdicats permettant d'affiner la recherche sur le jeu de nuds rcuprer. Par exemple, dans le chemin child::section[position()=1], child est le nom de l'axe, section le type de nud localiser (lment ou attribut) [position()=1] est un prdicat. Les doubles :: sont obligatoires. Dans cet exemple, on cherche dans le nud courant, un nud section qui est le premier nud de son type. med@youssfi.netM.YoussfiXPATH : AxesXPATH : Axes child : contient les enfants directs du nud contextuel. descendant : contient les descendants du nud contextuel. Un descendant peut tre un enfant, un petit-enfant... parent : contient le parent du nud contextuel, s'il y en a un. ancestor : contient les anctres du nud contextuel. Cela comprend son pre, le pre de son pre... following : contient tous les nuds du mme nom que le nud following : contient tous les nuds du mme nom que le nud contextuel situs aprs le nud contextuel dans l'ordre du document, preceding : contient tous les nuds du mme nom que le nud contextuel situs avant lui dans l'ordre du documentmed@youssfi.netM.YoussfiXPATH : AxesXPATH : Axes attribute : contient les attributs du nud contextuel ; self : contient seulement le nud contextuel. descendant-or-self : contient le nud contextuel et ses descendants. ancestor-or-self : contient le nud contextuel et ses anctres. Cet axe contiendra toujours le nud racine. med@youssfi.netM.YoussfiXPATH : PrdicatsXPATH : Prdicats Chaque expression est value et le rsultat est un boolen. Par exemple, section[3] est quivalent section[position()=3]. Ces deux expressions sont quivalentes : chacune d'entre elles produit un boolen. d'entre elles produit un boolen. Dans le premier cas, il n'y a pas de test, on slectionne simplement le troisime lment, l'expression est obligatoirement vraie. Dans le second cas, un test est effectu par rapport la position de l'lment section ; lorsque la position sera gale 3, l'expression sera vraie.med@youssfi.netM.YoussfiXPATH : ExemplesXPATH : Exemples child::para : slectionne l'lment para enfant du nud contextuel. (abrviation : para) child::* : slectionne tous les lments enfants du nud contextuel. (abrviation : *) child::text() : slectionne tous les nuds de type texte du nud contextuel. (abrviation : text()) child::node() : slectionne tous les enfants du nud contextuel, quel que soit leur type. attribute::name : slectionne tous les attributs name du nud contextuel. (abrviation : @name)attribute::* : slectionne tous les attributs du nud contextuel. (abrviation : attribute::* : slectionne tous les attributs du nud contextuel. (abrviation : @*) descendant::para : slectionne tous les descendants para du nud contextuel. ancestor::div : slectionne tous les anctres div du nud contextuel. ancestor-or-self::div : slectionne tous les anctres div du nud contextuel et le nud contextuel lui-mme si c'est un div. //equipe[not(.=preceding::equipe)] : slectionne tous les lments equipedont la valeur est diffrente des quipes prcdentes.med@youssfi.netM.YoussfiXpath: Fonctions de baseXpath: Fonctions de base Manipulation de nuds Fonctions retournant un nombre : last() : retourne un nombre gal l'index du dernier nud dans le contexte courant. position() : retourne un nombre gal la position() : retourne un nombre gal la position du nud dans le contexte courant. id(objet), permet de slectionner les lments par leur identifiant. med@youssfi.netM.YoussfiXpath: Fonctions de baseXpath: Fonctions de base Manipulation de chanes de caractres string(noeud?) : cette fonction convertit un objet en chane de caractres. concat(chaine1, chaine2, chaine*) : retourne une chane rsultant de la concatnation des arguments concatnation des arguments string-length(chaine?) : cette fonction retourne le nombre de caractres de la chane. Dans le cas o l'argument est omis, la valeur retourne est gale la longueur de la valeur textuelle du nud courant med@youssfi.netM.YoussfiXpath: Fonctions de baseXpath: Fonctions de base Manipulation de boolens Outre la fonction logique not(), ainsi que les fonctions true() et false(), une fonction utile est lang(chaine). Elle teste l'argument chaine par rapport l'attribut xml:lang du nud contextuel ou de son plus proche anctre dans le cas o le nud contextuel ne contient pas d'attribut de ce type. La fonction retourne true si l'argument est bien la langue utilise ou si la langue utilise est un sous-langage de l'argument (par ou si la langue utilise est un sous-langage de l'argument (par exemple, en//us). Sinon elle retourne false. Manipulation de nombres floor(nombre) : retourne le plus grand entier infrieur l'argument pass la fonction. ceiling(nombre) : retourne le plus petit entier suprieur l'argument pass la fonction. round(nombre) : retourne l'entier le plus proche de l'argument pass la fonction. med@youssfi.netM.YoussfiAPPLICATIONS DE APPLICATIONS DE XMLXMLM.Youssfi med@youssfi.netXQueryXQueryPar M.YoussfiPar M.Youssfimed@youssfi.netM.Youssfi med@youssfi.netXQueryXQuery, un langage de requte, un langage de requte XQuery, langage non XML, permet de traiter des ressources XML (fichier ou SGBD-XML) pour obtenir des structures XML. C'est un langage fonctionnel typ et XML. C'est un langage fonctionnel typ et bas sur la manipulation de liste de noeuds XML.M.Youssfi med@youssfi.netRequte Requte XQueryXQuery XQuery peut tre vu comme un langage fonctionnel manipulant des squences d'items. Une requte XQuery est donc une expression portant sur des items (squences d'arbres XML ou de valeurs atomiques). Chaque expression retourne une valeur Une expression peut tre : une valeur atomique, un noeud XML ou une squence ; une variable; une variable; une expression arithmtique ou logique (les oprateurs de base sont ceux d'XPath 2.0) ; une union, intersection ou diffrence de squences ; une requte XPath 2.0 ; une fonction prdfinie ou dfinie en local; un des oprateurs spcifiques (alternative "if-then-else", boucle, etc.).M.Youssfi med@youssfi.netExemple de fichier XML : factures.xmlExemple de fichier XML : factures.xmlM.Youssfi med@youssfi.netExemple 1 de Exemple 1 de XQueryXQuery{doc("factures.xml")/factures/facture[@num=1]} Retourne la facture numro 1 du documents factures.xmlM.Youssfi med@youssfi.netExemple 2 de Exemple 2 de XQueryXQuery{sum(doc("factures.xml")/factures/facture[@num=1]/detail/produit/@montant)}86380 Retourne la somme des montant des produits de la facture numro 1M.Youssfi med@youssfi.netExemple 3 Exemple 3 XQueryXQuery{for $f in doc("factures.xml")/factures/facture return{ sum($f/detail/produit/@montant)} }863809140091400 Retourne la somme des montant des produits de chaque facture.M.Youssfi med@youssfi.netExemple 4 Exemple 4 XQueryXQuery {for $f in doc("factures.xml")/factures/facture let $total:=sum($f/detail/produit/@montant)where $total>90000return{$total}}9140091400 Retourne la somme des montant des produits des factures dont le total est suprieur 90000M.Youssfi med@youssfi.netRequte Requte XQueryXQuery Une requte XQuery est compose de trois parties : une ligne d'entte commence par "xquery" et contenant la version et, ventuellement l'encodage du document ; xquery version "1.0" encoding "utf-8"; un ensemble de dclarations :xquery version "1.0" encoding "utf-8";Dclarations un ensemble de dclarations : dclarations de variables ou constantes, dclarations de fonctions utilisateur locales, importation de modules (bibliothques XQuery), dtermination du schma du rsultat, dtermination des espaces de nom et de leur utilisation, dtermination du format du rsultat et autres paramtres ; l'expression XQuery excuter. La ligne d'entte et les dclarations sont toutes termines par ";".DclarationsExpressions XQueryM.Youssfi med@youssfi.netOprateurs de Oprateurs de XQueryXQuery Les oprateurs arithmtiques et logiques sont les mmes que ceux de XPath 2.0. Oprateurs de comparaison sur les valeurs atomiques ("eq", "ne", "gt", "ge", "lt", "le") et sur les squences ("=", "!=", ">", ">=", "Oprateur FLWOEROprateur FLWOER L'oprateur FLWOR est un oprateur complexe qui permet de parcourir une ou plusieurs squences (et d'effectuer ainsi des oprations de type "jointure"). La forme de cet oprateur comprend un certain nombre de clauses dans l'ensemble suivant (la nombre de clauses dans l'ensemble suivant (la premire lettre de chacune des clauses forme le sigle FLWOR) : for let where order by return M.Youssfi med@youssfi.netLa clause forLa clause for permet de parcourir une ou plusieurs squences en positionnant la valeur d'autant de variables. Une variable XQuery commence par un "$". Si plusieurs squences sont prsentes, la clause Si plusieurs squences sont prsentes, la clause parcourra le produit cartsien des diffrentes squences. Cette clause est de la formes : for $v1 in Seqf1, $v2 in Seqf2, $vn in Seqfn'. Exemple : for $i in (1 to 3), $j in (4 to 6)M.Youssfi med@youssfi.netLa clause letLa clause let La clause "let" permet de positionner des variables "locales" au n-uplet courant. Cette clause permet souvent de simplifier grandement les filtres, voire la gnration du rsultat. rsultat. Elle est de la forme : let $loc1 := $Seql1, $loc2 := $Seql2, , $locm := $SeqlmM.Youssfi med@youssfi.netLa clause La clause wherewhere La clause "where" est une clause de filtre. Elle permet de ne slectionner que les n-upletsqui satisfont l'expression boolenne qu'elle dcrit. Cette expression comporte donc Cette expression comporte donc ncessairement une ou plusieurs variables d'une clause "for" ou d'une clause "let" prcdente. Elle est de la forme : where cond($v1, $v2, ..., $vn, $loc1, $loc2, ..., $locm)M.Youssfi med@youssfi.netLa clause La clause orderorder byby La clause "order by" dcrit un critre d'ordre pour la squence de valeurs qui sera gnre, fonction des variables des clauses "for" ou "let". Elle est de la forme : order by $critre1 dir1, , $critrep dirp order by $critre1 dir1, , $critrep dirp o les "diri" sont pris dans { ascending, descending}. Ce dernier peut tre suivit de "empty greatest" ou "empty least".M.Youssfi med@youssfi.netLa clause returnLa clause return La clause "return" permet de construire un rsultat pour chacun des n-uplets. Elle est de la forme return exp o "exp" est une expression XQuery. o "exp" est une expression XQuery.M.Youssfi med@youssfi.netExemple 1 de FLOWERExemple 1 de FLOWERfor $i in (1 to 3), $j in (4 to 6)let $k:= ($i to $ j)return {$i}/{$j}/{$k} Produit le rsultat suivant :1/4/1 2 3 41/5/1 2 3 4 51/6/1 2 3 4 5 62/4/2 3 42/5/2 3 4 52/6/2 3 4 5 63/4/3 43/5/3 4 53/6/3 4 5 6 Produit le rsultat suivant :M.Youssfi med@youssfi.netExemple 2 de FLOWERExemple 2 de FLOWERxquery version "1.0" encoding "utf-8"; {for $f in doc("factures.xml")/factures/facture let $total:=sum($f/detail/produit/@montant)where $total>90000order by $f/@num descendingreturn{$total}{$total}}9140091400 Retourne les factures dont le total est suprieur 90000 classes par ordre dcroissant des numros de factutueM.Youssfi med@youssfi.netExemple 2 de FLOWERExemple 2 de FLOWER {for $f in doc("factures.xml")/factures/facture let $total:=sum($f/detail/produit/@montant)where some $p in $f/detail/produit satisfies $p/@designation eq "PC212"order by $f/@num descendingreturn{$total}}}86380 Retourne le total des factures dont le total dont la dsignation de lun des produits est PC212 , classes par ordre dcroissant des numros de factutueM.Youssfi med@youssfi.netExemple 3 de FLOWERExemple 3 de FLOWER {let $xmlDoc:=doc("factures.xml")for $c in $xmlDoc//client[not(@codeClient=preceding::client/@codeClient)]let $nbFactures:=count($xmlDoc//facture[client/@codeClient=$c/@codeClient])let $totalFactures:=sum( $xmlDoc//facture[client/@codeClient=$c/@codeClient]/detail/produit/@montant)returnreturn} Retourne pour chaque client le nombre et le total de ses facturesM.Youssfi med@youssfi.netXQueryXQuery : Langage de : Langage de programmation programmation XQuery n'est pas seulement un langage de requte " la SQL". C'est aussi un vrai langage de programmation fonctionnel. Il possde un certain nombre de Il possde un certain nombre de caractristiques qui, couples quelques extensions, en font un outil intressant pour du dveloppement d'applications Web. Nous allons voquer ici quelques caractristiques de bases.M.Youssfi med@youssfi.netLes variablesLes variables Nous avons dj abord un peu la question des variables puisqu'elles sont utilises dans les structures "some" et "every", mais aussi dans la structure "FLWOR". Cependant, XQuery propose aussi un mcanisme Cependant, XQuery propose aussi un mcanisme de variables globales internes ou externes. Les variables internes sont dclares avant la requte selon la forme declare variable $v [as type] := expression_XQuery ; Le type peut tre omis, il sera alors estim en fonction de la valeur retourne par l'expression.M.Youssfi med@youssfi.netLes types de variablesLes types de variables Les types, aussi bien pour les variables que pour les signatures des fonctions, sont ceux de XSD avec, en plus, des types spcifiques. La figure (http://www.w3.org/TR/xpath- La figure (http://www.w3.org/TR/xpath-functions/type-hierarchy.png ). les rappelleM.Youssfi med@youssfi.netDclaration de variables externesDclaration de variables externes Les variables externes sont dclares de la manire suivante : declare variable $v [as type] external; Exemple : Exemple : declare variable $v as xs:double external;M.Youssfi med@youssfi.netExemple de dclaration de variables globalesExemple de dclaration de variables globalesdeclare variable $xmlDoc:=doc("factures.xml");declare variable $max:=100000;declare variable $clients:=for $c in $xmlDoc//client[not(@codeClient=preceding::client/@codeClient)]let $nbFactures:=count($xmlDoc//facture[client/@codeClient=$c/@codeClient])let $totalFactures:=sum( $xmlDoc//facture[client/@codeClient=$c/@codeClient]/detail/produit/@montant)return;for $c in $clientswhere $c/@totalFact>$maxreturn $c Retourne pour chaque client le nombre et le total de ses factures dont le total est suprieur la variable globale maxM.Youssfi med@youssfi.netFonctions et modulesFonctions et modules De trs nombreuses fonctions prdfinies ( http://www.w3.org/TR/xpath-functions/) existent. Les fonctions sont prsentes avec une signature sur les paramtres et le retour de signature sur les paramtres et le retour de fonction. Pour les comprendre, il faut juste savoir que les oprateurs sur les types signifient : "*" : une squence qui peut tre vide ; "+" : une squence non vide ; "?" : ventuellement la squence vide.M.Youssfi med@youssfi.netFonctions et modulesFonctions et modules Pour illustrer ces oprateurs, voici quelques exemples parmi les trs nombreuses fonctions disponibles : fn:count($arg as item()*) as xs:integer : la fonction "count" prend en argument une squence, ventuellement vide, d'items et retourne un entier ; fn:string-length($arg as xs:string?) as xs:integer : la fonction "string-length" prend en paramtre une chane de caractres et retourne un entier (elle peut ne pas avoir de paramtre); fn:sum($arg as xs:anyAtomicType*) as xs:anyAtomicType" : elle prend en argument une squence de type de base et retourne un type de base ;M.Youssfi med@youssfi.netFonctions et modulesFonctions et modules fn:tokenize($input as xs:string?, $pattern as xs:string) as xs:string*" : elle prend une chane de caractres et un motif et retourne une squence de chanes de caractres. Quelques exemples supplmentaires classs par thme : Numriques : min, max, sum, avg, count, abs, ceiling, floor, Numriques : min, max, sum, avg, count, abs, ceiling, floor, round... Chanes de caractres : compare, concat, substring, string-length,starts-with, ends-width... Dates : date, current-date Squences : zero-or-one, one-or-more, exactly-one, empty, exists, distinct-values, reverse,...M.Youssfi med@youssfi.netFonctions localesFonctions locales Il est possible de proposer ses propres fonctions. Pour cela, dans la partie des dclarations, il suffit de dcrire sa fonction de la manire suivante : "declare function nom signature {code} ;" o : "nom" : soit dans un espace de noms dclar soit prfix par local (espace de noms des fonctions pas dfaut) ;"nom" : soit dans un espace de noms dclar soit prfix par local (espace de noms des fonctions pas dfaut) ; "signature" : ( liste des paramtres, ventuellement typs ) ["as" type de retour] ; "code" : n'importe quelle expression XQuery. Comme premier exemple simple, proposons une fonction permettant de construire une squence de nombres pairs entre 2 et une valeur donne en paramtre. Nous proposons ici deux versions : une avec les types explicites et une sans expliciter les types.M.Youssfi med@youssfi.netExemple de fonction localesExemple de fonction localesxquery version "1.0" encoding "utf-8";declare function local:liste_entier_pair($max as xs:integer) as xs:integer* {(2 to $max)[. mod 2 = 0]} ;{local:liste_entier_pair(10)}xquery version "1.0" encoding "utf-8";declare function local:liste_entier_pair($max ) {Fonction avec les types explicites2 4 6 8 10 Retourne les nombre paires entre 0 et 10 en utilisant la fonction locale.declare function local:liste_entier_pair($max ) {(2 to $max)[. mod 2 = 0]} ;{local:liste_entier_pair(10)}Fonction non typesM.Youssfi med@youssfi.netExemple2 de fonction localesExemple2 de fonction localesdeclare function local:facturesClient($client as element(client)) as element(facture)*{doc("factures.xml")//facture[client/@codeClient=$client/@codeClient]};{let $c:=doc("factures.xml")//client[@codeClient="c1"]return local:facturesClient($c)} Factures du client dont le code est c1M.Youssfi med@youssfi.netLes modulesLes modules Comme pour tout langage de programmation, il est possible de mettre en place des bibliothques de fonctions. En XQuery, elles s'appellent des modules. Un module consiste en un programme XQuery sans requte principale. On y trouve donc toutes les dclarations autorises dans un programme XQuery. programme XQuery. Pour caractriser un module, il suffit, en tout dbut, d'indiquer son espace de noms : module namespace mon-module = 'ma:uri'; Pour utiliser un module, il suffit, dans l'entte, d'indiquer l'espace de noms et le(s) fichier(s) qui le dcri(ven)t : import module namespace mon-module = 'ma:uri' at'monModule1.xquery', 'monModule2.xquery';"M.Youssfi med@youssfi.netExemple de moduleExemple de modulemodule namespace facturation="ma:enset.bp";(:Dclaration d'une variable globale :)declare variable $facturation:code as xs:string:="c1";(:Dclaration d'une fonction qui retourne les nombres paires :)declare function facturation:liste_entier_pair($max ) {(2 to $max)[. mod 2 = 0]} ;} ;(:Dclaration d'une fonction qui retournes les factures d'un client :)declare function facturation:facturesClient($client as element(client)) as element(facture)*{doc("factures.xml")//facture[client/@codeClient=$client/@codeClient]}; Module qui dclare une variable globale max et deux fonctions.M.Youssfi med@youssfi.netUtilisation dun moduleUtilisation dun moduleimport module namespace fact="ma:enset.bp" at "module1.xquery";{let $c:=doc("factures.xml")//client[@codeClient=$fact:code]return fact:facturesClient($c)} Retourne les factures des clients c1 .M.Youssfi med@youssfi.netJDOMJDOMMohamed Youssfimed@youssfi.netM.Youssfi med@youssfi.netJDOM ?JDOM ? JDOM est une API du langage Java dveloppe indpendamment de Sun Microsystems. Elle permet de manipuler des donns XML plus simplement qu'avec les API classiques. Son utilisation est pratique pour tout dveloppeur Java et M.Youssfi Son utilisation est pratique pour tout dveloppeur Java et repose sur les API XML de Sun. JDOM permet donc de construire des documents, XML, de naviguer dans leur structure, s'ajouter, de modifier, ou de supprimer leur contenu. med@youssfi.netOrigines de JDOMOrigines de JDOM Les Parseurs SAX SAX est l'acronyme de Simple API for XML. Ce type de parseur utilise des vnements pour piloter le traitement d'un fichier XML. JDOM utilise des collections SAX pour parser les fichiers XML. Les Parseurs DOM : DOM est l'acronyme de Document Object Model. C'est une spcification du W3C pour proposer une API qui permet de modliser, de parcourir et de manipuler un document XML. Le principal rle de DOM est de fournir une reprsentation mmoire d'un M.Youssfi Le principal rle de DOM est de fournir une reprsentation mmoire d'un document XML sous la forme d'un arbre d'objets et d'en permettre la manipulation (parcours, recherche et mise jour). A partir de cette reprsentation (le modle), DOM propose de parcourir le document mais aussi de pouvoir le modifier. Ce dernier aspect est l'un des aspect les plus intressant de DOM. DOM est dfini pour tre indpendant du langage dans lequel il sera implment. JDOM utilise DOM pour manipuler les lments d'un Document Object Model spcifique (cr grce un constructeur bas sur SAX).med@youssfi.netCrer un document XML avec JDOMCrer un document XML avec JDOM LAPI JDOM : Il vous faut dans un premier temps tlcharger la dernire version de JDOM disponible cette adresse : http://www.jdom.org/dist/binary/. Il suffit ensuite de rendre accessible le fichier /build/jdom.jar, en le plaant dans votre classpath. Cration dun document XML avec JDOM: La cration d'un fichier XML en partant de zro est des plus simple. Il suffit de construire chaque lment puis de les ajouter les uns aux autres de faon logique. M.Youssfilogique. Un noeud est une instance de org.jdom.Element. Nous commenons donc par crer une classe JDOM1 qui va se charger de crer l'arborescence suivante : Katib med@youssfi.netExemple dapplication pour la cration dun document XML avec JDOMExemple dapplication pour la cration dun document XML avec JDOMimport java.io.*;import org.jdom.*;import org.jdom.output.*;public class App1 {public static void main(String[] args) throws IOException {/*Crer llment racine */Element racine = new Element("personnes");/*Crer un document JDOM bas sur llment racine*/Document document = new Document(racine);/*Crer un nouveau Element xml etudiant */Element etudiant = new Element("etudiant");/* Ajouter cet lment la racine */racine.addContent(etudiant);/*Crer un nouveau attribut classe dont la valeur est P2 */M.Youssfi/*Crer un nouveau attribut classe dont la valeur est P2 */Attribute classe = new Attribute("classe","P2");/* Ajouter cet attrubut llment etudiant */etudiant.setAttribute(classe);Element nom = new Element("nom"); /* Crer llment nom */nom.setText("Katib"); /* Dfinir le texte de nom */etudiant.addContent(nom); /* ajouter nom etudiant *//* Afficher et enregistrer le fichier XML */XMLOutputter sortie=new XMLOutputter(Format.getPrettyFormat());sortie.output(document, System.out);sortie.output(document, new FileOutputStream("EX1.xml"));}}med@youssfi.netParcourir un document XML avec JDOMParcourir un document XML avec JDOM Parser un fichier XML revient transformer un fichier XML en une arborescence JDOM. Nous utiliserons pour cela le constructeur SAXBuilder, bas, comme son nom l'indique, sur l'API SAX. Crez tout d'abord le fichier suivant dans le rpertoire contenant votre future classe JDOM2 : katibM.Youssfimohamedaminetalbisantelmed@youssfi.netAfficher les noms des tudiants du fichier XMLAfficher les noms des tudiants du fichier XMLimport java.io.*;import java.util.List;import org.jdom.*;import org.jdom.input.SAXBuilder;public class App2 {public static void main(String[] args) throws Exception {/* On cre une instance de SAXBuilder */SAXBuilder sb=new SAXBuilder();/* On cre un nouveau document JDOM avec en argument le fichier XML */Document document=sb.build(new File("EX2.xml"));/*On initialise un nouvel lment racine avec l'lment racine du document.*/Element racine=document.getRootElement();M.Youssfi/* On cre une List contenant tous les noeuds "etudiant" de l'Elementracine */List etds=racine.getChildren("etudiant");/* Pour chaque Element de la liste etds*/for(Element e:etds){/*Afficher la valeur de l'lment nom */System.out.println(e.getChild("nom").getText());}}}med@youssfi.netModifier une arborescence avec JDOMModifier une arborescence avec JDOM Quelques mthodes de JDOM: addContent : Ajoute le contenu de l'argument la fin du contenu d'un Element. On peut spcifier un index pour l'inserer la position voulu. clone : Retourne un clone parfait de l'Element. cloneContent : on ne copie que le contenu. removeAttribute : Supprime un attribut d'un Element removeChild : Supprime le premier enfant portant ce nom. removeChildren : Supprime tous les enfants ayant ce nom. removeContent : Supprime l'intgralit d'un noeud donn en argument ou par sa M.Youssfi removeContent : Supprime l'intgralit d'un noeud donn en argument ou par sa position. removeContent accept aussi les filtres, tout comme getContent vu prcdement. setAttribute : permet la fois de crer un attribut et d'en modifier sa valeur. setContent : Remplace le contenu d'un Element. On peut spcifier un index si l'on ne veut pas tout remplacer. setName : Change le nom de l'Element. setText : Change le text contenu par l'Element. TEXT toString : Retourne une reprsentation de l'Element sous forme de chaine. med@youssfi.netParseur SAX DOMParseur SAX DOM Pour traiter la totalit dun document XML au moment de sa lecture, il faut utiliser un parseur SAX. JDK fournit un parseur DOM et un JDK fournit un parseur DOM et un parseur SAX qui peuvent tre utilis sans passer par JDOM.M.Youssfi med@youssfi.netInterprter un fichier XMLInterprter un fichier XMLimport javax.xml.parsers.*;import org.xml.sax.*;import org.xml.sax.helpers.*;public class SaxParser extends DefaultHandler {public SaxParser() {try {SAXParserFactory parserFactory=SAXParserFactory.newInstance();SAXParserFactory parserFactory=SAXParserFactory.newInstance();SAXParser saxParser=parserFactory.newSAXParser();saxParser.parse("EX3.xml",this);} catch (Exception e) { e.printStackTrace(); }}M.Youssfi med@youssfi.netInterprter un fichier XMLInterprter un fichier XML@Overridepublic void startDocument() throws SAXException {System.out.println("Dbut Document");}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// Dbut de chaque lmentSystem.out.println("Elment :"+qName);System.out.println("\t Attributs:");for(int i=0;iInterprter un fichier XMLInterprter un fichier XML@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// Fin de chaque lment}@Overridepublic void endDocument() throws SAXException {public void endDocument() throws SAXException {// Fin du document}public static void main(String[] args) {new SaxParser();}}M.Youssfi med@youssfi.netPasser dun document DOM JDOMPasser dun document DOM JDOM Il vous arrivera parfois de devoir travailler sur un document DOM. Nous allons voir comment transformer un document DOM en un document JDOM et vis versa. Voici une mthode qui reoit en argument un document DOM et retourne un document JDOM. org.jdom.Document DOMtoJDOM(org.w3c.dom.DocumentdocumentDOM) throws ExceptionM.Youssfiorg.jdom.Document DOMtoJDOM(org.w3c.dom.DocumentdocumentDOM) throws Exception{/* On utilise la classe DOMBuilder pour cette transformation */DOMBuilder builder = new DOMBuilder();org.jdom.Document documentJDOM = builder.build(documentDOM);return documentJDOM;}med@youssfi.netPasser dun document JDOM DOMPasser dun document JDOM DOM Et maintenant, voici la fonction inverse qui reoit en argument un document JDOM et qui retourne un document DOM. Vous remarquerez la similitude avec la fonction prcdente. org.w3c.dom.Document DOMtoJDOM(org.jdom.DocumentdocumentJDOM) throws ExceptionM.Youssfiorg.w3c.dom.Document DOMtoJDOM(org.jdom.DocumentdocumentJDOM) throws Exception{/* On utilise la classe DOMOutputter pour cette transformation */DOMOutputter domOutputter = new DOMOutputter();org.w3c.dom.Document documentDOM = domOutputter.output(documentJDOM);return documentDOM;}med@youssfi.netJDOM et XSLTJDOM et XSLT Grce l'API JAXP et TraX il est trs facile de faire des transformation XSLT sur un document JDOM. Dans l'exemple suivant nous allons crer M.Youssfi Dans l'exemple suivant nous allons crer une mthode qui prend en entre un document JDOM et le nom d'un fichier XSL et qui cre en sortie un fichier XML transform. med@youssfi.netFichier XMLFichier XMLkatibmohamedamineM.Youssfitalbisantelmed@youssfi.netFichier XSL pour gnrer une sortie HTMLFichier XSL pour gnrer une sortie HTMLNomPrnomsM.Youssfimed@youssfi.netExemple de transformation XSL avec Exemple de transformation XSL avec JDOMJDOMimport java.io.*; import org.jdom.*;import org.jdom.input.SAXBuilder;import javax.xml.transform.*;import javax.xml.transform.stream.StreamSource;public class JDOM4{public static void main(String[] args) {SAXBuilder sb=new SAXBuilder();M.YoussfiSAXBuilder sb=new SAXBuilder();try {Document jDomDoc=sb.build(newFile("Exercice2.xml"));outputXSLT(jDomDoc, "classe.xsl");} catch (Exception e) {e.printStackTrace();}}med@youssfi.netExemple de transformation XSL avec JDOMExemple de transformation XSL avec JDOMpublic static void outputXSLT(org.jdom.Document documentJDOMEntree,StringfichierXSL){/*Document JDOMResult, rsultat de la transformation TraX */JDOMResult documentJDOMSortie = new JDOMResult();/* Document JDOM aprs transformation */org.jdom.Document resultat = null;try{/* On dfinit un transformer avec la source XSL qui va permettre la transformation */TransformerFactory factory = TransformerFactory.newInstance();Transformer transformer = factory.newTransformer(newStreamSource(fichierXSL));M.YoussfiStreamSource(fichierXSL));/* On transforme le document JDOMEntree grce notre transformer. La mthoded transform() prend en argument le document d'entree associ au transformer et un document JDOMResult, rsultat de la transformation TraX */transformer.transform(new org.jdom.transform.JDOMSource(documentJDOMEntree), documentJDOMSortie);/* Pour rcuprer le document JDOM issu de cette transformation, il faut utiliser la mthode getDocument() */resultat = documentJDOMSortie.getDocument();/* On cre un fichier xml corespondant au rsultat */XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());outputter.output(resultat, new FileOutputStream("resultat.htm"));} catch(Exception e){}}}med@youssfi.netFichier HTML gnr : resultat.htmFichier HTML gnr : resultat.htmNomPrnomsCynOM.YoussfiCynONicolasSuperwomanDon Corleonemed@youssfi.netApplicationApplication 1- Crer une application java qui permet de crer le fichier XML suivant : meteo.xmlM.Youssfi med@youssfi.netApplicationApplication 2- Crer une application java qui permet de lire le fichier XML cr prcdemment, de lui ajouter un nouveau lment mesure marqu en rouge et denregistrer le nouveau fichier XML sous le nom meteo2.xml :M.Youssfi med@youssfi.netApplicationApplication 3 - Crer une application java qui permet de lire le fichier XML meteo2.xml et dafficher toutes les mesures comme suit:Date de mes:2006-1-1Ville:casa; Temp:25Ville:rabat; Temp:28Date de mes:2006-1-2Ville:casa; Temp:30Ville:rabat;Temp:32M.Youssfi med@youssfi.netApplicationApplication 4 Crer une feuille de style XSL qui permet de transformer le document XML meteo2.xml en document HTML suivant : 5 Crer une application java qui permet dafficher la transformation du fichier XML meteo2.xml par la feuille de style XSL que vous venez de crer. Enregistrer la sortie dans un fichier m.htm M.Youssfi med@youssfi.netApplicationApplication Nous disposons dune base de donnes MYSQL nomme DB_CATALOGUE qui contient des produits appartenant des catgories. La base de donnes contient deux tables: CATEGORIES : contient les catgories PRODUITS : contient les produits. PRODUITS : contient les produits. La structure des deux tables est la suivante :M.Youssfi med@youssfi.netCode SQL pour gnrer la base de donnes:Code SQL pour gnrer la base de donnes:CREATE TABLE IF NOT EXISTS `categories` (`ID_CAT` int(11) NOT NULL AUTO_INCREMENT,`NOM_CAT` varchar(25) NOT NULL DEFAULT '',`DESCRIPTION` text NOT NULL,PRIMARY KEY (`ID_CAT`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;INSERT INTO `categories` (`ID_CAT`, `NOM_CAT`, `DESCRIPTION`) VALUES(1, 'ordinateurs', 'ord pc'),(2, 'imprimantes', 'imimp');CREATE TABLE IF NOT EXISTS `produits` (`ID_PROD` int(11) NOT NULL AUTO_INCREMENT,`ID_PROD` int(11) NOT NULL AUTO_INCREMENT,`NOM_PROD` varchar(25) NOT NULL DEFAULT '',`PRIX` float NOT NULL DEFAULT '0',`ID_CAT` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`ID_PROD`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;INSERT INTO `produits` (`ID_PROD`, `NOM_PROD`, `PRIX`, `ID_CAT`) VALUES(1, 'HP Vecrta', 7000, 1),(2, 'PC IBM', 8000, 1),(3, 'Imprimante HP 690', 1200, 2),(4, 'Epson 3477', 1300, 2);M.Youssfi med@youssfi.netTravail faireTravail faire Ecrire une application java qui permet de : Saisir le code de la catgorie : Gnrer un fichier qui contient les produits de cette catgorie. la structure de ce fichier XML est la suivante : la structure de ce fichier XML est la suivante :M.Youssfi med@youssfi.netApplication JavaApplication Javaimport java.io.*;import java.sql.*;import java.util.*;import org.jdom.*;import org.jdom.output.*;public class ApplicationJDOM_JDBC {public static void main(String[] args) {try {Scanner clavier=new Scanner(System.in);System.out.print("CODE CAT:");int codeCat=clavier.nextInt();System.out.print("CODE CAT:");int codeCat=clavier.nextInt();Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/DB_CAT2","root","");PreparedStatement ps=conn.prepareStatement("select * from PRODUITS where ID_CAT=?");ps.setInt(1, codeCat);ResultSet rs=ps.executeQuery();M.Youssfi med@youssfi.netApplication JavaApplication JavaDocument xmlDoc=new Document(); Element racine=new Element("catalogue");xmlDoc.setRootElement(racine);racine.setAttribute(new Attribute("codeCat", String.valueOf(codeCat)));while(rs.next()){Element produit=new Element("produit");produit.setAttribute(new Attribute("idProduit", rs.getString("ID_PROD")));produit.setAttribute(new Attribute("nomProduit", rs.getString("NOM_PROD")));produit.setAttribute(new Attribute("nomProduit", rs.getString("NOM_PROD")));produit.setAttribute(new Attribute("prix", rs.getString("PRIX")));racine.addContent(produit);}XMLOutputter sortie=new XMLOutputter(Format.getPrettyFormat());sortie.output(xmlDoc, System.out);sortie.output(xmlDoc, new FileOutputStream("catalogue.xml"));conn.close();} catch (Exception e) {e.printStackTrace();}}} M.Youssfi med@youssfi.netApplication : Web Services Application : Web Services Une socit de bourse dispose dune base de donnes qui permet de stocker les valeurs journalires des actions des socits cotes en bourse. Cette base de donnes de type MySQL est nomme DB_BOURSE . Elle contient la table COTATION dont la DB_BOURSE . Elle contient la table COTATION dont la structure est la suivante : NUM_COTATION : INT CODE_SOCIETE : VARCHAR(10) DATE_COTATION : DATE VALEUR_ACTION : FLOATM.Youssfi med@youssfi.netApplication : Web Services Application : Web Services On souhaite crer et dployer un web service qui permet de consulter les cotations dune socit donne entre deux dates d1 et d2. Travail faire : Dessiner larchitecture du projet Mettre en place la base de donnes. Crer et tester la couche mtier qui se compose de : Crer et tester la couche mtier qui se compose de : La classe Cotation La classe Bourse qui contient une mthode qui permet de retourner une liste de cotations dune socit donne entre deux dates L(application TestBourse pour tester la classe Bourse Crer et dployer le web service Tester le web service avec lanalyseur WDSL SOAP de Oxygen Crer un client Java pour le web service Crer un client Dot Net pour le web serviceM.Youssfi med@youssfi.netSVGSVGM.YoussfiM.Youssfi med@youssfi.netIntroductionIntroduction SVG : Scalable Vector Graphics. Ce langage permet d'crire des graphiques vectoriels 2D en XML. Il a t invent en 1998 par un groupe de travail (comprenant Microsoft, Autodesk, Adobe, IBM, Sun, Netscape, Xerox, Apple, Corel, HP, ILOG...) pour rpondre un besoin de graphiques lgers, dynamiques et interactifs. Une premire bauche du langage est sortie en octobre 1998 et en juin 2000 apparat la premire version du Viewer AdobeM.YoussfiUne premire bauche du langage est sortie en octobre 1998 et en juin 2000 apparat la premire version du Viewer Adobe(plugin permettant de visualiser le SVG). Le SVG s'est trs vite plac comme un concurrent de Flash et ce titre, Adobe a intgr ce langage dans la plupart de ses diteurs (dont les principaux sont Illustrator et Golive). M.Youssfi med@youssfi.netPourqoui SVGPourqoui SVG Les raisons pouvant pousser l'adoption d'un format comme SVG sont nombreuses ; Lies aux avantages du graphisme vectoriel : Adaptation de l'affichage des media varis et des tailles diffrentes ; Taille de l'image aprs compression est trs faible ; . Lies aux avantages particuliers du format SVG : M.Youssfi Lies aux avantages particuliers du format SVG : Insertion dans le monde XML/XHTML : Modle de couleurs sophistiqu, filtres graphiques Possibilit d'indexage par les moteurs de recherche; Possibilit de partager du code ; Meilleures capacits graphiques dans l'ensemble.M.Youssfi med@youssfi.netOutilsOutils Edition Comme SVG est un format XML, n'importe quel diteur de texte suffit. Il est cependant possible d'utiliser un diteur ddi comme WebDrawde Jasc, ou InkScape. Adobe Illustrator, Corel Draw permettent aussi d'exporter au format SVG. Visualisation SVG n'est actuellement pas support en natif par tous les navigateurs. On distingue plusieurs degrs d'avancement : M.YoussfiOn distingue plusieurs degrs d'avancement : Internet Explorer ne le supporte pas en natif. Il est donc ncessaire d'installer un plugin. le plugin SVGViewer 3.03, tlchargeable gratuitement sur le site d'Adobe : http://www.adobe.com/svg/ FireFox, partir de sa version 1.5, a entrepris de supporter en natif le format SVG, Opera a commenc prendre en charge le SVG dans sa version 8.0. Le support SVG d'Opera 8.5 inclut maintenant des animations. M.Youssfi med@youssfi.netStructure dun fichier SVGStructure dun fichier SVG A- Prologue: Un fichier SVG commence par une dclaration de version XML standard, comme par exemple Structure dun fichier SVGStructure dun fichier SVG B. Elment racine La racine d'un fichier SVG est un lment . Mais il est ncessaire de dfinir deux "espaces de noms", un par dfaut et un second permettant d'avoir accs d'autres fonctionnalits que nous verrons par la suite, comme suit ; Structure dun fichier SVGStructure dun fichier SVG Imbrication d'un fichier SVG dans HTML La version canonique (dconseille avec le visualisateur d'Adobe) demande d'utiliser la balise , sous la forme M.Youssfitype="image/svg+xml"> mais elle ne marche pas parfaitement. La solution la plus souple d'emploi reste d'utiliser un environnement . Par exemple : (Contenu alternatif: image+texte, texte seulement...)M.Youssfi med@youssfi.netElments graphiques de baseElments graphiques de base SVG dfinit un certain nombre d'lments graphiques de base. Voici la liste des lments les plus importants : Texte avec ; Rectangles ; M.Youssfi Rectangles ; Le cercle et l'ellipse ; Lignes et poli-lignes ; Polygones ; Formes arbitraires avec .M.Youssfi med@youssfi.netMcanismes principauxMcanismes principaux a. Attributs Il faut se rfrer la spcification pour connatre tous les dtails. Ici, nous ne montrons en rgle gnrale qu'un petit extrait, car leur nombre est norme ! La plupart des lments se partagent un nombre commun d'attributs comme par exemple l'attribut id (identificateur) ou encore style (les proprits de style suivent les rgles du CSS2). La plupart des valeurs d'attributs sont assez intuitives M.Youssfi La plupart des valeurs d'attributs sont assez intuitives b. Positionnement et units Les objets SVG se positionnent dans un systme de coordonnes qui commence en haut et gauche (pratique standard en graphisme informatique). Il est possible de travailler avec des coordonnes locales. c. Transformations Chaque objet peut tre translat, orient et chang de taille. Il hrite des transformations de l'objet parent.M.Youssfi med@youssfi.netLe renduLe rendu SVG dfinit quelques dizaines d'attributs-proprits applicables certains lments. En ce qui concerne les lments graphiques, voici les deux plus importants : stroke, dfinit la forme du bord d'un objet ; fill, dfinit comment le contenu d'un objet est rempli. SVG possde deux syntaxes diffrentes pour dfinir la mise en forme d'un lment : M.Youssfiforme d'un lment : L'attribut style reprend la syntaxe et les styles de CSS2 ; Pour chaque style, il existe aussi un attribut de prsentation SVG, cela simplifie la gnration de contenus SVG avec XSLT. Exemple : Le code prcdent a le mme effet que ; M.Youssfi med@youssfi.netLe rendu : Proprit fillLe rendu : Proprit fill fill permet de grer le remplissage de l'lment. Ses proprits sont : la couleur, avec les mmes conventions de reprsentation qu'en CSS (exemple prcdent : fill="red"). l'URI d'une couleur, d'un gradient de couleur (pour obtenir un effet de dgrad) ou d'un motif de remplissage.M.Youssfieffet de dgrad) ou d'un motif de remplissage. une valeur d'opacit (opacity), comprise entre 0 et 1.M.Youssfi med@youssfi.netLe rendu : Proprit strokeLe rendu : Proprit stroke stroke permet de grer l'entourage d'un lment de dessin. Ses proprits sont : la couleur, avec les mmes conventions de reprsentation qu'en CSS l'uri d'une couleur, d'un gradient de couleur (pour obtenir un effet de dgrad) ou d'un motif de remplissage.M.Youssfieffet de dgrad) ou d'un motif de remplissage. une valeur d'opacit (opacity), comprise entre 0 et 1. l'paisseur (width) du trait ; la jonction de ligne (linejoin) la forme des angles (linecap) qui peut tre butt( les lignes s'arrtent brutalement leur fin), round ou square (des carrs sont tracs en bout de chaque ligne). M.Youssfi med@youssfi.netFigures gomtriques (Rectangle)Figures gomtriques (Rectangle) L'lment permet de dfinir des rectangles, y compris avec des coins arrondis sans passer par une modification de l'attribut stroke-linejoin. Les attributs de base sont : x et y, qui donnent la position du coin suprieur gauche. width et height, qui permettent de dfinir respectivement M.Youssfi width et height, qui permettent de dfinir respectivement largeur et hauteur du rectangle. rx et ry, qui sont les axes x et y de l'ellipse utilise pour arrondir ; les nombres ngatifs sont interdits, et on ne peut dpasser la moiti de la largeur (longueur) du rectangle.Exemple:M.Youssfi med@youssfi.netFigures gomtriques (Cercle)Figures gomtriques (Cercle) Un cercle est cr par l'lment et une ellipse par l'lment... . Leurs attributs sont : M.Youssfi Leurs attributs sont : cx et cy qui dfinissent les coordonnes du centre. r qui dfinit le rayon du cercle. rx et ry qui dfinissent les demi-axes x et y de l'ellipse.Exemples:M.Youssfi med@youssfi.netFigures gomtriques (Lignes)Figures gomtriques (Lignes) Une ligne est dfinie avec l'lment , une poly-ligne par l'lment . Les attributs de sont : x1 et y1, qui dfinissent les coordonnes du point de dpart. x2 et y2, qui dfinissent les coordonnes du point d'arrive. M.Youssfi x2 et y2, qui dfinissent les coordonnes du point d'arrive. L'attribut de base de est : points, qui prend comme valeur une suite de coordonnes.Exemples:M.Youssfi med@youssfi.netFigures gomtriques (Polygones)Figures gomtriques (Polygones) Un polygone est une courbe ferme, Une poly-ligne une courbe ouverte. L'lment permettant de dfinir un polygone est . L'attribut de base de cet lment est:points, qui s'utilise de la mme manire qu'avec une polyligne.M.YoussfiL'attribut de base de cet lment est: points, qui s'utilise de la mme manire qu'avec une polyligne.Exemples:M.Youssfi med@youssfi.netFormes arbitraires (Path)Formes arbitraires (Path) a. Introduction L'lment permet de dfinir des formes arbitraires. Ces formes peuvent avoir un contour et servir de support pour d'autres lments b. Attributs de base Ces attributs sont au nombre de 2 :M.Youssfi Ces attributs sont au nombre de 2 : d, au nom peu explicite, sert dfinir les path data, autrement dit la liste de commande permettant de tracer le chemin. nominalLength, facultatif, permet de dfinir ventuellement la longueur totale du chemin.M.Youssfi med@youssfi.netFormes arbitraires (Path)Formes arbitraires (Path)c. Path data Les path data suivent les rgles suivantes : Toutes les instructions peuvent tre abrges en un seul caractre Les espaces peuvent tre limins On peut omettre de rpter une commande Il existe toujours deux versions des commandes : en majuscules : coordonnes absolues en minuscules : coordonnes relatives Ces rgles visent diminuer au maximum la taille requise par la description des chemins. Les commandes sont :M ou m : (moveto) : x,y dmarre un nouveau sous-chemin M.Youssfi M ou m : (moveto) : x,y dmarre un nouveau sous-chemin Z ou z : (closepath) ferme un sous-chemin en traant une ligne droite entre le point courant et le dernier moveto L ou l : (lineto) : x , y trace une ligne droite entre le point courant et le point ( x,y ). H ou h : (horizontal lineto) : x trace une ligne horizontale entre le point courant et le point ( x,y0 ). V ou v : (vertical lineto) : y trace une ligne verticale entre le point courant et le point ( x0,y ). Il existe galement des commandes permettant de tracer des courbes (courbes de Bzier, arcs...).Exemple:M.Youssfi med@youssfi.netTexteTexte A- Balise La balise est considre comme un objet graphique, et est donc gre comme telle. Elle possde deux attributs : x et y, qui donnent les coordonnes du point de dpart du texte. La mise en forme est ralise par des proprits de style CSS. b. Elments d'ajustement A l'intrieur d'un lment , on peut ajuster la position du texte, sa valeur ou la police grce l'lment . Cet lment possde, outre les attributs x et y, des attributs dx et dy permettant de spcifier les dcalages apporter dans l'criture du texte par rapport la position par M.Youssfidcalages apporter dans l'criture du texte par rapport la position par dfaut. c. Lien avec les chemins Il est possible d'crire un texte le long d'un chemin (path) dfini par ailleurs, par un lment en appelant un lment .Exemples:Regardez SVGJe suis entrain de vous faire une dmo avec un texte sur une trajectoireM.Youssfi med@youssfi.netStructuration: Elments de groupages et Structuration: Elments de groupages et rfrencesrfrences Chaque langage informatique de haut niveau doit permettre de regrouper des objets dans des blocs, de les nommer et de les rutiliser. SVG possde plusieurs constructions intressantes. Il est aussi intressant de noter que les objets SVG (comme les objets HTML) hritent le style de leurs parents. Autrement dit, les styles "cascadent" le long de l'arborescence. M.Youssfi Autrement dit, les styles "cascadent" le long de l'arborescence. Voici la liste des lments les plus importants: Le fragment d'un document SVG : ; Groupage d'lments avec ; Objets abstraits ; Section de dfinition ; Utilisation d'lments ; Titre et description . M.Youssfi med@youssfi.netStructuration: Elments de groupages et Structuration: Elments de groupages et rfrencesrfrences 1- Le fragment d'un document SVG: est la racine d'un graphisme SVG. Mais on peut aussi imbriquer des lments svg parmi d'autres et les positionner. Chaque cre un nouveau systme de coordonnes. Ainsi on peut facilement rutiliser des fragments graphiques sans devoir modifier des coordonnes.M.Youssfidevoir modifier des coordonnes. 2- Groupage d'lments avec Cet lment sert regrouper les lments graphiques, Notez l'hritage des proprits, mais aussi leur redfinition locale est possible. M.Youssfi med@youssfi.netStructuration: Elments de groupages et Structuration: Elments de groupages et rfrencesrfrences 3. Objets abstraits avec , et a. Symboles (lment ) Cet lment permet de dfinir des objets graphiques rutilisables en plusieurs endroits, avec l'lment . ressemble , sauf que l'objet lui-mme n'est pas dessin. Cet lment possde des attributs supplmentaires b. Dfinitions (lment )M.Youssfi b. Dfinitions (lment ) Cet lment ressemble un peu , mais est plus simple. De mme, l'objet dfini n'est pas dessin. c. Utilisation d'objets: la balise permet de rutiliser les objets suivants : , , , lments graphiques et . Cet lment se comporte lgrement diffremment selon le type d'objet dfini. Il s'agit donc d'un instrument de base pour viter de rpter du code. Les objets rutiliss doivent avoir un identificateur XML. Par exemple, . Les attributs x, y, width et height permettent de redfinir la taille et la position de l'lment appel. xlink:href permet de renvoyer l'lment dfini. M.Youssfi med@youssfi.netStructuration: Elments de groupages et Structuration: Elments de groupages et rfrencesrfrences 4. Titre et descriptions Ces lments permettent de documenter le code. Ils ne sont pas affichs tels quels. En revanche, un "client" peut par exemple dcider de les afficher comme des infobulles. Ces documentations peuvent tre utiles pour M.Youssfi Ces documentations peuvent tre utiles pour principalement deux raisons : ventuellement mieux comprendre le code (mme s'il est bien sr toujours possible de le faire via des commentaires Insertion dimages : Insertion dimages : Les formats supports sont jpeg et png. La balise permet galement d'insrer un autre fichier SVG. Les attributs sont : x et y, qui dfinissent la position de l'image ; M.Youssfi x et y, qui dfinissent la position de l'image ; width et height, qui dfinissent la taille de l'image ; xlink:href indique l'URI de l'image (quivalent de l'attribut src de la balise en HTML. Cet lment possde galement un attribut supplmentaire, preserveAspectRatio qui permet de dfinir la manire dont l'affichage de l'image doit s'adapter son cadre M.Youssfi med@youssfi.netAnimation dans SVGAnimation dans SVG Nous avons vu prcdemment ce qu'il tait possible de raliser en SVG, uniquement de manire statique. On peut cependant ajouter de M.Youssfi On peut cependant ajouter de l'interactivit un fichier SVGM.Youssfi med@youssfi.netAnimation de base :Animation de base : Cration dun graphique de base: M.YoussfiM.Youssfi med@youssfi.netAnimation de base :Animation de base : Animation dun attribut: Il est possible de commencer ou finir des instants dtermins (attributs begin ou end), mais aussi de synchroniser diffrentes animations. M.Youssfi med@youssfi.netAnimation de base :Animation de base : Utilisation de la souris: Il est facile d'insrer un comportement li la souris. Par exemple, begin="mouseover" dclenche l'animation ds que l'on survole l'lment par la souris. Nous allons plutt crer un petit bouton, afin de tester ce genre de comportement. M.Youssficomportement. Il suffit de crer un rectangle, que l'on identifie par un id="bouton", par exemple, et d'crire dans notre lment un begin="bouton.click", pour obtenir l'effet voulu. M.Youssfi med@youssfi.netAnimation de base :Animation de base : Utilisation de la souris: M.Youssfi Lancer! M.Youssfi med@youssfi.netAnimation de base :Animation de base : Plus de contrle: a. Attributs from et to Ces deux attributs permettent de ne pas avoir spcifier une liste de valeurs On peut par exemple ajouter Animation de base :Animation de base : b. Figer une animation Pour figer l'animation dans son tat final, on utilise l'attribut fill, avec la valeur freeze (geler, en anglais). On obtient ainsi le rsultat visible sur l'exemple suivant... Animation de base :Animation de base : C. Rpter une animation On peut galement demander ce qu'une animation se rpte un nombre dtermin de fois, l'aide de l'attribut repeatCount. Cet attribut peut prendre comme valeur un nombre entier, ou bien indefinite, qui permet de boucler l'infini. M.Youssfiou bien indefinite, qui permet de boucler l'infini. M.Youssfi med@youssfi.netAnimations plus complexesAnimations plus complexes 1. Changements de couleurs : l'lment La couleur ncessite un traitement spar. Il est ralis l'aide de l'lment , mais les attributs de base restent les mmes. La couleur modifier doit avoir t fixe lors de l'appel M.Youssfi La couleur modifier doit avoir t fixe lors de l'appel l'lment, pas lors de la dfinition M.Youssfi med@youssfi.netAnimations plus complexesAnimations plus complexes 2. Rotations, mises l'chelle et translations La syntaxe de l'attribut transform ne se prte pas l'utilisation de l'lment . Il a t ncessaire de dvelopper un autre lment, M.Youssfi Il a t ncessaire de dvelopper un autre lment, . Il faut renseigner l'attribut attributeName par la valeur transform. Cet lment utilise un attribut, type, qui lui permet de dterminer de quel type de transformation il va s'agir. M.Youssfi med@youssfi.netAnimations plus complexesAnimations plus complexes Le code suivant permet de dcaler dans la direction des x et des y positifs l'lment animer:M.YoussfiM.Youssfi med@youssfi.netAnimations plus complexesAnimations plus complexes Pour la rotation:M.YoussfiM.Youssfi med@youssfi.netAnimations plus complexesAnimations plus complexes 3. Superpositions d'effets Par dfaut, chaque fois que l'on ajoute une animation, celle-ci crase celles qui ont t dfinies avant. Afin d'viter ce comportement, il faut renseigner l'attribut additiveavec la valeur sum (addition). Exemple:M.YoussfiM.Youssfi med@youssfi.netExemple de document SVGExemple de document SVGM.YoussfiM.Youssfi med@youssfi.netXSLXSL-- SVGSVG On considre un document XML qui prsente les mesures des tempratures des diffrentes villes une date donne. Chaque mesure est qualifie par une date et forme par une ensemble de villes Chaque ville est qualifie par un nom et une temprature. Travail faire:1-Faire une reprsentation graphique de M.Youssfi Travail faire:1-Faire une reprsentation graphique de larbre XML2-Crer une DTD3- Crer un schma XML4- Crer le document XML5- Crer une feuille de style qui permet dafficher une page HTML 6- Crer une feuille de style qui permet de transformer ce document en un document SVG (voir fig.1)M.Youssfi med@youssfi.netFig2:Rsultat de transformation de la Fig2:Rsultat de transformation de la deuxime feuille de styledeuxime feuille de styleTempratures la date : 2006-1-1 M.YoussfiM.Youssfi med@youssfi.netFeuille de style XSL Feuille de style XSL M.YoussfiM.Youssfi med@youssfi.net