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] XML Schema


Sujet :

Valider XML

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 239
    Points : 239
    Points
    239
    Par défaut [XSD] XML Schema
    Bonjour,

    j'aimerai savoir s'il est possible de specifier dans un schema le contenu d'un element en fonction de la valeur d'un de ses attributs. Par exemple:

    <a attr1="a">
    <b>
    ...
    </b>
    </a>

    et

    <a attr1="c">
    <c>
    ...
    </c>
    </a>

    C'est un peu bizarre mais bon le projet sur lequel je travaille inclut ce genre de scenario.

    Merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Non je ne trouve pas cela bizarre j'ai eu les memes besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <enregistrement contenu="type1">
     <a />
    </enregistrement>
    <enregistrement contenu="type2">
     <b /> 
    </enregistrement>

    Si tu tiens au nom de l'attribut "contenu", W3C XML Schema seul ne peut pas grand chose pour toi et tu dois accepter que ton contenu soit le contenu "type1" ou "type2" quelque soit la valeur de l'attribut "contenu" en écrivant un schéma qui accepte toutes les combinaisons, par exemple:

    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
    <xs:element name="enregistrement">
     <xs:complexType>
      <xs:choice>
      <xs:sequence>
       <xs:element name="a" type="..."/>
      </xs:sequence><xs:sequence>
       <xs:element name="b" type="..."/>
      </xs:sequence></xs:choice>
      <xs:attribute name="contenu">
       <xs:simpleType> 
        <xs:restriction base="xs:token">
         <xs:enumeration value="type1"/>
         <xs:enumeration value="type2"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:attribute>
     </xs:complexType>
    </xs:element>
    Si par contre Tu peux changer le nom de l'attribut "contenu" et utiliser à la place l'attribut "xsi:type" prévu à cet usage par W3C XML Schema, tu peux simplement déclarer ton élément "enregistrement" comme acceptant un type abstrait dont seront dérivés tes contenus possibles.

    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
    <xs:complexType name="generique" abstract="true">
     <xs:sequence> 
      <xs:element name="a" type="..." minOccurs="0"/>
      <xs:element name="b" type="..." minOccurs="0"/>
     </xs:sequence> 
    </xs:complexType>
     
    <xs:complexType name="type1">
     <xs:complexContent>
      <xs:restriction base="generique">
       <xs:sequence> 
        <xs:element name="a" type="..."/>
       </xs:sequence> 
      </xs:restriction>
     </xs:complexContent>
    </xs:complexType>
     
    <xs:complexType name="type2">
     <xs:complexContent>
      <xs:restriction base="generique">
       <xs:sequence> 
        <xs:element name="b" type="..."/>
       </xs:sequence> 
      </xs:restriction>
     </xs:complexContent>
    </xs:complexType>
     
    <xs:element name="enregistrement" type="generique"/>
    Il ne reste plus ensuite qu'à déclarer dans tes éléments quel est le type utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <enregistrement xsi:type="type1">
     <a/>
    </enregistrement>
    <enregistrement xsi:type="type2">
     <b/>
    </enregistrement>

    Voila !

    J'espère que cela réponds à ta question ?

    Haaz
    Le problème se situe souvent entre la chaise et l'écran.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 239
    Points : 239
    Points
    239
    Par défaut
    Voila !

    J'espère que cela réponds à ta question ?

    Haaz
    Oui, merci beaucoup

    La deuxieme solution semble etre la meilleure des 2. Mais la spec veut que l'on respecte le vocabulaire. Donc il faut que j'adopte la premiere solution, sniff ...

    Sleepy

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 27
    Points : 21
    Points
    21
    Par défaut
    Oui, merci beaucoup

    La deuxieme solution semble etre la meilleure des 2. Mais la spec veut que l'on respecte le vocabulaire. Donc il faut que j'adopte la premiere solution, sniff ...
    De rien

    Bonne continuation dans les schémas

    Haaz
    Le problème se situe souvent entre la chaise et l'écran.

Discussions similaires

  1. [XSD] Récupérer les informations dans un fichier xsd (xml schema)
    Par gold_men84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/03/2011, 18h50
  2. [XSD] editeur xml schema
    Par ameliepim dans le forum Valider
    Réponses: 4
    Dernier message: 13/06/2006, 15h29
  3. [XSD] [XML Schema]Validation sans mettre le xsd dans le xml
    Par sikapoch dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 07/06/2006, 14h23
  4. [XML Schema] Représenter une auto-relation en XSD
    Par Benne dans le forum Valider
    Réponses: 1
    Dernier message: 16/03/2006, 17h00
  5. [XSD] equivalent de (x1|x2)* en XML Schema
    Par tetram51 dans le forum Valider
    Réponses: 4
    Dernier message: 16/06/2005, 16h03

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