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 :

Validation d'une liste d'éléments libre [XSD]


Sujet :

Valider XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 35
    Points
    35
    Par défaut Validation d'une liste d'éléments libre
    Bonjour a tous,

    J'ai un cas de xml particulier que j'aimerai valider par un XSD. Voici mon xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="utf-8"?>
    <Racine>
      <Actions>
        <Action_ColumnMerge />
        <Action_ApplyRule />
        <Action_ColumnSplit />
        <Action_ApplyRule />
        <Action_ColumnMerge />
        <Action_ApplyRule />
        <Action_ColumnMerge />
        <Action_ColumnMerge />
      </Actions>
    </Racine>
    Chaque balise Action_ColumnMerge, Action_ApplyRule, Action_ColumnSplit peut revenir un nombre indéterminé de fois, et ce dans n'importe quel ordre.

    Du coup la séquence ne me convient pas (l'ordre n'est pas strict dans mon cas), le Choice et le All non plus.

    J'ai trouvé une manière de contourner l'affaire en structurant mon xml de cette manière :

    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?xml version="1.0" encoding="utf-8"?>
    <Racine>
      <Actions>
        <Action>
          <Action_ColumnMerge />
        </Action>
        <Action>
          <Action_ApplyRule />
        </Action>
        <Action>
          <Action_ColumnSplit />
        </Action>
        <Action>
          <Action_ApplyRule />
        </Action>
        <Action>
          <Action_ColumnMerge />
        </Action>
        <Action>
          <Action_ApplyRule />
        </Action>
        <Action>
          <Action_ColumnMerge />
        </Action>
        <Action>
          <Action_ColumnMerge />
        </Action>
      </Actions>
    </Racine>
    Dans ce cas, J'ai une séquence d'"Action" en maxoccurs="unbounded", et l'intérieur est un choice d'une des 3 balises.

    Je ne trouve pas ca très élégant, et on peut difficilement modifier la structure xml qui est généré par un outil existant.

    Connaissez vous un moyen de valider la première structure ?

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Vous pouvez le faire tout à fait avec d'un groupe model comme ça, suppoçons les éléments Action_xxx sont du type string au titre d'exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xs:element name="Actions">
        <xs:complexType>
            <xs:sequence maxOccurs="unbounded">
                <xs:choice>
                    <xs:element name="Action_ColumnMerge" type="xs:string" />
                    <xs:element name="Action_ApplyRule" type="xs:string" />
                    <xs:element name="Action_ColumnSplit" type="xs:string" />
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    Il s'est dit d'un groupe model parce que vous pouvez aussi écrire comme ça.
    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:element name="Actions">
        <xs:complexType>
            <xs:sequence>
                <xs:group ref="choicegroup" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:group name="choicegroup">
        <xs:choice>
            <xs:element name="Action_ColumnMerge" type="xs:string" />
            <xs:element name="Action_ApplyRule" type="xs:string" />
            <xs:element name="Action_ColumnSplit" type="xs:string" />
        </xs:choice>
    </xs:group>

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Points : 35
    Points
    35
    Par défaut
    Ca fonctionne, merci beaucoup.

    J'en était resté à jouer sur les cardinalités du choice, ne connaissant pas la notion de group.


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

Discussions similaires

  1. Faire une liste d'élément qui ne sont pas dans la base
    Par bossLINDROS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 06/06/2007, 12h09
  2. Réponses: 3
    Dernier message: 26/08/2006, 14h03
  3. Réponses: 12
    Dernier message: 10/08/2006, 17h22
  4. [VB]Ja'imerais afficher une liste d'éléments...
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/01/2006, 18h49
  5. [struts] afficher page par page une liste d'élément
    Par BurningPat dans le forum Struts 1
    Réponses: 6
    Dernier message: 27/09/2005, 11h09

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