Assignation de type conditionnel
L'assignation de type conditionnel est une fonction XSD 1.1 qui permet de déterminer le type d'un élément par le biais du contenu dans le document XML, en particulier par la valeur des attributs de l'élément ou par la présence ou l'absence d'attributs. Si, par exemple, le document XML a l'élément suivant :
<publication kind="magazine">
...
</publication>
Dans le schéma, il est possible de faire varier le type de l'élément publication conformément à la valeur de la valeur de l'attribut @kind de l'élément de l'instance. Dans le schéma, cela est fait en utilisant l'élément alternative, qui est nouveau dans XSD 1.1. Les types multiples sont spécifiés, chacun dans un élément alternative.
Dans la capture d'écran ci-dessous, l'élément Publication est déclaré avec trois éléments enfants alternative, dont deux ont des attributs test (@kind eq 'magazine' et @kind eq 'book'). Le troisième élément alternative n'a aucun attribut test et une assignation de type simple de xs:error (assigné dans l'Assistant à la saisie Détails, non affiché dans le diagramme), qui, si déclenchée, retourne une erreur de validation XML.
La liste pour les déclarations ci-dessus est indiquée ci-dessous :
<xs:complexType name="PublicationType">
<xs:sequence>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Date" type="xs:gYear"/>
</xs:sequence>
<xs:attribute name="kind" type="xs:string"/>
</xs:complexType>
<xs:complexType name="PublicationType">
<xs:complexContent>
<xs:restriction base="PublicationType">
<xs:sequence>
<xs:element name="Title" type="xs:string"/>
<xs:element name="Date" type="xs:gYear"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="Publication" type="PublicationType">
<xs:alternative test="@kind eq 'magazine'" type="MagazineType"/>
<xs:alternative test="@kind eq 'book'">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PublicationType">
<xs:sequence>
<xs:element name="ISBN" type="xs:string"/>
<xs:element name="Publisher" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:alternative>
<xs:alternative type="xs:error"/>
</xs:element>
Veuillez prendre note des points suivants :
•Le premier élément alternative parmi les frères alternative à évaluer à vrai sera sélectionné. L'ordre des éléments alternatifs est donc important. Dans le Mode de Modèle de contenu, l'ordre peut être changé en glissant les fenêtres d'élément alternative dans l'ordre désiré.
•Notez que l’élément Publication a un type (PublicationType). Ce type sert en tant que le type par défaut si aucun autre des éléments alternative ne sont utilisés. Dans notre exemple ci-dessus, néanmoins, l'élément alternative du type xs:error sera utilisé si les deux conditions d'élément alternative précédentes retournent faux.
•Si aucune condition d'élément alternative n'est remplie et que l'élément n'a pas de type de défaut, un type anyType de l'élément est assigné. Dans ce cas, l'élément peut avoir un contenu XML bien formé de tout genre.
•L'élément alternative et le type simple xs:error sont nouveaux dans XSD 1.1.
Édition de Mode de Modèle de contenu
Vous pouvez ajouter un type alternatif à une déclaration d'élément en tant qu'enfant par le biais du menu contextuel de l'élément (voir le modèle de contenu dans la capture d'écran ci-dessus).
Le type de l'élément alternative est spécifié dans l'Assistant à la saisie des détails. Si le type est un type complexe, il est affiché dans le rectangle agrandi de l'élément alternative et peut y être édité ultérieurement (voir capture d'écran ci-dessous). Les types simples ne sont pas affichés dans le diagramme, mais peuvent être définis dans l'onglet Type simple de l'Assistant de saisie Détails.
Note : | Vous pouvez spécifier un espace de noms pour l'expression XPath par le biais de l'attribut xpathDefaultNamespace dans l'Assistant de saisie Détails. Pour plus d'informations concernant les espaces de noms par défaut XPath, voir la section ci-dessous. |
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. |