Partager via


Élément <xsd:key>

Spécifie qu'un attribut ou qu'une valeur (ou ensemble de valeurs) d'élément doit être une clé dans la portée spécifiée. La portée d'une clé est l'élément element conteneur dans un document d'instance. Une clé signifie que les données doivent être uniques dans une portée spécifiée, qui ne peuvent prendre de valeur Null et toujours présentes.

<key
  id = ID 
  name = NCName 
  {any attributes with non-schema Namespace}...>
Content: (annotation?, (selector, field+))
</key> 

Attributs

  • id
    ID de cet élément. La valeur id doit être du type ID et unique dans le document contenant cet élément.

    Facultatif.

  • name
    Nom de l'élément key. Ce nom doit être un NCName, comme défini dans la spécification sur les espaces de noms XML.

    Le nom doit être unique dans un jeu de contraintes d'identité.

    Obligatoire.

Informations sur l'élément

Nombre d'occurrences

Illimité

Éléments parents

element

Contenu

annotation, field, selector

Remarques

L'élément key doit contenir, dans l'ordre, les éléments suivants.

selector

L'élément selector contient une expression XPath (XML Path language) spécifiant l'ensemble d'éléments dans lequel les valeurs spécifiées par field doivent être uniques.

Il ne peut exister qu'un seul élément selector.

field

Chaque élément field contient une expression XPath spécifiant les valeurs (d'attribut ou d'élément) qui doivent être uniques pour l'ensemble d'éléments spécifiés par l'élément selector.

En présence de plusieurs éléments field, leur combinaison doit être unique. Dans ce cas, les valeurs d'un élément field unique peuvent ou non être uniques pour les éléments sélectionnés, mais la combinaison de tous les champs doit être unique.

Au moins un élément field est obligatoire.

Exemple

L'exemple suivant définit un élément keyref qui correspond à l'élément key de ce schéma.

<xs:schema 
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
   targetNamespace="namespace1"
        xmlns:r="namespace1"
        elementFormDefault="qualified">

 <xs:element name="root">
  <xs:complexType>
   <xs:sequence>

    <xs:element name="A" type="r:A" maxOccurs="unbounded">
     <xs:keyref name="dummy" refer="r:pNumKey">
      <xs:selector xpath="part"/>
      <xs:field xpath="@ref-number"/>
     </xs:keyref>
    </xs:element>

    <xs:element name="B" type="r:B"/>

   </xs:sequence>
  </xs:complexType>

  <xs:key name="pNumKey">
   <xs:selector xpath="r:B/r:part"/>
   <xs:field xpath="@key-number"/>
  </xs:key>

  </xs:element>

 <xs:complexType name="A">
  <xs:sequence>
   <xs:element name="part" maxOccurs="unbounded">
    <xs:complexType>
     <xs:simpleContent>
      <xs:extension base="xs:string">
       <xs:attribute name="ref-number" type="xs:integer"/>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="B">
  <xs:sequence>
   <xs:element name="part" maxOccurs="unbounded">
    <xs:complexType>
     <xs:simpleContent>
      <xs:extension base="xs:string">
       <xs:attribute name="key-number" type="xs:integer"/>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>

</xs:schema>

Entrée : key.xml

<root xmlns="namespace1">
  <A>
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
    <part ref-number="1"/>
  </A>
  <A>
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
    <part ref-number="2"/>
  </A>
  <B>
    <part key-number="1"/>
    <part key-number="2"/>
    <part key-number="3"/>
  </B>
</root>

Autres ressources

Pour plus d'informations, voir le document du W3C sur les schémas XML, notamment le tome 1 relatif aux structures, à l'adresse www.w3.org/TR/2001/REC-xmlschema-1-20010502/\#element-all.

Voir aussi

Référence

Référence du schéma XML (XSD)
Éléments de schéma XML