XSD Limitações / Facetas

Restrição (restriction) é usada para definir os valores aceitos para elementos XML ou atributos. A restrição de um elemento XML é chamada de faceta.

Restrição de valores

O exemplo a seguir define um elemento nomeado "age" com restrição. 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 da seguinte forma:

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

Notas:Neste caso, o tipo "carType" pode ser usado por outros elementos, pois não faz 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 permitidos, devemos usar restrições de padrão (pattern constraint).

O exemplo a seguir define um elemento nomeado "letter" com restrição. O valor aceito é apenas uma letra minúscula do a ao 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 do A ao 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 do a ao 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 com uma restrição chamada "choice". Os valores aceitáveis são uma das letras 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 com uma restrição chamada "prodid". Os valores aceitáveis são uma sequência de cinco dígitos arábicos, e cada dígito está 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 para uma série de valores

O exemplo a seguir define um elemento com uma restrição chamada "letter". Os valores aceitáveis são zero ou mais letras da seqüência 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 uma restrição chamada "letter". 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á pela validação dessa padrão, mas "Stop", "STOP" ou "stop" não passarão pela validaçã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 uma restrição chamada "gender". 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 uma restrição chamada "password". 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>

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

Para determinar o modo de tratamento dos caracteres de espaço em branco (whitespace characters), precisamos usar a restrição whiteSpace.

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

<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 "address" com uma restrição. Esta restrição whiteSpace está configurada como "collapse", o que significa que o processador XML removerá todos os caracteres de espaço em branco (quebras de linha, enter, espaços e tabulações serão substituídas por um espaço, os espaços no início e no final serão removidos e os espaços 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 limitar o comprimento do valor do elemento, devemos usar as restrições length, maxLength e minLength.

Este exemplo define um elemento chamado "password" com uma restrição e exata. Seu valor deve ser exatamente 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 chamado "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 a exata quantidade de caracteres permitidos ou itens da lista. Deve ser maior ou igual a 0.
maxExclusive Define o limite superior do valor numérico. Os valores permitidos devem ser menores que esse valor.
maxInclusive Definir o limite superior do número. Os valores permitidos devem ser menores ou iguais a este valor.
maxLength Definir o número máximo de caracteres ou itens da lista permitidos. Deve ser maior ou igual a 0.
minExclusive Definir o limite inferior do número. Os valores permitidos devem ser maiores que este valor.
minInclusive Definir o limite inferior do número. Os valores permitidos devem ser maiores ou iguais a este valor.
minLength Definir o número mínimo de caracteres ou itens da lista 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 dos caracteres em branco (quebra de linha, Enter, espaço e tabulação).