Validação de documentos XML com Schema – Introdução ao XML - Parte VIII

17 Apr 2009
2 mins read

Vimos no post anterior como criar um DTD. Como a linguagem do DTD é diferente do XML, algumas pessoas têm dificuldade de compreendê-la. O XML Schema é uma linguagem baseada na linguagem XML, e é muito mais poderosa e muito mais precisa que o DTD. Com o XML Schema você pode, além de especificar a sintaxe (como no DTD), você pode: especificar o tipo de dado de qualquer elemento, utilizar vários namespaces, criar tipos de dados simples e complexos, especificar o número mínimo e o número máximo de vezes que um elemento pode aparecer no documento, criar tipo de listas, restringir os valores de um elemento, e muito mais.

O objetivo deste post é mostrar um overview dessa poderosa linguagem, que é bem utilizada para validação de documentos XML.

Bem, vamos considerar o XML abaixo como exemplo para o post:

schema8

Existem diferentes maneiras de se ecrever um XML Schema. Vamos considerar a maneira que é mais similar para quem já conhece a linguagem utilizada no DTD.
Vamos começar com a declaração dos elementos e atributos que encontramos no XML acima.

Os elementos que existem no XML de exemplo são:biblioteca, livro, isbn, titulo, autor, dataNascimento, falecimento, personagem, nome, caracteristica. E os atributos são: id, disponivel e ling.

Antes de começarmos a definir o Schema, precisamos entender quais são os tipos de elementos que existem: 'empty' (vazio) quando nenhum elemento filho ou texto são esperado, 'simple' (simples) quando são aceitos apenas texto, 'complex' (complexo) quando apenas subelementos são aceitos e 'mixed' (misto) quando tanto texto quanto subelementos são aceitos.
O XML Schema considera os elementos que tem apenas texto e nenhum atributo como tipo simples, enquanto todos os outros elementos são tipos complexos.

Para definir um elemento, utilizamos um xs:element (definição), incluindo diretamente no elemento xs:schema do documento XML Schema:

schema1

O valor usado para referenciar o tipo do elemento (xs:string) possui como prefixo xs, que é o prefixo associado com o W3C XML Schema.

Vamos agora definir todos os tipos simples do XML utilizado como exemplo:

schema2

Vamos agora definir o elemento titulo. Como este possui um atributo, é um tipo complexo:

schema3

Traduzindo o que foi escrito acima: o elementos titulo é um tipo complexo que possui conteúdo simples obtido pela extensão do tipo pré-definido xs:string, e um atributo lang que já foi declarado no schema.

Os outros elementos (biblioteca, livro, autor e personagem) são tipos complexos com conteúdos de tipos complexos. Estes elementos são definidos pela sequência de elementos e atributos que os compõe.

O elemento biblioteca é definido como:

schema4

A definição acima pode ser lida como: o elemento biblioteca é um tipo complexo composto por uma sequência de 1 ou mais (maxOccurs) elementos livro.

Agora vamos declarar o elemento autor, que possui um atributo que podemos considerar como uma data e opcional:

schema5

Isso significa que o elemento autor é um tipo complexo composto de uma sequência de três elementos (nome, DataNascimnento e falecimento), além do atributo id. O elemento falecimento é opcional, pode ocorrer nenhuma vez (minOccurs="0").

Os atributos precisam ser definidos pós a sequência. Os outros elementos, como livro e personagem, podem ser definidos da mesma maneira.
O nosso schema completo pode ser visto abaixo:

schema7

Conclusão:

Esse foi apenas um overview de como construir um XML Schema.
Como o assunto é muito extenso, se você tiver curiosidade, pode acessar a especificação completa neste link: http://www.w3.org/XML/Schema

Este foi o último post sobre a introdução sobre XML. Os próximos post serão sobre como manipular um arquivo XML com Java e alguns frameworks.

Você pode baixar os arquivos deste post aqui:

download

Até a próxima!