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

17 de April de 2009 | By | 11 Comments

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!

Posts Similares

Filed in: Tutoriais, XML | Tags: , , ,

Comments (11)

Links to this Post

  1. O que você precisa saber sobre XML « Flávio Araújo | 15 de December de 2009
  1. 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…

  2. 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!

  3. Jader

    Perfeito! muito obrigado!

  4. Cris

    Olá, Loiane!

    Queria saber quais são os tipos de atributos e de elementos que eu posso usar.

    Bj

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

  6. Cris

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

  7. Julio

    Olá,
    gostaria de saber se poderia, neste seu exemplo, definir biblioteca da forma abaixo:

    Obrigado

  8. Julio

    Estaria correto desta forma:. Obrigado

  9. João

    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?

  10. 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/

Leave a Reply

Trackback URL | RSS Feed for This Entry