XML

Che cos’è un file XML?

L’antenato prolisso del JSON. Resta la spina dorsale dello scambio dati fra aziende e amministrazioni.

Che cos’è XML

XML è un formato di testo semplice che si apre in qualsiasi editor. Si usa per spostare dati fra programmi.

L’estensione è .xml e il nome per esteso è Extensible Markup Language. Contano entrambi meno di ciò che il file può contenere, ed è di questo che parla il resto della pagina.

Da dove viene XML

W3C lo ha pubblicato nel 1998. La specifica è XML 1.0.

A un formato rimasto leggibile così a lungo si può affidare qualcosa che vuoi ritrovare fra dieci anni.

La specifica è pubblica

È pubblicata per intero, quindi la si può implementare partendo dal documento invece che per osservazione: è per questo che il formato compare in così tanti programmi, ed è per questo che file scritti vent’anni fa si aprono ancora. Una specifica pubblicata però non è la stessa cosa di una esente da royalty: dove un formato incapsula un codec, le licenze sui brevetti restano una questione a parte che lo standard non risolve.

Non si butta via niente

XML conserva il suo contenuto esattamente. Risalvarlo non cambia nulla, quindi puoi aprirlo, modificarlo e risalvarlo quante volte vuoi senza accumulare danni: è questo che ne fa un formato di lavoro e non di consegna.

Ci si possono lasciare delle note

XML ha una sintassi per i commenti, ed è la differenza fra un file che cura una persona e uno che scrive un programma. I commenti sono la prima cosa che si perde convertendo in un formato che non li ha, e nessuno ti avvisa.

Che cosa apre XML

Visual Studio Code e oXygen XML Editor lo leggono, e così fanno quasi tutti i programmi dello stesso tipo.

Quando un file non si apre, il formato è raramente il problema: più spesso è il programma a essere più vecchio di lui. Convertire in qualcosa di più vecchio è la via d’uscita affidabile, ed è a questo che serve il resto di questo sito.

Aprirlo nel browser

Qualsiasi browser attuale lo legge.

Puoi quindi metterlo su una pagina o allegarlo a un messaggio senza chiederti che cosa abbia installato chi lo riceve.

È un formato di lavoro

XML è pensato per essere aperto e modificato. Tieni il file in questo formato per tutto il tempo in cui il lavoro va avanti, ed esporta da lì ogni volta che serve una copia finita.

Un modo di annotare struttura, non un formato specifico

L’XML non descrive nulla di per sé. È un insieme di regole per marcare un documento con elementi annidati e attributi, e il significato lo dà il vocabolario costruito sopra: RSS, SVG, SOAP, la fattura elettronica, i messaggi sanitari HL7, le mappe del sito, i layout schermo di Android e le viscere di qualsiasi file Office o OpenDocument.

Quindi dire «un file XML» informa poco sul contenuto quanto dire «un file di testo». Ciò che conta è quale vocabolario segue, e questo di solito è dichiarato nell’elemento radice o nello schema a cui il documento punta.

Ben formato e valido sono due parole diverse

Ben formato significa che la sintassi è corretta: un unico elemento radice, tutti i tag chiusi, annidamento pulito, attributi tra virgolette e i caratteri & e < con escape ovunque siano voluti come testo. Gli altri tre caratteri riservati sono più limitati di quanto spesso si insegni: > va scappato solo dentro ]]>, e le virgolette solo dove chiuderebbero l’attributo in cui si trovano. Un analizzatore rifiuta qualsiasi cosa sotto questo standard — l’XML è rigoroso di proposito e, a differenza dell’HTML, non c’è recupero dagli errori.

Valido significa inoltre che rispetta uno schema: questo elemento può contenere quelli, questo attributo è obbligatorio, questo valore deve essere una data. Un documento può essere impeccabilmente ben formato ed essere del tutto inutile per il suo scopo, e ciò che distingue una cosa dall’altra è un analizzatore validante. Negli scambi regolamentati quella validazione è il contratto, ed è gran parte del motivo per cui l’XML resta dove sta.

I namespace e gli errori che provocano

Esistono perché due vocabolari possano combinarsi senza che i loro nomi di elemento entrino in conflitto: una tabella XHTML e la tabella di un catalogo mobili nello stesso documento. Un namespace si identifica con un URI, che è un nome e non un indirizzo: da lì non si scarica nulla e non deve risolversi da nessuna parte.

Sono anche la maggiore fonte di errori programmando contro l’XML. Una query scritta senza tenere conto del namespace dell’elemento non trova nulla, in silenzio, mentre il documento appare perfetto a occhio umano. Se un analizzatore insiste che non esiste un elemento che state guardando sullo schermo, il namespace è il primo posto dove cercare.

La dichiarazione di codifica non è un ornamento

La prima riga di un file XML corretto dichiara la versione e la codifica dei caratteri. A differenza di un file di testo semplice, questo rende la codifica parte del documento invece che una supposizione, ed è il motivo per cui l’XML gestisce accenti e diacritici di qualsiasi lingua con più affidabilità di quanta ne abbiano mai avuta il CSV o l’INI.

Due conseguenze da conoscere. Un file che dichiara una codifica ed è salvato in un’altra è rotto in un modo che produce errori di analisi sconcertanti invece di caratteri visibilmente sbagliati. E un segno d’ordine dei byte davanti alla dichiarazione disturba alcuni analizzatori, quindi qui, come ovunque altro, l’opzione da preferire è «UTF-8 senza BOM».

Le entità esterne sono un problema di sicurezza vero

L’XML ha un meccanismo per definire abbreviazioni — le entità — e storicamente un’entità poteva puntare a una risorsa esterna. Un analizzatore che le risolve leggerà file locali o farà richieste di rete per conto di chi ha inviato il documento.

Questa è la vulnerabilità XXE, e ha prodotto violazioni reali esponendo file del server tramite un caricamento dall’aspetto innocuo. Un trucco imparentato, l’attacco delle mille risate, annida definizioni di entità così che un file minuscolo si espanda fino a esaurire la memoria. Se le entità esterne vengano risolte di default dipende dalla libreria e non è uniforme — gli analizzatori inclusi in Java e lxml in Python le risolvono salvo diversa indicazione — quindi è un’impostazione da verificare e non da presumere. Qualsiasi XML arrivato dall’esterno è input non affidabile.

Gli strumenti sono il motivo per cui resta vivo

XPath indirizza qualsiasi parte di un documento con un’espressione compatta ed è genuinamente eccellente: una sola riga estrae tutti gli elementi prezzo dentro un prodotto il cui attributo categoria corrisponde. XSLT trasforma un documento XML in un altro, o in HTML, o in testo, in modo dichiarativo. XSD definisce e fa rispettare uno schema. Tutti e tre sono standard, tutti e tre sono maturi, e gli equivalenti del mondo JSON sono arrivati dopo e con un supporto meno uniforme.

È questo che si intende dicendo che l’XML è prolisso ma capace. I segni di maggiore e minore sono il prezzo; la macchina di interrogazione, trasformazione e validazione è ciò che si compra, e nei settori che ne hanno bisogno non esiste ancora nulla di equivalente.

Che cosa si perde convertendolo qui

Questo sito converte XML in JSON, YAML, TOML, INI e NDJSON nel browser, e nessuna di queste uscite viene contrassegnata come senza perdita quando l’origine è XML. Il motivo sta in cosa fa l’analizzatore: i commenti vengono scartati, le sezioni CDATA vengono srotolate, il contenuto misto — testo con markup dentro — viene concatenato e perde il suo ordine, e i valori degli attributi diventano numeri quando sembrano tali, così che ver="1.0" arriva dall’altra parte come 1.

C’è un caso peggiore da segnalare a parte: un elemento ripetuto che in quel documento specifico compare una sola volta collassa in un oggetto isolato invece che in una lista di un solo membro, quindi due documenti con la stessa struttura producono JSON di forme diverse. Attributi e nodi di testo finiscono entrambi come chiavi, un giudizio che il convertitore prende al posto vostro. XML a forma di dati passa ragionevolmente; XML a forma di documento non sopravvive all’andata e ritorno. Verso una tabella non c’è un percorso diretto: se volete un foglio di calcolo, la via è passare prima per JSON e da lì al CSV, decidendo voi quale parte dell’albero siano le righe.

Leggerlo e modificarlo senza soffrire

Qualsiasi editor di testo lo apre, e vale la pena usarne uno con supporto XML: ripiega sezioni, controlla mentre scrivete se resta ben formato e riformatta un file arrivato come un’unica riga chilometrica, come arriva quasi tutto l’XML generato da una macchina. Anche i browser lo mostrano come un albero espandibile, il modo più rapido di dare un’occhiata a uno sconosciuto.

Un avviso per la via di ritorno: i commenti non sopravvivono a nessuna conversione, né in XML né in YAML, TOML o INI. Se il file porta annotazioni che spiegano perché un valore è quello e non un altro, copiatele altrove prima di convertire, perché l’ordine delle chiavi viene rispettato ma dei commenti non resta traccia.

I dati, in un posto solo

Identificativi e provenienza del formato XML.
Estensione.xml
Tipo di mediaapplication/xml, text/xml
Pubblicato daW3C
Prima pubblicazione1998
SpecificaXML 1.0