Contraintes d'identité
Les contraintes d'identité (CID) peuvent être définies dans des déclarations globales ou locales. Elles spécifient l'unicité des nœuds et permettent le référencement correct entre des nœuds uniques.
Mécanismes de déclaration
Les mécanismes suivants sont disponibles pour la définition d'une CID (unique, key, keyref):
•Dans l'Aperçu de schéma, les CID peuvent être déclarés sur des éléments globaux. Sélectionner un élément global et définir les CID dans l'onglet Contraintes d'identité du panneau Attributs/Assertions/Contraintes d'identité (AACID) (capture d'écran ci-dessous).
Ajouter une CID (unique, key, keyref) en utilisant l'icône Insérer ou Ajouter de l'onglet Contraintes d'identité. Ces icônes peuvent aussi être utilisées pour ajouter un field à la CID sélectionnée. Utiliser l'icône Supprimer pour supprimer le field ou CID sélectionné.
•Dans le Mode Modèle de contenu d'un élément global, les CID peuvent être définis sur l'élément global ou sur un élément descendant local. Dans ce mode, les CID peuvent être éditées soit dans l'onglet Contraintes d'identité (capture d'écran ci-dessus) soit dans la fenêtre Contraintes d'un élément dans le diagramme (capture d'écran ci-dessous, dans laquelle l'élément match a une contrainte unique qui comprenant un sélecteur team). Cette alternative peut être sélectionnée dans le dialogue de Configuration d'affichage du schéma (Conception du schéma | Configurer affichage). En alternative, vous pouvez cliquer sur l'icône Afficher les contraintes dans le diagramme située dans la barre d'outils de la Conception de schéma. Le diagramme fournit une représentation graphique des CID et une fonction d'édition par glisser/déposer.
Pour ajouter une CID (unique, key, keyref) dans le diagramme lorsque le mode de diagramme pour les CID est activé, cliquer avec la touche de droite sur l'élément à mettre sous contrainte et choisir Ajouter enfant | [ CID ] depuis le menu contextuel. L'item field sera activé dans le menu contextuel uniquement lorsqu'une CID est sélectionnée dans le diagramme. Appuyer sur la touche Supprimer pour supprimer le field ou la CID sélectionnés.
Vous disposez de trois méthodes possibles pour saisir l'expression XPath dans les fenêtres selector et field : (i) en la saisissant, (ii) en sélectionnant le nœud requis depuis une liste déroulante qui apparaît automatiquement lorsque vous cliquez sur la fenêtre selector ou field, ou (iii) en glissant le nœud cible dans la fenêtre selector ou field et en la déposant à l'intérieur lorsque la fenêtre change de couleur ; l'expression XPath sera créée automatiquement.
Note : | En outre, un Aperçu de toutes les contraintes d'identité dans le schéma est disponible dans l'onglet Contraintes d'identité de l'Assistant de saisie des Composants. |
Icônes de contrainte d'identité
Affiche les Contraintes dans le Diagramme : dans la barre outils de Conception de Schéma et activé dans le Mode de Modèle de contenu. Active et désactive l'affichage des CID entre le diagramme (activé) et l'onglet Contraintes d'identité. | |
Visualiser les Contraintes d'identité : activé dans le Mode de Modèle de contenu. Active et désactive l'affichage des informations de CID. | |
Nœud de sélecteur, nœud de champ : indiqué dans les fenêtres de nœud dans le diagramme, ces deux icônes identifient, respectivement, le nœud sélectionné (dans les CID) par l'expression XPath pour selector et pour field. |
Visualiser les CID
Lorsque l'icône Visualiser les Contraintes d'identité est activée, les informations de la CID sont affichées dans le diagramme et peuvent être visualisées plus confortablement. Lorsque la visualisation est activée, les nœuds sélectionnés par les expressions XPath selector et field sont indiqués au moyen d'icônes dans leurs fenêtres (voir la section sur les icônes ci-dessus), et la fenêtre CID est connectée à son sélecteur et ses fenêtres de champ par des lignes vertes (voir capture d'écran ci-dessus).
L'icône Visualiser les Contraintes d'identité permet également d'activer la fonction de validation de CID dans le Mode Schéma. Si une expression XPath est incorrecte ou si une CID est incorrecte, les erreurs sont indiquées par du texte rouge, les avertissements sont affichés en orange. Lors de la validation du document de Schéma XML, les messages d'erreur ou d'avertissement sont affichés dans la fenêtre Messages.
Vous pouvez aussi désactiver la validation en désactivant l'icône Visualiser les Contraintes d'identité .
Liste XML
Les exemples CID ci-dessous indiqués dans cette section sont basés sur le document d'instance valide suivant.
<results xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Scores.xsd">
<!----- Groups ----->
<group id="A">
<team name="Brazil"/>
<team name="Germany"/>
<team name="Italy"/>
<team name="Holland"/>
</group>
<group id="B">
<team name="Argentina"/>
<team name="France"/>
<team name="England"/>
<team name="Spain"/>
</group>
<!----- Matches ----->
<match group="A" date="2012-06-12" location="Munich">
<team name="Brazil" for="2" points="3"/>
<team name="Germany" for="1" points="0"/>
</match>
<match group="A" date="2012-06-12" location="Frankfurt">
<team name="Italy" for="2" points="1"/>
<team name="Holland" for="2" points="1"/>
</match>
<match group="B" date="2012-06-13" location="Munich">
<team name="Argentina" for="2" points="3"/>
<team name="France" for="0" points="0"/>
</match>
<match group="B" date="2012-06-13" location="Berlin">
<team name="England" for="0" points="1"/>
<team name="Spain" for="0" points="1"/>
</match>
</results>
Contraintes d'unicité (unique)
Une contrainte d'unicité spécifie que la valeur d'un élément ou d'un attribut (ou d'un ensemble d'éléments et/ou d'attributs) doit être unique dans le cadre d'une étendue définie. Dans la liste XML indiquée ci-dessus, nous souhaitons nous assurer que les deux équipes se disputant un match ne sont pas deux fois la même équipe. Donc, dans le cadre de l'élément match, nous contraignons les valeurs du nœud team/@name à être uniques. Pour ce faire, nous procédons comme suit :
1.Dans l'Aperçu Schéma, choisir l'élément match. Celui-ci représentera donc l'étendue de la définition de la contrainte d'identité.
2.Dans l'onglet Contrainte d'identité, cliquer sur l'icône Ajouter ou Insérer située en haut à gauche de l'onglet, et, dans le menu qui s'affiche, cliquer Unique. Cela rajoute une ligne pour la contrainte d'unicité (voir capture d'écran ci-dessous).
3.Nommer la contrainte d'identité. (Dans la capture d'écran ci-dessous, MatchTeams est le nom.)
4.Saisir une expression XPath dans la colonne Selector pour sélectionner l'élément team. Veuillez noter que l'élément match est le nœud contextuel. L'élément team devient maintenant le sélecteur de la CID, c'est à dire, le nœud auquel la contrainte d'unicité s'applique.
5.Dans la colonne Field, saisir le nœud @name qui doit être unique. La valeur de ce nœud est la valeur qui doit être unique.
La contrainte d'unicité décrite ci-dessus spécifie que dans le cadre de chaque élément match, chaque élément team doit avoir un attribut-valeur unique @name.
Vous pouvez ajouter des champs supplémentaires pour vérifier l'unicité. Par exemple, une contrainte d'unicité peut être définie sur l'élément results pour contrôler que toutes les correspondances présentent une combinaison unique de date et d'emplacement : pas plus d'une correspondance ne peut se produire à un endroit à la même date. La contrainte d'unicité doit avoir, pour chaque élément match (le sélecteur), sa combinaison de valeurs @date et @location uniques dans le cadre de l'élément results.
Définir la contrainte d'unicité dans l'élément results de la même manière que ce qui a été décrit plus haut. Le sélecteur sera match, et les champs seront @date et @location (voir capture d'écran ci-dessous). Ajouter le second champ en cliquant sur l'icône Ajouter et puis Champ.
Note : | La colonne Refer dans l'onglet Contrainte d'identité est uniquement activé pour les contraintes keyref, pas pour les contraintes unique ou key. |
Contraintes de clé (key)
Une contrainte de clé spécifie: (i) que la valeur d'un élément ou d'un attribut (ou d'un ensemble d'éléments et/ou d'attributs) doit être unique dans le cadre d'une étendue définie, et (ii) que ces éléments de champ et/ou attributs doivent être présents dans le document XML d'instance ; c'est pourquoi, les éléments ou attributs optionnels ne devraient pas être sélectionnés en tant que champs d'une contrainte de clé. Une contrainte de clé est donc (dans le point (i) ci-dessus) exactement identique à une contrainte d'unicité. Elle stipule une contrainte supplémentaire : que ses éléments/attributs de champ doivent être présents dans le document XML.
La capture d'écran ci-dessous montre une contrainte de clé définie sur un élément match qui est semblable à la première contrainte d'unicité décrite ci-dessus.
Cette contrainte de clé spécifie que dans le cadre de chaque élément match, chaque élément team doit avoir un attribut-valeur unique @name. De plus, elle spécifie que l'attribut @name doit être présent dans chaque élément match/team.
Note: | La colonne Refer dans l'onglet Contrainte d'identité est uniquement activée pour les contraintes keyref, pas pour les contraintes unique ou key. |
Références de clé (keyref)
Les références de clé vérifient un ensemble de valeurs dans un document d'instance les uns par rapport aux autres. Dans notre liste XML, par exemple (voir liste ci-dessus), nous pouvons utiliser une référence de clé pour vérifier si les équipes qui s'affrontent dans les matches font partie des équipes recensées dans les groupes respectifs. Si ce n'est pas le cas, le document XML sera invalide.
Tout d'abord, nous créons une constante d'unicité ou une contrainte de clé. La capture d'écran ci-dessous montre une contrainte d'unicité (unique), TeamsInGroups, créée dans l'élément results. Cette contrainte stipule que chaque team dans le group a un attribut @name unique.
Ensuite, nous créons la référence de clé (keyref), TeamCheck, qui sélectionne l'enfant team de match et vérifie si son attribut-valeur @name est présent parmi les valeurs retournées par TeamsInGroups, qu'il référence (dans la colonne Refer).
La capture d'écran ci-dessous montre l'affichage graphique de cette référence clé (marquée en bleu) ainsi que l'Assistant à la saisie Détails (dans lequel vous pouvez aussi sélectionner la CID référencée). Les relations entre la CID sélectionnée est indiquée par une ligne épaisse verte, alors que les CID non sélectionnés sont affichés avec une ligne verte pointillée. De même, pour chaque contrainte d'identité, les nœuds sélectionnés par l'expression XPath pour selector et field sont affichés avec les icônes et respectivement. Si un nœud est réduit, la ligne de relation qui y mène se termine par une ellipse.
Utiliser xpathDefaultNamespace
Un espace de noms par défaut déclaré dans le document de Schéma XML est l'espace de noms par défaut du document de Schéma XML. Il s'applique aux noms d'élément sans préfixe dans le document du schéma mais pas aux noms d'éléments sans préfixes dans les expressions XPath dans le document schéma.
L'attribut xpathDefaultNamespace (une nouvelle fonction dans XSD 1.1) est le mécanisme utilisé pour spécifier l'espace de noms auxquels appartiennent les noms d'élément sans préfixe dans les expressions XPath.
Les espaces de noms XPath par défaut portent sur les éléments de Schéma XML sur lesquels ils sont déclarés. L'attribut xpathDefaultNamespace peut se produire sur les éléments de Schéma XML 1.1 suivants :
•xs:schema
•xs:assert et xs:assertion
•xs:alternative
•xs:selector et xs:field (dans les contraintes d'identité)
xpathDefaultNamespace sur xs:schema est déterminé, dans le mode XSD 1.1, dans le dialogue Paramètres de Schéma (Conception de Schéma | Paramètres de schéma). En ce qui concerne les autres éléments contenus dans la liste ci-dessus, l'attribut xpathDefaultNamespace est déterminé dans leurs Assistants à la saisie Détails respectifs (voir capture d'écran ci-dessous par exemple).
La déclaration d'espace de noms XPath par défaut dans xs:schema, déclare l'espace de noms XPath par défaut pour l'étendue de tout le schéma. Vous pouvez contourner cette déclaration sur les éléments dont l'attribut xpathDefaultNamespace est autorisé (voir liste ci-dessus).
Au lieu de contenir un espace de noms réel, l'attribut xpathDefaultNamespace peut contenir un des trois mots-clé :
•##targetNamespace: l'espace de noms XPath par défaut sera le même que l'espace de noms cible du schéma
•##defaultNamespace: l'espace de noms XPath par défaut sera le même que l'espace de noms par défaut du schéma
•##local: il n'y a pas d'espace de noms XPath par défaut
Si aucun espace de noms XPath par défaut n'est déclaré dans le document, des éléments sans préfixes dans les expressions XPath ne seront pas dans des espaces de noms.
Note : | La déclaration d'espace de noms XPath par défaut ne s'applique pas aux attributs. Ainsi, les attributs sans préfixe dans les expressions XPath ne se trouveront pas dans l'espace de noms. |
ID des contraintes d'identité
Une ID peut être attribuée à une contrainte d'identité, son sélecteur, et/ou le/s champ/s. Pour attribuer une ID, sélectionner le composant requis et, par le biais de l'Assistant à la saisie, ajouter l'ID dans la ligne id.
Trier les contraintes d'identité
Vous pouvez trier les CID dans l'onglet Contrainte d'identité en cliquant sur l'icône Trier dans la barre outils de l'onglet. Dans le dialogue Trier les composants qui apparaît (capture d'écran), vous pouvez choisir de trier soit le composant unique sélectionné et ses frères soit le jeu des composants sélectionnés. Vous pouvez utiliser la combinaison de touches clic+Shift pour sélectionner une plage et clic+Ctrl pour ajouter des composants supplémentaires à la sélection.
Une fois avoir déterminé la plage, vous pouvez choisir de trier toute la plage par ordre alphabétique (Nom avant type), ou de l'organiser par type dans l'ordre alphabétique (c'est à dire : unicité de la contrainte en premier, puis les contraintes, puis les références clé).
L'ordre de tri est mis en place dans le texte du schéma.