Bonjour,

Je cherche à valider mes XML avec un XSD (je débute) pour que mon script en Perl qui lis le XML puisse faire une validation propre des données du XML avant de le traiter.

Cependant, j'ai des XML avec des éléments de ce genre par exemple, avec des actions de plusieurs types (type=blabla) qui prennent des elems/attribs différents suivant l'action sélectionnée :

Code : 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
<!-- ACTIONS -->
<actions>
    <action type="sftpdownload">
        <mandatory>1</mandatory>
        <file path="/var/tmp/a.txt"/>
        <file path="/var/tmp/b.txt"/>
        <file path="/var/tmp/c.txt"/>
        <server>hostname_here</server>
        <username>username_here</username>
        <debug>no</debug>
        <interval>20</interval>
        <timelimit>20:00</timelimit>
    </action>
    <action type="rename">
        <mandatory>1</mandatory>
        <rename from="a.txt" to="a_new.txt"/>
        <rename from="b.txt" to="b_new.txt"/>
        <rename from="c.txt" to="c_new.txt"/>
    </action>
    <action type="scpupload">
        <mandatory>1</mandatory>
        <path>a_new.txt</path>
        <username>username_here</username>
        <server>hostname_here</server>
        <remotepath>/tmp</remotepath>
        <options></options>
    </action>
</actions>
Est-ce possible de valider cela en XSD ?

car si je prend un simple exemple du premier (sftpdownload), je peux faire ça :

Code : 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
<!-- ACTION (at least 1) -->
<xs:element name="action" minOccurs="1" maxOccurs="unbounded">
    <xs:complexType>
        <xs:sequence>
            <!-- MANDATORY -->
            <xs:element type="xs:int" name="mandatory" minOccurs="1" maxOccurs="1"/>
            <!-- ELEMENTS OF THE ACTION -->
            <xs:element name="file" maxOccurs="unbounded" minOccurs="1">
                <xs:complexType>
                    <xs:attribute type="xs:string" name="path"/>
                </xs:complexType>
            </xs:element>
            <xs:element type="xs:string" name="server"/>
            <xs:element type="xs:string" name="username"/>
            <xs:element type="xs:string" name="debug" minOccurs="0" maxOccurs="1"/>
            <xs:element type="xs:int" name="interval" minOccurs="0" maxOccurs="1"/>
            <xs:element type="xs:string" name="timelimit" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <!-- ACTION TYPE -->
        <xs:attribute type="xs:string" name="type"></xs:attribute>
    </xs:complexType>
</xs:element>
mais comment faire pour changer ces options suivant le type d'action ?
je précise que les actions ne sont pas toujours les mêmes, j'en ai une 20aine de dispo, et elles peuvent se répéter (je peux avoir plusieurs conditions sftpdownload à la suite par exemple), et certaines sont évidemment facultatives, c'est configuré suivant le besoin

merci de vos lumières !

merci !