Validação de documentos XML com Schema – Introdução ao XML – Parte VIII
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:

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:

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:

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

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:

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:

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:

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:
Até a próxima!
Posts Similares
Comments (11)
Links to this Post
- O que você precisa saber sobre XML « Flávio Araújo | 15 de December de 2009













Olá, qual a diferença entre encoding=”UTF-8″ “UTF-16″ “UTF-32″ “ISO-NNNN-N” “WINDOWS-1252″? há um tempo atrás precisei montar um arquivo xml e usei “utf-16″ que estava no exemplo que encontrei na net.
Abraços…
Olá Jader,
Um formato de tranformação Unicode é uma codificação de caracteres que provê uma maneira de representar os diversos caracteres abstratos, presentes no Unicode.
A codificação UTF-16 é oficialmente definida no Anexo Q do padrão ISO/IEC 10646-1. É também descrita em “The Unicode Standard”.
UTF-32 ou UCS-4 são nomes alternativos para o método de codificação de caracters, usando a quantidade fixa de exatamente 32 bits para cada caractere Unicode.
UTF-8 pode representar qualquer caracter universal padrão do Unicode, sendo também compatível com o ASCII. Por esta razão, está lentamente a ser adoptado como tipo de codificação padrão para email, páginas web, e outros locais onde os caracteres são armazenados.
Aí vai uma lista das possibilidades:
* ISO 646
o ASCII
* EBCDIC
o CP930
* ISO 8859:
o ISO 8859-1 Western Europe
o ISO 8859-2 Western and Central Europe
o ISO 8859-3 Western Europe and South European ( Turkish, Maltese plus Esperanto )
o ISO 8859-4 Western Europe and Baltic countries ( Lithuania, Estonia and Lapp )
o ISO 8859-5 Cyrillic alphabet
o ISO 8859-6 Arabic
o ISO 8859-7 Greek
o ISO 8859-8 Hebrew
o ISO 8859-9 Western Europe with amended Turkish character set
o ISO 8859-10 Western Europe with rationalised character set for Nordic languages, including complete Icelandic set.
o ISO 8859-11 Thai
o ISO 8859-13 Baltic languages plus Polish
o ISO 8859-14 Celtic languages ( Irish Gaelic, Scottish, Welsh )
o ISO 8859-15 Added the Euro sign and other rationalisations to ISO 8859-1
o ISO 8859-16 Central European languages ( Polish, Czech, Slovenian, Slovak, Hungarian, Albanian, Romanian, German, Italian )
* CP437, CP737, CP850, CP852, CP855, CP857, CP858, CP860, CP861, CP863, CP865, CP866, CP869
* MS-Windows character sets:
o Windows-1250 for Central European languages that use Latin script, (Polish, Czech, Slovak, Hungarian, Slovene, Serbian, Croatian, Romanian and Albanian)
o Windows-1251 for Cyrillic alphabets
o Windows-1252 for Western languages
o Windows-1253 for Greek
o Windows-1254 for Turkish
o Windows-1255 for Hebrew
o Windows-1256 for Arabic
o Windows-1257 for Baltic languages
o Windows-1258 for Vietnamese
* Mac OS Roman
* KOI8-R, KOI8-U, KOI7
* MIK
* Cork or T1
* ISCII
* TSCII
* VISCII
* JIS X 0208 is a widely deployed standard for Japanese character encoding that has several encoding forms.
o Shift_JIS (Microsoft Code page 932 is a dialect of Shift_JIS)
o EUC-JP
o ISO-2022-JP
* JIS X 0213 is an extended version of JIS X 0208.
o Shift_JIS-2004
o EUC-JIS-2004
o ISO-2022-JP-2004
* Chinese Guobiao
o GB 2312
o GBK (Microsoft Code page 936)
o GB 18030
* Taiwan Big5 (a more famous variant is Microsoft Code page 950)
* Hong Kong HKSCS
* KS X 1001 is a Korean double-byte character encoding standard
o EUC-KR
o ISO-2022-KR
* Unicode (and subsets thereof, such as the 16-bit ‘Basic Multilingual Plane’). See UTF-8
* ANSEL or ISO/IEC 6937
* Non-standard character encoding
Resumindo: dependendo da língua que vai estará presente no seu XML ou os caracteres, você vai escolher um tipo de codificação. Por padrão, usamos os UTF-16.
Obrigada pela visita!
Perfeito! muito obrigado!
Olá, Loiane!
Queria saber quais são os tipos de atributos e de elementos que eu posso usar.
Bj
Ei Cris,
Os tipos mais comuns são:
* xs:string
* xs:decimal
* xs:integer
* xs:boolean
* xs:date
* xs:time
Se desejar mais informações, pode conferir no site do W3C: http://www.w3schools.com/Schema/schema_simple.asp
Abraços
Opa! Que legal que vc respondeu! Valeu!
Queria uma dica sua de onde encontrar ou que me explicasse sobre xml e suas tecnologias misturando-as com php.
ex: XML DOM + PHP; sax, xpath, rss, atom e como posso manipular tudo isso tbm com Java script. Tem algum livro ou tutorial pra me passar? Nada me faz conseguir entender! Graças a você eu consegui entender xml, namespaces e schema… (Obrigada!!!) Por isso resolvi pedir sua ajuda….
Olá,
gostaria de saber se poderia, neste seu exemplo, definir biblioteca da forma abaixo:
Obrigado
Estaria correto desta forma:. Obrigado
Oi Loiane, Estou aprendendo bastante seguindo seus artigos, mas me perdi depois deste e não sei qual devo seguir. Entendi os Schemas mas quero saber como ativo a verificação em java. Em que artigo vou encontrar isso?
Ei João.
Não escrevi nenhum artigo sobre verificação de schema com Java.
Teria que consultar a API que você vai usar para fazer o parser.
O próximo artigo que escrevi é o http://www.loiane.com/2009/04/java-e-xml/