Assertions
Les assertions décrites dans cette section sont des assertions de types complexes. Une telle assertion est définie dans un élément xs:assert et sert de contrainte de validité du type complexe. (L'autre type d'assertion est une assertion de type simple qui est définie dans un élément xs:assertion et est créée et éditée dans l'Assistant à la saisie Facettes d'un type simple.)
Dans le Mode Schéma, les assertions de type complexe peuvent être créées et éditées par le biais des points d'accès de la GUI suivants :
•Dans l'Aperçu de schéma : dans l'onglet Assertions du panneau Attributs/Assertions/Contrainte d'identité (AAIDC) (capture d'écran ci-dessous).
•Dans Mode de Modèle de contenu : les assertions peuvent être éditées dans l'onglet Assertions (capture d'écran ci-dessus) ou dans le diagramme (capture d'écran ci-dessous). Afin de sélectionner l'option d'affichage du diagramme, cliquer sur l'icône Afficher les assertions dans le diagramme dans la barre outils de la Conception de schéma. Dans le diagramme, sélectionner la fenêtre Assertion du type complexe ou de l'élément contenu-complexe. Ensuite, saisir ou éditer la définition de l'Assertion dans l'Assistant à la saisie Détails.
Affiche les Assertions 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 assertions entre le diagramme (activé) et l'onglet Assertions. |
Note: | Les assertions sont une fonction XSD 1.1. Les fonctions d'édition Assertions seront donc uniquement disponibles dans le mode XSD 1.1. |
Étendue de l'assertion
L'expression XPath utilisée pour définir la contrainte de l'assertion doit se trouver dans le cadre de l'étendue du type complexe sur lequel il est défini. Donc si l'expression XPath est nécessaire pour accéder à un nœud particulier, l'assertion doit être définie sur un ancêtre de ce nœud.
Ajouter et supprimer des assertions
Un type complexe peut avoir des assertions multiples. L'expression XPath de chaque assertion doit évaluer à une valeur booléenne true pour l'élément dans le document d'instance pour être valide. Pour ajouter une assertion à un type complexe, procéder comme suit :
•Dans l'Aperçu de schéma : choisir le type complexe. Ensuite, dans l'onglet Assertions du panneau AACID (voir capture d'écran ci-dessus), cliquer sur l'icône Ajouter ou Insérer située en haut à gauche de l'onglet. Vous pouvez ajouter plusieurs assertions. Pour supprimer une assertion, la sélectionner et cliquer sur l'icône Supprimer située en haut à droite de l'onglet.
•Dans Mode de Modèle de contenu (voir capture d'écran ci-dessus): cliquer avec la touche de droite sur le type complexe et choisir Ajouter enfant | Assertion. En alternative, cliquer avec la touche de droite sur une assertion existante dans le diagramme de type complexe et sélectionner Ajouter | Assertion ou Insérer | Assertion. Vous pouvez ajouter plusieurs assertions à un type complexe. Pour supprimer une assertion, la sélectionner et appuyer sur la touche Supprimer.
Définir l'expression XPath de l'assertion
L'expression XPath d'une assertion de type complexe définit la contrainte de validation à appliquer sur le type complexe dans le document d'instance. Par exemple, dans la capture d'écran ci-dessus, l'assertion est dans l'élément de type complexe team et l'expression XPath de l'assertion est : @region="US". Dans le document de Schéma XML document, l'assertion apparaît en tant que :
<xs:assert test='@region="US"'/>
L'assertion spécifie que, dans le document d'instance, l'élément team doit avoir un attribut region avec une valeur de US. Dans le cas contraire, le document sera non valide.
Veuillez noter les points suivants :
•Les expressions XPath doivent être écrites dans le langage XPath 2.0
•Les nœuds testés dans l'expression XPath doivent se trouver dans le cadre de l'assertion (voir ci-dessus)
•Si une expression n'évalue pas à une valeur booléenne true/false, la valeur retournée est convertie en une valeur booléenne. Une séquence non-vide est convertie en true, alors qu'une séquence vide est convertie en false.
•Les erreurs de syntaxe dans l'expression sont marquées en affichant l'expression en rouge. Les erreurs de contexte ne sont pas marquées. Par exemple, si l'expression XPath teste un attribut et que cet attribut n'est pas défini dans le schéma, aucune erreur ne sera marquée.
Le message de l'assertion
Il est toujours utile de proposer une explication de l'assertion avec sa définition de manière à ce qu'un message approprié puisse être affiché dans le cas ou une assertion n'est pas remplie lors de la validation d'un document d'instance XML. Puisque la spécification de Schéma XML n'impose aucun message, XMLSpy permet de fournir un message dans l'espace de noms https://www.altova.com/xml-schema-extensions Altova xml-schema-extensions (ou tout autre espace de noms) avec la définition de l'assertion et de l'utiliser dans la validation du document d'instance XML. Par exemple :
<xs:assert test="count(//MyNode) ge 1" altova:message="There must be at least one MyNode element"/> or
<xs:assertion test="count(//MyNode) ge 1" altova:message="There must be at least one MyNode element"/>
Si la restriction spécifiée dans l'assertion n'est pas remplie, le moteur de validation de XMLSpy s'affichera, ainsi qu'avec le message de validation-erreur, le message associé avec l'assertion en tant qu'indice. Le validateur rapportera la valeur d'un attribut assert/@message ou d'un attribut assertion/@message quels que soient les espaces de noms dans lesquels se trouvent l'attribut message. Néanmoins, dans le Mode Schéma, vous pouvez éditer uniquement les attributs message qui se trouvent dans l'espace de noms Altova xml-schema-extension. Pour éditer les attributs message dans d'autres espaces de noms, utiliser le Mode Texte.
Voir les Messages d'assertion pour plus de détails.
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. |
Pour les expressions XPath dans les assertions, vous pouvez aussi spécifier l'espace de noms XPath par défaut sur la définition de l'assertion. Dans l'onglet Assertions du panneau Attributs/Assertions/Contrainte d'identité (AAIDC) (capture d'écran ci-dessous), sélectionner le mot-clé nécessaire depuis la liste déroulante du champ XPathDefaultNS.
L'espace de noms sélectionné se trouvera dans l'étendue de l'assertion.