IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Echanger des informations sur une place de marché avec XML

Le , par autran

0PARTAGES

L'objectif de ce billet 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

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

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

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>
Ce qui donne à la lecture avec internet explorer :


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>
Ce qui donne à la lecture avec internet explorer :


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

Une erreur dans cette actualité ? Signalez-nous-la !