Bonjour,
J'ai un soucis de validation d'un fichier XML par un XSD. J'ai comme exemple le XML suivant :
Si besoin la structure du XML peut être modifiée pour valider toutes les règles ci-dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <conf> <params> <attr key="myNumber">1</attr> <attr key="machin">example</attr> <attr key="bidule">example2</attr> </params> </conf>
Mon XSD doit valider les points suivants :
- On peut définir (fixed) le valeur d'un attribut et appliquer des restrictions pour un <attr> qui porte cette valeur. Exemple : "Si ma key est "id" alors la valeur de mon <attr> est un integer".
- Si un <attr> est défini (fixed) alors on peut préciser si il est optionnel ou non dans le document. Exemple : "Mon <attr> de key "id" est obligatoire et est de type integer, mon <attr> de key "weight" est optionnel mais si il existe dans le document il doit être de type integer et compris entre 0 et 100"
- Tous les <attr> ont une structure par défaut (ici ils s'appellent <attr> et ont un attribut key obligatoire). Tous les <attr>, même si non définis, qui apparaissent doivent respecter cette structure de base.
- L'ordre d'apparition des <attr> importe peu, mon <attr> id peut très bien arriver avant ou après "weight" dans l'odre de lecture.
- Règle optionnelle : un <attr> donné ne peut apparaitre qu'une seule et unique fois dans le document.
J'en suis arrivé à quelque chose qui me permet de valider le contenu de l'élément en fonction de la valeur de la key (ci-dessous). Mais le problème est si j'inverse deux éléments, deux attr, même si leur type est bien différent et même avec le xs:all, la validation ne passe pas. Dès que je respecte de nouveau l'ordre d’apparition du type de mes attr cela passe. Comment faire pour que la validation passe sans se soucier de l'ordre d'apparation du type de mes attr ?
Merci
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="attrMyNumberType"> <xs:simpleContent> <xs:extension base="xs:integer"> <xs:attribute name="key" fixed="myNumber" /> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="attrMachinType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="key" fixed="Machin" /> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="attrBiduleType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="key" fixed="Bidule" /> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:element name="conf"> <xs:complexType> <xs:sequence> <xs:element name="params"> <xs:complexType> <xs:all minOccurs="0"> <xs:element name="attr" type="attrMyNumberType"/> <xs:element name="attr" type="attrMachinType"/> <xs:element name="attr" type="attrBiduleType"/> </xs:all> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Partager