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?