Bonjour,

Cette question a déjà du être posée, néanmoins les réponses trouvées ne me conviennent pas.

Comment faire en sorte qu'une xsd valide l'xml suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<AAA>
         <BBB>
                  <CCC att=1/>
                  <CCC att=2/>
          </BBB>
 
         <BBB>
                  <CCC att=1/>
                  <CCC att=2/>
          </BBB>
</AAA>
Mais pas celui-ci


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<AAA>
         <BBB>
                  <CCC att=1/>
                  <CCC att=2/>
          </BBB>

         <BBB>
                  <CCC att=1/>
                  <CCC att=2/>
                  <CCC att=2/>
          </BBB>
</AAA>

Je veux donc pour un block <BBB> donné, tous les éléments <CCC > aient des attributs att différents. Par contre, deux bloques BBB peuvent avoir des éléments CCC ayant le même attribut att.

Je pense que cela doit marcher avec la balise <unique>, mais je ne comprend pas bien comment l'utiliser, je fais la syntaxe suivante :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<xsd:element name="AAA" type="aaa">
	<xsd:unique name="attUnique">
		<xsd:selector xpath="BBB"></xsd:selector>
		<xsd:field xpath="att"></xsd:field>
	</xsd:unique></xsd:element>
Mais, ce schéma valide quand même le 2eme exemple.