Voir le flux RSS

autran

[Actualité] Echanger des informations sur une place de marché avec XML

Note : 2 votes pour une moyenne de 4,50.
par , 26/05/2015 à 16h51 (879 Affichages)
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 :
Pièce jointe 178839

devis.xml :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Pièce jointe 178838

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

Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog Viadeo Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog Twitter Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog Google Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog Facebook Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog Digg Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog Delicious Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog MySpace Envoyer le billet « Echanger des informations sur une place de marché avec XML » dans le blog Yahoo

Tags: xml, xsd, xslt
Catégories
Développement Web

Commentaires