Précédent   Forum du club des développeurs et IT Pro > Autres langages > XML/XSL et SOAP > Valider
Valider W3C XML Schemas, DTD, Relax NG, Schematron...) et tout ce qui permet de les mettre en oeuvre. Avant de poster -> FAQ XML, Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/12/2012, 15h30   #1
elpaulo
Invité régulier
 
Inscription : juillet 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 13
Points : 9
Points : 9
Par défaut Validation d'une liste d'éléments libre

Bonjour a tous,

J'ai un cas de xml particulier que j'aimerai valider par un XSD. Voici mon xml :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?xml version="1.0" encoding="utf-8"?>
<Racine>
  <Actions>
    <Action_ColumnMerge />
    <Action_ApplyRule />
    <Action_ColumnSplit />
    <Action_ApplyRule />
    <Action_ColumnMerge />
    <Action_ApplyRule />
    <Action_ColumnMerge />
    <Action_ColumnMerge />
  </Actions>
</Racine>
Chaque balise Action_ColumnMerge, Action_ApplyRule, Action_ColumnSplit peut revenir un nombre indéterminé de fois, et ce dans n'importe quel ordre.

Du coup la séquence ne me convient pas (l'ordre n'est pas strict dans mon cas), le Choice et le All non plus.

J'ai trouvé une manière de contourner l'affaire en structurant mon xml de cette manière :

Code :
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"?>
<Racine>
  <Actions>
    <Action>
      <Action_ColumnMerge />
    </Action>
    <Action>
      <Action_ApplyRule />
    </Action>
    <Action>
      <Action_ColumnSplit />
    </Action>
    <Action>
      <Action_ApplyRule />
    </Action>
    <Action>
      <Action_ColumnMerge />
    </Action>
    <Action>
      <Action_ApplyRule />
    </Action>
    <Action>
      <Action_ColumnMerge />
    </Action>
    <Action>
      <Action_ColumnMerge />
    </Action>
  </Actions>
</Racine>
Dans ce cas, J'ai une séquence d'"Action" en maxoccurs="unbounded", et l'intérieur est un choice d'une des 3 balises.

Je ne trouve pas ca très élégant, et on peut difficilement modifier la structure xml qui est généré par un outil existant.

Connaissez vous un moyen de valider la première structure ?
elpaulo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2012, 19h33   #2
tsuji
Membre chevronné
 
Inscription : octobre 2011
Messages : 412
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 412
Points : 675
Points : 675
Vous pouvez le faire tout à fait avec d'un groupe model comme ça, suppoçons les éléments Action_xxx sont du type string au titre d'exemple.
Code :
1
2
3
4
5
6
7
8
9
10
11
<xs:element name="Actions">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:choice>
                <xs:element name="Action_ColumnMerge" type="xs:string" />
                <xs:element name="Action_ApplyRule" type="xs:string" />
                <xs:element name="Action_ColumnSplit" type="xs:string" />
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>
Il s'est dit d'un groupe model parce que vous pouvez aussi écrire comme ça.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<xs:element name="Actions">
    <xs:complexType>
        <xs:sequence>
            <xs:group ref="choicegroup" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:group name="choicegroup">
    <xs:choice>
        <xs:element name="Action_ColumnMerge" type="xs:string" />
        <xs:element name="Action_ApplyRule" type="xs:string" />
        <xs:element name="Action_ColumnSplit" type="xs:string" />
    </xs:choice>
</xs:group>
tsuji est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/12/2012, 11h28   #3
elpaulo
Invité régulier
 
Inscription : juillet 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 13
Points : 9
Points : 9
Ca fonctionne, merci beaucoup.

J'en était resté à jouer sur les cardinalités du choice, ne connaissant pas la notion de group.

elpaulo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h28.


 
 
 
 
Partenaires

Hébergement Web