sexta-feira, 9 de março de 2012

XML SCHEMA - PARTE III

Elementos XSD Simples

XML Schemas define os elementos de um arquivo XML.
Um elemento simples é um elemento XML que contém apenas texto. Ele não pode conter outros elementos ou atributos.

O que é um elemento simples

Um elemento simples é um elemento XML que contém apenas texto. Ele não pode conter outros elementos ou atributos.
Entretanto, a restrição "apenas texto" é pouco clara. O texto pode ser de diferentes tipos. Pode ser um dos tipos inclusos na definição de XML Schema (boolean, string, date, etc.), ou um tipo personalizado que você mesmo pode definir.

Como definir um elemento simples

A sintaxe para definir um elemento simples é:
  
  <xs:element name="xxx" type="yyy"/>
onde xxx é o nome do elemento e yyy é o tipo de dado do elemento.
Aqui está alguns elementos XML:
  
  <lastname>Refsnes</lastname>
  <age>34</age>
  <dateborn>1968-03-27</dateborn>
E aqui as definições correspondentes:
  
  <xs:element name="lastname" type"xs:string"/>
  <xs:element name="age" type="xs:integer"/>
  <xs:element name="dateborn" type="xs:date"/>

Tipos de dados XML Schema comuns

XML Schema tem vários tipos de dados próprios. Aqui está uma lista dos mais comuns:
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

Declare valores padrão e fixos para elementos simples

Elementos simples podem ter um conjunto de valores padrão OU um fixos.
Um valor padrão é automaticamente atribuído ao elemento quando nenhum outro valor é especificado. No exemplo seguinte, o valor padrão é "red":
  
  <xs:element name="color" type="xs:string" default="red"/>
Um valor fixo também é atribuído automaticamente ao elemento. Você não pode especificar outro valor. No exemplo a seguir, o valor fixo é "red":
  
  <xs:element name="color" type="xs:string" fixed="red"/>

Atributos XSD

Todos atributos são declarados como tipos simples.
Apenas elementos complexos tem atributos!

O que é um atributo?

Elementos simples não podem ter atributos. Se um elemento tem atributos, ele é considerado do tipo complexo. Mas atributos são declarados como tipos simples. Isso significa que um elemento com atributos sempre tem uma definição do tipo complexo.

Como definir um atributo

A sintaxe para definir um atributo é:
  
  <xs:attribute name="xxx" type="yyy"/>
onde xxx é o nome do atributo e yyy é o tipo de dado do atributo.
Aqui está um elemento XML com um atributo:
  
  <lastname lang="EN>Smith</lastname>
E aqui a definição correspondente do atributo:
  
  <xs:attribute name="lang" type="xs:string"/>

Tipos de dados comuns do XML Schema

XML Schema tem vários tipos de dados próprios. Aqui está uma lista dos mais comuns:
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

Declare valores padrão e fixo para atributos

Atributos podem ter valores padrão OU fixo especificados.
Um valor padrão é atribuído automaticamente ao atributo quando nenhum outro valor é especificado. No exemplo seguinte, o valor padrão é "EN":
  
  <xs:attribute name="lang" type="xs:string" default="EN">
Um valor fixo é atribuído automaticamente ao atributo. Você não pode especificar outro valor. No exemplo seguinte, o valor fixo é "EN":
  
  <xs:attribute name="lang" type="xs:string" fixed="EN"/>

Criando atributos opcionais e obrigatórios

Todos atributos são opcionais por padrão. Para especificar explicitamente que um atributo é opcional, utilize o atributo "use":
  
  <xs:attribute name="lang" type="xs:string" use="optional"/>
Para fazer um atributo obrigatório:
  
  <xs:atrribute name="lang" type="xs:string" use="required"/>

Restrições de conteúdo

Quando um elemento ou um atributo XML tem um tipo definido, isto cria uma restrição ao conteúdo dele. Se um elemento XML é do tipo "xs:date" e contém um string como "Hello Mother", o elemento não vai ser validado.
Mas, há mais... com XML Schemas, você pode adicionar suas próprias restrições aos seus elementos e atributos XML. Estas restrições são chamadas facets. Você pode ler mais sobre facets no próximo capítulo.

Restrições/facets XSD

Restrições são usadas para controlar os valores aceitos para elementos e atributos XML. Restrições em elementos XML são chamados facets.

Restrições em valores

Este exemplo define um elemento chamado "age" com um restrição. O valor de age não pode ser menor que 0 ou maior que 100:
  
  <xs:element name="age">
  
  <xs:simpleType>
     <xs:restriction base="xs:integer">
         <xs:minInclusive value="0"/>
         <xs:maxInclusive value="100"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>

Restrições em conjuntos de valores

Para limitar o conteúdo de um elemento XML em um conjunto de valores aceitáveis, nós podemos usar restrições enumeradas.
Este exemplo define um elemento chamado "car":
  
  <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 elemento "carro" é um tipo simples com restrição. Os valores aceitáveis são: Audi, Golf, BMW.
O exemplo acima também poderia ser 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 ele não é parte do elemento "car".

Restrições em séries de valores

Para limitar o conteúdo de um elemento XML em uma série de números ou letras, podemos utilizar a restrição de padrão.
Este exemplo define o elemento chamado "letter":
  
  <xs:element name="letter">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:pattern value="[a-z]"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
O elemento "letter" é do tipo simples com uma restrição. O único valor aceitável é UMA das letras MINÚSCULAS de a até z.
O próximo exemplo define um elemento chamado "initials":
  
  <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 elemento "initials" é simples com um restrição. O único valor aceitável são TRÊS letras MAiÚSCULAS de a até z.
Este exemplo também define um elemento chamado "initials":
  
  <xs:element name="initials">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:patter value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
     </xs:restriction>
  <xs:simpleType>
  
  <xs:element>
O elemento "initials" é do tipo simples com restrição. O único valor aceitável são TRÊS letras MINÚSCULAS ou MAIÚSCULAS de a até z.
Este exemplo define um elemento chamado "choice":
  
  <xs:element name="choice">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:pattern value="[xyz]"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
O elemento "choice" é um tipo simples com restrição. O único valor aceitável é UMA das seguintes letras: x, y, OU z.
O próximo exemplo define um elemento chamado "prodid":
  
  <xs:element name="prodid">
  
  <xs:simpleType>
     <xs:restriction base="xs:integer">
         <xs:patter value="[0-9][0-9][0-9][0-9][0-9]"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
O elemento "prodid" é um tipo simples com restrição. O único valor aceitável são CINCO dígitos em seqüência, e cada dígito deve estar entre 0 e 9.

Outras restrições em séries de valores

Algumas outras restrições que podem ser definidas por restrição de padrão:
Este exemplo define um elemento chamado "letter":
  
  <xs:element name="letter">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:pattern value="([a-z])*"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
O elemento "letter" é um tipo simples com restrição. O valor aceitável é zero ou mais ocorrências de letras minúsculas de a até z.
Este exemplo também define um elemento chamado "letter":
  
  <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 elemento "letter" é um tipo simples com um restrição. O valor aceitável é uma ou mais ocorrências de um letra minúscula seguida de uma letra maiúscula de a até z.
Este exemplo define um elemento chamado "gender":
  
  <xs:element name="gender">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:pattern value="male|female"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
O elemento "gender" é um tipo simples com uma restrição. O único valor aceitável é male OU female.
Este exemplo define um elemento chamado "password":
  
  <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>
O elemento "password" é um tipo simples com um restrição. Deve haver exatamente oito caracteres e estes caracteres devem ser letras minúsculas ou maiúsculas de a até x, ou um número de 0 a 9.

Restrições em caracteres vazios

Para especificar como um caractere vazio deve ser tratado, devemos usar a restrição whiteSpace.
Este exemplo define um elemento chamado "adderess":
  
  <xs:element name="adress">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:whiteSpace value="preserve"/>
     <xs:restriction>
  </xs:simpleType>
  
  </xs:element>
O elemento "adress" é um tipo simples com um restrição. A restrição whiteSpace é definida como "preserve", qu significa que o processador XML NÂO VAI remover nenhum caractere vazio.
Este exemplo também define um elemento chamado "address":
  
  <xs:element name="address">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:whiteSpace value="replace"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
Este elemento "address" é um tipo simples com um restrição. A restrição whiteSpace é definida como "replace", que significa que o processador XML VAI SUBSTITUIR todos caracteres vazios (quebras de linha, tabs, espaços) com espaços.
Este exemplo também define um elemento chamado "address":
  
  <xs:element name="address">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:whiteSpace value="collapse"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
Este elemento "address" é um tipo simples com uma restrição. A restrição whiteSpace é definida como "collapse", que significa que o processador XML VAI REMOVER todos caracteres vazios (quebras de linha, tabs, espaços são substituídos com espaços, espaços iniciais e finais são removidos, espaços múltiplos são reduzidos a um).

Restrições de comprimento

Para limitar o comprimento de um elemento, nós usamos as restrições de comprimento, maxLength e minLength.
Este exemplo define um elemento chamado "password":
  
  <xs:element name="password">
  
  <xs:simpleType>
     <xs:restriction base="xs:string">
         <xs:length value="8"/>
     </xs:restriction>
  </xs:simpleType>
  
  </xs:element>
O elemento "password" é um tipo simples com uma restrição. O valor deve ter exatamente oito caracteres.
Este exemplo define outro elemento chamado "password":
  
  <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>
Este elemento "password" é um tipo simples com uma restrição. O valor deve ter no mínimo cinco e no máximo oito caracteres.

Restrições para tipos de dados

Restrição Descrição
enumeration Define uma lista de valores válidos
fractionDigits Especifica o número máximo casas decimais permitidas. Deve ser igual ou maior que zero
length Especifica o número exato de caracteres ou itens permitidos. Deve ser igual ou maior que zero
maxExclusive Especifica o valor máximo para valores numéricos (o valor deve ser menor que este valor)
maxInclusive Especifica o valor máximo para valores numéricos (o valor deve ser menor ou igual a este valor)
maxLength Especifica o número máximo de caracteres ou itens permitidos. Deve ser igual ou maior que zero
minExclusive Especifica o valor mínimo para valores numéricos (o valor deve ser maior que este valor)
minInclusive Especifica o valor mínimo para valores numéricos (o valor deve ser maior ou igual a este valor)
minLength Especifica o número mínimo de caracteres ou itens permitidos. Deve ser igual ou maior que zero
pattern Define a seqÜência exata de caracteres permitidos
totalDigits Especifica o número exato de digitos permitidos. Deve ser maior que zero
whiteSpace Especifica como caracteres vazios (tabs, espaços e retornos de carro) são tratados

Nenhum comentário:

Postar um comentário