Bonjour,
Je suis en train de créer un XSD dans lequel j'aimerai valider un élément de la forme suivante:
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<Vecteur Unite="V" Start="0" Stop="5" Step="0.1"/>
Dans lequel les type des éléments ou attributs Start, Stop et Step sont du type correspondant à l'attribut "Unite" de l’élément Vecteur (pouvant valoir "V" ou "I").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <Vecteur Unite="V"> <Start>0<Start/> <Stop>5<Stop/> <Step>0.1<Step/> <Vecteur/>
J'ai essayé plusieurs solutions sans succès.
Pour la première solution j'ai crée 2 groupes d'attributs mais XML Schema ne permet pas de faire des unions de groupe d'attributs d'après ce que j'ai compris et essayé.
Pour la seconde solution j'ai essayé de faire un "choice" de 2 types d'élement avec les bonne types mais alors les noms de ces deux éléments sont identiques (Vecteur) ce qui pose un problème.
Voici mon code pour la seconde solution:
XSD:
XML:
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 <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:simpleType name="unite"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="I"/> <xsd:enumeration value="V"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="V"> <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-200"/> <xsd:maxInclusive value="200"/> <xsd:fractionDigits value="3"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="I"> <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="-1"/> <xsd:maxInclusive value="1"/> <xsd:fractionDigits value="6"/> </xsd:restriction> </xsd:simpleType> <xsd:group name="Vgroup"> <xsd:sequence> <xsd:element name="Start" type="V"/> <xsd:element name="Stop" type="V"/> </xsd:sequence> </xsd:group> <xsd:group name="Igroup"> <xsd:sequence> <xsd:element name="Start" type="I"/> <xsd:element name="Stop" type="I"/> </xsd:sequence> </xsd:group> <xsd:element name="Test"> <xsd:complexType> <xsd:choice> <xsd:element name="Vecteur"> <xsd:complexType> <xsd:group ref="Vgroup"/> <xsd:attribute name="Mode" type="unite" fixed="V"/> </xsd:complexType> </xsd:element> <xsd:element name="Vecteur"> <xsd:complexType> <xsd:group ref="Igroup"/> <xsd:attribute name="Mode" type="unite" fixed="I"/> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema>
Avez-vous une solution?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?xml version="1.0" encoding="UTF-8"?> <Test> <Vecteur Mode="V"> <Start>0</Start> <Stop>5</Stop> </Vecteur> </Test>
Merci
Partager