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 : sequence et all...


Sujet :

Valider XML

  1. #1
    Membre du Club
    Profil pro
    Développeur (web, java, php, c, ...)
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur (web, java, php, c, ...)

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 53
    Points
    53
    Par défaut XSD : sequence et all...
    Bonjour,

    J'explique vite fait le problème : j'ai un bloc xml avec ces balises :

    <champ1 />
    <champ2 />
    <champX />
    <champX />

    En gros : j'ai deux champs 1 et 2 qui n'apparaissent qu'une fois quoi qu'il arrive (ou une fois maxi mais ça revient au même), et le X qui peut apparraître 0 à n fois. L'ordre d'apparition de ces champs n'est pas fixé, d'où le problème pour le représenter avec un schéma XSD. Soit je les regroupe dans un élément "all", dans quel cas je ne peux pas mettre une cardinalité max à l'infini (unbounded), sans quoi mon validateur me dit que le fichier XSD est invalide, soit je mets une "sequence", mais ça m'oblige à avoir les champs qui apparaissent toujours dans le même ordre.
    Est-ce qu'il y a une autre solution ? Et si oui laquelle ?

    Merci d'avance.

    Note : par soucis de compatibilité avec une applicaiton existante il m'est impossible de modifier le format xml utilisé. Donc inutile de me proposer des solutions de ce type, la seule chose que je veux c'est pouvoir décrire ce schéma là.

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    La seul chose que tu peux faire (à mon avis) c'est déclaré un any après tes deux element .

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    	<xs:element name="TOTO">
    		<xs:annotation>
    			<xs:documentation>Comment describing your root element</xs:documentation>
    		</xs:annotation>
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="toto1"/>
    				<xs:element name="toto2"/>
    				<xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    il n'y a aucune solution permettant cela, il faut passer par un compromis.

    - Soit privilégier l'ordre arbitraire d'apparition des éléments, au détriment des cardinalités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		<xs:complexType>
    			<xs:choice maxOccurs="unbounded">
    				<xs:element name="champ1" type="xs:string"/>
    				<xs:element name="champ2" type="xs:string"/>
    				<xs:element name="champX" type="xs:string"/>
    			</xs:choice>
    		</xs:complexType>
    - Soit privilégier les cardinalités en imposant un ordre fixe aux éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="champ1" type="xs:string" minOccurs="0"/>
    				<xs:element name="champ2" type="xs:string" minOccurs="0"/>
    				<xs:element name="champX" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
    			</xs:sequence>
    		</xs:complexType>
    C'est là une très grosse limitation de xs:all, rendant problématique son utilisation.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre du Club
    Profil pro
    Développeur (web, java, php, c, ...)
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur (web, java, php, c, ...)

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Oki, merci beaucoup pour cette réponse , au moins c'est clair !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSD] problème avec all et extension
    Par leelou12 dans le forum Valider
    Réponses: 1
    Dernier message: 03/05/2010, 13h41
  2. [XSD] Séquence d'attributs?
    Par guizmo_ dans le forum Valider
    Réponses: 2
    Dernier message: 10/06/2006, 18h51
  3. [XSD] Elements de meme nom dans une sequence
    Par MathiasM dans le forum Valider
    Réponses: 2
    Dernier message: 14/04/2005, 09h33
  4. [XSD] Complexe de type all mais avec maxoccur
    Par Je@nb dans le forum Valider
    Réponses: 3
    Dernier message: 06/02/2005, 19h18
  5. Réponses: 2
    Dernier message: 07/01/2005, 20h40

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