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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta