Les contraintes d'identité permettent d'indiquer que les valeurs d'un élément doivent être uniques au sein de leur portée. Les contraintes d'identité ne sont disponibles que dans un modèle conçu pour XDR.
Chaque contrainte d'identité a deux attributs qui lui sont spécifiques : sélecteur et champ.
Dans un schéma, une contrainte d'identité est déclarée avec sa balise correspondante : <unique>, <key> ou <keyRef>.
Il existe trois types de contraintes d'identité :
Une contrainte Unique - spécifie qu'une valeur (ou bien un jeu de valeurs) d'élément ou d'attribut doit être unique ou nulle dans une portée spécifiée. L'illustration suivante représente une contrainte d'unicité :
Le schéma généré est le suivant :
La contrainte d'unicité UNIQUENUM, définie sur l'élément projet, spécifie que l'attribut numSalarié doit être unique ou nul dans l'élément salarié.
Une contrainte Key - spécifie qu'une valeur (ou bien un jeu de valeurs) d'élément ou d'attribut doit correspondre à celle d'une clé au sein d'une portée spécifiée ; la donnée doit être unique, non null, et systématiquement présente dans la portée spécifiée. Le diagramme suivant comporte une contrainte de clé :
Le schéma généré se présente comme suit :
La contrainte de clé codeCle, définie sur l'élément projet, spécifie que l'attribut code doit être unique, non-NULL et systématiquement présent au sein de l'élément produit.
Une contrainte KeyRef - spécifie qu'une valeur (ou bien un jeu de valeurs) d'élément ou d'attribut doit correspondre à celle d'une clé ou d'une contrainte d'unicité spécifiée. Une keyRef est une référence à une clé ou une contrainte d'unicité. Le diagramme suivant comporte une contrainte keyRef :
Le schéma généré se présente comme suit :
La contrainte keyRef KEYREF_UNIGOLD, définie sur l'élément produit, par référence à la contrainte d'unicité UNIGOLD, spécifie que l'attribut gold doit être unique ou nul au sein de l'élément composant_2, mais doit aussi être unique ou nul au sein de l'élément composant_1.