Restricción de esquema XML para tipos complejos: ¿Redefinición completa?
Al agregar restricciones a complexTypes en esquemas XML, ¿es necesario volver a escribir todos los elementos utilizados en la definición de complexType? Si es así, ¿por qué no puede simplemente reutilizar las definiciones de elementos existentes y sobrescribir las nuevas restringidas?
Por ejemplo, en el siguiente; Cuando solo quiero restringir el campo de país, ¿Debo volver a escribir los 3 campos nuevamente?
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Norwegian_customer">
<xs:complexContent>
<xs:restriction base="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="country" type="xs:string" fixed="Norway"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
Entonces, es bastante claro en la respuesta a continuación por qué tenemos que reescribir todo el tipo.
Siguiente pregunta
¿Para qué sirve esta función de restricción?
Una situación en la que puedo pensar; es cuando tiene que validar documentos de instancia que contienen tipos restringidos en lugar de tipos base en el esquema xml.
Diga: Si "B" es el tipo base y está restringido a "B *". Cualquier documento de instancia que contenga "B *" en el lugar donde el documento de esquema espera un elemento de tipo "B" funcionaría. No tendríamos que escribir reglas separadas para cada tipo restringido. (El atributo "xsi: type" en el documento de instancia lo validará con el tipo correcto.) ¿Verdad?
¿Otros usos de esta característica?