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 :

ComplexType composé d'éléments contextuellement variables?!


Sujet :

Valider XML

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut ComplexType composé d'éléments contextuellement variables?!
    Bonjour,

    Je cherche à définir un ComplexType (par exemple bookType) qui exigerait un certain nombre d'éléments en fonction du contexte dans lequel il est utilisé.
    Par exemple sur une requète getBooks, l'objet book exigerait un ID pour en obtenir les détails.
    Au contraire sur un getBooksResponse, on aurait l'ID certe mais aussi le Title et l'Author.

    Si j'illustre:

    getBooks


    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:complexType name="bookType">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element name="bookId" type="xs:ID" minOccurs="1" maxOccurs="1" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="getBooks">
            <xs:complexType>
                <xs:sequence minOccurs="1" maxOccurs="1">
                    <xs:element name="books" minOccurs="1" maxOccurs="1">
                        <xs:complexType>
                            <xs:sequence minOccurs="1" maxOccurs="1">
                                <xs:element name="book" type="bookType" minOccurs="1" maxOccurs="unbounded" />
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    et getBooksResponse


    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:complexType name="bookType">
            <xs:sequence minOccurs="1" maxOccurs="1">
                <xs:element name="bookId" type="xs:ID" minOccurs="1" maxOccurs="1" />
                <xs:element name="title" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="author" type="xs:string" minOccurs="0" maxOccurs="1" />
            </xs:sequence>
        </xs:complexType>
        <xs:element name="getBooksResponse">
            <xs:complexType>
                <xs:sequence minOccurs="1" maxOccurs="1">
                    <xs:element name="books" minOccurs="1" maxOccurs="1">
                        <xs:complexType>
                            <xs:sequence minOccurs="1" maxOccurs="1">
                                <xs:element name="book" type="bookType" minOccurs="1" maxOccurs="unbounded" />
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    Le problème c'est le conflit de nom de bookType.
    Soit je le créé une seule fois dans le fichier xsd avec tous les éléments qu'il peut supporter et j'ai pas de conflit mais j'ai plus non plus de controle au niveau des champs requis contextuellement... cqfd
    Soit je le créé plusieurs fois dans différents fichiers xsd puis je les regroupe via un Main.xsd mais c'est du pareil au même, yaura conflit de nom.

    Je vois pas trop comment faire en fait à part bien sur faire un bookType1 et bookType2 etc... mais dans ce cas il faut que je redéfinisse chaque élément du bookType pour chaque contexte d'utilisation!

    C'est quoi les best practices dans ce cas de figure?

    Merci beaucoup.

  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
    Je vois pas trop comment faire en fait à part bien sur faire un bookType1 et bookType2 etc... mais dans ce cas il faut que je redéfinisse chaque élément du bookType pour chaque contexte d'utilisation!
    C'est ça que vous devriez chercher de le faire. Puisque le nom book est toujours défini comme local, c'est déjà enlevé un sourci qui puisse vous placer dans une impasse.

    Pour le faire avec plus de grâce et élégance, donc, accentuer les liens entre les types ainsi "proliférer", j'aurais tendé de le faire 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:complexType name="bookType">
            <xs:sequence>
                <xs:element name="bookId" type="xs:ID" />
            </xs:sequence>
        </xs:complexType>
     
        <xs:complexType name="bookTypeResponse">
            <xs:complexContent>
                <xs:extension base="bookType">
                    <xs:sequence>
                        <xs:element name="title" type="xs:string" minOccurs="0" />
                        <xs:element name="author" type="xs:string" minOccurs="0" />
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
     
        <xs:element name="getBooks">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="books">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="book" type="bookType" maxOccurs="unbounded" />
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
     
        <xs:element name="getBooks">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="books">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="book" type="bookType" maxOccurs="unbounded" />
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
     
        <xs:element name="getBooksResponse">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="books">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="book" type="bookTypeResponse" maxOccurs="unbounded" />
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
     
    </xs:schema>
    C'est pas si mal comme complication à mon avis.

Discussions similaires

  1. [XL-2003] RechercheV avec élément à moitié variable
    Par Djohn dans le forum Excel
    Réponses: 2
    Dernier message: 26/08/2011, 10h37
  2. Menu déroulant avec élément sélectionné variable
    Par arnogef dans le forum Langage
    Réponses: 1
    Dernier message: 16/12/2006, 18h49
  3. [VBS]Soustraire les éléments d’une variable
    Par Edoxituz dans le forum VBScript
    Réponses: 15
    Dernier message: 21/02/2006, 18h46
  4. [XSL] utiliser une variable pour nom d'élément
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 07/09/2004, 13h58
  5. Tableau d'éléments de type variable
    Par Drooxy dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2003, 15h20

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