I Vari Utilizzi di XML: Guida Completa all'eXtensible Markup Language
Scopri come XML definisce lo standard per lo scambio di dati strutturati, le sue applicazioni moderne dal web al mobile, e perché è ancora rilevante nel 2025.

Introduzione
Nel panorama tecnologico contemporaneo, dove JSON e YAML dominano lo scambio di dati, potrebbe sembrare che XML (eXtensible Markup Language) appartenga al passato. Tuttavia, questo versatile linguaggio di markup continua a essere un pilastro fondamentale in numerosi ambiti dell'informatica moderna, dalle applicazioni enterprise ai manifest di Android, dalle fatture elettroniche alle configurazioni di framework.
XML è nato come soluzione a un problema cruciale: definire un formato che permettesse di strutturare, memorizzare e trasportare dati in modo indipendente dalle piattaforme e dai linguaggi di programmazione. Mentre HTML era stato progettato per visualizzare i dati, XML è stato concepito per descriverli e trasportarli.
In questo articolo, esploreremo la storia, la struttura e soprattutto i molteplici utilizzi di XML nel contesto tecnologico attuale. Nonostante l'emergere di alternative più snelle, XML continua a rappresentare uno standard fondamentale, la cui conoscenza rimane preziosa per qualsiasi sviluppatore che operi in contesti enterprise, nella programmazione mobile, nei servizi web o nella gestione documentale.
Le origini e l'evoluzione di XML
La nascita di XML: dal SGML al Web
XML ha radici profonde che risalgono agli anni '60 e '70, quando IBM sviluppò il Generalized Markup Language (GML) per gestire la documentazione legale e tecnica dell'azienda. Da GML si evolse poi SGML (Standard Generalized Markup Language), riconosciuto come standard ISO nel 1986.
SGML, sebbene potente, era estremamente complesso e difficile da implementare completamente. Questa complessità limitava la sua adozione su larga scala, specialmente nel nascente World Wide Web.
Fu in questo contesto che nel 1996 iniziò lo sviluppo di XML, guidato dal World Wide Web Consortium (W3C). Jon Bosak di Sun Microsystems guidò un team che includeva figure come Tim Bray, Michael Sperberg-McQueen e altri esperti. L'obiettivo era creare un linguaggio di markup che mantenesse la potenza di SGML ma fosse sufficientemente semplice da implementare nel web.
La prima specifica di XML 1.0 divenne una raccomandazione ufficiale del W3C il 10 febbraio 1998, segnando l'inizio di una rivoluzione nel modo in cui i dati strutturati venivano rappresentati e scambiati.
L'età d'oro di XML: 2000-2010
Il primo decennio del 2000 vide l'esplosione di XML come standard de facto per lo scambio di dati. Le sue caratteristiche fondamentali — leggibilità umana, rigore sintattico, indipendenza dalla piattaforma, supporto multilingua e facilità di validazione — lo resero la scelta preferita per innumerevoli applicazioni:
- Web Services: SOAP (Simple Object Access Protocol) utilizzava XML per la comunicazione tra sistemi distribuiti
- Configurazione: Framework come Spring e applicazioni enterprise iniziarono a utilizzare file XML per la configurazione
- Scambio dati: RSS e Atom standardizzarono la sindacazione dei contenuti in formato XML
- Office Documents: Microsoft introdusse il formato Office Open XML, mentre OpenOffice sviluppò OpenDocument, entrambi basati su XML
XML divenne così onnipresente che competenze in tecnologie correlate come XPath, XSLT, XQuery e XML Schema divennero essenziali per qualsiasi sviluppatore.
La transizione verso JSON e alternative più leggere
Con l'avvento del Web 2.0 e in particolare delle applicazioni AJAX, emerse la necessità di formati di scambio dati più leggeri e facilmente manipolabili in JavaScript. JSON (JavaScript Object Notation) guadagnò rapidamente popolarità grazie alla sua semplicità e integrazione nativa con JavaScript.
Rispetto a XML, JSON offriva:
- Minor verbosità (assenza di tag di chiusura)
- Parsing più semplice e veloce nel browser
- Rappresentazione diretta di strutture dati come array e oggetti
Questo portò, specialmente nello sviluppo web frontend e nelle API REST, a un progressivo abbandono di XML in favore di JSON. Parallelamente, linguaggi come YAML guadagnarono popolarità negli ambiti della configurazione.
Tuttavia, sarebbe un errore considerare questo shift come la "morte di XML". Piuttosto, XML ha trovato il suo spazio in ambiti dove le sue caratteristiche distintive continuano a offrire vantaggi significativi.
La struttura di XML: elementi fondamentali
Per comprendere appieno gli utilizzi di XML, è essenziale familiarizzare con la sua struttura e i suoi componenti fondamentali.
Anatomia di un documento XML
Un documento XML è composto da diversi elementi che insieme formano una struttura gerarchica ad albero:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Questo è un commento -->
<root>
<elemento attributo="valore">
<figlio>Contenuto</figlio>
<figlio />
</elemento>
</root>
I componenti principali includono:
Prologo e dichiarazione XML
<?xml version="1.0" encoding="UTF-8"?>
La dichiarazione XML è opzionale ma raccomandata. Specifica la versione di XML (1.0 o 1.1) e l'encoding utilizzato.
Elementi e tag
Gli elementi sono i blocchi costitutivi di XML e sono delimitati da tag di apertura e chiusura:
<elemento>Contenuto</elemento>
Gli elementi possono anche essere vuoti:
<elemento />
Attributi
Gli attributi forniscono informazioni aggiuntive sugli elementi:
<elemento attributo="valore" altro="valore2">Contenuto</elemento>
Commenti
I commenti in XML sono racchiusi tra <!-- e -->:
<!-- Questo è un commento in XML -->
CDATA
Le sezioni CDATA permettono di includere testo che contiene caratteri speciali senza che vengano interpretati come markup:
<elemento>
<![CDATA[Qui posso inserire <, >, & senza problemi]]>
</elemento>
Entità
Le entità permettono di rappresentare caratteri speciali:
< <!-- < -->
> <!-- > -->
& <!-- & -->
' <!-- ' -->
" <!-- " -->
Regole sintattiche rigide
Una delle caratteristiche distintive di XML è il suo rigore sintattico:
- Case sensitivity:
<Tag>e<tag>sono elementi diversi - Tag chiusura obbligatoria: ogni tag aperto deve essere chiuso
- Nidificazione corretta: i tag devono essere chiusi nell'ordine inverso di apertura
- Attributi quotati: i valori degli attributi devono essere racchiusi tra virgolette
- Elemento radice unico: ogni documento XML deve avere un solo elemento radice
Questo rigore facilita la validazione automatica e garantisce l'interoperabilità tra diversi sistemi.
Validazione e Schema
Una delle caratteristiche più potenti di XML è la possibilità di definire e validare la struttura dei documenti attraverso:
DTD (Document Type Definition)
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
XML Schema (XSD)
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
RelaxNG
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<element name="note">
<element name="to"><text/></element>
<element name="from"><text/></element>
<element name="heading"><text/></element>
<element name="body"><text/></element>
</element>
</start>
</grammar>
Questi meccanismi di validazione permettono di definire regole rigorose sulla struttura dei documenti, facilitando l'interoperabilità e la robustezza delle applicazioni.
Applicazioni moderne di XML
Nonostante la crescente popolarità di JSON e YAML, XML continua a essere ampiamente utilizzato in diversi contesti. Ecco alcune delle applicazioni più rilevanti nel panorama tecnologico attuale.
Sviluppo Mobile: Android Manifest
Ogni applicazione Android richiede un file AndroidManifest.xml che definisce caratteristiche fondamentali dell'app:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Questo file definisce:
- Permessi richiesti dall'applicazione
- Componenti dell'app (attività, servizi, provider di contenuti)
- Requisiti hardware e software
- Punto di ingresso dell'applicazione
Nonostante le numerose evoluzioni di Android, il manifest è rimasto in formato XML, dimostrando la durabilità e l'adeguatezza di questo formato per la configurazione di applicazioni.
Fatturazione Elettronica in Italia
Dal 1° gennaio 2019, la fatturazione elettronica è obbligatoria in Italia per la maggior parte delle operazioni commerciali. Le fatture elettroniche utilizzano un formato XML standardizzato chiamato "FatturaPA":
<?xml version="1.0" encoding="UTF-8"?>
<p:FatturaElettronica versione="FPR12" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<!-- Dati della trasmissione -->
</DatiTrasmissione>
<CedentePrestatore>
<!-- Dati del fornitore -->
</CedentePrestatore>
<CessionarioCommittente>
<!-- Dati del cliente -->
</CessionarioCommittente>
</FatturaElettronicaHeader>
<FatturaElettronicaBody>
<DatiGenerali>
<!-- Dati generali della fattura -->
</DatiGenerali>
<DatiBeniServizi>
<!-- Dati dei beni o servizi fatturati -->
</DatiBeniServizi>
<DatiPagamento>
<!-- Modalità di pagamento -->
</DatiPagamento>
</FatturaElettronicaBody>
</p:FatturaElettronica>
La scelta di XML per questo standard è motivata da:
- Possibilità di validazione formale attraverso XSD
- Capacità di rappresentare strutture dati complesse e gerarchiche
- Supporto per namespace che permettono di estendere lo schema
- Ampio supporto in diversi linguaggi di programmazione
Questo caso d'uso illustra come XML rimanga la scelta preferita per applicazioni governative e finanziarie dove la precisione, la validazione e la conformità agli standard sono prioritarie.
Web Services: SOAP e WSDL
Sebbene le API REST con JSON abbiano guadagnato popolarità, i Web Services basati su SOAP (Simple Object Access Protocol) rimangono fondamentali in molti contesti enterprise:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<!-- Intestazioni SOAP opzionali -->
</soap:Header>
<soap:Body>
<m:GetStockPrice xmlns:m="http://example.org/stock">
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
SOAP utilizza XML per:
- Definire l'envelope del messaggio
- Specificare regole di encoding
- Rappresentare la chiamata di procedura remota
- Gestire errori
I servizi SOAP sono descritti attraverso WSDL (Web Services Description Language), anch'esso basato su XML:
<?xml version="1.0"?>
<definitions name="StockQuote"
targetNamespace="http://example.org/stockquote.wsdl"
xmlns:tns="http://example.org/stockquote.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<!-- Definizioni di tipi -->
<types>...</types>
<!-- Definizioni di messaggi -->
<message name="GetStockPriceRequest">...</message>
<!-- Definizioni di porte -->
<portType name="StockQuotePortType">...</portType>
<!-- Binding -->
<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">...</binding>
<!-- Servizio -->
<service name="StockQuoteService">...</service>
</definitions>
Il vantaggio principale di SOAP è il contratto formale che stabilisce tra client e server, con supporto per:
- Tipizzazione forte dei dati
- Validazione automatica
- Gestione standard degli errori
- Sicurezza a livello di messaggio
Document Formats: Office Open XML e OpenDocument
I moderni formati di documenti per office suite sono basati su XML:
Office Open XML (Microsoft)
I file .docx, .xlsx e .pptx sono in realtà archivi ZIP contenenti molteplici file XML che definiscono contenuto, stili, metadati e altre informazioni:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Hello World!</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
OpenDocument Format (ODF)
Utilizzato da LibreOffice, OpenOffice e altre suite office open source, segue principi simili:
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0">
<office:body>
<office:text>
<text:p>Hello World!</text:p>
</office:text>
</office:body>
</office:document-content>
Questi formati illustrano come XML eccella nella rappresentazione di documenti complessi con:
- Separazione tra contenuto e presentazione
- Supporto per metadati e riferimenti
- Estensibilità
- Interoperabilità tra diverse applicazioni
Configurazione di applicazioni e framework
Molti framework e applicazioni enterprise utilizzano XML per la configurazione:
Spring Framework
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.example.UserServiceImpl">
<property name="userRepository" ref="userRepository"/>
</bean>
<bean id="userRepository" class="com.example.UserRepositoryImpl">
<!-- configurazione -->
</bean>
</beans>
Apache Maven
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Apache Tomcat
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
</web-app>
Sebbene molti framework offrano ora alternative basate su annotazioni o file YAML/JSON, la configurazione XML rimane spesso supportata o addirittura preferita in contesti enterprise per:
- Separazione del codice dalla configurazione
- Possibilità di modificare la configurazione senza ricompilare
- Validazione attraverso schemi
- Supporto per commenti esplicativi
SVG: grafica vettoriale basata su XML
Scalable Vector Graphics (SVG) è un formato per la grafica vettoriale basato su XML:
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
SVG offre numerosi vantaggi:
- Grafica scalabile senza perdita di qualità
- Manipolabile via JavaScript e CSS
- Accessibile per screen reader
- Supportata nativamente dai browser moderni
La natura XML di SVG consente anche:
- Manipolazione programmatica del DOM
- Animazioni e interattività
- Integrazione con altri standard web
RSS e feed di syndication
RSS (Really Simple Syndication) e Atom sono formati basati su XML per la distribuzione di contenuti web:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Codegrind Blog</title>
<link>https://blog.codegrind.it</link>
<description>Blog di programmazione e tecnologia</description>
<item>
<title>I vari utilizzi di XML</title>
<link>https://blog.codegrind.it/xml-utilizzi</link>
<description>Scopri come XML definisce lo standard per lo scambio di dati...</description>
<pubDate>Wed, 05 Mar 2025 12:00:00 GMT</pubDate>
</item>
<!-- Altri articoli -->
</channel>
</rss>
Nonostante l'avvento di API JSON più moderne, RSS e Atom rimangono standard importanti per:
- Aggregazione di contenuti
- Notifiche di aggiornamenti
- Podcasting
- Compatibilità con reader e aggregatori esistenti
Tecnologie correlate nell'ecosistema XML
L'ecosistema XML include diverse tecnologie complementari che ne estendono le funzionalità:
XPath e XQuery: interrogazione dei dati XML
XPath è un linguaggio per navigare all'interno di documenti XML:
//book[author="Neal Stephenson"]/title
Questa espressione seleziona tutti gli elementi title all'interno di elementi book che hanno un elemento author con valore "Neal Stephenson".
XQuery estende XPath fornendo funzionalità simili a SQL per interrogare documenti XML:
for $b in doc("books.xml")//book
where $b/price < 30
order by $b/title
return $b/title
Questa query restituisce i titoli di tutti i libri con prezzo inferiore a 30, ordinati alfabeticamente.
XSLT: trasformazione di documenti XML
XSLT (eXtensible Stylesheet Language Transformations) permette di trasformare documenti XML in altri formati (XML, HTML, PDF, testo):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h1>Biblioteca</h1>
<table>
<tr>
<th>Titolo</th>
<th>Autore</th>
</tr>
<xsl:for-each select="biblioteca/libro">
<tr>
<td><xsl:value-of select="titolo"/></td>
<td><xsl:value-of select="autore"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT è particolarmente potente per:
- Generazione di report
- Conversione tra diversi formati XML
- Rendering di dati XML in formati leggibili
- Estrazione e riorganizzazione di dati
XML Schema (XSD): validazione avanzata
XML Schema offre capacità di validazione ben più avanzate rispetto a DTD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ordine">
<xs:complexType>
<xs:sequence>
<xs:element name="cliente" type="xs:string"/>
<xs:element name="prodotto" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="nome" type="xs:string"/>
<xs:element name="quantita" type="xs:positiveInteger"/>
<xs:element name="prezzo" type="xs:decimal"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="totale" type="xs:decimal"/>
</xs:sequence>
<xs:attribute name="data" type="xs:date"/>
</xs:complexType>
</xs:element>
</xs:schema>
XSD permette di definire:
- Tipi di dati specifici (date, numeri, pattern regex)
- Cardinalità degli elementi (minOccurs, maxOccurs)
- Relazioni complesse tra elementi
- Vincoli e restrizioni sui valori
XML vs JSON vs YAML: quando scegliere XML
Nel panorama attuale, gli sviluppatori hanno diverse opzioni per rappresentare dati strutturati. Ecco quando XML rappresenta ancora la scelta ottimale:
Punti di forza di XML
-
Strutture di dati complesse e gerarchiche XML eccelle nella rappresentazione di strutture profondamente annidate e documenti complessi.
-
Validazione rigorosa Con DTD, XML Schema, RelaxNG, XML offre meccanismi di validazione ben più potenti rispetto a JSON Schema o altri strumenti.
-
Namespace I namespace XML permettono di combinare vocabolari diversi senza conflitti, essenziale in ambienti enterprise.
-
Trasformazione dichiarativa XSLT offre un potente meccanismo dichiarativo per trasformare dati XML.
-
Misto di contenuto testuale e strutturato XML gestisce elegantemente il contenuto misto, dove testo e elementi strutturati sono combinati.
-
Standard consolidati Molti standard industriali e di settore sono definiti in XML.
Quando scegliere JSON
JSON è generalmente preferibile in questi scenari:
-
Frontend web e mobile Per JavaScript e applicazioni frontend, JSON offre parse e manipolazione nativa.
-
API REST API moderne tendono a preferire JSON per la sua concisione e facilità d'uso.
-
Strutture dati semplici Per dati semplici con strutture annidate limitate, JSON è più leggibile e meno verboso.
-
Performance critiche Parsing e serializzazione JSON sono generalmente più veloci rispetto a XML.
Quando scegliere YAML
YAML è spesso la scelta migliore per:
-
File di configurazione human-friendly La sintassi minimal lo rende ideale per file editati manualmente.
-
DevOps e Infrastructure as Code Strumenti come Docker, Kubernetes, Ansible prediligono YAML.
-
Dati con molti valori stringa YAML gestisce stringhe multi-riga meglio di JSON.
Conclusioni
XML, nonostante la concorrenza di formati più moderni come JSON e YAML, continua a svolgere un ruolo fondamentale nell'ecosistema tecnologico contemporaneo. La sua capacità di rappresentare strutture dati complesse, il supporto per una validazione rigorosa attraverso schemi, e l'integrazione con tecnologie correlate come XPath, XSLT e XQuery, lo rendono ancora oggi la scelta ottimale per numerose applicazioni.
Dal manifest di Android alle fatture elettroniche italiane, dai formati di documenti Office ai Web Services enterprise, XML dimostra la sua versatilità e durabilità. La sua natura autodescrittiva e la sua indipendenza dalla piattaforma continuano a renderlo un pilastro fondamentale per lo scambio di dati strutturati in contesti dove precisione, validazione e conformità agli standard sono prioritarie.
Per gli sviluppatori moderni, comprendere XML e il suo ecosistema rimane una competenza preziosa, che completa la conoscenza di formati più recenti come JSON e YAML. Ogni formato ha il suo ambito di applicazione ottimale, e un professionista completo dovrebbe saper scegliere lo strumento più adatto al contesto specifico.
Risorse e approfondimenti
Per approfondire la conoscenza di XML e delle tecnologie correlate, ecco alcune risorse utili:
- W3C XML Recommendation - La specifica ufficiale di XML
- XML Schema Reference - Documentazione su XML Schema
- XSLT 3.0 Specification - La specifica di XSLT
- XPath 3.1 Language - Documentazione su XPath
Per un approccio più pratico e immediato alla sintassi di XML, vi consiglio di guardare il mio XML Corso Completo su Youtube.