1. Lignes 4 et 6
xsd:element dans xsd:schema et dans un autre élément n'ont pas la même définition. Principalement, dans xsd:schema xsd:element n'a pas minOccurs et maxOccurs parce que ça n'a pas de sens. Ceux-ci apparaissent à l'utilisation de l'élément (via xsd:element @ref) puisqu'ils dépendent du type ou de l'élément au sein duquel on utilise le xsd:element ici défini.
2. Ligne 13, xsd:complexType n'est pas permis dans xsd:sequence. Suffit de regarder le message de ton validateur, il devrait te dire un truc du style
Citation :
Error:Error:line (12)cvc-complex-type.2.4.a: Invalid content was found starting with element 'xsd:complexType'. One of '{"http://www.w3.org/2001/XMLSchema":element, "http://www.w3.org/2001/XMLSchema":group, "http://www.w3.org/2001/XMLSchema":choice, "http://www.w3.org/2001/XMLSchema":sequence, "http://www.w3.org/2001/XMLSchema":any}' is expected.
|
qui me semble relativement clair...
3. Ligne 12, dans la mesure où il n'y a pas de définition valide pour "TypeComplement", la définition de l'élément est invalide (le symbole ne peut être résolu).
Pour résoudre ces problèmes:
- Dégager les @minOccurs et @maxOccurs aux lignes 4 et 6
- Placer la définition de TypeComplement dans xsd:schema si il va être utilisé pour d'autres éléments, ou bien inline dans le xsd:element s'il n'est utilisé qu'ici, et enlever son @name (voir xml final à la fin de mon post pour le dernier choix)
- J'ajouterais d'utiliser un xsd:element @ref ligne 9 dans la mesure ou un élément "titre" a déjà été défini
- @maxOccurs étant à "1" par défaut je ne vois pas l'intérêt de le respecifier à chaque fois, ne mettre que @minOccurs
Après un premier passage, ça donnerait:
Code :
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="TitreModule" type="xsd:string"/> <xsd:element name="IntroModule" type="xsd:string"/> <xsd:element name="titre" type="xsd:string" /> <xsd:element name="Module" type="TypeModule"/> <xsd:complexType name="TypeModule"> <xsd:sequence> <xsd:element ref="titre" minOccurs="0" /> <xsd:element name="definition" type="xsd:string" minOccurs="0" /> <xsd:element name="illustrations" maxOccurs="unbounded" minOccurs="0" /> <xsd:element name="complement" minOccurs="0"> <xsd:complexType> <xsd:sequence> <xsd:element name="complement" type="xsd:string" minOccurs="0" /> <xsd:element name="illustrations" minOccurs="0" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:schema>
|
Mais j'avoue que le schéma est un peu bizarre (pourquoi avoir deux fois la définition d'un élément illustrations? À quoi servent TitreModule et IntroModule? Est-il vraiment utile de créer un type nommé pour Module?), et le style n'est pas fantastique: IntroModule, TitreModule et Module devraient au moins commencer par une minuscule, les majuscules c'est pour les types. Donc les renommer resp. introModule, titreModule et module, ou titre-module et intro-module pour les deux premiers. Mais ce sont imho des redondances inutiles, je ne vois pas l'intérêt d'avoir module/intro-module ou module/titre-module (cf répétition du mot module, module/titre et module/intro sont largement suffisants.
Enfin, j'ai tendance à coder en anglais (dans la mesure où tout ce qui est autour est de l'anglais) plutôt qu'en français.
Message édité par masklinn le 09-03-2008 à 16:40:07
---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody