Validatore XML Schema

Verifica un documento XML contro un XSD e scopri quale elemento viola quale regola.

Questo gira sul server. Validare rispetto a uno XML Schema non è una cosa che un browser sappia fare, quindi il tuo documento e il tuo schema vengono inviati qui per essere controllati e poi scartati. Non vengono salvati, non vengono registrati e non finiscono mai in un URL. Se il documento è riservato, esegui xmllint sul tuo computer: è lo stesso motore.

L'XML da verificare.
Un solo XSD autosufficiente. Uno schema che importa o include un altro file non può essere verificato qui.

Incolla un documento e l'XSD che dovrebbe soddisfare. Ottieni il verdetto e, per ogni regola violata, l'elemento, la riga e il vincolo — non solo la parola «non valido».

Come funziona

Tre cose possono andare storte e vengono segnalate separatamente, perché significano cose diverse. Il documento può non essere XML ben formato, e allora non è stato verificato niente. Lo schema può non essere un XSD utilizzabile, e allora non è stato verificato niente nemmeno in quel caso. Oppure entrambi sono stati letti e il documento ha violato una regola — che è l'unico caso in cui «non valido» ti dice qualcosa sui tuoi dati.

La validazione è quella di libxml, lo stesso motore dietro la maggior parte degli strumenti XML, quindi la risposta coincide con quella della tua build. Le sue diagnostiche sono mostrate così come arrivano, in inglese, perché nominano l'elemento e il vincolo e una parafrasi sarebbe un'ipotesi su che cosa volesse dire un messaggio che non abbiamo scritto noi.

Questo strumento gira sul server, ed è l'unico qui a farlo. Nessun browser può validare contro XML Schema; non esiste un'API per questo. Il tuo documento e il tuo schema vengono inviati, verificati e scartati — mai scritti su disco, mai registrati, mai messi in un URL.

Due cose vengono rifiutate senza discussione. Un documento o uno schema che dichiara una DTD o un'entità, perché una DTD può istruire un parser a leggere file dal server. E uno schema che importa o include un altro file, perché qui non viene recuperato niente: se ne potrebbe applicare solo una parte, e un controllo parziale riportato come esito positivo è la peggiore risposta che un validatore possa dare.

Esempi

Caso Dati inseriti Risultato
Un valore del tipo sbagliato <price>cheap</price> Element 'price': 'cheap' is not a valid value of the atomic type 'xs:decimal'.
Un attributo obbligatorio omesso <book><title>V</title><price>1</price></book> Element 'book': The attribute 'id' is required but missing.
Un elemento figlio mancante <book id="b1"><title>V</title></book> Element 'book': Missing child element(s). Expected is ( price ).

Domande frequenti

Il mio documento esce dal mio browser?

Sì, ed è l'unico strumento del sito per cui questo è vero. Validare contro XML Schema non è una cosa che un browser sappia fare, quindi il documento e lo schema vengono inviati qui, verificati e scartati. Non vengono conservati, non vengono registrati e non finiscono in nessun URL. Se per il documento che hai questo non è accettabile, validalo in locale: xmllint fa la stessa cosa con lo stesso motore.

Perché il mio schema è stato rifiutato perché ne importa un altro?

Perché non viene recuperato niente da nessuna parte: niente rete, niente filesystem. Uno schema diviso su più file qui può essere applicato solo a metà, e un validatore che controlla metà delle regole e poi dice «valido» dà una risposta peggiore di nessuna risposta. Unisci i file, oppure valida in locale dove l'altro file esiste.

Perché un DOCTYPE viene rifiutato?

Perché una DTD può dichiarare un'entità che punta a un file sul server, ed è il modo più antico che esista per trasformare un parser XML in un lettore di file. Anche il caricamento delle entità è disattivato qui, quindi rifiutare il costrutto è una seconda serratura più che l'unica — ma un documento verificato contro un XSD non ha comunque bisogno di una DTD.

Perché i messaggi di errore sono in inglese?

Vengono da libxml, non da questo sito. Citano i nomi dei tuoi elementi e il vincolo violato, che è la parte che ti serve, e tradurli vorrebbe dire parafrasare diagnostiche che non abbiamo scritto noi — sbagliare l'ipotesi su una di quelle costa più che leggerla in inglese.

Quale versione di XML Schema?

XSD 1.0, che è quello che libxml implementa. Le asserzioni di XSD 1.1 e l'assegnazione condizionale di tipo non sono supportate, quindi uno schema 1.1 che le usa verrà segnalato come illeggibile invece che verificato in silenzio senza quelle regole.

Il mio schema inizia con encoding="utf-16" ed è stato rifiutato. Perché?

Perché quella dichiarazione descrive un file, e quello che arriva a questa pagina è ciò che il tuo browser ha inviato, cioè UTF-8. libxml ha creduto alla dichiarazione e si è rifiutato di leggere lo schema. Ora la codifica viene scartata ogni volta che non dice UTF-8, e il risultato lo segnala. La stessa cosa con encoding="ISO-8859-1" era peggio, perché non falliva: ogni carattere accentato veniva silenziosamente storpiato e il documento veniva poi validato contro un testo che nessuno aveva scritto.

Da sapere

  • Gira sul server. Il tuo documento e il tuo schema vengono inviati, verificati e scartati — non conservati, non registrati, non condivisibili in un URL. Tutti gli altri strumenti di questa categoria girano nel tuo browser; questo non può, perché nessun browser valida XML Schema.
  • Il verdetto è di libxml, e così è la formulazione di ogni diagnostica. Solo XSD 1.0.
  • Vengono elencati al massimo cinquanta problemi. Un documento che viola una regola mille volte di solito la viola per un motivo solo.

Fonti

Tutti gli strumenti di Codice