Bonjour,

Je me trouve actuellement face à un problème. Je souhaiterai savoir si il est possible d'effectuer la vérification suivante avec un schéma XML :

J'ai un code XML qui peut s'écrire de 3 façons différentes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
<couleur rouge="255" vert="42" bleu="0">Le texte à colorer</couleur>
ou

Code : Sélectionner tout - Visualiser dans une fenêtre à part
<couleur hexa="e4e4f2">Le texte à colorer</couleur>
ou

Code : Sélectionner tout - Visualiser dans une fenêtre à part
<couleur nom="bleu">Le texte à colorer</couleur>

En fonction de ces codes, je souhaiterai pouvoir effectuer la vérification suivante avec un schéma XML :
Vérifier que l’attribut ["rouge" ET "vert" ET "bleu"] sont présents OU l'attribut "hexa" OU l'attribut "nom".

Que me conseillez-vous pour faire face à ce problème ?


J'ai testé le code suivant, mais sans sucés. Car dans ce cas présent le code attend un attribut rouge, hexa et nom en même temps si j'ai bien compris...
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
<xsd:element name="couleur"> 
	<xsd:complexType>
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute type="checkColorRGB" name="rouge"/> 
				<xsd:attribute type="checkColorRGB" name="vert"/> 
				<xsd:attribute type="checkColorRGB" name="bleu"/> 
				<xsd:attribute type="checkColorHexa" name="hexa"/> 
				<xsd:attribute type="checkColorName" name="nom"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:key name="key-RGB">
		<xsd:selector xpath="."/>
		<xsd:field xpath="@rouge|@vert|@bleu"/>
	</xsd:key> 
	<xsd:key name="key-hexa">
		<xsd:selector xpath="."/>
		<xsd:field xpath="@hexa"/>
	</xsd:key> 
	<xsd:key name="key-name">
		<xsd:selector xpath="."/>
		<xsd:field xpath="@nom"/>
	</xsd:key> 
</xsd:element>

En vous remerciant par avance.