IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

[XSD] Plusieurs element dans n'importe quel ordre.


Sujet :

Valider XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 62
    Points
    62
    Par défaut [XSD] Plusieurs element dans n'importe quel ordre.
    Bonjour,

    Je n'arrives pas à définir le fonctionnement suivant dans mon schémas xsd. Quand je teste la validation d'un xml à partir de mon xsd, cela ne réagit pas du tout comme je veux.

    En gros je cherche à avoir un fonctionnement similaire aux flux rss (je vais donc prendre l'exemple des rss pour la suite).

    Je voudrais, dans un élément <channel> avoir obligatoirement les éléments <title> <link> et <description> en un et un seul exemplaire, ainsi qu'optionnellement les éléments <language> et <copyrigth> en 0 ou 1 exemplaire.

    Je me suis basé sur le xsd suivant pour le faire : http://www.thearchitect.co.uk/schemas/rss-2_0.xsd
    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
    <xs:complexType name="RssChannel">
    	<xs:sequence>
    		<xs:choice maxOccurs="unbounded">
    			<xs:element name="title" type="xs:string">
    			</xs:element>
    			<xs:element name="link" type="xs:anyURI">
    			</xs:element>
    			<xs:element name="description" type="xs:string">
    			</xs:element>
    			<xs:element name="language" type="xs:language" minOccurs="0">
    			</xs:element>
    			<xs:element name="copyright" type="xs:string" minOccurs="0">
    			</xs:element>
    		</xs:choice>
    	</xs:sequence> 
    </xs:complexType>
    Hélas, quand je lance une validation xml par le biais du xsd, celà n'indique aucune erreur si mon xml a deux balises <title>, encore moins s'il n'y en a aucune...

    Je ne peux pas utiliser une simple séquence, car je ne veux pas contraindre d'ordre entre les balises, et ne peux pas utiliser un simple choice, car il faut pouvoir mettre toutes les balises si envie.

    Avez vous une idée pour obtenir le bon fonctionnement?

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    C'est normal tu as écrit ce qui signifie n'importe quel quantité de title ou ... A mon avis, il manque un niveau dans ta déclaration genre, il vaut mieux utiliser l'opérateur 'all' que 'choice' qui indique tout dans n'importe quel ordre :

    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
    <xs:complexType name="RssChannel">
    	<xs:sequence>
     
    <xs:element name="item"  maxOccurs="unbounded">
     
    		<xs:all>
    			<xs:element name="title" type="xs:string">
    			</xs:element>
    			<xs:element name="link" type="xs:anyURI">
    			</xs:element>
    			<xs:element name="description" type="xs:string">
    			</xs:element>
    			<xs:element name="language" type="xs:language" minOccurs="0">
    			</xs:element>
    			<xs:element name="copyright" type="xs:string" minOccurs="0">
    			</xs:element>
    		</xs:all>
     
    </xs:element>
     
    	</xs:sequence> 
    </xs:complexType>

  3. #3
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 117
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    je rebondis sur ce sujet. J'ai actuellement le type ci-dessous, et dans ce schéma l'ordre est imposé (ce que je ne souhaite pas), et comme l'utilisation de "all" ne peut pas se faire plusieurs fois dans un type ou une séquence, je ne sais pas comment modifier cette partie pour ne pas imposer d'ordre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <xs:complexType name="TOTO">
    	<xs:sequence>
    		<xs:element name="titi" type="TITI"/>
    		<xs:element name="tutu" type="TUTU" minOccurs="0"/>
    		<xs:element name="tata" type="TATA"/>
    		<xs:element name="tete" type="TETE"/>
    		<xs:sequence>
    			<xs:element name="aaaa" type="AAAA" minOccurs="0" maxOccurs="unbounded">
    			</xs:element>
    			<xs:element name="bbbb" type="BBBB" minOccurs="0" MaxOccurs="unbounded"/>
    			<xs:element name="cccc" type="CCCC" minOccurs="0" maxOccurs="4"/>
    		</xs:sequence>
    	</xs:sequence>
    </xs:complextype>

    Merci pour vos éclaircissements

Discussions similaires

  1. [XSD] Plusieur keyref dans un element.
    Par Ekinoks dans le forum Valider
    Réponses: 2
    Dernier message: 09/02/2009, 14h33
  2. [XSD] Plusieurs element 0 à 1 fois sans ordre
    Par benkunz dans le forum Valider
    Réponses: 8
    Dernier message: 06/06/2008, 16h31
  3. Selectionner plusieurs elements dans une ListBox
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 01/03/2007, 08h27
  4. declarer plusieur elements dans une variable ?
    Par freebug dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 28/06/2005, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo