Gerador de XSD a partir de XML

Gere um esquema XSD inicial com base em um XML de exemplo, incluindo atributos e tipos de dados simples. Todas as ocorrências de um elemento são unidas em uma única declaração, e namespaces externos ou ordem instável dos filhos aparecem nos achados; revise o esquema antes de usá-lo.

Funciona localmente no seu navegador
Processamento local ·

Como gerar um rascunho de XSD a partir de um XML de exemplo

Cole um documento XML representativo, ou clique em Carregar exemplo para usar um catálogo pequeno, e clique em Gerar XSD. A ferramenta une todas as ocorrências de um elemento em uma única declaração e devolve um schema inicial que você pode copiar ou baixar como inferred-schema.xsd.

O documento é analisado pelo analisador XML do próprio navegador, então só XML bem formado gera saída, e tudo fica na página: sem upload, sem serviço de validação e sem requisições a este site.

  1. Cole o XML no editor Documento XML, ou clique em Carregar exemplo para partir de uma amostra conhecida.
  2. Clique em Gerar XSD. Se o XML estiver mal formado, a execução para e a linha de status e os achados indicam a linha e a coluna do primeiro erro de análise.
  3. Leia as métricas acima da saída: declarações de elemento inferidas, linhas de entrada, tamanho do schema gerado e número de avisos.
  4. Leia os achados: surge uma nota quando elementos filhos se repetem em ordem instável, quando a amostra usa mais de um namespace ou quando há atributos com namespace.
  5. Clique em Copiar ou Baixar para obter inferred-schema.xsd, e em Limpar para esvaziar o editor antes do próximo documento.

O que a inferência faz e o que ela deixa de fora

Tipos e cardinalidade

Os tipos de valor seguem o texto da amostra. Os literais true e false viram xs:boolean; inteiros com sinal como 42, 0, 1, -7 ou 007 viram xs:integer; 3.5, .5 e 5. viram xs:decimal; e 2026-08-29 junto com 2026-08-29T10:00:00Z viram xs:date e xs:dateTime. Todo o resto — 0x1F, 1e3, TRUE — permanece xs:string, porque essas grafias não estão no espaço lexical dos tipos XSD acima.

A cardinalidade segue as ocorrências. Um filho que se repete dentro de um elemento recebe maxOccurs="unbounded"; um filho ausente em pelo menos uma ocorrência do pai recebe minOccurs="0". As ocorrências são unidas em vez de amostradas, então um segundo elemento tool que acrescenta um atributo ou um filho amplia a declaração, e um elemento que aparece vazio em um ponto e preenchido em outro permanece opcional.

Duas formas mudam o modelo de conteúdo. Texto em volta de elementos filhos produz complexType mixed="true", e filhos que se repetem em ordem diferente — item, note, item — viram um xs:choice maxOccurs="unbounded" em vez de uma sequência, porque uma sequência rejeitaria a própria amostra que a gerou.

Namespaces e atributos

Quando o elemento raiz tem um namespace, ele passa a ser o targetNamespace do schema gerado com elementFormDefault="qualified", então o namespace da amostra é preservado. As declarações xmlns nunca viram atributos.

Elementos de outro namespace não podem ser declarados no mesmo documento XSD. Eles saem como um curinga xs:any por namespace estrangeiro com processContents="lax", assim a amostra continua validando, e um aviso registra a escolha. Atributos com namespace, como xml:lang e xsi:type, também não podem ser declarados por nome; o tipo os aceita com xs:anyAttribute.

Atributos simples são declarados sem namespace e como opcionais, com as mesmas regras de tipo do texto dos elementos, e todas as ocorrências de um atributo são unidas como os elementos filhos.

O que o rascunho não faz

A página não consegue verificar o schema gerado contra o seu XML: navegadores não trazem um validador XSD. Compile e teste o arquivo com um processador XSD 1.0 — por exemplo xmllint --schema, lxml ou Saxon — e guarde a amostra como caso de regressão. Um schema que aceita um documento ainda pode ser estreito demais para o próximo: um elemento que aqui ficou opcional ou um valor que apenas parecia uma data.

Só a amostra é descrita. Restrições (xs:key, xs:unique, xs:length, padrões), comentários e importações para outros namespaces não são inferidos nem inventados; acrescente-os à mão onde importarem. A cardinalidade é uma leitura deste documento, não uma especificação: nada aqui afirma que um filho precise aparecer no tráfego real.

Ferramentas recentes: