Echanger des informations sur une place de marché avec XML

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 2 fichiers Commande et Devis selon le format de description XSD (Xml Shema Definition)

II-A. Schéma de la commande.

commande.xsd :

 
Sélectionnez
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>

On voit que ce fichier défini 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, un commande est passée à une date donnée.

II-B. Shéma du devis.

devis.xsd :

 
Sélectionnez
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>

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

III-A. Transformation de la commande.

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 :

 
Sélectionnez
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>

III-B. Transformation du devis.

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

devis.xsl :

 
Sélectionnez
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>

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

IV-A. test de la commande.

commande.xml :

 
Sélectionnez
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>

Ce qui donne à la lecture avec internet explorer :

Image non disponible

IV-B. test du devis

devis.xml :

 
Sélectionnez
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>

Ce qui donne à la lecture avec internet explorer :

Image non disponible

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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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.