Précédent   Forum du club des développeurs et IT Pro > Autres langages > XML/XSL et SOAP > Valider
Valider W3C XML Schemas, DTD, Relax NG, Schematron...) et tout ce qui permet de les mettre en oeuvre. Avant de poster -> FAQ XML, Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 20h39   #1
Loki13
Membre à l'essai
 
Inscription : mai 2006
Messages : 65
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 65
Points : 20
Points : 20
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 :
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
Citation:
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
Loki13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 10h28   #2
tsuji
Membre chevronné
 
Inscription : octobre 2011
Messages : 412
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 412
Points : 675
Points : 675
[0]
Citation:
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 :
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.
tsuji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 13h36   #3
Loki13
Membre à l'essai
 
Inscription : mai 2006
Messages : 65
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 65
Points : 20
Points : 20
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.
Loki13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h25.


 
 
 
 
Partenaires

Hébergement Web