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

---------------
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, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Sujets relatifs:

Leave a Replay

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