Use RELAX NG ao invés de DTD ou XML Schema

Continuando minhas aventuras por XML de ontem, eu estava fazendo um DTD para o arquivo e arranjei um validador em Python chamado PyXML. A vida estava ótima quando eu senti uma necessidade maior de especificar quais os tipos de dados poderiam entrar em cada elemento do xml.

Acabei caindo em XML Schema e, feliz da vida, comecei a digitar um .xsd para confrontar o xml. Até um validador on-line eu encontrei, mas infeliz com sua velocidade, pensei se o PyXML não poderia validar contra o XML Schema.

No meio dos arquivos de documentação do PyXML, enquando eu procurava a palavra Schema com meus CTRL+F, surgiu o termo RELAX NG. Meu lado curioso começou a coçar e lá fui eu no Google atrás de maiores informações.

Não encontrei muita coisa, bem menos que DTD e XML Schema, com certeza, e em sites menos populares também. Mas resolvi ler o tutorial do RELAX NG, e parágrafo a parágrafo, eu ia entendendo o que acontecia bem mais rápido do que eu consegui entender como funcionava DTD e XML Schema.

Talvez por já ter acumulado conhecimento nesses dois formatos, o RELAX NG entrou na cabeça mais fácil. Mas não acho que é só isso. Depois de escrito o validador do xml, eu percebi que ele era realmente mais simples, tanto de aprender como de utilizar.

Vamos imaginar a seguinte amostra de uma estrutura em xml, e como definir o DTD, seguido do XML Schema, seguido do RELAX NG.


  Nome do sistema
  Empresa fictícia LTDA
  2005-10-15T09:00:00-03:00

Se usarmos DTD:


  
  
  [/xml]

Se usarmos XML Schema:

[xml]
  
    
      
      
      
    
  

E se usarmos o RELAX NG:


  
    
  
  
    
  
  
    
  

Fica mais fácil de ler, na minha opinião. Além disso, já entendi de cara como criar templates (padrões) com o <define>, para que dois elementos compartilhassem regras semelhantes de validação. <zeroOrMore>, <oneOrMore>, <optional>, <choice> e <interleave>, também usei todos.

Uma coisa marcante é que sinto que posso sentar e sair escrevendo o RELAX NG de algum XML, sem ficar consultando alguma documentação, como eu estava fazendo com o XML Schema. É mais intuitivo, pelos nomes das tags possíveis.

E a validação? Foi moleza com o Jing. Só rodar pela linha de comando, especificando o arquivo xml com o outro contendo as validações, e pronto. O programa cospe um a um os erros, tanto de um lado como de outro. Por exemplo, um elemento no XML sem nada no RELAX NG é apontado, e elementos com conteúdo errado, também.

E a validação do RELAX NG aceita os tipos de dados e restrições do XML Schema, bastando só importar com datatypeLibrary.

Fica aí a minha dica, se você precisar fazer validação de XML, use o RELAX NG.


Posted

in

by

Tags:

Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.