Do you speak XML?

Oramai è assodato: nella gestione dei nuovi archivi correnti è indispensabile conoscere l’XML. Il DPCM n.8/2015 pubblicato in Gazzetta Ufficiale il 12 gennaio non dà vie di fuga: gli archivisti dovranno confrontarsi con questo linguaggio di markup.

L’eXtensible Markup Language è un metalinguaggio che “consente di definire e controllare il significato degli elementi contenuti in un documento o in un testo” (Wikipedia). Forse non lo sapete, ma la maggior parte dei formati che utilizzate (.docx, .xslx, .pptx, .ods, .odp…) sono derivati dall’XML.

Figlio di W3C, partorito dopo la guerra dei browser, l’XML era stato progettato per svilupparsi nell’ambito del web. Ben presto si rivela un enfant prodige: può essere utilizzato in vari contesti, dalla descrizione di documenti alla rappresentazione di immagini, finanche allo scambio di informazioni tra sistemi diversi.

La sua versatilità ed interoperabilità ne ha decretato il successo.

LA SINTASSI DELL’XML

PREMESSA: non essendo una informatica, il mio modo di presentare alcuni elementi potrà sembrare impreciso e persino errato agli occhi degli esperti. Quindi chiedo scusa per eventuali errori. Il mio obiettivo è quello di condividere nozioni di base con persone che, come me, pur non essendo programmatori, si trovano ad affrontare la sfida del digitale.

Come ogni linguaggio, l’XML ha una propria sintassi; a formarla sono i tag (etichette) che contengono i parametri o le informazioni relative alla stringa che delimitano. Ad esempio per indicare il campo “autore” scriverò:

<autore> Stendhal </autore>

Dunque le etichette contengono l’informazione che vogliamo veicolare, hanno bisogno del tag di chiusura (che viene indicato dal segno / ) e seguono regole rigorosissime:

  • non possono contenere spazi (il tag < autore> è errato)
  • sono case sensitive (ciò vuol dire che il tag <AUTORE> non è equivalente al tag <autore>).

Potrei ora affidarmi al classico esempio della rubrica, ma preferisco utilizzare il codice XML di una scheda di xdams poiché è molto probabile che qualcuno di voi, almeno uno volta nella vita, si ritroverà davanti a questo:

<?xml version="1.0" encoding="ISO-8859-1"?>

<c audience="external" id="IT-xDams-aspe-ST0001-000025" level="file">
    <controlaccess>
        <persname role="Titolare">Melloni Gino</persname>
        <persname role="Giudice delegato">Cataldi Tommaso</persname>
        <persname role="Giudice">Giovanni degli Uberti</persname>
        <persname role="Curatore definitivo">Marchetti Enrico</persname>
        <persname role="Curatore provvisorio">Sabelli Felice</persname>
        <subject>Settore commerciale.</subject>
    </controlaccess>
    <descgrp encodinganalog="ISAD 3-3 content and structure area">
        <scopecontent encodinganalog="ISAD 3-3-1 scope and content">
            <list>
                <head>Altri allegati</head>
                <item>
                    <date>25 maggio 1932</date>
                    <genreform>sottofascicolo</genreform>
                    <unittitle>Stato dei creditori</unittitle>
                </item>
            </list>
            <p><![CDATA[<p style="text-align: justify;">Ditta di vulcanizzazione e riparazione pneumatici. Fallita il 24 ottobre 1929.</p>
<p style="text-align: justify;">Melloni Gino portava avanti l'azienda con il fratello e quando quest'ultimo dovette operarsi al petto inizarono i problemi: le spese per le cure, la mancanza di un aiutante e la concorrenza causarono il fallimento. I due fratelli chiusero il negozio e migrarono in cerca di lavoro.</p>]]></p>
        </scopecontent>
    </descgrp>
    <did>
        <physdesc encodinganalog="ISAD 3-1-5 extent and medium of the unit of description" label="container">
            <genreform>fascicolo</genreform>
            <physfacet type="medium">cartacea</physfacet>
        </physdesc>
        <physloc>ASTPE, Fallimenti, fasc.1</physloc>
        <unitid countrycode="IT" encodinganalog="ISAD 3-1-1 reference code"/>
        <unittitle encodinganalog="ISAD 3-1-2 title">
            <num type="ordinamento">1</num>Melloni Gino
            <unitdate encodinganalog="ISAD 3-1-3 date(s)" normal="19290101-19321231">1929 - 1932</unitdate>
        </unittitle>
    </did>
    <processinfo>
        <list>
            <item>
                <date>04/11/2014</date>
                <persname>aspe xDams - open source</persname>inserimento
            </item>
            <item>
                <date>18/11/2014</date>
                <persname>aspe xDams - open source</persname>modifica
            </item>
        </list>
        <note encodinganalog="ISAD 3-7-1 archivist note">
            <p>Compilatore: Martina Mancinelli.</p>
        </note>
    </processinfo>
</c>

Per ora non ci interessa andare a spulciare stringa per stringa tutto ciò che è contenuto in questo codice, lo utilizzeremo solo per fare alcune osservazioni.

xdamsinserimentodatiPrima di tutto va detto che è la scheda di un fascicolo della serie Procedure Fallimentari del Tribunale Civile e Penale di Pescara, un fondo a cui sto lavorando assieme a Diana, anche lei volontaria presso l’ASPe. Ci tengo a rassicurarvi: non lavoriamo sul codice, ma con la comoda interfaccia di xdams. Ciò non toglie che occorre conoscere ciò che c’è dietro l’interfaccia su cui si lavora.

Al primo colpo d’occhio ciò che si nota è la disposizione gerarchica degli elementi rappresentata dagli annidamenti. Un esempio di annidamento si può vedere tra la linea 12 e la 25, dove sotto alla stringa descgrp è annidato scopecontent a cui è a sua volta annidato list; e via dicendo. Come si può constatare, gli annidamenti sono facilmente individualizzabili dal rientro delle varie stringhe: questa distribuzione spaziale comunica in modo rapido il rapporto gerarchico degli elementi.

Nella prima stringa viene dichiarata la versione XML utilizzata (in questo caso la 1.0) e lo standard utilizzato per i caratteri (in questo caso ISO-8859-1, corrispondente al Latin1, il set di caratteri usato in Europa occidentale). Proprio perché è una dichiarazione e non un comando, questa stringa è delimitata da punti interrogativi.

A volte, dentro le parentesi angolari, troviamo anche elementi aggiuntivi che servono a descrivere il tag: gli attributi. Alla riga 5 accanto a persname (etichetta che indica il nome di persona che, assieme ad enti e luoghi, è una delle chiavi di accesso alla scheda) troviamo role="Titolare": questo è un attributo che viene dato al tag persname. Serve dunque a specificare che l’informazione che troveremo dentro la stringa, non solo è il nome di una persona ma è il nome del titolare del procedimento.

Adesso concentriamoci sul codice nel suo insieme. Quali sono gli elementi che ci fanno capire che è un documento ben formattato?

  • la presenza del prologo (?xml version="1.0" encoding="ISO-8859-1"?)
  • un unico elemento di radice (c)
  • tag bilanciati (ogni tag ha la sua chiusura ed è correttamente annidato).

VANTAGGI DELL’XML

Contrariamente all’HTML, l’XML non ha un numero o un tipo predefinito di tag, questo significa che è un linguaggio estremamente versatile:

  • favorisce l’interoperabilità poiché è un file di testo facilmente trasferibile ed elaborabile;
  • consente di occuparsi del contenuto e non della forma in quanto la rappresentazione delle informazioni può essere decisa in un secondo momento (può essere rappresentando in html, svg…).

Proprio per queste sue caratteristiche si è diffuso così capillarmente nel mondo archivistico. L’XML non solo consente la scelta di tag a seconda delle proprie necessità, ma permette di importare ed esportare dati da  un database a un altro! Un sogno per i migliaia di record di dati con cui si cimentano quotidianamente gli archivisti.

l’XSD

Si potrebbe osservare: ma se l’XML non ha regole rigide e posso inserire i tag che voglio, come si fa a garantire l’interoperabilità? Come fa un altro sistema con cui voglio comunicare o in cui voglio riversare i miei dati a sapere quali sono i criteri che ho seguito?

Per questo c’è l’XML Schema (XSD), un linguaggio di descrizione del contenuto XML: una specie di metalinguaggio del metalinguaggio. Tramite l’XSD possiamo indicare come deve essere compilata una stringa (se deve contenere caratteri alfabetici, alfanumerici, data…), per fare questo abbiamo a disposizione 19 tipi di dati primitivi (boolean, string, decimal, double, float, anyURI, QName, hexBinary, base64Binary, duration, date, time, dateTime, gYear, gYearMonth, gMonth, gMonthDay, gDay, e NOTATION) dai quali si possono generare nuovi tipi.

Quindi se dovessi provare a descrivere l’XML Schema delle chiavi d’accesso del nostro documento (quindi solo della sezione controlaccess che va dal rigo 4 al rigo 11), verrebbe fuori un codice strutturato approssimativamente così:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:element name=”controlaccess”/>
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name=”persona” type=”xs:string”/>
      <xsd:element name=”luogo” type=”xs:string”/>
      <xsd:element name=”ente” type=”xs:string”/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

Ma ritorneremo sull’XML Schema in futuro, quando affronteremo la conservazione del documento e del fascicolo digitale. Per ora basta avere una vaga idea di cosa sia e a cosa serva.


[1] World Wide Web Consortium, una comunità internazionale che si occupa di sviluppare standard per il web.
[2] Esempio che potete trovare sia su Wikipedia che sulla Guida all’XML di html.it.

Annunci

4 pensieri riguardo “Do you speak XML?

  1. Fino a qui ti ho seguito abbastanza:
    “per fare questo abbiamo a disposizione 19 tipi di dati primitivi”
    ma da qui in poi non si è capito più nulla

    "Mi piace"

    1. ahahah hai ragione, ma si chiamano così, non sapevo come altro definirli! tornerò sull’xsd in un nuovo post dedicato al fascicolo elettronico, sperando di riuscire a spiegarlo meglio 🙂

      "Mi piace"

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...