Validador de XML por XSD
Confira um documento XML contra um XSD e veja qual elemento infringe qual regra.
Esta roda no servidor. Validar contra um XML Schema não é algo que um navegador saiba fazer, então o seu documento e o seu esquema são enviados para cá, verificados e descartados. Não são armazenados, não são registrados e nunca vão para uma URL. Se o documento for confidencial, rode o xmllint localmente — é o mesmo motor.
Cole um documento e o XSD que ele deveria satisfazer. Você recebe o veredicto e, para cada regra infringida, o elemento, a linha e a restrição — e não apenas a palavra "inválido".
Como funciona
Três coisas podem dar errado e elas são relatadas separadamente, porque significam coisas diferentes. O documento pode não ser XML bem formado, caso em que nada foi conferido. O esquema pode não ser um XSD utilizável, caso em que também nada foi conferido. Ou os dois foram lidos e o documento infringiu uma regra — que é o único caso em que "inválido" diz algo sobre os seus dados.
A validação é a da libxml, o mesmo motor por trás da maior parte do ferramental XML, então a resposta concorda com o que o seu build vai dizer. Os diagnósticos dela aparecem como vêm, em inglês, porque nomeiam o elemento e a restrição, e uma paráfrase seria um palpite sobre o que uma mensagem que não escrevemos queria dizer.
Esta ferramenta roda no servidor, e é a única aqui que roda. Nenhum navegador valida contra XML Schema; não existe API para isso. O seu documento e o seu esquema são enviados, conferidos e descartados — nunca gravados em disco, nunca registrados e nunca colocados em uma URL.
Duas coisas são recusadas de saída. Um documento ou esquema que declare uma DTD ou uma entidade, porque uma DTD pode instruir um analisador a ler arquivos do servidor. E um esquema que importa ou inclui outro arquivo, porque nada é buscado aqui: só parte dele poderia ser aplicada, e uma conferência parcial relatada como aprovação é a pior resposta que um validador pode dar.
Exemplos
| Caso | Entrada | Resultado |
|---|---|---|
| Um valor do tipo errado | <price>cheap</price> | Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'. |
| Um atributo obrigatório deixado de fora | <book><title>V</title><price>1</price></book> | Element 'book': The attribute 'id' is required but missing. |
| Um elemento filho ausente | <book id="b1"><title>V</title></book> | Element 'book': Missing child element(s). Expected is ( price ). |
Perguntas frequentes
O meu documento sai do meu navegador?
Sai, e esta é a única ferramenta do site em que isso é verdade. Validar contra XML Schema não é algo que um navegador saiba fazer, então o documento e o esquema são enviados para cá, conferidos e descartados. Eles não são armazenados, não são registrados e não vão para URL nenhuma. Se isso não for aceitável para o documento que você tem, valide localmente — o xmllint faz o mesmo com o mesmo motor.
Por que o meu esquema foi recusado por importar outro?
Porque nada é buscado em lugar nenhum: sem rede, sem sistema de arquivos. Um esquema dividido em arquivos só pode ser meio aplicado aqui, e um validador que confere metade das regras e depois diz "válido" dá uma resposta pior que resposta nenhuma. Junte os arquivos, ou valide localmente, onde o outro arquivo existe.
Por que um DOCTYPE é recusado?
Porque uma DTD pode declarar uma entidade apontando para um arquivo no servidor, e essa é a maneira mais antiga que existe de transformar um analisador XML em um leitor de arquivos. O carregamento de entidades também está desligado aqui, então recusar a construção é uma segunda tranca, e não a única — mas um documento conferido contra um XSD não tem uso para uma DTD de qualquer forma.
Por que as mensagens de erro estão em inglês?
Elas vêm da libxml, e não deste site. Elas citam os nomes dos seus elementos e a restrição que falhou, que é a parte de que você precisa, e traduzi-las significaria parafrasear diagnósticos que não escrevemos — errar em um deles custa mais caro do que lê-lo em inglês.
Qual versão do XML Schema?
XSD 1.0, que é o que a libxml implementa. As asserções e a atribuição condicional de tipo do XSD 1.1 não são suportadas por ela, então um esquema 1.1 que as use será relatado como ilegível em vez de conferido em silêncio sem essas regras.
O meu esquema começa com encoding="utf-16" e foi recusado. Por quê?
Porque essa declaração descreve um arquivo, e o que chega a esta página é o que o seu navegador enviou, que é UTF-8. A libxml acreditou na declaração e se recusou a ler o esquema. Agora a codificação é descartada sempre que ela não disser UTF-8, e o resultado informa isso. A mesma coisa com encoding="ISO-8859-1" costumava ser pior, porque não falhava: todo caractere acentuado era silenciosamente estropiado e o documento era então validado contra um texto que ninguém tinha escrito.
Bom saber
- Roda no servidor. O seu documento e o seu esquema são enviados, conferidos e descartados — não armazenados, não registrados, não compartilháveis em uma URL. Todas as outras ferramentas desta categoria rodam no seu navegador; esta não pode, porque nenhum navegador valida XML Schema.
- O veredicto é o da libxml, e a redação de cada diagnóstico também. Apenas XSD 1.0.
- No máximo cinquenta problemas são listados. Um documento que infringe uma regra mil vezes em geral a infringe por um motivo só.
Fontes
Todas as ferramentas de Código