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
---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?