Facetas do XSD

A restrição (restriction) é usada para definir os valores aceitáveis para um elemento XML ou atributo. A restrição de um elemento XML é chamada de faceta.

Restrição de valor

O exemplo a seguir define um elemento com restrição e nome "age". O valor de "age" 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ção de um grupo de valores

Para limitar o conteúdo de um elemento XML a um grupo de valores aceitos, devemos usar restrições de enumeração (enumeration constraint).

O exemplo a seguir define um elemento nomeado "car" com restrição. Os valores aceitos são apenas: 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 pode ser escrito como:

<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>

Comentário:Neste caso, o tipo "carType" pode ser usado por outros elementos, pois não é parte do elemento "car".

Restrição de uma série de valores

Para limitar o conteúdo de um elemento XML a uma série de números ou letras aceitos, devemos usar restrições de padrão (pattern constraint).

O exemplo a seguir define um elemento nomeado "letter" com restrição. Os valores aceitos são apenas uma letra minúscula 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 nomeado "initials" com restrição. Os valores aceitos são três letras maiúsculas 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 nomeado "initials" com restrição. Os valores aceitos são três letras maiúsculas ou minúsculas 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 nomeado "choice" com restrição. Os valores aceitos são os caracteres x, y ou 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 nomeado "prodid" com restrição. Os valores aceitos são uma sequência de cinco dígitos arábicos, com cada número no intervalo de 0-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 limitações para uma série de valores

O exemplo a seguir define um elemento com nome "letter" limitado. Os valores aceitáveis são zero ou mais letras 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 exemplo a seguir define um elemento com nome "letter" limitado. Os valores aceitáveis são um par ou mais pares de letras, onde cada par é composto por uma letra minúscula seguida por uma letra maiúscula. Por exemplo, "sToP" passará por essa verificação, mas "Stop", "STOP" ou "stop" não passarão:

<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 exemplo a seguir define um elemento com nome "gender" limitado. Os valores aceitáveis são male ou female:

<xs:element name="gender">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

O exemplo a seguir define um elemento com nome "password" limitado. Os valores aceitáveis são uma linha de caracteres composta por 8 caracteres, que devem ser letras maiúsculas ou minúsculas a - z ou números 0 - 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>

Limitação de caracteres de espaço em branco

Para determinar o modo de tratamento dos caracteres de espaço em branco, devemos usar a limitação whiteSpace.

O exemplo a seguir define um elemento com nome "address" limitado. A limitação whiteSpace é configurada como "preserve", 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 com nome "address" limitado. A limitação whiteSpace é configurada como "replace", o que significa que o processador XML removerá todos os caracteres de espaço em branco (quebra de linha, enter, espaço e tabulação):

<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 nomeado "address" com uma restrição. A restrição whiteSpace está configurada como "collapse", o que significa que o processador XML removerá todos os caracteres de espaço em branco (quebra de linha, enter, espaço e tabulação serão substituídos por um espaço, os espaços no início e no final serão removidos e os espaços em branco consecutivos serã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ção de comprimento

Para restringir o comprimento do valor de um elemento, devemos usar as restrições length, maxLength e minLength.

Este exemplo define um elemento nomeado "password" com uma restrição e valor exato de 8 caracteres:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Este exemplo também define um elemento nomeado "password" com uma restrição. Seu valor deve ter no mínimo 5 e no máximo 8 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ção do tipo de dados

Restrição Descrição
enumeration Define uma lista de valores aceitáveis
fractionDigits Define o número máximo de dígitos decimais permitidos. Deve ser maior ou igual a 0.
length Define o número exato de caracteres ou itens de uma lista permitidos. Deve ser maior ou igual a 0.
maxExclusive Define o limite superior de um valor numérico. Os valores permitidos devem ser menores que este valor.
maxInclusive Define o limite superior de um valor numérico. Os valores permitidos devem ser menores ou iguais a este valor.
maxLength Define o número máximo permitido de caracteres ou itens de uma lista. Deve ser maior ou igual a 0.
minExclusive Define o limite inferior de um valor numérico. Os valores permitidos devem ser maiores que este valor.
minInclusive Definir o limite inferior do valor numérico. Os valores permitidos devem ser maiores ou iguais a este valor.
minLength Definir o número mínimo de caracteres ou itens permitidos. Deve ser maior ou igual a 0.
pattern Definir a sequência exata de caracteres aceitáveis.
totalDigits Definir a precisão do número árabe permitido. Deve ser maior que 0.
whiteSpace Definir o tratamento de caracteres de espaço em branco (quebra de linha, Enter, espaço e tabulação).