Échanger des informations sur une place de marché avec XML

Marc Autran

♪

- Titre : Échanger des informations sur une place de marché avec XML

- Auteur : Marc Autran

- Parution : 19 mai 2015

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2015 Marc Autran. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Les schémas

- II-A. Schéma de la commande

- II-B. Schéma du devis

- III. Scripts de visualisation

- III-A. Transformation de la commande

- III-B. Transformation du devis

- IV. Tests

- IV-A. Test de la commande

- IV-B. Test du devis

- V. Conclusion

I - Introduction

L'objectif de ce tutoriel est de montrer comment la technologie XML permet d'échanger des données de commande et de devis entre un client et des soumissionnaires.

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

II - Les schémas

Nous décrirons les deux fichiers Commande et Devis selon le format de description XSD (Xml Shema Definition).

II-A - Schéma de la commande

commande.xsd :

1. <?xml version="1.0" encoding="UTF-8"?>

2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

3. <xs:element name="Produit">

4. <xs:complexType>

5. <xs:sequence>

6. <xs:element name="denomination" type="xs:string"/>

7. <xs:element name="description" type="xs:string"/>

8. </xs:sequence>

9. <xs:attribute name="refProduit" type="xs:ID" use="required"/>

10. </xs:complexType>

11. </xs:element>

12. <xs:element name="Agence">

13. <xs:complexType>

14. <xs:sequence>

15. <xs:element name="nom" type="xs:string"/>

16. <xs:element name="adresse" type="xs:string"/>

17. <xs:element name="tel" type="xs:string"/>

18. </xs:sequence>

19. <xs:attribute name="refAgence" type="xs:ID" use="required"/>

20. </xs:complexType>

21. </xs:element>

22. <xs:element name="Ligne">

23. <xs:complexType>

24. <xs:sequence>

25. <xs:element ref="Agence"/>

26. <xs:element ref="Produit"/>

27. <xs:element name="quantite" type="xs:integer"/>

28. </xs:sequence>

29. </xs:complexType>

30. </xs:element>

31. <xs:element name="Commande">

32. <xs:complexType>

33. <xs:sequence>

34. <xs:element ref="Ligne" maxOccurs="unbounded"/>

35. <xs:attribute name="date" type="xs:date"/>

36. </xs:sequence>

37. </xs:complexType>

38. </xs:element>

39. </xs:schema>

On voit que ce fichier définit une commande comme un ensemble de lignes. Chaque ligne se compose d'un produit, de la quantité demandée pour le produit et de l'identification de l'agence qui demande ce produit. Bien entendu, une commande est passée à une date donnée.

II-B - Schéma du devis

devis.xsd :

1. <?xml version="1.0" encoding="UTF-8"?>

2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

3. <xs:element name="Produit">

4. <xs:complexType>

5. <xs:sequence>

6. <xs:element name="denomination" type="xs:string"/>

7. <xs:element name="description" type="xs:string"/>

8. </xs:sequence>

9. <xs:attribute name="refProduit" type="xs:ID" use="required"/>

10. </xs:complexType>

11. </xs:element>

12. <xs:element name="Agence">

13. <xs:complexType>

14. <xs:sequence>

15. <xs:element name="nom" type="xs:string"/>

16. <xs:element name="adresse" type="xs:string"/>

17. <xs:element name="tel" type="xs:string"/>

18. </xs:sequence>

19. <xs:attribute name="refAgence" type="xs:ID" use="required"/>

20. </xs:complexType>

21. <xs:element name="Fournisseur">

22. <xs:complexType>

23. <xs:sequence>

24. <xs:element name="nom" type="xs:string"/>

25. <xs:element name="adresse" type="xs:string"/>

26. <xs:element name="tel" type="xs:string"/>

27. </xs:sequence>

28. <xs:attribute name="refFournisseur" type="xs:ID" use="required"/>

29. </xs:complexType>

30. </xs:element>

31. <xs:element name="Ligne">

32. <xs:complexType>

33. <xs:sequence>

34. <xs:element ref="Agence"/>

35. <xs:element ref="Fournisseur"/>

36. <xs:element ref="Produit"/>

37. <xs:element name="quantite" type="xs:integer"/>

38. <xs:element name="prix" type="xs:integer"/>

39. </xs:sequence>

40. </xs:complexType>

41. </xs:element>

42. <xs:element name="Devis">

43. <xs:complexType>

44. <xs:sequence>

45. <xs:element ref="Ligne" maxOccurs="unbounded"/>

46. <xs:attribute name="date" type="xs:date"/>

47. </xs:sequence>

48. </xs:complexType>

49. </xs:element>

50. </xs:schema>

Le devis étant la réponse à la commande de la place de marché, le schéma sera le même que celui de la commande à ceci près que chaque ligne sera enrichie de l'identification du fournisseur et du prix proposé.

III - Scripts de visualisation

Ces fichiers XML devront être lus 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).

III-A - Transformation de la commande

On choisira de présenter dans un tableau les lignes de la commande permettant de visualiser l'agence, le produit et la quantité souhaitée.

commande.xsl :

1. <?xml version="1.0" encoding="UTF-8"?>

2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

3. <xsl:output method="html"/>

4. <xsl:template match="/">

5. <html>

6. <head>

7. <title>

8. Demande de proposition de prix via la place de marche

9. </title>

10. </head>

11. <body>

12. <p>

13. date :<xsl:value-of select="Commande/date"></xsl:value-of>

14. </p>

15. <table border="2">

16. <tr>

17. <td> Agence </td>  <td> reference produit </td> <td> denomination </td> <td> description </td> <td> quantite </td>

18. </tr>

19. <xsl:for-each select="Commande/Ligne">

20. <tr>

21. <td>

22. <xsl:value-of select="Agence/nom"></xsl:value-of>

23. </td>

24. <td>

25. <xsl:value-of select="Produit/@refProduit"></xsl:value-of>

26. </td>

27. <td>

28. <xsl:value-of select="Produit/denomination"></xsl:value-of>

29. </td>

30. <td>

31. <xsl:value-of select="Produit/description"></xsl:value-of>

32. </td>

33. <td>

34. <xsl:value-of select="quantite"></xsl:value-of>

35. </td>

36. </tr>

37. </xsl:for-each>

38. </table>

39. </body>

40. </html>

41. </xsl:template>

42. </xsl:stylesheet>

III-B - Transformation du devis

Comme pour le schéma, chaque ligne du devis ne sera enrichie que du nom du fournisseur et du prix proposé.

devis.xsl :

1. <?xml version="1.0" encoding="UTF-8"?>

2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

3. <xsl:output method="html"/>

4. <xsl:template match="/">

5. <html>

6. <head>

7. <title>

8. Gestion des commandes

9. </title>

10. </head>

11. <body>

12. <p>

13. date :<xsl:value-of select="Devis/date"></xsl:value-of>

14. </p>

15. <table border="2">

16. <tr>

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

18. </tr>

19. <xsl:for-each select="Devis/Ligne">

20. <tr>

21. <td>

22. <xsl:value-of select="Agence/nom"></xsl:value-of>

23. </td>

24. <td>

25. <xsl:value-of select="Fournisseur/nom"></xsl:value-of>

26. </td>

27. <td>

28. <xsl:value-of select="Fournisseur/adresse"></xsl:value-of>

29. </td>

30. <td>

31. <xsl:value-of select="Produit/@refProduit"></xsl:value-of>

32. </td>

33. <td>

34. <xsl:value-of select="Produit/denomination"></xsl:value-of>

35. </td>

36. <td>

37. <xsl:value-of select="Produit/description"></xsl:value-of>

38. </td>

39. <td>

40. <xsl:value-of select="quantite"></xsl:value-of>

41. </td>

42. <td>

43. <xsl:value-of select="prix"></xsl:value-of>

44. </td>

45. </tr>

46. </xsl:for-each>

47. </table>

48. </body>

49. </html>

50. </xsl:template>

51. </xsl:stylesheet>

IV - Tests

Afin de vérifier le fonctionnement des scripts de transformation, il suffit d'écrire une commande et un devis au format XML qui respectent les schémas adoptés.

Je propose les deux fichiers suivants : commande.xml et devis.xml.

IV-A - Test de la commande

commande.xml :

1. <?xml version="1.0" encoding="UTF-8"?>

2. <?xml-stylesheet type="text/xsl" href="commande.xsl"?>

3. <Commande xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="commande.xsd">

5. <Ligne>

6. <Agence refAgence="2">

7. <nom>marseille</nom>

8. <adresse>3 place st charles 13000 marseille</adresse>

9. <tel>0413258465</tel>

10. </Agence>

11. <Produit refProduit="125">

12. <denomination>cle dynamometrique</denomination>

13. <description>outil de serrage a couple parametrable</description>

14. </Produit>

15. <quantite>1000</quantite>

16. </Ligne>

17. <Ligne>

18. <Agence refAgence="1">

19. <nom>Paris</nom>

20. <adresse>8 avenue du parc 75014 Paris</adresse>

21. <tel>013825898</tel>

22. </Agence>

23. <Produit refProduit="312">

24. <denomination>multimetre universel</denomination>

25. <description>outil de mesure electrique</description>

26. </Produit>

27. <quantite>200</quantite>

28. </Ligne>

29. <date> 2012-05-01</date>

30. </Commande>

Ce qui donne à la lecture avec Internet Explorer :

IV-B - Test du devis

devis.xml :

1. <?xml version="1.0" encoding="UTF-8"?>

2. <?xml-stylesheet type="text/xsl" href="devis.xsl"?>

3. <Devis xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="devis.xsd">

4. <Ligne>

5. <Agence refAgence="2">

6. <nom>marseille</nom>

7. <adresse>3 place st charles 13000 marseille</adresse>

8. <tel>0413258465</tel>

9. </Agence>

10. <Fournisseur refFournisseur="216AZ">

11. <nom>tool supply</nom>

12. <adresse>2 rue renard 92000 nantere</adresse>

13. <tel>0123456789</tel>

14. </Fournisseur>

15. <Produit refProduit="125">

16. <denomination>cle dynamometrique</denomination>

17. <description>outil de serrage a couple parametrable</description>

18. </Produit>

19. <quantite>1000</quantite>

20. <prix>17</prix>

21. </Ligne>

22. <Ligne>

23. <Agence refAgence="1">

24. <nom>Paris</nom>

25. <adresse>8 avenue du parc 75014 Paris</adresse>

26. <tel>013825898</tel>

27. </Agence>

28. <Fournisseur refFournisseur="216AZ">

29. <nom>93 provider</nom>

30. <adresse>35 boulevard joffres 93000 Bobigny</adresse>

31. <tel>0987465132</tel>

32. </Fournisseur>

33. <Produit refProduit="312">

34. <denomination>multimetre universel</denomination>

35. <description>outil de mesure electrique</description>

36. </Produit>

37. <quantite>200</quantite>

38. <prix>14</prix>

39. </Ligne>

40. <date> 2012-05-01</date>

41. </Devis>

Ce qui donne à la lecture avec Internet Explorer :

V - 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 de 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 possibles : PDF, WORD, EXCEL, bases de données, etc.