Dérivation de types complexes à l'aide du mécanisme de restriction
En matière de fonctionnalité Éditeur BizTalk, la dérivation par restriction est similaire à la dérivation par extension. Un type complexe dérivé par restriction est similaire à son type de données de base excepté que ses déclarations sont plus limitées que les déclarations correspondantes dans le type de données de base. Les valeurs représentées par le nouveau type sont en fait un sous-ensemble des valeurs représentées par le type de données de base (comme c'est le cas avec la restriction de types simples). Une application préparée pour les valeurs du type de données de base doit pouvoir traiter correctement toutes les valeurs du type limité.
Pour obtenir des informations complètes sur la dérivation de nouveaux types complexes par le biais du mécanisme de restriction, reportez-vous au site Internet de W3C. Pour obtenir divers liens vers ce site web et d’autres sites web, consultez Ressources XSD sur le web.
Pour dériver d’un type global complexe par restriction, dans un autre emplacement de l’arborescence de schéma, commencez par insérer un nouveau nœud Enregistrement à l’emplacement souhaité. Définissez ensuite sa propriété Type de données de base sur le nom d’un type global complexe. Enfin, remplacez le paramètre de la propriété Derived By de sa valeur par défaut Extension (au moins lorsqu’un type de données de base est défini) par Restriction.
Dans l’exemple suivant, BillingAddress est le nom du nœud Record nouvellement inséré, et GlobalAddrType est le nom du type global complexe dont il dérive et a l’intention de restreindre. Dans l’arborescence du schéma, une structure de nœud en double s’affiche sous le nœud nommé BillingAddress, identique à la structure de nœud adjacente sous le nœud nommé ShippingAddress. La différence entre eux est que la structure de nœud BillingAddress sera soumise à des restrictions possibles pour le type de données de base GlobalAddrType, et que la structure ShippingAddress restera identique au type de données de base GlobalAddrType.
Dès lors que vous avez choisi de limiter le type de données de base, il vous est interdit d'insérer de nouveaux nœuds, mais vous pouvez modifier les propriétés des nœuds existants pour limiter davantage leurs valeurs possibles ou leur comportement.
Auparavant, avec la propriété Derived By toujours définie sur Extension.
<xs:schema> <xs:element name="Root"> <xs:complexType> <xs:sequence> <xs:element name="ShippingAddress" type="GlobalAddrType" /> <xs:element name="BillingAddress"> <xs:complexType> <xs:complexContent mixed="false"> <xs:extension base="GlobalAddrType" /> </xs:complexContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="GlobalAddrType"> [Address structure defined globally here.] </xs:complexType> </xs:schema>
Après avoir basculé la propriété Derived By de Extension en Restriction.
<xs:schema> <xs:element name="Root"> <xs:complexType> <xs:sequence> <xs:element name="ShippingAddress" type="GlobalAddrType" /> <xs:element name="BillingAddress"> <xs:complexType> <xs:complexContent mixed="false"> <xs:restriction base="GlobalAddrType"> [Duplicate of address structure now appears here, ready to be restricted with additional attributes, set using the properties of the relevant nodes in the schema tree.] </xs:restriction> </xs:complexContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="GlobalAddrType"> [Address structure defined globally here.] </xs:complexType> </xs:schema>