Validare un file XML rispetto a uno schema XSD

La cosa non potrebbe essere più facile…
Abbiamo delle regole che un file XML deve rispettare e dobbiamo verificare che le rispetti! Certo, è facile! Peccato che per farlo in “automatico”, cioè con un programmino (ino, ino) che lo faccia per noi, ho perso 3 ore! Gira e rigira su internet, ma niente! Una valanga di software perfettamente in grado di fare di tutto: creazione, editing, modifica, validazione, auto creazione e chi più ne ha più ne metta. Eppure un programmino (ino, ino) che, preso un XSD come insieme di regole da rispettare, verifichi che un dato XML le rispetti, non l’ho trovato! Incredibile! È davvero tanto difficile? Si, sembra proprio che lo sia!
Ho trovato anche tanti articoli nei quali altri “disperati” come me sono giunti alla mia stessa conclusione, ossia scriverselo da soli. Già, peccato che però poi non l’abbiano condiviso!!!
Così ho usato qualche minuto del mio tempo, me lo sono fatto da solo e lo condivido qui con tutto il web. L’ho scritto pure in java in modo che sia portabile. Ci basta la JVM e amen. Oddio, in 60 minuti non è che abbia potuto creare un programma eccezionale: manca di molti controlli, l’interfaccia grafica è… spartana, ma fa quello che deve fare!
Ve lo propongo.

OLTRE 1000 DOWNLOAD NEL 2014

Anche questo piccolo programmino è rilasciato secondo la licenza che governa questo sito: creative commons 3.0 – not for commercial use!, ossia potete usarlo, distribuirlo, modificarlo, ma non potete venderlo o usarlo per fini commerciali (anche perché chi lo compra? :-D). Tutto qua.
Da questo link potete scaricare il .zip (appena 10KB!!!). Decomprimendo il .zip otterremo un file denominato XMLValidator.jar.
Come si usa il programma?
Non c’è bisogno di alcuna installazione, ma c’è bisogno di java 😀
Per verificare di avere java installato sulla nostra macchina, apriamo il prompt di msdos (o il terminale di linux) e scriviamo “java -version” (senza i doppi apici). Se viene fuori la versione di java dobbiamo assicurarci che sia uguale o superiore alla 1.6. Se invece il comando non viene riconosciuto dobbiamo scaricare e installare java. Una volta avuta la certezza di possedere java sulla nostra macchina, possiamo lanciare l’applicazione in uno dei seguenti modi. Se abbiamo windows dovrebbe bastare cliccare 2 volte sul XMLValidator.jar (oppure apriamo una finestra del prompt di msdos, andiamo nella cartella del jar e digitiamo “java -jar XMLValidator.jar” senza doppi apici). Se invece abbiamo linux clicchiamo col pulsante dx del mouse su XMLValidator.jar e scegliamo “Apri con Sun java 6 runtime” (o qualcosa del genere). Anche su linux è comunque possibile lanciare il programma da terminale con lo stesso usato per windows. Su Solaris… non ricordo, dovrebbe bastare un doppio click. Apple Computer fornisce la propria versione di Java. Utilizziamo la funzione “Aggiornamento Software” (disponibile nel menu Apple) per verificare che la versione di Java in uso sul Mac sia quella più aggiornata.
Validate gente, validate! 😀

NEWS
21.02.2012
Rilasciata la versione 2.0.
Novità: usato jaxp con sax; possibilità di validare file presenti direttamente online; comunicazione di riga e colonna in cui vengono riscontrati gli errori.

33 Commenti

  1. Roberto

    Bravo, bravissimo, eccezionale.

    Anche a me piace il software che faccia bene quello che deve fare e basta, ma nell’era dell’apparire vanno avanti solo i venditori di fumo…

    Se non ti è troppo disturbo, posso chiederti anche io il sorgente?

    In ogni caso grazie.

    Roberto

  2. Mauro

    Garzie mille, è proprio quello che cercavo….
    Se la rete è ricca di risorse utili, è grazie a quelli come te che le mettono a disposizione degli altri.

  3. David

    Ottimo! bel lavoro, semplice e pulito. Grazie!
    Sarebbe molto figo poter usare il drag&drop per XML e XSD invece che spulciare tra le cartelle.

  4. Francesco

    Grazie Alessandro, Ottimo Lavoro!
    Hai risolto un mio grosso problema!
    Se posso suggerirti una miglioria:

    Ogni volta che si valida un file, il percorso di partenza è sempre la cartella Documenti.
    Sarebbe opportuno riproporre l’ultimo percorso utilizzato!

  5. Paolo

    Ho provato ma credo che abbia problemi con file grossi.
    Ho provato a validare un file xml con circa 100.000 righe, del peso di 90 MB ma dopo un po’ il programma sembra non fare più nulla, e guardando i processi, non vedo attività di CPU 🙁

    1. Ciao Paolo,
      può tranquillamente essere vero quello che dici. Non ho mai provato questo piccolo programma su file così grossi… E’ nato molto tempo fa e in mezz’ora di tempo! Non aveva grandi pretese 🙂
      Comunque sei capitato nel periodo “giusto” in quanto, proprio la settimana prossima, ho in programma di scriverne una nuova versione con diverse novità (tra cui la gestione di file online, tramite http)…
      In quell’occasione eseguirò certamente un test con file locali molto grossi e magari gestire eventuali overflow con un qualche messaggio di avviso…

    1. Ciao Danilo,
      ero convinto di aver messo i sorgenti nel .zip. Mi sono accorto che non è così! Purtroppo ho fatto ‘sto coso un bel po’ di tempo fa e il codice non ho idea di dove sia finito (anche perché era una roba ridicola da pochi KB). Comunque appena ho un po’ di tempo vado a cercare tra i progetti salvati. Se lo trovo te lo mando…

  6. LuigiJava

    Senti una cosa. Validazione sulla struttura dell’XML ok! Ma su i dati presenti all’interno dei tag???? Cioè se io ripeto dei tag in maniera impropria se ne accorge, ma se dentro un tag impostato come AAAA 4 cifre dell’anno posso anche metterci la parola “ITALIA” che lui non si rende conte di nulla! […]

    1. Ciao LuigiJava,
      ma sei sicuro? ‘sto coso che ho scritto dovrebbe rendersi conto se un dato non rispetta le regole impostate nell’xsd! Ho provato a inserire un dato non corretto e mi ha piantato a video un sacrosanto errore. Mmah…non so cosa dirti… magari ci son degli errori nell’xsd al quale si deve attenere il tuo xml…

  7. phantom

    java -version:

    java version “1.6.0_18”
    Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
    Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

    con il comando java -jar XML.jar funge. Volevo fare doppio click sul file jar, ma cosi’ non funge.
    Mi son dovuto fare un .bat con il comando.
    It’s useful, thank!

    1. Ciao phantom… da quel poco che mi scrivi la jvm sembra essere installata, ma potrebbe non essere sufficientemente aggiornata o essere quella della Microsoft.
      Segui questi passi:

      1. dal prompt del dos (terminale linux) digita java -version
        Se la risposta è 1.4.x, aggiorna la jvm almeno alla versione 1.5 (meglio 1.6)
        Se invece il comando non viene riconosciuto, ma sei sicuro di aver installato la jvm, allora è un problema di variabili d’ambiente che non rendono visibile il comando java. In questo caso le cose si complicano perché la procedura per aggiungere o modificare una variabile d’ambiente dipendono dal sistema operativo
      2. potresti avere qualche spyware che da fastidio. In questo caso scarica da internet una spyware removal utility e fai una bella pulizia del tuo sistema

      L’applicazione è stata testata da me su
      – windows 7 home
      – windows vista home premium
      – windows xp (pro) SP2
      – windows xp (pro) SP3
      – linux ubuntu 9.10
      tutti dotati di SUN java 1.6.
      Non mi è stato mai segnalato il problema da te indicato che quindi non dovrebbe essere un problema dell’applicazione.
      Tuttavia tale problema è conosciuto in ambito java e tipicamente dipende dai motivi che ti ho indicato.
      Fammi sapere…

I commenti sono chiusi.