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 Services

    med@youssfi.net

    Mohamed Youssfi

    Laboratoire Signaux Systmes Distribus et Intelligence Artificielle (SSDIA)

    ENSET, Universit Hassan II Casablanca, Maroc

    Email : med@youssfi.net

    Supports de cours : http://fr.slideshare.net/mohamedyoussfi9

    Chane vido : http://youtube.com/mohamedYoussfi

    Recherche : http://www.researchgate.net/profile/Youssfi_Mohamed/publications

    M.Youssfi

  • Technologie XMLTechnologie XML

    Par M.Youssfi

    med@youssfi.net

    med@youssfi.netM.Youssfi

  • ProgrammeProgramme Technologie XML

    XML,

    DTD,

    Schmas XML

    XSL ,

    XPath ,

    Xquery Xquery

    Applications de XML

    SVG

    Web Services

    med@youssfi.netM.Youssfi

  • Origine de XMLOrigine de XML

    SGML

    HTML

    Standard 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.net

    HTML

    XMLeXtensible Markup Language( Spare les donnes la structure des donnes et la mise en forme )

    M.Youssfi

  • XML est au cur des systmes XML est au cur des systmes dinformationsdinformations

    Serveur dapplication J2EE

    Application JEE

    Serveur dapplication IIS

    Application .net

    XML

    Fichiers XML dont le contenu est gnrDynamiquement et povient dune sourceDe donne comme une BD relationnelle

    SGBDOracle

    SGBDSQL Server

    XML

    Fichier.xml Fichier.xmlFichier.xml

    Client Leger

    XML

    Ajax

    Flash

    XML ParserXML Parser

    Fichiers XML dont le contenu Est crs manuellementPour configurer lapplication

    med@youssfi.netM.Youssfi

  • XML ?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.Youssfi

  • Correspondance entre XML et Correspondance entre XML et Bases de donnes relationnellesBases de donnes relationnelles

    BDRelationnelle

    Fichier XML

    SGBDR

    Application

    SQL

    Parseur XML

    Application

    XPath

    med@youssfi.netM.Youssfi

  • XML?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.Youssfi

  • Exemple de document XMLExemple de document XML

    biblio

    +Biblio

    Reprsentation graphique de larbre XML

    etudiant+@code@nom@prenom@age

    livre+

    @id@titre@datePret@rendu

    Etudiant Etudiant Etudiant

    livre livre livre

    med@youssfi.netM.Youssfi

  • Structure dun document XMLStructure dun document XML

    Document XML

    Fichier XMLQui contient Les donnes

    DTDOu

    Schmas XML

    Feuille de styleXSLPour la prsentation

    Un document XML se compose de 3 fichiers :

    Qui contient Les donnes

    Ou Schmas XML

    Pour dclarerLa structure

    Du fichier XML

    XSLPour 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.Youssfi

  • Syntaxe 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.Youssfi

  • Terminologies 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.Youssfi

  • Document 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 guillemets

    med@youssfi.netM.Youssfi

  • Document 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 Etudes

    1755 heures

    TSIG Etudes

    1755 heures

    med@youssfi.netM.Youssfi

  • Document 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 Etudes

    TSIG Etudes

    med@youssfi.netM.Youssfi

  • Document 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 Etudes

    TSIG Etudes

    med@youssfi.netM.Youssfi

  • Document XML bien formDocument XML bien form

    La valeurs des attributs s'crit entre guillemets.

    Document mal form :

    Document bien form :

    TSIG Etudes

    TSIG Etudes

    med@youssfi.netM.Youssfi

  • Document 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 externes

    med@youssfi.netM.Youssfi

  • Dclaration 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 texte

    Texte

    Modle squence d lments fils :

    Une squence dfinit les lments fils autoriss apparatre dans une balise.

    Exemple :

    ...

    email

    enete corps signaturemed@youssfi.netM.Youssfi

  • Dclaration 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 lment

    med@youssfi.netM.Youssfi

  • Dclaration 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.Youssfi

  • Dclaration 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 Fleurs

    med@youssfi.netM.Youssfi

  • Dclaration 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.Youssfi

  • Dclaration 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.Youssfi

  • Dclaration 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.Youssfi

  • Dclaration 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.Youssfi

  • Dclaration 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.Youssfi

  • Exemple 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.Youssfi

  • Travail demandTravail demand1. Faire une reprsentation graphique de larbre XML.

    2. Ecrire une DTD qui permet de valider ce document XML

    3. Crer le fichier XML

    4. 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 abonnement

    med@youssfi.netM.Youssfi

  • Corrig : DTDCorrig : DTD

    code NMTOKEN #REQUIREDnom CDATA #REQUIRED>

    operateur

    +client

    +abonnement

    @code

    @nom

    @num

    @type

    +facture

    @type

    @dateAb

    @numFact

    @dateFact

    @montant

    @reglee

    med@youssfi.netM.Youssfi

  • Corrig : XSLCorrig : XSL

    Nom Client :

    NumTypeDateTotal Factures

    med@youssfi.netM.Youssfi

  • ApplicationApplication

    SGMB

    Socit Gnrale

    Nous 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 Gnrale

    2000-11-01

    .

    .

    med@youssfi.netM.Youssfi

  • Exemple 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.Youssfi

  • SchmasSchmas XMLXML

    med@youssfi.netM.Youssfi

  • Structure dun document XMLStructure dun document XML

    Document XML

    Fichier XMLQui contient Les donnes

    DTDOu

    Schmas XML

    Feuille de styleXSLPour la prsentation

    Un document XML se compose de 3 fichiers :

    Qui contient Les donnes

    Ou Schmas XML

    Pour dclarerLa structure

    Du fichier XML

    XSLPour 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.Youssfi

  • Apports 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.Youssfi

  • Structure 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.Youssfi

  • Dclarations 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 complexe

    med@youssfi.netM.Youssfi

  • Dclarations 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.Youssfi

  • Contraintes 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.Youssfi

  • Premier Exemple schma xmlPremier Exemple schma xml

    catalogue

    +produit

    @code

    @designation

    >

    M.Youssfi med@youssfi.net

  • Fichier XML respectant le Fichier XML respectant le schma prcdentschma prcdent

    catalogue

    +produit

    @code

    @designation

    M.Youssfi med@youssfi.net

  • Dclaration 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.Youssfi

  • Dclaration 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.Youssfi

  • Types Types AtomiquesAtomiques

    med@youssfi.netM.Youssfi

  • Types 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.Youssfi

  • Types 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 :

    18

    Pompiers

    med@youssfi.netM.Youssfi

  • Types 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 choix

    med@youssfi.netM.Youssfi

  • Types 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.Youssfi

  • Types 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.Youssfi

  • Types 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.Youssfi

  • Indicateur 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.Youssfi

  • DrivationDrivation 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.Youssfi

  • Drivation : 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.Youssfi

  • Drivation : 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.Youssfi

  • Drivation : Exemples de facettesDrivation : Exemples de facettes

    Limiter les diffrentes valeurs possible dun type:

    med@youssfi.netM.Youssfi

  • Drivation : Exemples de facettesDrivation : Exemples de facettes

    Limiter la longueur dune chane de caractres:

    med@youssfi.netM.Youssfi

  • Drivation : Exemples de facettesDrivation : Exemples de facettes

    Expressions rgulires pour une adresse email:

    med@youssfi.netM.Youssfi

  • XML est au cur des systmes XML est au cur des systmes dinformationsdinformations

    Serveur dapplication

    Application

    Serveur dapplication

    Application

    XML

    Fichiers XML dont le contenu est gnrDynamiquement et povient dune sourceDe donne comme une BD relationnelle

    SGBDSGBD

    XML

    Fichier.xml Fichier.xmlFichier.xml

    Client Leger

    XML

    Ajax

    Flash

    XML ParserXML Parser

    Fichiers XML dont le contenu Est crs manuellementPour configurer lapplication

    med@youssfi.netM.Youssfi

  • Correspondance entre XML et Correspondance entre XML et Bases de donnes relationnellesBases de donnes relationnelles

    BDRelationnelle

    Fichier XML

    SGBDR

    Application

    SQL

    Parseur XML

    Application

    XPath

    med@youssfi.netM.Youssfi

  • Structure dun document XMLStructure dun document XML

    Document XML

    Fichier XMLQui contient Les donnes

    DTDOu

    Schmas XML

    Feuille de styleXSLPour la prsentation

    Un document XML se compose de 3 fichiers :

    Qui contient Les donnes

    Ou Schmas XML

    Pour dclarerLa structure

    Du fichier XML

    XSLPour 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.Youssfi

  • ApplicationApplication

    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.Youssfi

  • ApplicationApplication Un exemple de fichier XML correspondant ce problme est le suivant :

    med@youssfi.netM.Youssfi

  • Travail 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.Youssfi

  • XSLXSL--XPATHXPATH

    med@youssfi.netM.Youssfi

  • Introduction 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.Youssfi

  • Structure dun document XSLStructure dun document XSL

    med@youssfi.netM.Youssfi

  • Slection 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

    chapitre

    volume

    Para.

    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.

    section

    Para.

    intro

    Para.resume

    Para.

    med@youssfi.netM.Youssfi

  • Slection 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.Youssfi

  • Slection 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.Youssfi

  • Slection 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.Youssfi

  • Oprateurs 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.Youssfi

  • Elments 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. texte

    med@youssfi.netM.Youssfi

  • Elments 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.Youssfi

  • Elments 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.Youssfi

  • Elments de XSLT Elments de XSLT

    Permet dappliquer les transformation un jeu dlments en utilisant les templatesdfinis.

    Exemple: Exemple:

    .

    med@youssfi.netM.Youssfi

  • Elments 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.y

    med@youssfi.netM.Youssfi

  • Elments 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 franais

    med@youssfi.netM.Youssfi

  • Elments 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.Youssfi

  • Elments 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.Youssfi

  • Elments 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.Youssfi

  • Elments 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.Youssfi

  • XPATHXPATH

    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.Youssfi

  • XPATH : 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.Youssfi

  • XPATH : 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 document

    med@youssfi.netM.Youssfi

  • XPATH : 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.Youssfi

  • XPATH : 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.Youssfi

  • XPATH : 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.Youssfi

  • Xpath: 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.Youssfi

  • Xpath: 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.Youssfi

  • Xpath: 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.Youssfi

  • APPLICATIONS DE APPLICATIONS DE XMLXML

    M.Youssfi med@youssfi.net

  • XQueryXQuery

    Par M.YoussfiPar M.Youssfi

    med@youssfi.net

    M.Youssfi med@youssfi.net

  • XQueryXQuery, 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.net

  • Requte 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.net

  • Exemple de fichier XML : factures.xmlExemple de fichier XML : factures.xml

    M.Youssfi med@youssfi.net

  • Exemple 1 de Exemple 1 de XQueryXQuery

    {

    doc("factures.xml")/factures/facture[@num=1]

    }

    Retourne la facture numro 1 du documents factures.xml

    M.Youssfi med@youssfi.net

  • Exemple 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 1

    M.Youssfi med@youssfi.net

  • Exemple 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.net

  • Exemple 4 Exemple 4 XQueryXQuery {

    for $f in doc("factures.xml")/factures/facture

    let $total:=sum($f/detail/produit/@montant)

    where $total>90000

    return

    {$total}

    }

    9140091400

    Retourne la somme des montant des produits des factures dont le total est suprieur 90000

    M.Youssfi med@youssfi.net

  • Requte 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 ";".

    Dclarations

    Expressions XQuery

    M.Youssfi med@youssfi.net

  • Oprateurs 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.net

  • La 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.net

  • La 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 := $Seqlm

    M.Youssfi med@youssfi.net

  • La 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.net

  • La 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.net

  • La 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.net

  • Exemple 1 de FLOWERExemple 1 de FLOWER

    for $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.net

  • Exemple 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>90000

    order by $f/@num descending

    return

    {$total}{$total}

    }

    9140091400

    Retourne les factures dont le total est suprieur 90000 classes par ordre dcroissant des numros de factutue

    M.Youssfi med@youssfi.net

  • Exemple 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 descending

    return

    {$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 factutue

    M.Youssfi med@youssfi.net

  • Exemple 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 factures

    M.Youssfi med@youssfi.net

  • XQueryXQuery : 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.net

  • Les 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.net

  • Les 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 rappelle

    M.Youssfi med@youssfi.net

  • Dclaration 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.net

  • Exemple 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 $clients

    where $c/@totalFact>$max

    return $c

    Retourne pour chaque client le nombre et le total de ses factures dont le total est suprieur la variable globale max

    M.Youssfi med@youssfi.net

  • Fonctions 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.net

  • Fonctions 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.net

  • Fonctions 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.net

  • Fonctions 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.net

  • Exemple 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 explicites

    2 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 types

    M.Youssfi med@youssfi.net

  • Exemple2 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 c1

    M.Youssfi med@youssfi.net

  • Les 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.net

  • Exemple 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.net

  • Utilisation 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.net

  • JDOMJDOMMohamed Youssfi

    med@youssfi.net

    M.Youssfi med@youssfi.net

  • JDOM ?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.net

  • Origines 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.net

  • Crer 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.Youssfi

    logique.

    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.net

  • Exemple 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.net

  • Parcourir 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 :

    katib

    M.Youssfi

    mohamedamine

    talbi

    santel

    med@youssfi.net

  • Afficher les noms des tudiants du fichier XMLAfficher les noms des tudiants du fichier XML

    import 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.net

  • Modifier 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.net

  • Parseur 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.net

  • Interprter 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.net

  • Interprter un fichier XMLInterprter un fichier XML@Override

    public void startDocument() throws SAXException {

    System.out.println("Dbut Document");

    }

    @Override

    public void startElement(String uri, String localName, String qName,

    Attributes attributes) throws SAXException {

    // Dbut de chaque lment

    System.out.println("Elment :"+qName);

    System.out.println("\t Attributs:");

    for(int i=0;i

  • Interprter un fichier XMLInterprter un fichier XML@Override

    public void endElement(String uri, String localName, String qName)

    throws SAXException {

    // Fin de chaque lment

    }

    @Override

    public void endDocument() throws SAXException {public void endDocument() throws SAXException {

    // Fin du document

    }

    public static void main(String[] args) {

    new SaxParser();

    }

    }

    M.Youssfi med@youssfi.net

  • Passer 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 Exception

    M.Youssfi

    org.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.net

  • Passer 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 Exception

    M.Youssfi

    org.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.net

  • JDOM 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.net

  • Fichier XMLFichier XML

    katib

    mohamedamine

    M.Youssfi

    talbi

    santel

    med@youssfi.net

  • Fichier XSL pour gnrer une sortie HTMLFichier XSL pour gnrer une sortie HTML

    NomPrnoms

    M.Youssfi

    med@youssfi.net

  • Exemple 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.Youssfi

    SAXBuilder sb=new SAXBuilder();try {Document jDomDoc=sb.build(newFile("Exercice2.xml"));outputXSLT(jDomDoc, "classe.xsl");

    } catch (Exception e) {e.printStackTrace();

    }}

    med@youssfi.net

  • Exemple de transformation XSL avec JDOMExemple de transformation XSL avec JDOMpublic static void outputXSLT(org.jdom.Document documentJDOMEntree,String

    fichierXSL){/*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(new

    StreamSource(fichierXSL));

    M.Youssfi

    StreamSource(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.net

  • Fichier HTML gnr : resultat.htmFichier HTML gnr : resultat.htm

    NomPrnoms

    CynO

    M.Youssfi

    CynONicolas

    Superwoman

    Don Corleone

    med@youssfi.net

  • ApplicationApplication

    1- Crer une application java qui permet de crer le fichier XML suivant : meteo.xml

    M.Youssfi med@youssfi.net

  • ApplicationApplication 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.net

  • ApplicationApplication

    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:28

    Date de mes:2006-1-2Ville:casa; Temp:30Ville:rabat;Temp:32

    M.Youssfi med@youssfi.net

  • ApplicationApplication 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.net

  • ApplicationApplication 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.net

  • Code 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.net

  • Travail 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.net

  • Application 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.net

  • Application 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.net

  • Application : 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 : FLOAT

    M.Youssfi med@youssfi.net

  • Application : 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 service

    M.Youssfi med@youssfi.net

  • SVGSVG

    M.YoussfiM.Youssfi med@youssfi.net

  • IntroductionIntroduction 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 Adobe

    M.Youssfi

    Une 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.net

  • Pourqoui 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.net

  • OutilsOutils 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.Youssfi

    On 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.net

  • Structure 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.Youssfi

    type="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.net

  • Elments 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.net

  • Mcanismes 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.net

  • Le 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.Youssfi

    forme 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.net

  • Le 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.Youssfi

    effet de dgrad) ou d'un motif de remplissage.

    une valeur d'opacit (opacity), comprise entre 0 et 1.

    M.Youssfi med@youssfi.net

  • Le 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.Youssfi

    effet 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.net

  • Figures 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.net

  • Figures 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.net

  • Figures 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.net

  • Figures 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.Youssfi

    L'attribut de base de cet lment est: points, qui s'utilise de la mme manire qu'avec une polyligne.

    Exemples:

    M.Youssfi med@youssfi.net

  • Formes 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.net

  • Formes 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.net

  • TexteTexte

    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.Youssfi

    dcalages 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 SVG

    Je suis entrain de vous faire une dmo avec un texte sur une trajectoire

    M.Youssfi med@youssfi.net

  • Structuration: 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.net

  • Structuration: 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.Youssfi

    devoir 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.net

  • Structuration: 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.net

  • Structuration: 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.net

  • Animation 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 SVG

    M.Youssfi med@youssfi.net

  • Animation de base :Animation de base : Cration dun graphique de base:

    M.Youssfi

    M.Youssfi med@youssfi.net

  • Animation 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.net

  • Animation 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.Youssfi

    comportement.

    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.net

  • Animation de base :Animation de base : Utilisation de la souris:

    M.Youssfi

    Lancer!

    M.Youssfi med@youssfi.net

  • Animation 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.Youssfi

    ou bien indefinite, qui permet de boucler l'infini.

    M.Youssfi med@youssfi.net

  • Animations 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.net

  • Animations 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.net

  • Animations plus complexesAnimations plus complexes Le code suivant permet de dcaler dans la direction des x et des y

    positifs l'lment animer:

    M.Youssfi

    M.Youssfi med@youssfi.net

  • Animations plus complexesAnimations plus complexes Pour la rotation:

    M.Youssfi

    M.Youssfi med@youssfi.net

  • Animations 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 additive

    avec la valeur sum (addition). Exemple:

    M.Youssfi

    M.Youssfi med@youssfi.net

  • Exemple de document SVGExemple de document SVG

    M.Youssfi

    M.Youssfi med@youssfi.net

  • XSLXSL-- 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.net

  • Fig2:Rsultat de transformation de la Fig2:Rsultat de transformation de la deuxime feuille de styledeuxime feuille de style

    Tempratures la date : 2006-1-1

    M.YoussfiM.Youssfi med@youssfi.net

  • Feuille de style XSL Feuille de style XSL

    M.Youssfi

    M.Youssfi med@youssfi.net