Restrição de Esquema XML para Tipos Complexos: Redefinição Completa?

Ao adicionar restrições a complexTypes em XML Schemas, é necessário reescrever todos os elementos usados ​​na definição do complexType? Em caso afirmativo, por que não pode simplesmente reutilizar as definições de elementos existentes e substituir as novas restrições?

Por exemplo, no abaixo; Quando eu só quero restringir o país do campo, eu deveria reescrever todos os 3 campos novamente?

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

Então, fica bem claro a partir da resposta abaixo a razão pela qual temos que reescrever todo o tipo.

Questão a seguir

Qual é o uso desse recurso de restrição, então?

Uma situação, posso pensar; é quando você precisa validar documentos de instâncias contendo tipos restritos no lugar de tipos base no esquema xml.

Diga, se "B" é o tipo base e é restrito a "B *". Qualquer documento de instância contendo "B *" no local onde um elemento do tipo "B" é esperado pelo documento de esquema funcionaria. Não teríamos que escrever regras separadas para cada tipo restrito. (O atributo "xsi: type" em o documento da instância irá validá-lo com o tipo correto.) Certo?

Algum outro uso deste recurso?

questionAnswers(1)

yourAnswerToTheQuestion