TRAVIS CI: Validare un xml

Dopo quasi due anni di silenzio, finalmente ho trovato il tempo per un nuovo articolo.

Immaginate di aver pubblicato un vostro file xml (o piu di uno) contenente delle informazioni che volete rendere accessibili via internet, chiaramente uno dei requisiti sará che ogni volta che si aggiorna il file xml (sia automaticamente, che manualmente), questo  sia ancora in un formato valido (ovvero il file non contiene errori).

Inoltre immaginiamo che il file xml é stato generato con formato personalizzato, quindi non esiste alcuno schema DTD.

In questa guida vi spiegheró come mettere sotto CI questo file (questo approccio é applciabile anche ad altri formati quali json, etc, con i dovuti accorgimenti).

Questa guida assume che si voglia validare il file xml in un progetto hostato su github, e che l’utente sappia almeno abilitare un progetto in travis-ci.

Prima di tutto occorre sapere come validare un file xml. In questo caso dobbiamo usare il programma xmllint, disponibile nel pacchetto libxml2-utils.

La sintassi del comando per validare un file xml:

xmllint --noout your_test_file.xml

Se il comando non produce alcun output allora il file é valido, altrimenti verrá mostrato un messaggio di errore. Inoltre, se siamo in ambiente unix la variable d’ambiente $? conterrá 0 nel caso di file valido, o un altro valore altrimenti (in base al tipo di errore, normalmente se si tratta di un errore di sintassi sará 1).

Ora questo approccio ha un problema, non prende in considerazione il formato del nostro file xml, e  non sa quali sono i vincoli che vanno rispettati, quindi la validazione in questo modo sarebbe troppo permissiva.

Per adattarla al nostro file xml con tags e attributi personalizzati, dobbiam prima crearne la sua specifica DTD, ovviamente si puo procedere manualmente se si sa come fare, altrimenti possiamo sfruttare diversi siti online che generano questo tipo di files, per esempio io ho usato il seguente: http://xml.mherman.org/. Per chi non sapesse cosa é il DTD, si tratta di un file che contiene le specifiche dei tag e degli attributi di un file xml.

Una volta che abbiamo generato il DTD copiamolo nella stessa cartella del file xml, e lanciamo questa volta il comando:

xmllint --noout --dtdvalid schema.dtd your_file.xml

Come nel caso precedente, nessun output vuol dire che il file é valido, e valore della variable $? é 0.

Ora che sappiamo come validare il nostro xml, possiamo procedere alla creazione del file di configurazione di travis (.travis.yml). La struttura del file per questo caso sará estremamente semplice, e composta di due parti:

  • La prima parte scarica il paccheto contenente xmllint, in quanto non disponibile di default.
  • La seconda eseguira la validazione.

Per istruire travis a scaricare il pacchetto libxml-utils (che contiene xmllint) basta aggiugnere al file la seguente sezione:

addons:
  apt:
    packages:
      - libxml2-utils

Fatto questo non resta altro che aggiugnere la parte di validaziione, e il gioco é fatto:

 

script:
 - xmllint --noout --dtdvalid schema.dtd magicsymbols.xml

Questo é tutto il necessario per istruire travis. Ora salviamo tutto questo in un file chiamato .travis.yml nella root del progetto, committate e fate la push sul vostro repository, e  dopo qualche istante vedremo il progetto nella dashboard di travis iniziare a fare le sue build!
Di seguito vedete le build in azione (sia quando fallisce, che quando ha successo):

  1. In caso di successo:

    Travis in caso di successo
  2. In caso di fallimento:
  3. Ecco un esempio di travis con un errore di validazione.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.