Alternative a XML: YAML, rappresentare i nostri dati al meglio!

XML ( eXtensible Markup Language) è un linguaggio di markup fra i più usati, ma non di certo il più amato, e ne vedremo i motivi. In questo appuntamento descriveremo YAML, un linguaggio di markup alternativo e decisamente più… amichevole di XML (da qui il divertente acronimo Yet Another Markup Language)

XML vs YAML

Lo scopo di un linguaggio di markup è di creare una rappresentazione strutturata di un testo per facilitarne il trattamento con mezzi informatici. I computer infatti, al contrario di noi, fanno molta fatica a capire il contenuto di un testo non strutturato secondo regole preimpostate. L’esempio più comune è il testo di un sito internet come quello che state leggendo: per dire al vostro computer di mostrare un testo formattato in un certo modo bisogna inviarglielo in formato HTML, che è appunto il linguaggio di markup utilizzato dalle pagine web.

XML è stato creato come linguaggio di “eccellenza” per la rappresentazione dei dati strutturati; la sua natura estensibile e i numerosi standard a cui si appoggia hanno difatti creato un ecosistema davvero molto completo e completamente integrato: validazione, formati d’interscambio di dati, sicurezza, ecc. Tutto ciò è molto vantaggioso dal punto di vista enterprise, perché fornisce tutta una serie di garanzie sul corretto funzionamento dei vari sistemi che adottano questi standard, ma appesantisce enormemente il linguaggio e gli strumenti che lo trattano.

YAML al contrario è nato per essere facile da utilizzare, la sua sintassi infatti si avvicina molto a quello che un essere umano potrebbe considerare un “testo libero”. In realtà il linguaggio possiede regole sintattiche ben precise, ma queste sono decisamente più facili e intuitive rispetto a quelle di XML o di altri linguaggi di markup come JSON (che vedremo in un altro appuntamento).

Vediamo un esempio scritto in entrambi i linguaggi.

Versione XML:

<?xml version='1.0' encoding='UTF-8'?>
<dati>
  <tabella nome="cataloghi">
    <righe>
      <riga>
        <id>1</id>
        <nome>Primavera-Estate 2011</nome>
        <codice>PE2011</codice>
        <data_inserimento>2011-01-29</data_inserimento>
      </riga>
      <riga>
        <id>2</id>
        <nome>Autunno-Inverno 2011</nome>
        <codice>AI2011</codice>
        <data_inserimento>2011-06-12</data_inserimento>
      </riga>
    </righe>
  </tabella>
</dati>

 

Versione YAML:

dati:
  - tabella:
    nome: 'cataloghi'
    righe:
      - riga:
        id: 1
        nome: 'Primavera-Estate 2011'
        codice: 'PE2011'
        data_inserimento: '2011-01-29'
      - riga:
        id: 2
        nome: 'Autunno-Inverno 2011'
        codice: 'AI2011'
        data_inserimento: '2011-06-12'

Come si può notare, la sintassi YAML è molto più vicina ad una comune lista scritta in testo libero, anche se è evidente una struttura alquanto rigorosa. I vantaggi di YAML rispetto a XML sono evidenti:

  • leggibilità facilitata dall’assenza dei tagi di apertura e chiusura;
  • scrittura semplificata: anche qui, l’assenza dei tag e della necessità di bilanciarli fa risparmiare un sacco di tempo e grattacapi;
  • minore lunghezza dei file.

Librerie

Per utilizzare YAML sono stati create diverse librerie per i vari linguaggi, in particolare per PHP vogliamo segnalarvene alcune.

  • la libreria YAML di Symfony è molto completa, ben documentata e attivamente supportata. È nata e cresciuta all’interno del progetto Symfony, un framework molto potente per la realizzazione di applicazioni in PHP;
  • php-yaml è un wrapper intorno alla libreria nativa LibYAML (scritta in C). Il vantaggio maggiore è sicuramente una maggiore velocità, soprattutto per quanto riguarda grossi file; l’unica controindicazione è che, trattandosi di una libreria nativa, va installata dall’amministratore di sistema e se il vostro hosting non la include non la potete utilizzare.
  • Syck è un’altra libreria nativa, molto performante ma purtroppo nota anche per i numerosi bug e criptici messaggi d’errore;
  • Spyc è una libreria scritta in PHP, supporta la specifica YAML 1.0;

Links