probleme XSD - XML schema

probleme XSD - XML schema - XML/XSL - Programmation

Marsh Posté le 26-02-2008 à 21:19:20    

bonjour à tous
 
voila, je suis depuis 3 jours sur un probleme de XSD.
eclipse me souligne comme vous pouvez le voir si dessous et pas moyen de trouver le resultat.
 
http://bevounet.free.fr/xsd.jpg
 
je pensais qu'on pouvait mettre des max et min occurs dans les element et je ne pige pas les autres problemes non plus :sweat:  
c'est pour cela que je vous demande votre aide :sweat:  
voici mon 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" maxOccurs="1" minOccurs="0" />
  <xsd:element name="titre" type="xsd:string" />
  <xsd:element name="Module" type="TypeModule" maxOccurs="unbounded" minOccurs="0"/>
  <xsd:complexType name="TypeModule">
     <xsd:sequence>
        <xsd:element name="titre" type="xsd:string" maxOccurs="1" minOccurs="0" />
        <xsd:element name="definition" type="xsd:string" maxOccurs="1" minOccurs="0" />
        <xsd:element name="illustrations" maxOccurs="unbounded" minOccurs="0" />  
        <xsd:element name="complement" type="TypeComplement" maxOccurs="1" minOccurs="0"/>  
        <xsd:complexType name="TypeComplement">
          <xsd:sequence>
            <xsd:element name="complement" type="xsd:string" maxOccurs="1" minOccurs="0" />  
            <xsd:element name="illustrations" maxOccurs="1" minOccurs="0" />
          </xsd:sequence>
        </xsd:complexType>
     </xsd:sequence>
  </xsd:complexType>
</xsd:schema>
 
je vous remerci pour votre sollicitude  
Beverley21

Reply

Marsh Posté le 26-02-2008 à 21:19:20   

Reply

Marsh Posté le 09-03-2008 à 16:39:11    

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 :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3.    
  4.  <xsd:element name="TitreModule" type="xsd:string"/>
  5.  <xsd:element name="IntroModule" type="xsd:string"/>
  6.  <xsd:element name="titre" type="xsd:string" />
  7.  <xsd:element name="Module" type="TypeModule"/>
  8.  
  9.  <xsd:complexType name="TypeModule">
  10.     <xsd:sequence>
  11.        <xsd:element ref="titre" minOccurs="0" />
  12.        <xsd:element name="definition" type="xsd:string" minOccurs="0" />
  13.        <xsd:element name="illustrations" maxOccurs="unbounded" minOccurs="0" />
  14.        <xsd:element name="complement" minOccurs="0">
  15.            <xsd:complexType>
  16.                <xsd:sequence>
  17.                    <xsd:element name="complement" type="xsd:string" minOccurs="0" />
  18.                    <xsd:element name="illustrations" minOccurs="0" />
  19.                </xsd:sequence>
  20.            </xsd:complexType>
  21.        </xsd:element>
  22.     </xsd:sequence>
  23.  </xsd:complexType>
  24. </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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed