Freigeben über


Ableitung komplexer Typen mithilfe des Erweiterungsmechanismus

Ein durch eine Erweiterung abgeleiteter komplexer Typ ist die funktionale Obermenge seines Basisdatentyps. Wie der Name impliziert, stellt der Basisdatentyp die Basis für den zu definierenden Typ dar. Die Unterschiede zum Basistyp werden hinzugefügt. Dieses Thema enthält ein Beispiel, in dem die beiden Elemente ShippingAddress und BillingAddress auf dem komplexen globalen Typ GlobalAddrType basieren. ShippingAddress wird einfach als GlobalAddrType definiert, während BillingAddress definiert ist, um den Typ GlobalAddrType zu erweitern. Am Ende des Beispiels wird billingAddress ein zusätzliches Element mit dem Namen Department mit einem Zeichenfolgentyp und einem Standardwert für Kreditorenbuchhaltung hinzugefügt.

Umfassende Informationen zum Ableiten neuer komplexer Typen mithilfe des Erweiterungsmechanismus finden Sie auf der W3C-Website. Verschiedene Links zu dieser und anderen Websites finden Sie unter XSD-Ressourcen im Web.

Um von einem komplexen globalen Typ durch Erweiterung abzuleiten, beginnen Sie an einer anderen Stelle in der Schemastruktur mit dem Einfügen eines neuen Datensatzknotens an der gewünschten Position. Legen Sie dann die Eigenschaft Basisdatentyp auf den Namen eines komplexen globalen Typs fest.

Im folgenden Beispiel ist BillingAddress der Name des neu eingefügten Knotens Datensatz , und GlobalAddrType ist der Name des komplexen globalen Typs, von dem er abgeleitet wird, und soll erweitert werden. Nachdem Basisdatentyp in der Schemastrukturansicht auf GlobalAddrType festgelegt wurde, wird unter dem Knoten BillingAddress eine doppelte Knotenstruktur angezeigt, die mit der benachbarten Knotenstruktur unter dem Knoten ShippingAddress identisch ist. Der Unterschied besteht darin, dass die Knotenstruktur BillingAddress über den Basisdatentyp GlobalAddrType hinaus erweiterbar ist und die ShippingAddress-Struktur mit dem Basisdatentyp GlobalAddrType identisch bleibt.

  • Zuvor mit einem neu eingefügten Knoten namens 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>  
    
  • Nach der Ableitung vom komplexen Basistyp GlobalAddrType, als Erweiterung.

    <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>  
    

    Sie geben Erweiterungen für den Basisdatentyp an, indem Sie Knoten in den Knoten BillingAddress in der Schemastruktur einfügen. Das folgende XSD-Fragment zeigt, wie das leere Erweiterungselement erweitert wird, wenn ein Sequenzgruppenknoten als neues untergeordnetes Element des Knotens BillingAddress eingefügt wird und dann ein Feldelementknoten namens PaymentType als untergeordneter Knoten des Knotens Sequenzgruppe eingefügt wird.

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

Weitere Informationen

Ableitung komplexer globaler Typen