quinta-feira, 3 de novembro de 2011

Usando o Microsoft Excel para criar um XML Schema

Editar um XML é relativamente simples, correto? E criar um XML Schema à partir de um arquivo XML?

Eu nunca conheci um profissional por estes lados que tivesse a sua disposição uma ferramenta como o Altova XMLSpy para editar alguma coisa em XML. Os gerentes geralmente devem achar que o Notepad.exe é suficiente para qualquer coisa!

Criar um Schema manualmente pode ser um processo chato... senão doloroso. Aqui vai uma dica para os analistas de sistemas humildes que só dispõe de uma licença do Microsoft Excel para fazer este trabalho árduo.O Excel consegue (pelo menos à partir da versão 2003) trabalhar com arquivos XML com bastante desenvoltura. Você pode importar um arquivo XML tranquilamente. Observe o arquivo XML abaixo:



Agora basta abrir o arquivo pelo Excel utilizando uma das opções para abertura de arquivo. Você verá a caixa de diálogo abaixo. Escolher qualquer uma das opções deve ser suficiente.


Perceba que uma mensagem será exibida informando que não existia um Schema associado ao XML, portanto o Excel resolveu criar um para você.



O resultado final é essa coisa aqui:



O schema não vai ser mostrado diretamente, então é aqui que vem a dica:
  1. Pressione a combinação ALT+F11 para abrir o editor de Visual Basic.
  2. Na janela "Immediate", digite "Print ActiveWorkbook.XmlMaps(1).Schemas(1).Xml" e pressione enter. Se a janela não estiver sendo mostrada, use o menu View para abilitar a janela.
  3. Pressione enter. O Schema será mostrado logo abaixo na janela Immediate.
O Schema do XML de exemplo ficará da seguinte forma:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element nillable="true" name="contactPlanning"><xsd:complexType><xsd:sequence minOccurs="0"><xsd:element minOccurs="0" nillable="true" type="xsd:string" name="UF" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:integer" name="CRM" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:integer" name="period" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:string" name="sector" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:string" name="product" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:string" name="segment" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:integer" name="contactsCycle" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:integer" name="contactsYear" form="unqualified"></xsd:e
lement><xsd:element minOccurs="0" nillable="true" type="xsd:string" name="action" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:integer" name="externalId" form="unqualified"></xsd:element><xsd:element minOccurs="0" nillable="true" type="xsd:integer" name="priority" form="unqualified"></xsd:element></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>

Não exatamente muito bonito de ler... mas melhor do que escrever isto tudo manualmente. Outra coisa que você vai reparar é que o Schema é bastante permissivo. Provavelmente você terá que trabalhar em alguns atributos para resolver isto, mas em meros segundos você já ganhou uma boa ajuda do Excel!