création xsd : cannot resolve type definition
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 :aie:
Voilà à quoi ressemble un xml valide simple:
Code:
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> |
Et les règles dégrossises:
- 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):
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 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> |
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. :cfou:
Seulement quand je le teste sur http://www.utilities-online.info/xsd.../#.WqK3yujFKUk
Citation:
Error line 69 : cannot resolve the name "Member"
Qui est pourtant déclaré un peu plus haut.
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 !