Imagine, por exemplo, criar a regra de validação para um campo texto de 255 caracteres em que apenas letras maiúsculas e dígitos são aceitos. Pela forma apresentada no outro post, teríamos que repetir 255 vezes o padrão aceito em cada posição : "[A-Z0-9]". Para resolver isso de uma forma mais elegante, a sintaxe para restrições do XSD fornece um recurso que nos permite estabelecer critérios para repetições em parte do padrão - ou nele todo, se isso for necessário.
Critérios para repetições são adicionados à direita do caracter - ou caracteres - que se quer repetir. Os símbolos válidos e seus significados são listados a seguir :
* Um asterisco indica que o(s) caractere(s) à esquerda dele pode(m) ser repetido(s) quantas vezes forem necessárias, incluindo zero. Isto é, o padrão associado ao asterisco pode ser omitido e ainda assim o valor será considerado válido. Por exemplo, aplicar o padrão abaixo a um campo num XML permitiria valores válidos desde um texto vazio até a ocorrência de quantas letras minúsculas, maiúsculas ou dígitos desejássemos:
+ O sinal de "mais" sinaliza que o padrão à esquerda dele deve ser repetido uma ou mais vezes para que o valor no XML seja aceito. Assim, é obrigatório que o padrão ocorra ao menos uma vez. No exemplo abaixo, é obrigatória a ocorrência de ao menos um dígito mas não há limite máximo de quantidade de dígitos para um valor ser válido:
? Uma interrogação sinaliza que o padrão à esquerda é opcional, isto é, ele pode ser omitido mas se for incluído deve aparecer uma única vez. O padrão abaixo permite que se informe um dígito, uma letra X maiúscula ou que se omita o valor:
{n} Especificar um número entre chaves determina uma quantidade exata de repetições do padrão. No caso do código de produto, poderíamos criar uma regra como a que segue para que tal código tenha obrigatoriamente 14 caracteres, que podem ser letras maiúsculas ou dígitos:
Esta sintaxe também permite fixar limites mínimos e máximos de repetição do padrão, bastando separar o valor desses limites por uma vírgula. Assim, informar {2,4} determina que o padrão deve ocorrer no mínimo 2 vezes e no máximo 4, enquanto informar {3,} obriga a ocorrência do padrão no mínimo 3 vezes, sem especificar um limite máximo.
<xs:pattern value="[azA-Z0-9]*" />
+ O sinal de "mais" sinaliza que o padrão à esquerda dele deve ser repetido uma ou mais vezes para que o valor no XML seja aceito. Assim, é obrigatório que o padrão ocorra ao menos uma vez. No exemplo abaixo, é obrigatória a ocorrência de ao menos um dígito mas não há limite máximo de quantidade de dígitos para um valor ser válido:
<xs:pattern value="[0-9]+" />
? Uma interrogação sinaliza que o padrão à esquerda é opcional, isto é, ele pode ser omitido mas se for incluído deve aparecer uma única vez. O padrão abaixo permite que se informe um dígito, uma letra X maiúscula ou que se omita o valor:
<xs:pattern value="[0-9X]?" />
{n} Especificar um número entre chaves determina uma quantidade exata de repetições do padrão. No caso do código de produto, poderíamos criar uma regra como a que segue para que tal código tenha obrigatoriamente 14 caracteres, que podem ser letras maiúsculas ou dígitos:
<xs:pattern value="[A-Z0-9]{14}" />
Esta sintaxe também permite fixar limites mínimos e máximos de repetição do padrão, bastando separar o valor desses limites por uma vírgula. Assim, informar {2,4} determina que o padrão deve ocorrer no mínimo 2 vezes e no máximo 4, enquanto informar {3,} obriga a ocorrência do padrão no mínimo 3 vezes, sem especificar um limite máximo.
Para associar uma regra de repetição a vários caracteres, declare o padrão desejado entre parênteses. Assim, todo o padrão interno terá que respeitar a regra de repetição. O padrão abaixo, por exemplo, dita que um valor para ser válido tem que ser composto por um ou mais pares de caracteres, o primeiro sendo um letra maiúscula e o segundo sendo um dígito :
<xs:pattern value="([A-Z][0-9])+" />
É importante ressaltar ainda que todas as regras descritas nos posts sobre a restrição do tipo pattern num XSD podem ser combinadas para gerar regras mais complexas. É possível até mesmo criar uma lista de padrões aceitos para um determinado valor, ligando as diversas regras com um caracter | (que significa "OU"). Quando houver uma lista fixa de valores aceitáveis, eles também podem ser declarados num pattern separados pelo caracter |:
<xs:pattern value="casado|solteiro|divorciado|viúvo" />
Um outro aspecto a se preocupar na criação de regras é o que fazer quando espaços em branco - incluindo quebras de linhas e tabulações - são informados no valor. O default é manter todos esses caracteres a aplicar também a eles as restrições de sequência estabelecidas. Mas, através da tag xs:whiteSpace, é possível fazer com que todos eles sejam substituidos por espaços em branco simples antes de aplicar a regra de sequência (valor replace) ou remover completamente esses espaços no começo e no fim do texto, além de juntar num único espaço as duplicidades que aparecerem no meio :
<xs:whiteSpace value="collapse" />
O xs:whiteSpace pode ser combinado na mesma restrição com outras tags, como o xs:pattern e o xs:minLength.

Criando esquema para validar um xml - parte I, parte II, parte III e parte IV, Tratamento de restrições no XSD
Nenhum comentário :
Postar um comentário
OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.
Observação: somente um membro deste blog pode postar um comentário.