Introduzione a YAML+Ruby

YAML è uno standard per la serializzazione dei dati. Potete pensare a YAML come ad un'alternativa a JSON o ad XML.

Un documento YAML ha una sintassi molto compatta e pulita, il che lo rende facilmente leggibile e gestibile.

In questo articolo vedremo un breve esempio di YAML e qualche linea di codice in Ruby. Per un approfondimento su YAML leggete le specifiche ufficiali che sono chiare e schematiche.

Supponiamo di voler rappresentare un archivio di libri: ogni libro ha un titolo, un anno di publicazione, un numero di pagine ed un autore. Ogni autore ha un nome ed un cognome. Tutto questo lo si può indicare con il seguente file:

--- inizio file biblioteca.yml ---

autori:
- &dost 
  nome : Fedor
  cognome : Dostoevskij
- &sade
  nome : Francois
  cognome : De Sade
libri:
- titolo : Le sventure della virtu'
  pagine : 130
  autore : *sade
- titolo : Delitto e Castigo
  pagine : 190
  autore : *dost
- titolo: I Fratelli Karamazov
  pagine: 702
  autore: *dost
- titolo: L'idiota 
  pagine: 190
  autore: *dost
- titolo: Memorie dal Sottosuolo
  pagine: 105
  autore: *dost

--- fine file biblioteca.yml ---

Come vedete, un file YAML è compatto (niente prolissi tag di apertura e chiusura come in XML) e facilmente leggibile anche da un non esperto di informatica. In questo semplice esempio abbiamo visto come creare delle "strutture" (es. l'oggetto libro e quello autore) degli elenchi (ogni voce è preceduta dal trattino "-") e come creare dei "riferimenti" (notate che ho definito "Dostoevskij" una volta sola, e poi in tutti i suoi libri ho solo messo un riferimento "*dost").

Adesso vediamo un esempio di programma scritto in Ruby che legge il contenuto del file:

--- inizio file biblioteca.rb ---

require 'yaml'
 
archivio = YAML.load_file("biblioteca.yml")
libri = archivio['libri']
 
puts "Elenco libri:"
libri.each{ |libro| 
titolo_libro = libro['titolo']
cognome_autore = libro['autore']['cognome']
puts "#{titolo_libro} di #{cognome_autore}"
}

--- fine file biblioteca.rb ---

Ecco cosa vedrete a video eseguendo lo script in Ruby:

Elenco libri:
Le sventure della virtu' di De Sade
Delitto e Castigo di Dostoevskij
I Fratelli Karamazov di Dostoevskij
L'idiota di Dostoevskij
Memorie dal Sottosuolo di Dostoevskij

Personalmente trovo l'accoppiata YAML+Ruby davvero interessante e comoda.  Quando posso utilizzo YAML al posto dell'XML nei miei software, soprattuto nei file di configurazione (quelli scritti in xml tendono ad essere chilometrici e poco leggibili), come ho fatto ad esempio in DNS4J.
 
Ho in programma di fare degli altri articoli più approfonditi su YAML, nel quale parlare di YAML+Java, dei "tag" di YAML e tanto altro... quindi a presto!
 
Nota: qualora foste interessati ad usare YAML in Java vi consiglio la libreria YamlBeans reperibile all'URL http://code.google.com/p/yamlbeans/
tags: