XML, come crearlo

Cos’è XML

XML, eXstensible Markup Language,  è un particolare linguaggio molto semplice per trasportare e memorizzare dati sotto forma file di testo. Come vedremo, è piuttosto semplice da realizzare ma decisamente scomodo da leggere o manipolare per un umano. Per i dati da visualizzare, XML deve funzionare in combinazione con un altro linguaggio di back-end o front-end come PHP o JavaScript. La struttura ad albero dei dati deve però essere nota a priori o sufficientemente autodescrittiva per consentire al programma che legge, ovvero fa il “parsing” dell’XML, sia in grado di ricreare un struttura dati opportuna. XML è il formato obbligatorio per far dialogare programmi o processi differenti all’interno di una tecnologia SOAP. Assieme a JSON, sta ricoprendo un ruolo fondamentale nella comunicazione asincrona tra applicazioni o richieste AJAX. Come JSON, basta un file di testo semplice con un qualsiasi editor per realizzarlo.

Perché XML?

La risposta alla domanda trova subito un’applicazione fondamentale e di attualità: la fatturazione elettronica? Come possono commercianti e imprenditori, tutti eterogenei tra loro, inviare le risultanze della fatturazione all’Agenzia delle Entrate? Occorre un formato standard con un banale file di testo, che possa essere facilmente realizzato, se non a mano, attraverso software discretamente semplici. La struttura gerarchica è definita a priori da un format della Agenzia delle Entrate in modo da uniformare le comunicazioni.

Tipi consentiti

In realtà XML non fa distinzione di tipo. Risultano a conti fatti tutte stringhe di testo che poi gestirà il lettore del file. L’unica accortezza è non usare i caratteri riservati &, “”, ‘ , <, > che devono essere sostituiti con l’opportuna codifica XML. (TO DO aggiungere tabella conversione)

Sintassi

La sintassi è molto semplice e richiede poche regole da ricordare. La prima fondamentale è inserire un tag che indica la versione ed eventuale codifica ascii.

<?xml version= "1.0" encoding="UTF-8"?>

A questo punto possiamo inserire una struttura più o meno annidata dove ogni tag si apre e si chiude rispettivamente con< … > e </ … > e in mezzo il dato descritto dal tag. Vediamo subito un esempio:

<?xml version= "1.0" encoding="UTF-8"?>
<persona>
    <id>1</id>
    <cf>CNTLRD82A02L103V</cf>
    <cognome>Centinaro</cognome>
    <nome>Alfredo</nome>
    <datadinascita>2-1-1982</datadinascita>
    <altezza>1.73</altezza>
    <indiririzzo>
        <via>via villa mosca</via>
        <civico>47b</civico>
        <cap>64100</cap>
        <comune>Teramo</comune>
    </indiririzzo>
</persona>

Namespace

In molti file XML, può comparire questa dicitura xmlns, che si riferisce ad un namespace. Spesso è indicato un URL ma non necessariamente deve puntare ad una risorsa fisica da qualche parte in rete. In genere si usa la dicitura per indicare un’informazione portante per riconoscere ed individuare la struttura gerarchica usata nel successivo xml.

<persona xmlns="http://www.alfredocentinaro.it/xml/persona/v1.0">

Di suo, il namespace servirebbe in realtà a suddividere elementi che presentano stesso nome ma magari sottostrutture differenti. Si usa un URL, o meglio un URI, per identificare il nome del namespace per prassi diffusa, ma non è obbligatorio. Un URI diciamo è comodo perché è un modo furbo di inserire più informazioni sullo xml, magari il nome del progetto, versione, autore ecc.

Lo schema XMLS

La complessità di alcuni XML sesso è tale da non essere sufficiente il codice xml che si autodescrive o una gerarchia calata dall’alto e comunicata alle parti software che manipolano il file xml. Il W3C ha riconosciuto uno schema che può essere allegato al file xml e che definisce una varietà di informazioni aggiuntive.

Lo scopo di un XML Schema è definire quindi la struttura ufficiale di un blocco di un file/documento xml. Poche e semplici cose vengono definite:

  • gli elementi ed attributi che possono esser enel documento xml
  • il numero ed ordine degli elementi figli
  • i tipi di dato di elementi ed attributi
  • i valori di default per taluni elementi o attributi

Vediamo un esempio potenziando il precedente. Creiamo allo scopo un file di testo .XSD

 <?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="persona">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="cognome" type="xs:string"/>
      <xs:element name="nome" type="xs:string"/>
      <xs:element name="datadinascita" type="xs:date"/>
      <xs:element name="altezza" type="xs:decimal"/>
      <xs:element name="colore" type="xs:string" default="rosso"/> 
      <xs:element name="telefono" type="xs:string" minOccurs="0" />
      <xs:element name="sesso">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="M" />
              <xs:enumeration value="F" />
              <xs:enumeration value="ND" />
            </xs:restriction>
          </xs:simpleType>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema> 

Gli schemi xml sono spesso sono salvati in file con estensione .XSD. XML Scema manda in pensione il DTD, analogo oggetto però troppo poco versatile per definire informazioni aggiuntive oltre la struttura.

La struttura e il formato XLST

XML e il suo schema sono documenti molto complessi da leggere per un umano. Diciamo che la funzione di graficare struttura e dati del documento spettano al software che riceve e manipola il documento XML. In realtà si può affiancare allo xml un foglio di stile che consente una visualizzazione spartana ma già più agevole dei dati xml.

Parser online

Possiamo realizzare un file XML con qualsiasi editor avanzata da Notepad++ a Visual Studio Code che ci aiuteranno ad evidenziare la sintassi. Se vogliamo invece una visualizzazione ad albero e uno strumento di debug possiamo ricorrere a tanti parser online. Ne segnalo un paio che hanno funzionalità aggiuntive interessanti di conversione tra XML e JSON ad esempio.

https://jsonformatter.org/xml-formatter

https://codebeautify.org/xmlviewer

https://www.freeformatter.com/xml-validator-xsd.html

Ultima modifica 3 Ottobre 2022