Como excluir um valor de enumeração no arquivo XML usando XSD?
-
22-09-2019 - |
Pergunta
É possível especificar o valor de uma tag ou atributo não deveria ser como Algum_value ?
Eu tenho um requisito estranho, onde o XSD não está ciente dos valores que estão sendo enviados a ele. O valor dessa tag em particular pode ser uma string com qualquer valor exceto um valor ( dizer data_migration
).
O remetente deve ser reconhecido com o erro, se esse valor específico for enviado.
É possível especificar essa restrição?
Solução
Não sou especialista em regex, mas este simplório faz tudo começando com data_migration
inválido.
<xs:simpleType name="notDataMigration">
<xs:restriction base="xs:string">
<xs:pattern value="^(?!data_migration).*" />
</xs:restriction>
</xs:simpleType>
Outras dicas
Não sei se você pode excluir especificamente um valor. Não tenho certeza se isso ajuda, mas você pode criar duas enumerações separadas e, em seguida, criar a união das enumerações.
<xsd:simpleType name="IncludedEnumType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="pending" />
<xsd:enumeration value="in_process" />
<xsd:enumeration value="failed" />
<xsd:enumeration value="unknown" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ExcludedEnumType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="data_migration" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="CombinedEnumType">
<xsd:union memberTypes="IncludedEnumType ExcludedEnumType" />
</xsd:simpleType>
Você usaria também IncludedEnumType
ou CombinedEnumType
como necessário. Usando o IncludedEnumType
obviamente excluiria os valores em ExcludedEnumType
.
Esta abordagem usa a solução 2 deste Artigo da IBM.
Use expressões regulares para especificar um padrão ou como no seu caso, o que um padrão não deve conter.