Mi è capitato troppe volte di trovarmi file XML assolutamente illeggibili per le mani.
Una soluzione, come al solito, arriva da CPAN: XML::Tidy!
Ridi e scherza, questo modulino è in realtà un sacco di codice che parsa alla perfezione i file xml e li riordina ad-hoc.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Tidy;
my $VERSION = 0.02;
my $file_in = $ARGV[0] || die "Usage:\t$0 <input.xml> <output.xml>\n";
my $file_out = $ARGV[1] || ‘output.xml’;
my $tidy_obj = XML::Tidy->new(‘filename’ => $file_in);
$tidy_obj->tidy();
$tidy_obj->write($file_out);
Il mio semplice script prende un file in input da cmdl e sputa fuori un output.xml “raddrizato” (2 whitespace di default come indentazione, se si vuole modificare bisogna dare un arogomento al metodo ->tidy()).
Per ulteriori info.
Nota: La libreria perl sta anche in un pacchetto debian (libxml-tidy-perl) che guarda caso fornisce uno scriptino (/usr/bin/xmltidy) molto simile (quasi identico) al mio.
Dovendo scrivere un po’ di codice xml, mi sono chiesto se ViM avrebbe potuto venirmi in aiuto.
Il plugin xml.vim ha rappresentato la risposta.
Per “installarlo” è bastato mettere il file in ~/.vim/plugin/ e far leggere a ViM un file xml.
Che è? Le taglie delle T-shirt? eXtra Medium Large?
No, nun ce siamo.
Benché in questi mesi io abbia evitato abbastanza accuratamente l’eXtensible Markup Language (nun me piace), alla lunga ci ho dovuto scozzare.
Non è il diavolo, sia chiaro, ma mi fa strano: scrivi un sacco di roba per avere i dati ben delineati; questo è bene! Solo che scrivi piu’ di contorno che di dati…
Comunque, poco male.
XML è comodo per manipolare dati. Il formato è assolutamente portabile, flessibile nella nomenclatura e rigido nella struttura.
<?xml version="1.0"?>
<!DOCTYPE agenda SYSTEM "address.dtd">
<addressbook>
<person>
<name>Paolo</name>
<surname>Rossi</surname>
<age>45</age>
<country>Italy</country>
</person>
<person>
<name>Mario</name>
<surname>Bianchi</surname>
<age>32</age>
<country>Italy</country>
</person>
</addressbook>
Con dei dati esposti in questa maniera, chiunque è in grado di capire come sono messi e intuire come possono essere manipolati.
Specifiche XML del W3C.
Namespaces in XML.
In un documento XML ci sono 3 parti da distinguere bene:
- Il contenuto (XML)
- Le specifiche per gli elementi di struttura (DTD)
- Le specifiche legate alla visualizzazione (XSL, CSS, …)
E’ cosa buona e giusta indicare la Document Type Declaration (DTD) del file XML. IL DTD codifica le regole grammaticali per l’XML (insieme degli elementi, attributi, relazioni gerarchiche, ordine di apparizione, ecc.). Il DTD può essere esplicito (interno all’XML) o distinto (esterno con riferimento in <!DOCTYPE …>).
L’XSL (eXtensible Stylesheet Language) fornisce i modi per trasformare e presentare i documenti XML (ie: ci può permettere di convertire il documento XML in un formato adatto ad un supporto differente, come l’HTML). L’XSL utilizza pattern per specificare gli elementi XML a cui applicare un determinato template (regole su come disporre il pattern).
Per aggiungere uno stylesheet, è necessario inserire una riga con il riferimento nell’XML:
<?xml-stylesheet type="text/xsl" href="file.xsl"?>
XML XPath è un linguaggio per “esplorare” i file XML (un tutorial del W3C).
Promemoria link di questo periodo.
- Stylus Studio: a proposito di XML e XSLT.
Lavorare con l’XSLT. - XMLpitstop: un sito con quintali di stylesheet e altro.
- Explorer Exposed: quando i css fanno i capricci con Exploder.
Peek-a-boo IE6 bug. - Complex Spiral Consulting: quando si lavora con float dei css, e quella colonna fa un po’ quel caxxo che le pare.
Containing float. - A list apart: meriterebbe sempre la citazione, quando si parla di css.
In questo caso, chiaccheriamo del css per la stampa; media=”print”. - Sablotron: XML parser opensource per php.
By Gingerall.