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

XML/XSL et SOAP Discussion :

XML + XSD : une balise ne peut contenir qu'un groupe parmi deux possibles


Sujet :

XML/XSL et SOAP

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut XML + XSD : une balise ne peut contenir qu'un groupe parmi deux possibles
    Bonjour,

    Je suis en train d'apprendre le format XSD et je créée quelques exercices persos pour essayer de bien comprendre.

    Et là, je bute sur un problème que je n'arrive pas à résoudre.

    La balise A ne peut contenir que des balises B ou/et C dont la somme des deux est au moins égale à zéro. L'ordre des balises B et C dans A ne doit pas avoir d'importance.
    Voici les restrictions :
    1) Si au moins deux balises B se trouvent dans A, une seule balise C au maximum est autorisée
    2) Si au moins deux balises C se trouvent dans A, une seule balise B au maximum est autorisée

    Voici la structure de mon fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8"?>
     
    <root xsi:noNamespaceSchemaLocation="schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     
        <a></a>
     
    </root>
    Et, le principal, mon fichier 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
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
        <xs:element name="root">
            <xs:complexType>
                <xs:sequence>
                    <xs:element minOccurs="0" maxOccurs="unbounded" ref="a"></xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
     
        <xs:element name="a">
            <xs:complexType>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:sequence>
                        <xs:group ref="mon_groupe_1" minOccurs="0" maxOccurs="unbounded"></xs:group>
                        <xs:group ref="mon_groupe_2" minOccurs="0" maxOccurs="unbounded"></xs:group>
                    </xs:sequence>
                </xs:choice>
            </xs:complexType>
        </xs:element>
     
        <xs:group name="mon_groupe_1">
            <xs:sequence id="un_seul_b_plusieurs_c">
                <xs:element ref="b" minOccurs="0" maxOccurs="1"></xs:element>
                <xs:element ref="c" minOccurs="0" maxOccurs="unbounded"></xs:element>
            </xs:sequence>
        </xs:group>
     
        <xs:group name="mon_groupe_2">
            <xs:sequence id="un_seul_c_plusieurs_b">
                <xs:element ref="c" minOccurs="0" maxOccurs="1"></xs:element>
                <xs:element ref="b" minOccurs="0" maxOccurs="unbounded"></xs:element>
            </xs:sequence>
        </xs:group>
     
        <xs:element name="b">
            <xs:complexType>
                <xs:sequence></xs:sequence>
            </xs:complexType>
        </xs:element>
     
        <xs:element name="c">
            <xs:complexType>
                <xs:sequence></xs:sequence>
            </xs:complexType>
        </xs:element>
     
    </xs:schema>
    Cela ne marche pas comme je veux.

    En gros, pour résumer, ceci est par exemple valide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
     
    <root xsi:noNamespaceSchemaLocation="schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     
        <a>
            <b />
            <c />
            <b />
        </a>
    </root>
    Mais ceci ne l'est pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
     
    <root xsi:noNamespaceSchemaLocation="schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     
        <a>
            <b />
            <c />
            <b />
            <c />
        </a>
    </root>
    Auriez-vous une idée du problème ? Merci !!

    Pendant ce temps, je continue à chercher...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    le problème c'est que XSD ne permet pas cela.

    A la rigueur, tu pourrais lui lister tous les cas possibles. Mais si on peut avoir autant qu'on veut de certaines balises, alors la liste des cas est infinie, donc c'est impossible.

    Il existe des moyens de gruger cette limitation avec des contraintes d'unicité, mais ça n'a pas l'air de pouvoir se faire ici. Et puis, ce serait idiot d'essayer de gruger une technologie qu'on a choisi d'utiliser. Si XSD n'est pas bon il ne faut pas s'en servir, c'est tout...

    Je dirais que tu ne dois pas chercher à exprimer cette contrainte avec XSD (puisque c'est impossible.) Rien ne t'empêche de programmer ton application pour qu'elle vérifie des contraintes de ce genre, indépendamment d'une grammaire, par contre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Merci pour la réponse.

    En fait, je commence tout juste à apprendre le XSD. Je me doutais un peu que la résolution de ce problème était impossible. Enfin bon, c'est pas grave, c'était juste une sorte d'exercice que j'avais fait justement pour appréhender les limites de ce format. Je ne pense pas que je rencontrerai ce genre de cas dans la réalité. (Quoi que... ... )

    Au pire, je pourrais tenter de me créer un outil pour y parvenir. Enfin... y arriver est encore un autre problème !

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/10/2011, 11h47
  2. Réponses: 1
    Dernier message: 14/11/2010, 16h42
  3. [XML][XSD] ajout xml DANS une balise xsd
    Par amalaxel dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 13/01/2008, 15h14
  4. [javascript][DOMXML] retaché un xml a une balise HTML
    Par Thauglor dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2006, 12h00
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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