• Non ci sono risultati.

4.6 Virtual Resource

5.1.3 Sintassi dei dati

Come evidenziato in precedenza, ognuno dei nodi di cui `e formato un do- cumento IDN, costituisce un’entit`a atomica, ovvero pu`o essere considerato anche come un elemento a s´e stante; pertanto pu`o disporre di memorizzare il proprio contenuto (genericamente detto dati di livello applicativo) con la sintassi che il progettista ha ritenuto pi`u idonea alle finalit`a per le quali `e utilizzata.

La sintassi di un linguaggio formale specifica l’insieme di regole che i dati devono seguire per essere considerati conformi ad esso. Tali regole specifica- no come le sequenze di caratteri devono essere raggruppate a formare token e quali sono le sequenze permesse di tali token.

Tra i formati utilizzati allo stato dell’arte, si passa da alcuni, come i cosiddet- ti dati grezzi (o raw ), quale il testo semplice, per i quali non `e generalmente possibile individuare una sintassi, ad altri per quali `e possibile individuare una sintassi “blanda” – come i file CSV, nei quali generalmente la prima riga `e utilizzata per specificare i nomi delle colonne – ad altri ancora per i quali esistono sintassi ben determinate, come i cosiddetti linguaggi a markup (come HTML, XML, ecc. . . ).

All’interno di quest’ultima famiglia rientra XML (acronimo di eXtensibile Markup Language), realizzato da un apposito workgroup del W3C [Wor97] con il tentativo di semplificare il preesistente SGML 4. La caratteristica principale di XML (messa in evidenza dal suo nome) `e quella di essere un linguaggio estensibile, in quanto permette di creare tag personalizzabili 5; pertanto risulta pi`u corretto affermare che XML `e un metalinguaggio. La definizione di un nuovo linguaggio (e della relativa sintassi) facendo ricorso all’XML pu`o avvenire in due modi diversi:

• attraverso un Document Type Definition (o DTD), uno strumento derivato dall’SGML;

• attraverso un XML Schema; questo `e l’unico linguaggio di descrizione di un XML validato dal W3C (la versione 1.0 in [FW04, TBMM04, BM04b], successivamente la versione 1.1 in [GSMT+12, PGM+12]) e che lo stesso consorzio consiglia di adottare al posto del DTD.

Entrambi gli strumenti citati rendono possibile definire la grammatica di un documento XML, ovvero gli elementi che sono leciti al suo interno, speci- ficando la struttura di ognuno, ovvero cosa possono contenere, l’ordine, la quantit`a di elementi che possono comparire e se sono opzionali o obbligatori. Sia il DTD sia l’XML Schema possono essere utilizzati da un apposito pro- gramma, detto parser, per verificare la correttezza di un documento XML (operazione che prende il nome di validazione).

Confrontando le due tecnologie l’utilizzo di XML Schema presenta alcuni vantaggi rispetto all’utilizzo del DTD; in particolare:

• al contrario del DTD, gli XML Schema sono veri e propri documenti XML utilizzati per definire la grammatica di altri XML e memorizzati in file con estensione .xsd (XML Schema Definition). Diventa pertanto possibile riutilizzare gli strumenti a disposizione per tale linguaggio;

4

Lo Standard Generalized Markup Language (SGML) `e un metalinguaggio definito

come standard ISO [ISO86] con lo scopo di definire linguaggi da utilizzare per la stesura di documenti in forma leggibile da computer (machine readable).

5

5.1 La necessit`a di individuare regole per i dati 105

• un DTD non consente la definizione del tipo di dati, diversamente da un XML Schema. Risulta quindi impossibile avere un controllo accurato sul contenuto degli elementi di un documento XML o sul valore degli attributi;

• un documento XML pu`o essere associato un solo DTD, mentre attra- verso l’uso di XML Schema `e possibile definire degli ambiti di validit`a di una grammatica (detti namespace), i quali consentono l’utilizzo di tag definiti in schemi diversi all’interno di un medesimo documento XML.

Il principale svantaggio dato dall’uso dell’XML Schema `e invece la sua maggiore complessit`a rispetto al DTD.

Si consideri ad esempio il file XML presentato nel listato 5.1; si pu`o affermare con facilit`a che esso `e costituito da un insieme di tag diversi, organizzati in una struttura ad albero.

Listato 5.1: Esempio di documento XML.

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

<collezione> <libro>

<autore>John Ronald Reuel Tolkien</autore> <titolo>The Lord of the Rings</titolo> <anno>1954</anno>

<genere>Fantasy</genere> </libro>

<libro>

<autore>Clive Staples Lewis</autore> <titolo>The Chronicles of Narnia</titolo> <anno>1956</anno>

</libro> </collezione>

Ognuno di tali tag:

• deve trovarsi in una ben precisa posizione (ad esempio il tag <autore> deve necessariamente trovarsi all’interno del tag <libro>);

• pu`o essere presente con molteplicit`a diverse (nell’esempio considerato, si pu`o ipotizzare che il tag <titolo> sia necessariamente – e al pi`u una sola volta – all’interno del tag <libro>, mentre `e evidente che all’interno del tag <collezione> pu`o trovare posto un numero indefinito di tag <libro>, cos`ı come `e evidente che la presenza del tag <genere> all’interno del tag <libro> `e opzionale);

• deve contenere un certo tipo di dati (nell’esempio considerato, il tag <anno> deve contenere un numero, mentre il tag <autore> deve contenere una stringa).

Tutte queste osservazioni possono essere opportunamente formalizzate in un insieme ben definito di regole all’interno di un XML Schema come quello presentato nel listato 5.2.

Listato 5.2: Esempio di XML Schema.

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="collezione">

<xs:complexType> <xs:sequence>

<xs:element name="libro" maxOccurs="unbounded"> <xs:complexType>

<xs:all>

<xs:element name="autore" type="xs:string"/> <xs:element name="titolo" type="xs:string"/> <xs:element name="anno" type="xs:integer"/>

<xs:element name="genere" type="xs:string" minOccurs="0"/> <xs:all> <xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>