On devra donc dans un premier temps définir les schémas des fichiers XML commandes et devis. Ensuite on réalisera pour chaque fichier un petit script grâce à la technologie XSLT afin de présenter automatiquement les données dans un tableau HTML
I Les Schémas
Nous décrirons les 2 fichiers Commande et Devis selon le format de description XSD (Xml Shema Definition)
commande.xsd :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Produit"> <xs:complexType> <xs:sequence> <xs:element name="denomination" type="xs:string"/> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="refProduit" type="xs:ID" use="required"/> </xs:complexType> </xs:element> <xs:element name="Agence"> <xs:complexType> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="adresse" type="xs:string"/> <xs:element name="tel" type="xs:string"/> </xs:sequence> <xs:attribute name="refAgence" type="xs:ID" use="required"/> </xs:complexType> </xs:element> <xs:element name="Ligne"> <xs:complexType> <xs:sequence> <xs:element ref="Agence"/> <xs:element ref="Produit"/> <xs:element name="quantite" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Commande"> <xs:complexType> <xs:sequence> <xs:element ref="Ligne" maxOccurs="unbounded"/> <xs:attribute name="date" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
devis.xsd :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Produit"> <xs:complexType> <xs:sequence> <xs:element name="denomination" type="xs:string"/> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="refProduit" type="xs:ID" use="required"/> </xs:complexType> </xs:element> <xs:element name="Agence"> <xs:complexType> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="adresse" type="xs:string"/> <xs:element name="tel" type="xs:string"/> </xs:sequence> <xs:attribute name="refAgence" type="xs:ID" use="required"/> </xs:complexType> <xs:element name="Fournisseur"> <xs:complexType> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="adresse" type="xs:string"/> <xs:element name="tel" type="xs:string"/> </xs:sequence> <xs:attribute name="refFournisseur" type="xs:ID" use="required"/> </xs:complexType> </xs:element> <xs:element name="Ligne"> <xs:complexType> <xs:sequence> <xs:element ref="Agence"/> <xs:element ref="Fournisseur"/> <xs:element ref="Produit"/> <xs:element name="quantite" type="xs:integer"/> <xs:element name="prix" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Devis"> <xs:complexType> <xs:sequence> <xs:element ref="Ligne" maxOccurs="unbounded"/> <xs:attribute name="date" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
II Scripts de visualisation.
Ces fichiers XML devront être lu par des opérateurs de vente et d'achat de la place de marché des fournisseurs et du client. On doit donc pouvoir présenter ces fichiers de façon lisible dans un navigateur internet. Pour cela nous utiliserons la technologie de transformation XSLT (Xml Stylesheet Language Transformation).
On choisira de présenter dans un tableau les ligne de la commande permettant de visualiser l'agence, le produit et la quantité souhaitée.
commande.xsl :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="/"> <html> <head> <title> Demande de proposition de prix via la place de marche </title> </head> <body> <p> date :<xsl:value-of select="Commande/date"></xsl:value-of> </p> <table border="2"> <tr> <td> Agence </td> <td> reference produit </td> <td> denomination </td> <td> description </td> <td> quantite </td> </tr> <xsl:for-each select="Commande/Ligne"> <tr> <td> <xsl:value-of select="Agence/nom"></xsl:value-of> </td> <td> <xsl:value-of select="Produit/@refProduit"></xsl:value-of> </td> <td> <xsl:value-of select="Produit/denomination"></xsl:value-of> </td> <td> <xsl:value-of select="Produit/description"></xsl:value-of> </td> <td> <xsl:value-of select="quantite"></xsl:value-of> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
Comme pour le schéma, chaque ligne du devis ne sera enrichi que du nom du fournisseur et du prix proposé.
devis.xsl :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="/"> <html> <head> <title> Gestion des commandes </title> </head> <body> <p> date :<xsl:value-of select="Devis/date"></xsl:value-of> </p> <table border="2"> <tr> <td> Agence </td> <td> Fournisseur </td> <td> adresse fournisseur </td> <td> reference produit </td> <td> denomination </td> <td> description </td> <td> quantite </td> <td> prix unitaire </td> </tr> <xsl:for-each select="Devis/Ligne"> <tr> <td> <xsl:value-of select="Agence/nom"></xsl:value-of> </td> <td> <xsl:value-of select="Fournisseur/nom"></xsl:value-of> </td> <td> <xsl:value-of select="Fournisseur/adresse"></xsl:value-of> </td> <td> <xsl:value-of select="Produit/@refProduit"></xsl:value-of> </td> <td> <xsl:value-of select="Produit/denomination"></xsl:value-of> </td> <td> <xsl:value-of select="Produit/description"></xsl:value-of> </td> <td> <xsl:value-of select="quantite"></xsl:value-of> </td> <td> <xsl:value-of select="prix"></xsl:value-of> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
III Tests
Afin de vérifier le fonctionnement des scripts de transformation il suffit de d'écrire une commande et un devis au format XML qui respectent les schémas adoptés.
Je propose les 2 fichiers suivants : commande.xml et devis.xml
commande.xml :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="commande.xsl"?> <Commande xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="commande.xsd"> <Ligne> <Agence refAgence="2"> <nom>marseille</nom> <adresse>3 place st charles 13000 marseille</adresse> <tel>0413258465</tel> </Agence> <Produit refProduit="125"> <denomination>cle dynamometrique</denomination> <description>outil de serrage a couple parametrable</description> </Produit> <quantite>1000</quantite> </Ligne> <Ligne> <Agence refAgence="1"> <nom>Paris</nom> <adresse>8 avenue du parc 75014 Paris</adresse> <tel>013825898</tel> </Agence> <Produit refProduit="312"> <denomination>multimetre universel</denomination> <description>outil de mesure electrique</description> </Produit> <quantite>200</quantite> </Ligne> <date> 2012-05-01</date> </Commande> |
devis.xml :
Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="devis.xsl"?> <Devis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="devis.xsd"> <Ligne> <Agence refAgence="2"> <nom>marseille</nom> <adresse>3 place st charles 13000 marseille</adresse> <tel>0413258465</tel> </Agence> <Fournisseur refFournisseur="216AZ"> <nom>tool supply</nom> <adresse>2 rue renard 92000 nantere</adresse> <tel>0123456789</tel> </Fournisseur> <Produit refProduit="125"> <denomination>cle dynamometrique</denomination> <description>outil de serrage a couple parametrable</description> </Produit> <quantite>1000</quantite> <prix>17</prix> </Ligne> <Ligne> <Agence refAgence="1"> <nom>Paris</nom> <adresse>8 avenue du parc 75014 Paris</adresse> <tel>013825898</tel> </Agence> <Fournisseur refFournisseur="216AZ"> <nom>93 provider</nom> <adresse>35 boulevard joffres 93000 Bobigny</adresse> <tel>0987465132</tel> </Fournisseur> <Produit refProduit="312"> <denomination>multimetre universel</denomination> <description>outil de mesure electrique</description> </Produit> <quantite>200</quantite> <prix>14</prix> </Ligne> <date> 2012-05-01</date> </Devis> |
Conclusion
Cet article illustre comment la technologie XML permet d'opérer des échanges de données suivant des formats déterminés de façon simple et rapide.
Il permet également de constater la puissance d'XSLT pour visualiser les données échangées.
Il est important de préciser que les transformations prenant comme source un fichier XML ne ciblent pas uniquement le format HTML mais tous les médias possible : PDF, WORD, EXCEL, bases de données etc...