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 :

Ajout d'un attribut en extensionnant un simpleType


Sujet :

Valider XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 49
    Points
    49
    Par défaut Ajout d'un attribut en extensionnant un simpleType
    Bonsoir
    J'ai un simpleType pour définir un courriel avec une restriction contenant un pattern de validation.

    Je veux pouvoir extensionner ce type pour lui ajouter un attribut dans certains cas d'utilisation mais je n'y arrive pas, j'ai essayé plusieurs choses sans succès.

    Voici ce que j'ai et qui devrait marcher selon moi mais ça me donne une erreur:
    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
    64
    65
     
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema id="XMLSchema"
        targetNamespace="http://tempuri.org/XMLSchema.xsd"
        xmlns="http://tempuri.org/XMLSchema.xsd"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
    >
     
    	<xs:complexType name="TypeInfoProfilBase">
    		<xs:sequence>
    			<xs:element name="Nom">
    				<xs:simpleType>
    					<xs:restriction base="xs:string">
    						<xs:minLength value="1" />
    						<xs:maxLength value="30" />
    					</xs:restriction>
    				</xs:simpleType>
    			</xs:element>
    			<xs:element name="Prenom">
    				<xs:simpleType>
    					<xs:restriction base="xs:string">
    						<xs:minLength value="1" />
    						<xs:maxLength value="30" />
    					</xs:restriction>
    				</xs:simpleType>
    			</xs:element>
    			<xs:element name="Courriel" type="TypeCourriel" />
    		</xs:sequence>
    	</xs:complexType>
     
    	<xs:simpleType name="TypeCourrielValeur">
    		<xs:restriction base="xs:string">
    			<xs:minLength value="1" />
    			<xs:maxLength value="100" />
    			<xs:pattern value="[a-zA-Z0-9!#$%&amp;'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&amp;'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?" />
    		</xs:restriction>
    	</xs:simpleType>
     
    	<xs:complexType name="TypeCourriel">
    		<xs:simpleContent>
    			<xs:extension base="TypeCourrielValeur">
    			</xs:extension>
    		</xs:simpleContent>
    	</xs:complexType>
     
    	<xs:complexType name="TypeInfoProfilPlus">
    		<xs:complexContent>
    			<xs:extension base="TypeInfoProfilBase">
    				<xs:sequence>
    					<xs:element name="Courriel">
    						<xs:complexType>
    							<xs:simpleContent>
    								<xs:extension base="TypeCourriel">
    									<xs:attribute name="AcceptePublicite" type="xs:boolean" use="optional" />
    								</xs:extension>
    							</xs:simpleContent>
    						</xs:complexType>
    					</xs:element>
    					<xs:element name="DateNaissance" type="xs:date" minOccurs="0" />					
    				</xs:sequence>
    			</xs:extension>
    		</xs:complexContent>
    	</xs:complexType>
     
    </xs:schema>
    Visual Studio me fait une erreur à la ligne 50
    Les éléments ayant le même nom et se trouvant dans la même portée doivent avoir le même type.
    Pourtant selon moi ils sont du même type puisque c'est une extension de TypeCourriel

    Quelqu'un peux m'aider s.v.p. ?

    Merci d'avance

  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
    [0]
    Les éléments ayant le même nom et se trouvant dans la même portée doivent avoir le même type.
    C'est un message proprement fait. Dans le désigne en large, vous devriez mettre l'élément Couriel dans le type TypeInfoProfilePlus seul et ne pas dans TypeInfoProfileBase et TypeInfoProfilePlus en même temps.
    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
     
    	<xs:complexType name="TypeInfoProfilBase">
    		<xs:sequence>
    			<xs:element name="Nom">
    				<xs:simpleType>
    					<xs:restriction base="xs:string">
    						<xs:minLength value="1" />
    						<xs:maxLength value="30" />
    					</xs:restriction>
    				</xs:simpleType>
    			</xs:element>
    			<xs:element name="Prenom">
    				<xs:simpleType>
    					<xs:restriction base="xs:string">
    						<xs:minLength value="1" />
    						<xs:maxLength value="30" />
    					</xs:restriction>
    				</xs:simpleType>
    			</xs:element>
    			<!-- enlevée
    			<xs:element name="Courriel" type="TypeCourriel" />
    			-->
    		</xs:sequence>
    	</xs:complexType>
    Le reste le même.

    [1] Et puis, le pattern n'est pas tout à fait au point. Dans xsd, il ne supporte pas (encore?) les "lookahead" ou "lookbehind". Ils provokeraient erreurs sans doute.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 65
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par tsuji Voir le message
    vous devriez mettre l'élément Couriel dans le type TypeInfoProfilePlus seul et ne pas dans TypeInfoProfileBase et TypeInfoProfilePlus en même temps.
    Merci pour ta réponse, c'est en effet ce que j'ai du faire pour que ça fonction.

    Je trouve par contre dommage que je ne puisse pas intégrer l'élément Courriel au profil de base puisque je veux l'utiliser dans tous les cas. Je ne veut qu'ajouter un attribut dans certains cas, mais il semble que je n'aie pas le choix de sortir le Courriel du profile de base et de toujours le rajouter ensuite.

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

Discussions similaires

  1. Ajout d'un attribut sur un noeud xml
    Par jbrasselet dans le forum VBScript
    Réponses: 2
    Dernier message: 02/07/2007, 16h51
  2. [javascript]ajout d'un attribut dans div
    Par ranell dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/04/2007, 20h51
  3. Réponses: 3
    Dernier message: 01/03/2007, 17h08
  4. [XSD] Ajout d'un attribut +d'une restriction
    Par be_tnt dans le forum Valider
    Réponses: 3
    Dernier message: 23/01/2007, 12h45
  5. Réponses: 4
    Dernier message: 11/02/2005, 14h20

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