Restrições/facetas XSD
As restrições são usadas para definir valores aceitáveis para elementos ou atributos XML. Restrições em elementos XML são chamadas de facetas.
Restrições de Valores
O exemplo a seguir define um elemento chamado "age" com uma restrição. O valor da idade não pode ser inferior a 0 ou superior a 120:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restrições em um conjunto de valores
Para limitar o conteúdo de um elemento XML a um conjunto de valores aceitáveis, usaríamos a restrição de enumeração.
O exemplo abaixo define um elemento chamado "carro" com uma restrição. Os únicos valores aceitáveis são: Audi, Golf, BMW:
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O exemplo acima também poderia ter sido escrito assim:
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
Nota: Neste caso o tipo "carType" pode ser usado por outros elementos porque não faz parte do elemento "car".
Restrições sobre uma série de valores
Para limitar o conteúdo de um elemento XML para definir uma série de números ou letras que podem ser usados, usaríamos a restrição de padrão.
O exemplo abaixo define um elemento chamado "letra" com uma restrição. O único valor aceitável é UMA das letras MINÚSCULAS de a a z:
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O próximo exemplo define um elemento chamado "initials" com uma restrição. O único valor aceitável é TRÊS das letras MAIÚSCULAS de a a z:
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O próximo exemplo também define um elemento chamado "iniciais" com uma restrição. O único valor aceitável é TRÊS das letras MINÚSCULAS OU MAIÚSCULAS de a a z:
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O próximo exemplo define um elemento chamado "choice" com uma restrição. O único valor aceitável é UMA das seguintes letras: x, y, OR z:
<xs:element name="choice">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O próximo exemplo define um elemento chamado "prodid" com uma restrição. O único valor aceitável é CINCO dígitos em uma sequência, e cada dígito deve estar no intervalo de 0 a 9:
<xs:element name="prodid">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Outras Restrições sobre uma Série de Valores
O exemplo abaixo define um elemento chamado "letra" com uma restrição. O valor aceitável é zero ou mais ocorrências de letras minúsculas de a a z:
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O próximo exemplo também define um elemento chamado "letra" com uma restrição. O valor aceitável é um ou mais pares de letras, cada par consistindo de uma letra minúscula seguida de uma letra maiúscula. Por exemplo, "sToP" será validado por este padrão, mas não "Stop" ou "STOP" ou "stop":
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O próximo exemplo define um elemento chamado "gender" com uma restrição. O único valor aceitável é masculino OU feminino:
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
O próximo exemplo define um elemento chamado "password" com uma restrição. Deve haver exatamente oito caracteres em uma linha e esses caracteres devem ser letras minúsculas ou maiúsculas de a a z ou um número de 0 a 9:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restrições de caracteres de espaço em branco
Para especificar como os caracteres de espaço em branco devem ser tratados, usaríamos a restrição de espaço em branco.
Este exemplo define um elemento chamado "endereço" com uma restrição. A restrição de espaço em branco é definida como "preservar", o que significa que o processador XML NÃO removerá nenhum caractere de espaço em branco:
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Este exemplo também define um elemento chamado "endereço" com uma restrição. A restrição de espaço em branco é definida como "substituir", o que significa que o processador XML SUBSTITUIRÁ todos os caracteres de espaço em branco (alimentações de linha, tabulações, espaços e retornos de carro) por espaços:
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Este exemplo também define um elemento chamado "endereço" com uma restrição. A restrição de espaço em branco é definida como "recolher", o que significa que o processador XML REMOVERÁ todos os caracteres de espaço em branco (alimentações de linha, tabulações, espaços, retornos de carro são substituídos por espaços, espaços à esquerda e à direita são removidos e vários espaços são reduzidos a um único espaço):
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restrições de Comprimento
Para limitar o comprimento de um valor em um elemento, usaríamos as restrições length, maxLength e minLength.
Este exemplo define um elemento chamado "senha" com uma restrição. O valor deve ter exatamente oito caracteres:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Este exemplo define outro elemento chamado "senha" com uma restrição. O valor deve ter no mínimo cinco caracteres e no máximo oito caracteres:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Restrições para tipos de dados
Constraint | Description |
---|---|
enumeration | Defines a list of acceptable values |
fractionDigits | Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero |
length | Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero |
maxExclusive | Specifies the upper bounds for numeric values (the value must be less than this value) |
maxInclusive | Specifies the upper bounds for numeric values (the value must be less than or equal to this value) |
maxLength | Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero |
minExclusive | Specifies the lower bounds for numeric values (the value must be greater than this value) |
minInclusive | Specifies the lower bounds for numeric values (the value must be greater than or equal to this value) |
minLength | Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero |
pattern | Defines the exact sequence of characters that are acceptable |
totalDigits | Specifies the exact number of digits allowed. Must be greater than zero |
whiteSpace | Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled |