XSD: Como redefinir o tipo de dados de um simplório, por exemplo. De Xs: String a XS: Inteiro
-
21-09-2019 - |
Pergunta
Estou tentando estender e adaptar um esquema XSD externo (do padrão FixML). Preciso alterar o tipo de dados de alguns dos elementos, sem tocar no esquema original, mas redefinindo -o; mas tenho achado extremamente complicado.
O que existe:
campos-bashe.xsd
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="UTCTimestamp">
<xs:simpleType>
O que eu quero que se torne:
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string">
<xs:simpleType>
O que eu tentei (mas falhei):
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:redefine>
Livros e rede também não parecem ter ajudado muito, então estou começando a questionar se isso é teoricamente possível.
Solução
Tanto quanto posso dizer, isso não é possível.
A única redefinir que eu poderia fazer validar no XMLSPY foi:
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="LastUpdateTime_t" />
</xs:simpleType>
</xs:redefine>
Ou seja, a nova restrição deve ser baseada na restrição base.
Pode ser que o XMLSPY esteja errado sobre isso.
Esta citação um tanto enigmática do Definição de esquema W3C XML:
Dentro das [crianças], cada simplório deve ter um entre seus [filhos] e cada complexo deve ter uma restrição ou extensão entre seus netos, o valor real · de cuja base [atributo] deve ser o mesmo que o · valor real · de seu próprio atributo de nome mais espaço para nome de destino;
Pode estar falando sobre isso (é parte da especificação que o XMLSPY links para este erro).
O único exemplo realmente bom de redefinir tipos simples que pude encontrar foi aqui. Neste exemplo, a redefinição é apenas para enumerações.