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 :

Exclusion d’éléments d'un group [XSD]


Sujet :

Valider XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 57
    Points : 41
    Points
    41
    Par défaut Exclusion d’éléments d'un group
    Bonjour,

    je souhaiterais utiliser un <xs:group> en le réferençant lors d'une utilisation récursive or l'élément qui contiendra la référence à ce groupe sera lui aussi référencé apr un autre élément au travers d'un autre groupe. Le soucis est que certains des élément de du premier groupe ne doivent se retrouver dans un élément du second groupe. Au final ça donne un truc du genre :

    groupe A contient :
    -element e
    -element e1

    group B contient :
    -element i
    -element i1

    element e :
    ref groupe A
    ou
    ref groupe B

    element e1 :
    ref groupe A
    ou
    ref groupe B mais souhaite exclure i1


    Comment faire ? Merci d'avance

    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
     
     
     
    <xs:group name="A">
    		<xs:choice>
    			<xs:element name="e">
    				<xs:complexType>
    					<xs:sequence>
    						<xs:choice>
    							<xs:group ref="B"/>
                                                            <xs:group ref="A"/>
    						</xs:choice>
    						<xs:choice>
    							<xs:group ref="B"/>
                                                            <xs:group ref="A"/>
    						</xs:choice>
    					</xs:sequence>
    				</xs:complexType>
    			</xs:element>
    			<xs:element name="e1">
    				<xs:complexType>
    					<xs:sequence>
    						<xs:choice>
    							<xs:group ref="B"/>
                                                            <xs:group ref="A"/>
    			 		        </xs:choice>
    						<xs:choice>
    							<xs:group ref="B"/>
                                                            <xs:group ref="A"/>
    						</xs:choice>
    					</xs:sequence>
    				</xs:complexType>
    			</xs:element>
    		</xs:choice>
    	</xs:group>
     
    <xs:group name="B">
    		<xs:choice>
    			<xs:element name="i"/>
    			<xs:element name="i1"/>
    		</xs:choice>
    </xs:group>

  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 rajouter un pps
    Un xs:group a un statut practiquement comme un élément: dans la définition de e1, au lieu de référer groupe B, vous référez élément i avec comme conséquence tacite excluant i1.

    Pour que vous puissiez référer i dans la définition de e1, vous mettez la définition i à la portée globale. Dans le script montré, l'élément i est avec une portée dites locale.

    Avec ces changements, la chose serait faite.

    ps: Les deux répétitions de xs:choice ne sont pas nécessaire: vous mettez plus simplement comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:choice maxOccurs="2">
    avec minOccurs="1" par défaut sous-jacent.

    pps: Je veux ajouter (dans ce seconde temps d'edition) un amendement comme complémentaire au ps desus. Si je comprends bien, vous voulez aussi que le choix paraît deux fois, dans ce cas il faut bien-entendu fixer le facet minOccurs aussi, comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:choice minOccurs="2" maxOccurs="2">

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    salut,

    merci pour ta réponse mais le but étant justement de ne pas utilisé d'élément seul mais de réutiliser des group, cela me permet d'avoir une xsd modulaire. Car si je dois utiliser un élément seul global à chaque fois pour d'autres éléments je vais avoir une xsd beaucoup trop longue et illisible.

  4. #4
    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 ne vois pas clairement comment ça peut faire obstacle à l'objectif modulaire, et à mon sens, il est même d'y être conducive. Mais ce n'est pas grave.

    Si vous voulez avoir un sorte de symétrie, partout utilsant xs:group, vous pouvez faire comme ça, pourquoi pas.
    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
    <xs:group name="A">
        <!-- etc etc -->
    </xs:group>
    
    <xs:group name="B">
        <xs:choice>
            <xs:element name="i"/>
            <xs:element name="i1"/>
         </xs:choice>
    </xs:group>
    
    <xs:group name="b">
        <xs:choice>
            <xs:element name="i"/>
          </xs:choice>
    </xs:group>  
    
    <!-- j'ai enlevé xs:sequence, c'est superflu. -->
    <xs:element name="e">
        <xs:complexType>
            <xs:choice minOccurs="2" maxOccurs="2">
                <xs:group ref="B"/>
                <xs:group ref="A"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
    	
    <!-- j'ai enlevé xs:sequence, c'est superflu. -->
    <xs:element name="e1">
        <xs:complexType>
            <xs:choice minOccurs="2" maxOccurs="2">
                <!--
                <xs:group ref="B"/>
                -->
                <xs:group ref="b" />
                <xs:group ref="A"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
    Il est criticalement important que l'élément i apparu dans xs:group b et xs:group B soient exactement de même, sinon, c'est une erreur comme on peut attendre.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    si justement ça peut faire obstacle dans la mesure où je veux exclure un élement or j'en ajoute potentiellement puisque dans ton exemple si à un moment donné j'ai un xml du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <e1>
    <i1></i1>
    </e1>
    le code xml sera forcément validé et c'est justement pas ce que je veux mais plutôt exclure i1 de sorte que s'il apparaît il ne soit pas validé mais seulement pour l'élément e1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xs:element name="e1">
        <xs:complexType>
            <xs:choice minOccurs="2" maxOccurs="2">
                <!--
                <xs:group ref="B"/>
                -->
                <xs:group ref="b" />
                <xs:group ref="A"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

  6. #6
    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
    puisque dans ton exemple si à un moment donné j'ai un xml du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <e1>
    <i1></i1>
    </e1>
    le code xml sera forcément validé et c'est justement pas ce que je veux
    Plutôt le code xml sera forcément non-validé et c'est justement ce que vous voulez, non?! Je n'ai rien compris ce que vous dites et je ne pense pas du tout.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 57
    Points : 41
    Points
    41
    Par défaut
    je te remercie pour ta réponse , elle convient mais j'aurais aimé ne pas utiliser un nouveau group (petit b), ce que j'ai fait c'est utilisé directement un élément à la place du nouveau group b . En gros 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
     
     
    <xs:element name="e1">
        <xs:complexType>
            <xs:choice minOccurs="2" maxOccurs="2">
                <!--
                <xs:group ref="B"/>
                -->
                <xs:element name="i"/>
                <xs:group ref="A"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

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

Discussions similaires

  1. [RegEx] Exclusions de groupes dans une regex
    Par Papy214 dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2011, 16h03
  2. [CR8] Groupes nommés par ordre spécifié
    Par PschittN dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/05/2004, 23h46
  3. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21
  4. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01

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