Compartir vía


Derivación de tipo complejo mediante el mecanismo de restricción

La derivación por restricción es similar a la derivación por extensión, en lo que respecta a la funcionalidad del Editor de BizTalk. Un tipo complejo derivado por restricción es similar al tipo de datos base aplicable, excepto por sus declaraciones, que son más limitadas que las declaraciones correspondientes del tipo de datos base. De hecho, los valores representados por el tipo nuevo son un subconjunto de los valores representados por el tipo de datos base (al igual que ocurre en la restricción de tipos simples). Una aplicación preparada para los valores del tipo de datos base debería poder procesar correctamente cualquiera de los valores del tipo restringido.

Para obtener información completa acerca de cómo derivar nuevos tipos complejos mediante el mecanismo de restricción, consulte el sitio Web de W3C. Para obtener varios vínculos a este y otros sitios web, consulte Recursos XSD en la Web.

Para derivar de un tipo global complejo por restricción, en otra ubicación del árbol de esquema, comience insertando un nuevo nodo Record en la ubicación deseada. A continuación, establezca su propiedad Tipo de datos base en el nombre de un tipo global complejo. Por último, cambie el valor de la propiedad Derived By de su valor predeterminado de Extensión (al menos cuando se establece un tipo de datos base) a Restricción.

En el ejemplo siguiente, BillingAddress es el nombre del nodo Record recién insertado y GlobalAddrType es el nombre del tipo global complejo del que deriva y pretende restringir. En la vista de árbol de esquema, se mostraría una estructura de nodo duplicada debajo del nodo denominado BillingAddress, idéntica a la estructura de nodos adyacente bajo el nodo denominado ShippingAddress. La diferencia entre ellos es que la estructura del nodo BillingAddress estará sujeta a posibles restricciones al tipo de datos base GlobalAddrType y la estructura ShippingAddress seguirá siendo idéntica al tipo de datos base GlobalAddrType.

Puesto que ha elegido restringir el tipo de datos base, no puede insertar nodos nuevos, aunque puede cambiar las propiedades de los nodos existentes para restringir más sus valores o comportamiento posibles.

  • Antes, con la propiedad Derived By todavía establecida en Extensión.

    <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>  
    
  • Después de cambiar la propiedad Derived By de Extensión a Restricción.

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

Consulte también

Derivación de tipos globales complejos