Bonjour,

j'ai un élément CAB utilisé à plusieurs endroits dans le fichier xml ci-dessous, et j'aimerais contrôler qu'il soit bien unique dans tout le document. Hors je n'arrive pas à rendre la portée de l'unicité à tout le document.

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
<COMETE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="COMETE_v4.xsd">
    <Plaque>
        <CAB>6312552685208</CAB>
    </Plaque>
    <PorteConsommable>
        <Type>Cassette</Type>
        <CAB>6312552685208</CAB>
        <Ligne Nom="A" Positionnement="Haut">
            <Consommable Emplacement="2">
                <CAB>7864302670712</CAB>
            </Consommable>
            <Consommable Emplacement="3">
                <CAB>1346625077224</CAB>
            </Consommable>
            <Consommable Emplacement="4">
                <CAB>6312552685208</CAB>
            </Consommable>
            <Consommable Emplacement="1">
                <CAB>6312552685208</CAB>
            </Consommable>
        </Ligne>
        <Ligne Nom="D" Positionnement="Bas">
            <Consommable Emplacement="4">
                <CAB>2880232889701</CAB>
            </Consommable>
            <Consommable Emplacement="3">
                <CAB>0441066375568</CAB>
            </Consommable>
            <Consommable Emplacement="2">
                <CAB>2663345762216</CAB>
            </Consommable>
            <Consommable Emplacement="1">
                <CAB>0333798408325</CAB>
            </Consommable>
        </Ligne>
    </PorteConsommable>
J'arrive au xsd suivant :
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 
  <xs:element name="CAB" type="typeCàB"/>
 
  <xs:simpleType name="typeCàB">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{13}"/>
    </xs:restriction>
  </xs:simpleType>
 
  <xs:complexType name="typePlaque">
    <xs:sequence>
      <xs:element ref="CAB"/>
    </xs:sequence>
  </xs:complexType>
 
  <xs:simpleType name="typeNomPorteConsommable">
    <xs:restriction base="xs:string">
      <xs:pattern value="Cassette|Portoir"/>
    </xs:restriction>
  </xs:simpleType>
 
  <xs:simpleType name="typeEmplacement">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="4"/>
    </xs:restriction>
  </xs:simpleType>
 
  <xs:complexType name="typeConsommable">
    <xs:sequence>
      <xs:element ref="CAB"/>
    </xs:sequence>
    <xs:attribute name="Emplacement" type="typeEmplacement" use="required"/>
  </xs:complexType>
 
  <xs:simpleType name="typeNomLigne">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-D]"/>
    </xs:restriction>
  </xs:simpleType>
 
  <xs:simpleType name="typePositionnement">
    <xs:restriction base="xs:string">
      <xs:pattern value="Bas|Haut"/>
    </xs:restriction>
  </xs:simpleType>
 
  <xs:complexType name="typeLigne">
    <xs:sequence minOccurs="4" maxOccurs="4">
      <xs:element name="Consommable" type="typeConsommable"/>
    </xs:sequence>
    <xs:attribute name="Nom" type="typeNomLigne" use="required"/>
    <xs:attribute name="Positionnement" type="typePositionnement" use="required"/>
  </xs:complexType>
 
  <xs:complexType name="typePorteConsommable">
    <xs:sequence>
      <xs:element name="Type" type="typeNomPorteConsommable"/>
      <xs:element ref="CAB"/>
      <xs:element name="Ligne" type="typeLigne" minOccurs="1" maxOccurs="4">
        <xs:unique name="unique-Consommable">
          <xs:selector xpath="Consommable"></xs:selector>
          <xs:field xpath="@Emplacement"></xs:field>
        </xs:unique>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
 
  <xs:complexType name="typeCOMETE">
    <xs:sequence>
      <xs:element name="Plaque" type="typePlaque"/>
      <xs:element name="PorteConsommable" type="typePorteConsommable" maxOccurs="3">
        <xs:unique name="unique-Ligne">
          <xs:selector xpath="Ligne"></xs:selector>
          <xs:field xpath="@Nom"></xs:field>
        </xs:unique>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
 
  <xs:element name="COMETE" type="typeCOMETE">
    <xs:unique name="unique-CAB">
      <xs:selector xpath="*"></xs:selector>
      <xs:field xpath="CAB"></xs:field>
    </xs:unique>
<!-- <xs:unique name="unique-Cons">
      <xs:selector xpath="*/*/Consommable"></xs:selector>
      <xs:field xpath="CAB"></xs:field>
    </xs:unique>
-->    
  </xs:element>
 
</xs:schema>
Le premier unique fonctionne pour les éléments Plaque et PorteConsommable, mais pas pour les Consommable, deux niveau plus bas.
Le second unique est pour les consommables, mais ne permet pas de garantir l'nicité pour les autres éléments évidemment ....
Et la combinaison des deux n'est pas mieux non plus ...

J'utilise Oxygen, peut-être est-ce un problème du logiciel et que le premier cas devrait fonctionner ?


Merci pour vos réponse.