Salut,
je n'ai pas utilisé xsd depuis ~6 ans, j'essaye de valider un xml (relativement simple), et bien sûr ça passe pas : mon xsd n'est même pas valide
Voilà à quoi ressemble un xml valide simple:
Et les règles dégrossises:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <List file="toto.h"> <Node name="MyNode1"> <Member name="abc" type="bool" /> <Member name="def" type="int32" collection="array" maxsize="42" /> </Node> <Node name="MyNode2"> <Member name="abc" type="int32" min="0" max="8" /> <Member name="def" type="float64" decimals="5" /> </Node> <Node name="MyNode3" /> </List>
- un xml contient un List avec un file
- le List contient des Node
- chaque Node a un name et peut contenir des Member
- Member a forcément un nom
- Member a forcément un type dans la liste bool, int32, float64
- Certains types peuvent avoir des attributs supplémentaires, certains optionnels, d'autres pas
- Member peut avoir une collection, dans ce cas il doit avoir un maxsize
Voilà où je suis rendu (qui est surement moche):
L'idée, si tenté que cela soit possible, était de créer différent types pour supporter les cas, puis avoir un méta-type qui soit un type parmi ceux-là et utilisé comme sequence pour Node::Member.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:simpleType name="Integer_1_10"> <xs:restriction base="xs:unsignedByte"> <xs:minInclusive value="1" /> <xs:maxInclusive value="10" /> </xs:restriction> </xs:simpleType> <!-- Collections --> <xs:simpleType name="BaseCollection"> <xs:restriction base="xs:string"> <xs:enumeration value="array" /> <xs:enumeration value="vector" /> </xs:restriction> </xs:simpleType> <xs:complexType name="Collection"> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="collection" type="BaseCollection" use="required" /> <xs:attribute name="maxsize" type="xs:unsignedInt" use="required" /> </xs:complexType> <!-- Types --> <xs:complexType name="Bool"> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="type" type="xs:string" fixed="bool" use="required" /> </xs:complexType> <xs:complexType name="Int32"> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="type" type="xs:string" fixed="int32" use="required" /> <xs:attribute name="min" type="xs:int" use="optional" /> <xs:attribute name="max" type="xs:int" use="optional" /> </xs:complexType> <xs:complexType name="Float64"> <xs:attribute name="type" type="xs:string" fixed="float64" use="required" /> <xs:attribute name="decimals" type="Integer_1_10" use="required" /> </xs:complexType> <!-- Collection of types --> <xs:complexType name="Int32Collection"> <xs:complexContent> <xs:extension base="Int32"> <xs:attribute name="collection" type="BaseCollection" use="required" /> <xs:attribute name="maxsize" type="xs:unsignedInt" use="required" /> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="Member"> <xs:complexType> <xs:choice> <xs:element name="Member" type="Bool" /> <xs:element name="Member" type="Int32" /> <xs:element name="Member" type="Int32Collection" /> <xs:element name="Member" type="Float64" /> </xs:choice> </xs:complexType> </xs:element> <xs:element name="Node"> <xs:complexType> <xs:sequence> <xs:element name="Member" type="Member" /> </xs:sequence> <xs:attribute name="name" type="xs:string" use="required" /> </xs:complexType> </xs:element> <xs:complexType name="List"> <xs:sequence> <xs:element name="Node" type="Node" /> </xs:sequence> <xs:attribute name="file" type="xs:string" use="required" /> </xs:complexType> </xs:schema>
Seulement quand je le teste sur http://www.utilities-online.info/xsd.../#.WqK3yujFKUk
Qui est pourtant déclaré un peu plus haut.Error line 69 : cannot resolve the name "Member"
Je suis peut-être proche du résultat, ou pas du tout, ou ce que je veux faire est impossible, mais ça fait bien 2h que je bloque à ce stade maintenant, toute aide est la bienvenue !
Partager