Bonjour,
Je suis en train d'apprendre le format XSD et je créée quelques exercices persos pour essayer de bien comprendre.
Et là, je bute sur un problème que je n'arrive pas à résoudre.
La balise A ne peut contenir que des balises B ou/et C dont la somme des deux est au moins égale à zéro. L'ordre des balises B et C dans A ne doit pas avoir d'importance.
Voici les restrictions :
1) Si au moins deux balises B se trouvent dans A, une seule balise C au maximum est autorisée
2) Si au moins deux balises C se trouvent dans A, une seule balise B au maximum est autorisée
Voici la structure de mon fichier XML :
Et, le principal, mon fichier XSD :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?xml version="1.0" encoding="UTF-8"?> <root xsi:noNamespaceSchemaLocation="schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <a></a> </root>
Cela ne marche pas comme je veux.
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
44
45
46
47
48
49 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" ref="a"></xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="a"> <xs:complexType> <xs:choice minOccurs="1" maxOccurs="1"> <xs:sequence> <xs:group ref="mon_groupe_1" minOccurs="0" maxOccurs="unbounded"></xs:group> <xs:group ref="mon_groupe_2" minOccurs="0" maxOccurs="unbounded"></xs:group> </xs:sequence> </xs:choice> </xs:complexType> </xs:element> <xs:group name="mon_groupe_1"> <xs:sequence id="un_seul_b_plusieurs_c"> <xs:element ref="b" minOccurs="0" maxOccurs="1"></xs:element> <xs:element ref="c" minOccurs="0" maxOccurs="unbounded"></xs:element> </xs:sequence> </xs:group> <xs:group name="mon_groupe_2"> <xs:sequence id="un_seul_c_plusieurs_b"> <xs:element ref="c" minOccurs="0" maxOccurs="1"></xs:element> <xs:element ref="b" minOccurs="0" maxOccurs="unbounded"></xs:element> </xs:sequence> </xs:group> <xs:element name="b"> <xs:complexType> <xs:sequence></xs:sequence> </xs:complexType> </xs:element> <xs:element name="c"> <xs:complexType> <xs:sequence></xs:sequence> </xs:complexType> </xs:element> </xs:schema>
En gros, pour résumer, ceci est par exemple valide :
Mais ceci ne l'est pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?xml version="1.0" encoding="UTF-8"?> <root xsi:noNamespaceSchemaLocation="schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <a> <b /> <c /> <b /> </a> </root>
Auriez-vous une idée du problème ? Merci !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="UTF-8"?> <root xsi:noNamespaceSchemaLocation="schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <a> <b /> <c /> <b /> <c /> </a> </root>
Pendant ce temps, je continue à chercher...
Partager