Bonjour,
je suis en train d'apprendre XML Schema avec un livre et le cours d'un MOOC bien connu qui propose de faire un TP et je rencontre des erreurs que je ne comprends pas sous Eclipse.
Voici le code que j'ai écrit pour le moment (j'ai recommencé du début et j'y vais par étapes). Je me concentre pour le moment sur la définition d'une balise <email /> contenu dans une autre balise <emails />.
<email /> contient du texte (pour le moment pas de pattern juste un xsd:string) et un attribut qui prend une valeur parmi certaines énumérées. J'ai tendance à décomposer le code autant que possible par souci de modularité.
Voici un morceau du code donné en solution.
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 <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/repertoire" xmlns:tns="http://www.example.org/repertoire" elementFormDefault="qualified"> <!-- DEFINITION --> <!-- EMAILS --> <xsd:simpleType name="contactType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="personnel"></xsd:enumeration> <xsd:enumeration value="professionnel"></xsd:enumeration> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="emailType"> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute ref="tns:type"></xsd:attribute> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <xsd:attribute name="type" type="tns:contactType"></xsd:attribute> <xsd:complexType name="emailsType"> <xsd:sequence> <xsd:element ref="tns:email" minOccurs="0" maxOccurs="unbounded"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="email" type="tns:emailType"></xsd:element> <xsd:element name="emails" type="tns:emailsType"></xsd:element> <xsd:complexType name="personneType"> <xsd:sequence> <xsd:element ref="tns:emails" maxOccurs="1" minOccurs="0"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:element name="personne" type="tns:personneType"></xsd:element> <xsd:element name="repertoire" type="tns:repertoireType"></xsd:element> <xsd:complexType name="repertoireType"> <xsd:sequence> <xsd:element ref="tns:personne" maxOccurs="unbounded" minOccurs="0"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:schema>
Voici un morceau de code XML que j'ai écrit pour tester.
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 <!-- balise email --> <xsd:element name="email"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="type"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="personnel" /> <xsd:enumeration value="professionnel" /> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <!-- balise emails --> <xsd:element name="emails"> <xsd:complexType> <xsd:sequence> <xsd:element ref="email" maxOccurs="unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element>
Si je suis correct on respecte globalement la même structure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?xml version="1.0" encoding="UTF-8"?><tns:repertoire xmlns:tns="http://www.example.org/repertoire" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/repertoire repertoire.xsd "> <tns:personne> <tns:emails> <tns:email type="personnel">test@perso.com</tns:email> <tns:email type="professionnel">test@pro.com</tns:email> </tns:emails> </tns:personne> </tns:repertoire>
email est défini dans la solution par:
element > complexType > simpleContent > extension >attribute > simpleType > restriction > enumeration{2}
De mon côté je fais:
email > element type(emailType)
emailType > complexType > simpleContent > extension > attribute ref(type)
type type(contactType)
contactType > simpleType > restriction > enumeration{2}
Si on rassemble le tout on a bien la même chose que dans la solution qui marche. Alors pourquoi quand j'écris mon fichier XML, Eclipse me dit que je n'ai pas le droit d'écrire d'attribut type alors que l'IDE me propose bien l'auto-completion ? Qu'est-ce qui m'échappe ?
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part cvc-complex-type.3.2.2: Attribute 'type' is not allowed to appear in element 'tns:email'. test.xml /XML/xml line 5 XML Problem
Partager