Partager via


Dérivation de types complexes à l'aide du mécanisme d'extension

Un type complexe dérivé par extension est un sur-ensemble fonctionnel de son type de données de base. Comme son nom l'indique, son type de données de base est la base du type en cours de définition. Les différences par rapport au type de base sont additives. Cette rubrique fournit un exemple dans lequel les deux éléments ShippingAddress et BillingAddress sont basés sur le type global complexe GlobalAddrType. ShippingAddress est simplement défini comme étant de type GlobalAddrType, tandis que BillingAddress est défini pour étendre le type GlobalAddrType. À la fin de l’exemple, un élément supplémentaire est ajouté à BillingAddress, nommé Department, avec un type de chaîne et une valeur par défaut De comptes fournisseurs.

Pour obtenir des informations complètes sur la dérivation de nouveaux types complexes par le biais du mécanisme d'extension, reportez-vous au site Internet de W3C. Pour obtenir différents liens vers ce site web et d’autres, consultez Ressources XSD sur le web.

Pour dériver d’un type global complexe par extension, dans un autre emplacement de l’arborescence de schéma, commencez par insérer un nouveau nœud Record à l’emplacement souhaité. Définissez ensuite sa propriété Type de données de base sur le nom d’un type global complexe.

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 s’étendre. Dans l’arborescence du schéma, une fois que type de données de base a été défini sur GlobalAddrType, 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 du nœud BillingAddress sera extensible au-delà du type de données de base GlobalAddrType, et que la structure ShippingAddress restera identique au type de données de base GlobalAddrType.

  • Avant, avec un nœud nouvellement inséré nommé BillingAddress.

    <xs:schema>  
        <xs:element name="Root">  
            <xs:complexType>  
                <xs:sequence>  
                    <xs:element name="ShippingAddress" type="GlobalAddrType" />  
                    <xs:element name="BillingAddress">  
                        <xs:sequence />  
                    </xs:element>  
                </xs:sequence>  
            </xs:complexType>  
        </xs:element>  
        <xs:complexType name="GlobalAddrType">  
        [Address structure defined globally here.]  
        </xs:complexType>  
    </xs:schema>  
    
  • Après avoir dérivé du type de base complexe GlobalAddrType, par 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>  
    

    Vous spécifiez des extensions au type de données de base en insérant des nœuds dans le nœud BillingAddress dans l’arborescence du schéma. Le fragment XSD suivant montre comment l’élément d’extension vide est développé lorsqu’un nœud de groupe de séquences est inséré en tant que nouvel enfant du nœud BillingAddress , puis qu’un nœud Field Element , nommé PaymentType, est inséré en tant que nœud enfant du nœud Groupe de séquences .

<xs:extension base="GlobalAddrType">  
    <xs:sequence>  
        <xs:element default="Accounts Payable"  
            name="Department" type="xs:string" />  
    </xs:sequence>  
</xs:extension>  

Voir aussi

Dérivation de types globaux complexes