Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Il linguaggio XML
Corso introduttivo
Progettato e realizzato dall'Istituto per la documentazione giuridica del CNR di Firenze
per conto del Ministero della Giustizia
(contratto pos. SIA08.11.SAC29.S.5/2000-A)
0. Avvertenze
1. Fondamenti di XML
1. Che cos'è XML
2. XML vs HTML
3. Benefici
4. Sommario
5. Esercizi
2. Sintassi di XML
1. Elemento
2. Attributo
3. Albero XML
4. Documento XML
5. Documento "ben formato"
6. Sommario
7. Esercizi
3. DTD
1. Definizione
2. Dichiarazione
3. Elemento
4. Attributo
5. Elemento vs Attributo
6. Entità
7. Esempio di struttura
8. Esempio di documento
9. Sommario
10. Esercizi
4. Fogli di stile
1. Introduzione
2. Fogli di stile CSS
3. Fogli di stile XSL
4. Sommario
5. Esercizi
6. DOM
1. Fondamenti
2. Parser XML
3. Errori del parser
4. Attraversamento dell'albero XML
5. L'oggetto node
6. L'oggetto document
7. L'oggetto element
8. Altri oggetti
9. Sommario
10. 10. Esercizi
9. Altri argomenti
1. Query language
Avvertenze 3
Per consultare le lezioni del corso si possono utilizzare le voci visibili nella
finestra indice oppure attivare i pulsanti
All'inizio di ogni lezione vengono indicati i concetti che verranno esposti e alla
fine viene presentato un sommario delle nozioni illustrate e si potrà verificare
l'apprendimento dei concetti esposti attraverso dei test di autoverifica. La
parte sui test di ogni lezione è completata da un report in cui sono riassunti i
risultati ottenuti, compresi del punteggio e del tempo impiegato per fornire le
risposte.
In ogni pagina di test è possibile verificare immediatamente la correttezza
delle risposte e visualizzare le informazioni di ritorno (feedback) cliccando
sull'immagine Verifica e Feedback posta a fine pagina.
In alcune pagine è stata prevista un'animazione, segnalata attraverso
altoparlante .
1. Fondamenti di XML
XML è l'acronimo di eXtensible Markup Language e significa linguaggio di marcatura estensibile. Iniziamo quindi a
spiegare il significato di linguaggio di marcatura e subito dopo descriveremo il concetto di estensibile.
● XML è un linguaggio di marcatura
XML è un linguaggio di marcatura che deriva dal linguaggio SGML (Standard Generalized Markup Language).
Entrambi sono linguaggi di marcatura testuale, ossia inseriscono all'interno del documento delle etichette o marcature
(tag), che permettono di descrivere il contenuto del documento stesso. In questo modo un'applicazione, ad esempio
un motore di ricerca , è in grado di leggere le informazioni contenute nel documento e di elaborarle in maniera
efficiente e corretta. Ecco l'esempio di un documento, che descrive gli estremi di una legge, in formato XML:
<?xml version="1.0"?>
<Legge>
<Intestazione>
<DataLegge>7 dicembre 2000</DataLegge>
<NumeroLegge>383</NumeroLegge>
<TitoloLegge>Disciplina delle associazioni di promozione
sociale</TitoloLegge>
</Intestazione>
</Legge>
<?xml version="1.0"?>
<Legge>
<Intestazione>
<DataLegge>7 dicembre 2000</DataLegge>
<NumeroLegge>383</NumeroLegge>
<TitoloLegge>Disciplina delle associazioni di promozione
sociale</TitoloLegge>
</Intestazione>
</Legge>
le marcature indicano in maniera non ambigua il significato di ciascun dato, per cui un'applicazione è in grado di
estrarre correttamente tutte le informazioni contenute nel documento senza incorrere in errori interpretativi.
<?xml version="1.0"?>
<Articolo Num="1">
<Rubrica>Finalità e oggetto della legge</Rubrica>
<Comma Num="1" >La Repubblica riconosce il valore...</Comma>
</Articolo>
non è contenuta alcuna istruzione finalizzata all'elaborazione dei dati; si tratta di pura informazione confezionata nelle
marcature XML. Occorre utilizzare un'applicazione specifica per inviare, ricevere o visualizzare il documento XML. Le
marcature, evidenziando la semantica delle informazioni contenute in un documento, rendono semplice la
progettazione e la realizzazione di applicazioni in grado di elaborare i dati.
● XML è estensibile, è un metalinguaggio nel senso che permette di definire altri linguaggi di
marcatura (si veda, ad esempio, il linguaggio Wireless Markup Language usato per le
connessioni senza cavo)
● HTML non è estensibile
● XML mantiene separate la struttura del documento dalle regole per la sua visualizzazione
● HTML usa elementi per la struttura insieme ad elementi per la visualizzazione
Esaminiamo le versioni brevi, nei formati HTML e XML, di un documento estratto da una legge, per
evidenziare, con maggior enfasi, le differenze fra i due linguaggi di marcatura.
Aprendo con un browser il documento in formato HTML chiunque è in grado di capire che si tratta di
un articolo di una legge; ma se osserviamo il documento come appare nel suo formato HTML
originale ci rendiamo subito conto del fatto che, se volessimo progettare, ad esempio, un algoritmo
generale per l'estrazione automatica del primo comma di un articolo, questo non sarebbe possibile o
almeno potremmo sempre trovare un documento in grado di far fallire l'algoritmo . Invece sullo
stesso documento in formato XML sarebbe facile progettare un algoritmo per l'estrazione del primo
comma in quanto grazie alle marcature un computer sarebbe in grado di riconoscere tutte le parti del
documento e le relazioni di ognuna di queste con le altre.
● Con XML è possibile condividere e scambiare dati in modo indipendente dall'hardware e dal
software
Poiché i dati XML sono memorizzati in formato testuale piatto, ossia senza caratteri speciali
aggiuntivi, XML fornisce un modo di condividere e scambiare i dati indipendente dal sistema
operativo (Mac, Windows, UNIX) e dal software.
Attualmente, i sistemi di database contengono dati in formati incompatibili fra di loro. Fino ad
oggi, le società di software hanno investito molte risorse nello studio e nella realizzazione di
programmi per lo scambio di dati su Internet fra i diversi sistemi. La conversione in XML riduce
fortemente la complessità dei programmi e crea documenti che possono essere letti da molte
applicazioni di tipo diverso.
I documenti basati sull'XML possono essere utilizzati dal Web client elaborando i dati che vi sono
contenuti in differenti processi software non predeterminati. Quindi è possibile, per esempio,
sviluppare applicazioni che richiedono al Web client di presentare viste diverse degli stessi dati.
Vero
Falso
2. XML è stato progettato in modo da
rendere più semplice la realizzazione di motori di ricerca su Internet
3. Nel linguaggio HTML si possono usare solo elementi appartenenti ad un determinato insieme, in
XML invece l'autore inventa gli elementi più opportuni per descrivere i propri documenti. Per questa
caratteristica si dice che il linguaggio XML è
Vero
Falso
2. Sintassi di XML
Un elemento XML è l'insieme di un tag di apertura, un tag di chiusura e dei dati compresi fra i due tag.
I tag sono sempre delimitati da parentesi angolate; i dati all'interno dei tag costituiscono il valore dell'elemento.
Esempio:
Alcuni elementi XML possono essere vuoti, cioè privi di valore; in questo caso si possono usare le seguenti due
codifiche alternative ed equivalenti:
a: <DataFineVigenza></DataFineVigenza>
b: <DataFineVigenza/>
Gli elementi vuoti hanno caratteristiche peculiari, che verranno evidenziate più avanti nel corso.
<p>Questo è un paragrafo.
<b>Questo è un testo in grassetto.
<Articolo>
<Comma>1. ......... </Comma>
</Articolo>
In XML l'ordine di chiusura dei tag deve essere inverso rispetto all'ordine di apertura; il successivo è un esempio
errato di uso della sintassi degli elementi:
● Caratteri riservati
Molti caratteri fanno parte della struttura sintattica di XML e non vengono interpretati correttamente nel caso in cui
siano direttamente inseriti all'interno di un documento. Se sorge la necessità di utilizzare uno di questi caratteri
riservati, occorre utilizzare una speciale sequenza di caratteri, detta entità nella terminologia di XML.
● Definizione
Viene utilizzato un attributo per aggiungere una caratteristica o una proprietà ad un elemento.
Un attributo è una coppia nome-valore, separata da un segno di uguale (=), che può essere presente
all'interno del tag di apertura di un elemento, dopo il nome dell'elemento stesso. Un elemento può
contenere uno o più attributi.
● Sintassi dell'attributo
In XML, il valore di un attributo deve essere sempre racchiuso fra le doppie virgolette (").
<Articolo Num="2">
<Comma TipoDisposizione="Definizione" Num="1">
Sono considerate associazioni di promozione sociale le associazioni riconosciute ...
</Comma>
</Articolo>
Ogni attributo è sempre associato ad un elemento, non ha vita autonoma. Inoltre, lo stesso attributo
può ricorrere anche in più elementi.
Ogni documento XML deve contenere un solo elemento radice, cioè un elemento che racchiude tutti
gli altri elementi secondo una struttura di relazione padre-figlio, cioé strettamente gerarchica.
L'elemento radice è il primo elemento di un documento XML.
Le relazioni gerarchiche esistenti fra i vari elementi danno vita al cosiddetto albero XML,
rappresentato nella colonna destra (versione grafica) della tabella sottostante.
versione testuale versione grafica
<Legge>
...
<TitoloLegge>...</TitoloLegge>
<Articolato>
<Capo Num="I">
<Articolo Num="1">
<Rubrica></Rubrica>
<Comma Num="1"
>...</Comma>
<Comma Num="2"
>...</Comma>
...
</Articolo>
</Capo>
...
</Articolato>
...
</Legge>
La prima riga di un documento XML è una dichiarazione che definisce la versione XML del documento e deve essere
sempre presente.
<?xml version="1.0"?>
<Legge>
...
<TitoloLegge>Disciplina delle associazioni di promozione sociale</TitoloLegge>
<Articolato>
<Capo Num="I">
<Rubrica>DISPOSIZIONI GENERALI</Rubrica>
<Articolo Num="1">
<Rubrica>Finalità e oggetto della legge</Rubrica>
<Comma Num="1" >La Repubblica riconosce il valore sociale...</Comma>
...
</Legge>
Sempre nella stessa dichiarazione può essere specificato l'insieme (set) di caratteri che si desidera includere
all'interno dei propri documenti. Il set di caratteri usato, nel caso in cui non venga specificato diversamente, è
UNICODE (UTF-8), una sorta di ASCII esteso.
Un altro set di caratteri utilizzato è il LATIN (ISO-8859-1). In questo caso la prima linea di un documento diventa:
Un documento XML ben formato (well formed) è un documento conforme alle regole di sintassi descritte alle pagine
precedenti.
● Tag di apertura e di chiusura sempre presenti e uguali, nei caratteri maiuscoli e minuscoli
<Articolo Num="1">
<Rubrica>Finalità e oggetto della legge</Rubrica>
<Comma Num="1" >La Repubblica riconosce il valore sociale...</Comma>
</Articolo>
● Elemento radice sempre presente
<Legge>
...
</Legge>
<Articolo Num="1">
2. Le affermazioni seguenti descrivono alcune caratteristiche della sintassi degli elementi XML
essere racchiusi tra doppie virgolette solo se contengono caratteri speciali, come gli spazi bianchi
è sempre vuota
è sempre un commento
5. La seguente dichiarazione
Vero
Falso
8. I browser web quando aprono un documento XML segnalano un errore se il documento non è ben
formato
Vero
Falso
3. DTD - Definizione
Ciò ha portato alla necessità di definire delle regole grammaticali, o vincoli, alle quali gli elementi
devono attenersi.
Queste regole grammaticali sono definite nelle specifiche XML e sono codificate nel Document Type
Definition (DTD).
Le regole grammaticali o vincoli specificano:
● qual'è l'insieme degli elementi e degli attributi che si possono usare nel documento XML
Quando un documento XML è ben formato e rispetta le regole del DTD a cui si riferisce si dice che è
un documento XML valido.
3. DTD - Dichiarazione (1 di 2)
In un documento XML si può specificare il DTD in modo esplicito (DTD interno) o con un riferimento ad un documento
distinto (DTD esterno).
3. DTD - Dichiarazione (2 di 2)
3. DTD - Elemento (1 di 4)
In un DTD gli elementi del documento XML sono definiti tramite una dichiarazione di elemento che può assumere tre
forme.
● Prima forma
<!ELEMENT NomeElemento (#PCDATA)>
Questa è la forma più semplice in cui si dichiara che un elemento può contenere come valore una qualsiasi stringa di
testo; ad esempio:
...
<Rubrica>DISPOSIZIONI GENERALI</Rubrica>
...
3. DTD - Elemento (2 di 4)
● Seconda forma
<!ELEMENT NomeElemento EMPTY>
Questa è la forma con la quale si dichiara che un elemento è privo di valore. In questo caso all'elemento sono sempre
associati uno o più attributi:
...
<Numero Valore="1"/ >
...
3. DTD - Elemento (3 di 4)
● Terza forma
<!ELEMENT NomeElemento (ElementoFiglio1, ElementoFiglio2, ...)>
Questa è la forma a contenitore in cui si dichiara che un elemento è composto da sottoelementi (figli) con i quali
s'instaura una stretta gerarchia del tipo padre-figlio.
<Legge>
<TitoloLegge>Disciplina delle associazioni di promozione sociale</TitoloLegge>
<Articolato>
...
</Articolato>
</Legge>
3. DTD - Elemento (4 di 4)
3. DTD - Attributo (1 di 2)
● il tipo di attributi
● l'eventuale valore assunto nel caso in cui non venga esplicitamente assegnato un valore (valore
di default)
Una dichiarazione di attributo viene espressa secondo la seguente sintassi:
<!ATTLIST NomeElemento
NomeAttributo1 TipoAttributo1 ValoreAttributo1
NomeAttributo2 TipoAttributo2 ValoreAttributo2
...
NomeAttributoN TipoAttributoN ValoreAttributoN >
3. DTD - Attributo (2 di 2)
Un DTD può essere costruito utilizzando soltanto gli elementi oppure anche gli attributi. Non esiste
una regola generale per scegliere l'una o l'altra soluzione: la scelta dipende dal contesto che si sta
formalizzando.
L'uso degli attributi può comportare alcuni problemi:
● gli attributi non possono contenere valori multipli
● gli attributi non possono essere vincolati da legami gerarchici fra di loro
3. DTD - Entità (1 di 2)
Le entità sono utilizzate per definire una sola volta parti del documento XML che si ripetono più volte, oppure per
rendere più leggibile un DTD.
Prima di utilizzare un'entità, questa deve essere dichiarata con la seguente sintassi:
L'effetto che si otterrà è quello d'inserire il valore dell'entità là dove l'entità stessa è stata usata.
3. DTD - Entità (2 di 2)
Le entità possono anche essere dichiarate in un documento separato al quale si fa riferimento nel documento
originale, in tal caso si parla di entità esterne.
L'effetto che si otterrà è quello di inserire il contenuto del documento "NomeFileEntità" là dove l'entità esterna è stata
richiamata.
Come esempio di documento si può visualizzare un estratto di documento normativo riguardante due
commi di un articolo della legge 7 dicembre 2000, n. 383 sulla "Disciplina delle associazioni di
promozione sociale".
3. DTD - Sommario
2. Il DTD di un documento XML viene specificato utilizzando la sintassi del linguaggio XML
Vero
Falso
3. La sintassi per la specifica di un elemento all'interno di un DTD può assumere una delle seguenti
forme
Vero
Falso
5. Per specificare in un DTD di documenti normativi che un articolo è costituito da uno o più commi si
usa la seguente sintassi
<!ELEMENT Articolo(Comma*)>
<!ELEMENT Articolo(Comma?)>
<!ELEMENT Articolo(Comma+)>
<!ELEMENT Articolo(Comma|Rubrica)*>
<!ATTLIST Articolo Numero CDATA #REQUIRED> implica che Numero è un attributo dell'elemento
Articolo ed è obbligatorio
Vero
Falso
8. Un documento XML che è conforme alle regole del proprio DTD è detto valido. Sul controllo di
validità per i documenti XML si può affermare che:
I programmi per la creazione di documenti XML, ossia gli editori XML, controllano la validità del
documento che si sta componendo
4. Fogli di stile
Un foglio di stile è un documento separato che contiene regole di formattazione e visualizzazione per un documento
XML o HTML.
● Quale è il vantaggio di separare lo stile dai contenuti?
Un foglio di stile può essere utilizzato per controllare molti documenti contemporaneamente e quindi permette di
applicare modifiche di formattazione in modo veloce ed accurato intervenendo soltanto nel documento che contiene le
regole di visualizzazione.
In un foglio di stile sono specificate tutte le regole di formattazione che verranno applicate ai documenti di un intero
sito Web.
Nella gestione di un sito Web complesso, ad esempio, è possibile personalizzare i punti degli elenchi, o impostare
diverse dimensioni di carattere semplicemente modificando il foglio di stile invece che tutte le pagine del sito.
● Sintassi CSS
La sintassi dei fogli di stile CSS è costituita da tre parti: un selettore (tag), una proprietà e un valore:
Se un valore è costituito da più di una parola, deve essere racchiuso fra doppi apici:
● Raggruppamento
I selettori possono essere raggruppati fra di loro, separandoli con una virgola. Ad esempio, sempre per un documento
HTML, possiamo scrivere:
mentre qui sotto viene ilustrato come usare l'attributo class nel documento:
<p class="right">Questo è un paragrafo. Il testo in questo paragrafo sarà allineato a destra.</p>
<p class="center">Questo è un paragrafo. Il testo in questo paragrafo sarà centrato.</p>
● L'attributo id
Con l'attributo id si può definire uno stile unico da usare con più elementi.
Di seguito viene indicata la riga per la definizione del foglio di stile:
Ecco un esempio di estratto di documento XML, con la relativa resa a video tramite l'ausilio di un foglio di stile
CSS.
<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet href="esempio0402.css" type="text/css" ?>
<Legge>
<Intestazione>
<TipoLegge>Legge</TipoLegge>
<DataLegge>7 dicembre 2000</DataLegge>
<NumLegge>383</NumLegge>
<TitoloLegge>Disciplina delle associazioni di promozione sociale</TitoloLegge>
</Intestazione>
<Articolato>
<Capo>
<Num>Capo I<Num>
<Rubrica>DISPOSIZIONI GENERALI</Rubrica>
<Articolo>
<Num>Art. 1</Num>
<Rubrica>Finalità e oggetto della legge</Rubrica>
<Comma>
<Num>1</Num>
<Paragrafo><Testo>La Repubblica riconosce il valore sociale dell'associazionismo liberamente
costituito e delle sue molteplici attività come espressione di partecipazione, solidarietà e pluralismo;
ne promuove lo sviluppo in tutte le sue articolazioni territoriali, nella salvaguardia della sua
autonomia; favorisce il suo apporto originale al conseguimento di finalità di carattere sociale, civile,
culturale e di ricerca etica e spirituale.</Testo></Paragrafo>
</Comma>
</Articolo>
</Capo>
</Legge>
● Fondamenti
I fogli di stile XSL offrono lo stesso livello di formattazione e di flessibilità dei fogli di stile CSS, ma utilizzano metodi
diversi. XSL consiste di due parti:
● XSLT un linguaggio per la trasformazione di documenti XML
● XSL FO (Formatting Object) un linguaggio per la formattazione di documenti XML
Poiché un foglio di stile XSL è a sua volta un documento XML, deve iniziare con la dichiarazione <?xml
version="1.0"?>. Inoltre conterrà in sequenza le seguenti due righe:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
La prima definisce l'inizio del foglio di stile, mentre la seconda definisce l'inizio di un modello (template), che individua
la parte di documento XML a cui applicare le regole di trasformazione. Tutti i tag che fanno parte di un documento XSL
iniziano con il suffisso "xsl:" e sono detti direttive.
● Modello (template)
XSL usa uno o più template per individuare un elemento o un gruppo di elementi del documento XML, per definire il
documento di uscita, attraverso la seguente sintassi
<xsl:template match="valore">
che permette di associare il template specificato con un elemento XML (specificando il valore "/" si associa il template
all'intero documento XML).
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE> ... </TITLE>
</HEAD>
<BODY>
...
</xsl:template>
</xsl:stylesheet>
● <xsl:apply-templates>
Un tag molto usato è <xsl:apply-templates />; ad esempio, con il modello abbinato alla radice si può scrivere:
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
Il tag <xsl:apply-templates/> indica al parser di continuare a scandire il documento XSL alla ricerca di altri modelli
da applicare ai nodi sottostanti, ovvero i nodi figli.
● <xsl:value-of>
La direttiva XSL più importante per l'estrazione dei dati da un file XML è la direttiva xsl:value-of. Una volta che tale
direttiva è applicata ad un certo nodo, se questo contiene altri nodi, il parser li esplicita comunque restituendone il
contenuto, separandolo con spazi. Anche la direttiva xsl:value-of è in grado di utilizzare i template per permetterci di
specificare, in modo più preciso, quali dati vogliamo estrarre attraverso l'attributo non obbligatorio select.
Questa sintassi viene usata per selezionare gli elementi del documento XML da sottoporre alla trasformazione XSL. Ad
esempio:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE><xsl:value-of select="Legge/TitoloLegge"/></TITLE>
</HEAD>
<BODY>
...
</xsl:template>
</xsl:stylesheet>
● <xsl:for-each select="condizione">
Questa direttiva viene usata per selezionare ogni elemento del documento XML che verifica la condizione specificata
dalla select.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE><xsl:value-of select="Legge/TitoloLegge"/></TITLE>
</HEAD>
<BODY>
...
<xsl:for-each select="Legge/Articolato/Articolo">
<p align="center"><B><font color="#008080">Art. <xsl:value-of select="Num"/><BR/>
<xsl:value-of select="Rubrica"/></font></B></p>
...
</xsl:for-each>
...
</xsl:template>
</xsl:stylesheet>
<xsl:template match="/">
<!--Apply template to everything starting from the root node-->
<HTML>
<HEAD>
<TITLE>Legge n. <xsl:value-of select="Legge/Intestazione/@NumeroLegge"/> del <xsl:value-of
select="Legge/Intestazione/Data"/></TITLE>
</HEAD>
<BODY>
Nella tabella seguente vengono indicati i principali elementi XSL che possono essere specificati:
Elemento XSL Descrizione
xsl:apply-templates Indica all’elaboratore XSL di cercare il modello corretto da
applicare, in base al template specificato.
xsl:choose Consente di eseguire test condizionali. Questo elemento viene
utilizzato in combinazione con gli elementi xsl:otherwise e
xsl:when.
xsl:element Genera un elemento nel documento di uscita con il nome
specificato.
xsl:for-each Applica lo stesso modello a più nodi del documento.
xsl:if Consente test condizionali in un modello.
xsl:node-name Inserisce il nome del nodo corrente nel documento di uscita,
come stringa di testo.
xsl:otherwise Consente di eseguire test condizionali. Questo elemento viene
utilizzato in combinazione con gli elementi xsl:choose e
xsl:when.
xsl:stylesheet Definisce l’insieme di modelli che vengono applicati alla
struttura del documento di origine per generare il documento di
output.
xsl:template Definisce un modello per l’output basato su un template
specifico.
xsl:value-of Valuta un template XSL specificato nell’attributo select e
restituisce il valore del nodo identificato come testo, che verrà
poi inserito nel modello.
xsl:when Consente di eseguire test condizionali. Questo elemento viene
utilizzato in combinazione con gli elementi xsl:choose e
xsl:otherwise.
Ecco un esempio di estratto di documento XML, con la relativa resa a video tramite l'ausilio di un foglio di stile XSL.
1. XML mantiene separate la struttura del documento dalle regole per la sua visualizzazione, quindi si
può affermare che:
questo è un punto di forza perché si possono filtrare i dati di un documento XML e inviare
all'applicazione che lo richiede solo i dati necessari e non tutti
2. I fogli di stile CSS e XSL sono equivalenti come flessibilità e potenza nel trattamento dei
documenti XML
Vero
Falso
4. I fogli di stile XSL permettono di trasformare un documento XML in un documento HTML oppure in
un altro documento XML
Vero
Falso
5. XSL usa uno o più per individuare un elemento o un gruppo di elementi del
documento XML di origine e per definire il documento XML di uscita
6. Con un foglio di stile XSL è possibile creare, a partire da un documento XML, un altro documento
XML ordinato secondo un certo elemento del documento originale
Vero
Falso
8. Attraverso un foglio di stile CSS che contenga la seguente sintassi delle classi
per ottenere il colore rosso come sfondo ad una pagina si deve scrivere:
<BODY BGCOLOR=body.red>
<BODY red>
<BODY class=bodyRed>
<BODY background=red>
5. XLL: Fondamenti
XML è in grado di elaborare in maniera più efficace i collegamenti (link) tra i documenti sul Web, tramite
un'applicazione denominata XLink (XML Linking Language o XLL) e tramite un meccanismo che consente
collegamenti a strutture interne di un documento XML, denominato XPointer.
I collegamenti XML dovrebbero essere più opportunamente considerati delle risorse di connessione. Ciò significa che
l'XLink è in grado di fornire il collegamento a qualunque risorsa raggiungibile tramite un localizzatore nell’elemento di
collegamento. XLink fornisce una sintassi sofisticata per la definizione degli elementi e del comportamento dei
collegamenti, come, ad esempio, la capacità per un collegamento di funzionare in più direzioni.
Come nell’HTML, un collegamento XML semplice ha un solo identificatore di risorsa, o localizzatore. Il localizzatore, ad
esempio l’attributo HREF nell’elemento Anchor (<A...>), contiene i dati relativi al collegamento. Nell’XLink, tutte le
informazioni sul localizzatore sono contenute all’interno dell’elemento di collegamento. Pertanto, l’applicazione di
elaborazione non avrà bisogno di recuperare altre informazioni sul localizzatore.
La creazione di un elemento di collegamento semplice nell’XML comporta maggiori difficoltà rispetto alla creazione di
un elemento Anchor e all’assegnazione di un valore HREF. XML è un metalinguaggio, pertanto la creazione di un
nuovo elemento che possa essere utilizzato in un documento richiede la dichiarazione dell’elemento stesso e di tutti i
relativi attributi. Gli sviluppatori di XLink hanno riservato un nome di attributo per riconoscere un elemento
contenente quell'attributo come elemento di collegamento. Il nome dell'attributo è xlink:type. In un documento XML è
possibile definire un elemento <Riferimento> che conterrà una risorsa di collegamento semplice:
</Articolo>
</Capo>
</Legge>
dove (*) è il collegamento alla risorsa articolo 2 della Costituzione.
Il codice è simile alla dichiarazione del collegamento semplice, ma in questo caso l’attributo xlink:type contiene il
valore extended anziché simple, poiché si tratta di un collegamento esteso, e non vi sono attributi xlink:href dichiarati,
in quanto con i collegamenti estesi i localizzatori devono essere contenuti in un insieme separato di elementi. Questi
elementi vengono identificati come localizzatori. L’utilizzo di questo metodo per la definizione dei localizzatori consente
di specificare più localizzatori per un solo elemento di collegamento. Non diversamente da altri elementi, anche il
localizzatore deve essere dichiarato.
L’attributo xlink:type deve avere valore locator per identificare questo elemento come localizzatore XLink; inoltre deve
essere specificato l’attributo xlink:href.
5. XLL: XPointer (1 di 2)
Un altro linguaggio basato sull’XML è l’XPointer che consente di ottenere collegamenti ancora più precisi all’interno di
documenti XML.
L’obiettivo principale di XPointer è quello di fornire un metodo d'indirizzamento alla struttura interna di un documento
XML. Nelle lezioni precedenti, abbiamo visto che l'unico modo per poter referenziare un elemento specifico di un
documento è quello di associare un attributo di tipo ID all'elemento stesso. Il linguaggio XPointer è stato sviluppato in
modo da fare riferimento alle strutture interne di un documento, sia che includano sia che non includano attributi ID.
L'azione di XPointer opera sugli elementi e sulle strutture che costituiscono il documento XML. Un elemento XPointer
contiene una serie di termini di localizzazione che specifica una posizione nella struttura ad albero del documento.
I termini di localizzazione utilizzano la seguente sintassi:
HREF="uri#Xpointer"
HREF="uri|Xpointer"
Utilizzando il simbolo # si indica che la parte client deve elaborare la connessione; mentre utilizzando il | il
meccanismo della connessione rimane aperto e quindi il collegamento può essere gestito dal server .
5. XLL: XPointer (2 di 2)
Ogni termine di localizzazione utilizza una parola chiave e può contenere degli argomenti. La parola chiave specifica
l’origine di localizzazione, ad esempio Root o Id, che indica a XPointer dove iniziare. Gli argomenti forniscono ulteriori
informazioni sul percorso che XPointer dovrà compiere all’interno dell’origine.
Child(2,Comma)
in cui viene indicato il secondo elemento Comma tra gli elementi secondari correnti.
I termini di localizzazione possono essere associati a posizioni assolute, posizioni relative, posizioni di attributi o
posizioni di stringhe.
Per approfondimenti sull'argomento, che esulano dagli scopi di questo corso, si può consultare la sezione del sito del
Consorzio W3C relativa a XPointer.
5. XLL: Sommario
la prossima lezione sarà dedicata all'interfaccia DOM per l'elaborazione dei documenti XML.
Vero
Falso
2. XML gestisce i collegamenti fra i documenti sul Web attraverso i linguaggi Xlink e
3. Per la creazione di un elemento di collegamento semplice in XML, gli sviluppatori dell’XLink hanno
riservato
un nome di elemento in modo da riconoscerlo come elemento di collegamento ad un'altra risorsa
Vero
Falso
6. DOM - Fondamenti
Il Document Object Model (DOM) è una raccomandazione del W3C che definisce le interfacce, le proprietà e i metodi
per manipolare documenti XML; con XML DOM un programmatore può creare un documento XML, navigare all'interno
della sua struttura, aggiungere, modificare o eliminare i suoi elementi. Il DOM rappresenta una vista dell'albero del
documento XML, in cui ogni elemento dell'albero è considerato un nodo (oggetto) e ad ogni nodo sono associate
proprietà e metodi (funzioni). Ogni nodo contiene l'informazione attualmente contenuta nel documento. Tra i principali
oggetti definiti in DOM possiamo elencare i seguenti:
Un programma detto parser XML, incluso nei web browser, viene utilizzato per caricare in memoria un
documento XML e, una volta caricato in memoria, permette di manipolarlo ed estrarre le informazioni in esso
contenute accedendo ad esso tramite l'interfaccia DOM.
Il parser XML di Microsoft©, incluso nel browser Internet Explorer, supporta tutte le funzioni necessarie per
attraversare i nodi dell'albero , accedere ai valori dei nodi, agli attributi, inserire e cancellare i nodi.
Utilizzando il linguaggio JavaScript si può caricare un documento XML tramite il seguente codice:
<script language="JavaScript">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load("Esempio.xml")
// ... elaborazione documento XML caricato in memoria
</script>
La prima linea di codice crea un'istanza del parser XML, la seconda linea assicura che il parser interrompa l'esecuzione
fino a quando il documento non sarà completamente caricato in memoria, con la terza linea il parser apre il
documento Esempio.xml.
Si usa l'oggetto parseError (che non fa parte delle specifiche DOM) per estrarre informazioni sull'eventuale errore
rilevato dal parser XML di Internet Explorer.
Con il codice a sinistra possiamo controllare se il documento Esempio.xml è ben formato:
esempio di codice esempio interattivo
var xmlDoc = new
ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async = false <?xml version="1.0" ?>
xmlDoc.load("Esempio.xml") <Legge>
if (xmlDoc.parseError.errorCode != 0) { <DataLegge>7 dicembre
document.write("<br>Error code: ") 2000</Datalegge>
document.write(xmlDoc.parseError.errorCode) <TitoloLegge>Disciplina delle
document.write("<br>Error reason: ") associazioni di promozione
document.write(xmlDoc.parseError.reason) sociale</TitoloLegge>
document.write("<br>Error line: ") <NumeroLegge>383</NumeroLegge
document.write(xmlDoc.parseError.line) >
}
Un modo comune di estrarre gli elementi da un documento XML è quello di attraversare i nodi dell'albero e di
estrarre il valore di ogni elemento.
Con il codice a sinistra possiamo attraversare l'albero di un documento XML; a destra, tramite la finestra di testo e il
bottone "VediAlbero", possiamo verificarne il risultato interattivamente:
esempio di codice esempio interattivo
var xmlDoc = new
ActiveXObject("Microsoft.XMLDOM")
L'oggetto node rappresenta un qualsiasi nodo nell'albero del documento XML, ed è caratterizzato da quattro
proprietà principali :
nodeType: contiene il tipo di nodo
nodeTypeString : contiene la descrizione esplicita del tipo di nodo
nodeName: contiene il nome del nodo
nodeValue: contiene il valore associato al nodo
Nella tabella successiva sono rappresentati i valori delle principali proprietà in base ad alcuni valori della proprietà
nodeType:
nodeType nodeTypeString nodeName nodeValue
1 element tagName null
2 attribute name value
3 text #text contenuto del nodo
4 cdatasection #cdatasection contenuto del nodo
Tutti i nodi sono caratterizzati da proprietà e metodi; nelle tabelle successive sono indicate le principali proprietà e i
principali metodi:
proprietà descrizione
childNodes rappresenta la lista di tutti i nodi figli
firstChild rappresenta il primo figlio
lastChild rappresenta l'ultimo figlio
rappresenta il nome, secondo la tipologia del
nodeName
nodo stesso
rappresenta il valore, secondo la tipologia del
nodeValue
nodo stesso
parentNode rappresenta il nodo genitore
metodo descrizione
aggiunge
newChild
appendChild(newChild)
come un
nodo figlio
restituisce
il valore
booleano
hasChildNodes()
Vero se il
nodo ha
figli
inserisce
un nuovo
nodo,
insertBefore(newNode,
newNode,
refNode)
prima del
nodo
refNode
elimina il
removeChild(nodeName) nodo
specificato
sostituisce
replaceChild(newNode, oldNode
oldNode) con
newNode
Quando si usa la proprietà childNodes dell'oggetto node, si ottiene l'oggetto NodeList che rappresenta la lista dei nodi
figli. Questo oggetto è caratterizzato da:
Ad esempio, con il seguente codice JavaScript si possono ottenere i nomi degli elementi e dei relativi valori di un
documento XML:
L'oggetto document rappresenta l'elemento radice dell'albero dei nodi. Le proprietà e i metodi principali sono
proprietà descrizione
documentElement contiene l'elemento radice del documento
docType contiene il DTD o lo Schema del documento
metodo descrizione
createElement(tagName) crea un elemento con il tagName specificato
crea un nodo attributo con il nome attributo
createAttribute(attributeName)
specificato
Ad esempio, con il
seguente codice JavaScript si può estrarre il nome del tag radice di un documento XML:
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async = "false"
xmlDoc.load("Legge.xml")
alert (xmlDoc.documentElement.nodeName)
L'oggetto element rappresenta gli elementi del documento. Le proprietà e i metodi principali sono
proprietà descrizione
contiene il nome del nodo e può essere usata
tagName
anche per impostarne un nuovo valore
metodo descrizione
restituisce come risultato il valore
getAttribute(attributeName)
dell'attributo specificato
restituisce come risultato il nodo
getElementsByTagName(tagName) specificato e tutti i nodi figli come un
oggetto nodeList
setAttribute(attributeName, inserisce un nuovo attributo con il valore
attributeValue) specificato
L'albero di un documento XML può essere letto e manipolato anche attraverso altri oggetti definiti nel DOM:
● oggetto Attr
● oggetto Text
Ognuno di questi oggetti è dotato di molte proprietà e metodi che permettono di ottenere un sistema potente e
flessibile per l'accesso e l'elaborazione dei nodi che compongono l'albero di un documento XML.
6. DOM - Sommario
la prossima lezione sarà dedicata all'analisi del DTD per i documenti normativi elaborato nell'ambito del progetto
Norme In Rete.
Vero
Falso
3. Un programma detto incluso nei web browser , viene utilizzato per caricare
in memoria un documento XML e, una volta caricato in memoria, permette di manipolarlo ed estrarre
le informazioni in esso contenute accedendo ad esso tramite l'interfaccia DOM.
x = xmlDoc.documentElement.childNodes[i];
document.write (x.nodeName)
document.write(":")
document.write(x.text)
}
permette di visualizzare il valore di ogni elemento attraversando l'albero XML dalla radice
permette solo di visualizzare i nomi degli elementi XML contenuti nel documento
Vero
Falso
6. Per scrivere un'applicazione che sia conforme alle specifiche del DOM è necessario che
indipendentemente dal linguaggio utilizzato si possono usare gli oggetti, i metodi e le proprietà
specificate nel DOM per gestire i documenti XML
8. L'interfaccia DOM prevede lo specifico oggetto parseError per la gestione degli errori di lettura di
documenti XML
Vero
Falso
Nelle lezioni precedenti abbiamo visto quali sono le caratteristiche e le grandi potenzialità di XML e le tecnologie che
ruotano intorno a questo nuovo linguaggio di marcatura.
XML è stato scelto dal progetto Norme In Rete (NIR) come linguaggio per descrivere i documenti rilevanti per il
progetto stesso - documenti normativi, dottrinali e giurisprudenziali.
Lo studio di fattibilità - presentato nel gennaio del 2000 e condotto dall'Istituto per la Documentazione Giuridica del
CNR (IDG) - ha prodotto prototipi di DTD per tutte e tre le categorie di documenti. Nella seconda fase del progetto,
denominata NIR2, sono stati approfonditi gli studi sul DTD per i documenti normativi, che hanno portato - nell'ottobre
del 2000 - al rilascio di un nuovo e più completo DTD, che è a tutt'oggi in corso di sperimentazione.
Questa lezione tratta l'argomento in maniera generale, mentre nella lezione successiva lo stesso argomento sarà
trattato in modo più approfondito e dettagliato.
La tecnica di redazione legislativa ha introdotto specifiche norme di ortografia, lessico, sintassi, stile e struttura per la
stesura di testi normativi. In Italia la raccolta più completa e più recente di tali norme è contenuta in "Regole e
suggerimenti per la redazione dei testi normativi" (conosciute come Manuale Rescigno), un documento redatto nel
1991. Il Parlamento e il Governo centrale seguono una circolare congiunta dei Presidenti del Consiglio, Camera e
Senato del 1986 che contiene regole e suggerimenti che coincidono con quelle del Manuale, anche se quest'ultimo ne
ha aggiunte di nuove.
Tali regole tendono a garantire certezza e uniformità, almeno formali, a tutte le norme. Per questo molti drafter e
anche alcuni legislatori si stanno adoperando perché esse siano adottate ufficialmente da tutti i produttori di norme.
Si può dire che, a partire dal 1986, i provvedimenti legislativi statali, sono sostanzialmente conformi alle regole di
redazione dettate dalla Circolare congiunta e che quelli regionali, a partire dal 1992/93, lo sono alle regole del
Manuale. Attualmente il Manuale è adottato ufficialmente da circa due terzi delle regioni italiane e seguito di fatto
dalle altre. Camera e Senato dispongono di uffici e servizi che verificano la conformità dei testi di disegni e proposte di
legge alla Circolare congiunta; altrettanto dovrebbero fare gli uffici legislativi (e anche gli altri uffici) dei ministeri per i
provvedimenti normativi dell'Esecutivo.
In generale, non si può avere una completa uniformità nella struttura di tutti gli atti normativi, e quindi gli sforzi sono
rivolti alla parte che riguarda l'articolato. Questo perché le parti al di fuori dell'articolato, nelle varie tipologie di
documenti normativi differiscono molto fra di loro a causa dell'autorità emittente. Citiamo, ad esempio, la presenza di
verbali fra le parti nei contratti collettivi, le varie formule di emanazione degli atti ufficiali, e ancora le formule finali.
E' semplice capire perché è stato scelto il linguaggio XML per descrivere i documenti normativi.
I documenti normativi hanno:
● una struttura formale evidente e sistematica: le varie ripartizioni dell'articolato - libri, parti,
titoli, sezioni, articoli e commi - ne sono la prova;
● parti obbligatorie e facoltative: si pensi che, per esempio, la numerazione dei commi è diventata
"obbligatoria" solo dal 1986 e quindi nei documenti precedenti esistono commi non numerati;
● almeno nella parte dell'articolato, una struttura gerarchica, in quanto, per esempio, un comma
si trova all'interno di un articolo e non viceversa.
Nell'ambito del progetto NIR è stato costituito un gruppo di lavoro finalizzato alla realizzazione di un DTD per i
documenti normativi.
Il gruppo di lavoro ha realizzato una serie di DTD per descrivere sia gli atti normativi che seguono le regole del
Manuale Rescigno, sia quelli redatti prima dell'adozione del Manuale e/o con struttura meno precisa e formalizzata.
● DTD strict e DTD loose
Poiché il Manuale Rescigno prevede vincoli stretti sulla struttura dell'articolato, è sorta la necessità di realizzare due
DTD, uno rigido, denominato strict, e l'altro flessibile, denominato loose, per poter descrivere le due categorie di
documenti.
DTD strict e DTD loose sono compatibili fra di loro: il DTD strict impone vincoli più rigidi alla struttura.
La compatibilità si esplicita nel fatto che un documento valido per il DTD strict è valido anche per il DTD loose.
Categoria semi-articolati (per tutti quei documenti non riconducibili ad articolati tradizionali, oppure con strutture
assimilabili all'articolato ma con differenze troppo nette)
- ne fanno parte: gli atti di Authority, i decreti ministeriali non numerati, i decreti del Presidente della Repubblica non
numerati e i decreti del Presidente del Consiglio dei Ministri non numerati
A parte, esistono quattro altri tipi "generici" di documenti che non rientrano in quelli sopra elencati.
Le informazioni del DTD sono così ripartite nei sei documenti principali:
1. definizioni specifiche del DTD strict (strict.dtd);
2. definizioni specifiche del DTD loose (loose.dtd);
3. definizioni generiche comuni a tutti i DTD (globali.dtd);
4. definizioni di strutture normative (norme.dtd);
5. definizioni di strutture testuali, tabellari o modulari (testo.dtd);
6. definizioni di strutture per la gestione delle meta-informazioni (meta.dtd).
Le differenze si concentrano nei soli documenti strict.dtd e loose.dtd, mentre le definizioni contenute negli altri
documenti, e nei sette documenti accessori, sono utilizzate sia nel DTD strict sia nel DTD loose.
● Elementi normativi
Il file norme.dtd contiene gli elementi della struttura formale di un atto normativo:
● intestazione
● formula iniziale (eventuale)
● preambolo (eventuale)
● articolato
● formula finale (eventuale)
● conclusione
● parte annesso (zero o più annessi)
L'aggettivo eventuale sta a significare la non obbligatorietà del relativo elemento.
Ciascuno degli elementi sopra citati ha sottoelementi appropriati (vedere Analisi del DTD di NIR). Per esempio,
l'elemento Comma, che si trova all'interno dell'elemento Articolato, può contenere un corpo di testo oppure un elenco
di elementi. Gli annessi possono essere blocchi di testo, tabelle, oppure interi documenti.
● date
● luoghi
● atti
● enti
● soggetti
L'esigenza di avere questi elementi evidenziati all'interno delle parti testuali nasce per normalizzare
informazioni che il legislatore può scrivere in completa libertà. In questo modo si può pensare alla
realizzazione di applicazioni sofisticate di ricerca per rintracciare simili informazioni, altrimenti non
facilmente individuabili.
Con gli elementi definiti in questo documento si possono descrivere tabelle e moduli - siano essi parte degli annessi o
del documento normativo vero e proprio; si può inoltre rimanere "fedeli" all'aspetto tipografico di un documento
normativo. Per esempio, si possono evidenziare le parole a cui il legislatore ha dato enfasi con un corsivo o un
grassetto riproducendo gli stessi effetti tipografici, oppure si può riprodurre la struttura di un preambolo con tutti gli a
capo necessari.
Per questi elementi - e per i loro attributi - sono stati usati nomi tratti dall'HTML: l'insieme è comunque più ridotto di
quello dell'HTML e soprattutto non si tratta di "veri" elementi HTML. Infatti sarà il foglio di stile, sia esso un foglio di
stile CSS sia esso un foglio di stile XSL, a rendere il contenuto dell'elemento "<h:b>" in grassetto.
● Meta-informazioni
Il documento meta.dtd contiene le varie tipologie di meta-informazione associabili ad un documento normativo o a
una qualsiasi sua parte.
Nel documento vengono fornite la sintassi e l'organizzazione della meta-informazione, e vengono indicate alcune parti
standard all'interno del documento dove inserirla, nel caso si decida di inserirla non solo in testa al documento.
Qui di seguito diamo l'elenco, con breve descrizione, delle cinque tipologie di meta-informazioni previste.
● Meta-informazioni (continua)
1. Dublin Core: si tratta di 15 elementi per la descrizione delle risorse di rete, presi direttamente dalle specifiche
del Dublin Core 1.1.;
2. lavori preparatori: si tratta di testo libero - in questa sezione possono essere incluse tutte le informazionni
relative alla fase preparatoria del testo;
3. commenti: sezione riservata a informazioni di natura libera sul testo, dai commenti degli studiosi ai riferimenti
di dottrina e di giurisprudenza di tipo redazionale, ecc.;
4. redazionale: spazio riservato alla redazione che pubblica il documento;
5. disposizioni: sezione per l'inserimento degli elementi della struttura funzionale del testo normativo.
Come già detto nella lezione precedente, i DTD di NIR descrivono alcuni tipi di documento normativo.
Per ciascuno tipo di documento, sono dati un DTD descrittivo (loose), flessibile, ed uno prescrittivo (strict), più rigido.
In questo modo ogni documento, fra le tipologie previste, potrà essere strutturato sia che esso aderisca o no alle
regole di "buona scrittura" introdotte dal cosidetto Manuale Rescigno.
Le differenze fra i due DTD sono poche e specificate in maniera da essere facilmente modificabili (parametrizzate): le
regole di validità sono più o meno le stesse, cambiano alcuni vincoli.
Ricordiamo, ancora una volta, che ogni documento valido secondo il DTD prescrittivo è valido anche per il DTD
descrittivo.
Il DTD strict verrà usato in occasione della creazione di nuove norme, e per tutti quei documenti che rispettano le
indicazioni del Manuale; il DTD loose in ogni altra situazione.
Abbiamo già visto l'elenco dei dodici tipi di documenti normativi strutturabili con i DTD di NIR nel paragrafo
"Panoramica sul DTD" della lezione precedente, e come questi siano in realtà raggruppabili in tre classi: documento
articolato completo, documento articolato ridotto, documento semi-articolato.
Per marcare un documento normativo, occorre individuare quale dei due DTD - loose o strict - richiamare: la scelta
viene fatta in base al tipo di verifiche che si vogliono effettuare.
Se dobbiamo marcare una legge ordinaria - secondo le specifiche del DTD strict - il relativo documento XML dovrà
contenere le seguenti righe iniziali.
Nel DTD si suppone l'esistenza di due namespace XML riservati agli elementi dei documenti di Norme in Rete:
● http://www.normeinrete.it/nir/1.0, pertinente alla struttura formale dei documenti normativi
● http://www.normeinrete.it/nir/disposizioni/1.0, pertinente alle meta-informazioni.
I due documenti sono molto simili: vi si trovano definite - dapprima - le entità che li differenziano, quindi vengono le
righe in cui si effettua l'inclusione di altri documenti (DTD ed entità carattere), infine vengono elencate le classi di
documenti definibili.
Ciò che distingue i due documenti è la diversa definizione degli elementi di struttura formale dell'articolato.
nirloose.dtd
<!ENTITY % CMcompleto
"(libro|parte|titolo|capo|sezione|paragrafo|articolo)*">
<!ENTITY % CMlibro "(meta?, num?,
rubrica?,(parte|titolo|capo|sezione|paragrafo|articolo)*)">
<!ENTITY % CMparte "(meta?, num?, rubrica?,(libro|
titolo|capo|sezione|paragrafo|articolo)*)">
<!ENTITY % CMtitolo "(meta?, num?, rubrica?,(libro|parte|
capo|sezione|paragrafo|articolo)*)">
<!ENTITY % CMcapo "(meta?, num?, rubrica?,(libro|parte|titolo|
sezione|paragrafo|articolo)*)">
<!ENTITY % CMsezione "(meta?, num?, rubrica?,(libro|parte|titolo|capo|
paragrafo|articolo)*)">
<!ENTITY % CMparagrafo "(meta?, num?,
rubrica?,(libro|parte|titolo|capo|sezione| articolo)*)">
<!ENTITY % CMarticolo "(meta?, num?, rubrica?,(comma)*)">
<!ENTITY % CMcomma "(meta?, num?, (corpo | (alinea?, el*, coda?)))">
nirstrict.dtd
<!ENTITY % CMcompleto "(libro+|parte+|titolo+|capo+|articolo+) ">
<!ENTITY % CMlibro "(meta?, num, rubrica?,
(parte+|titolo+|capo+|articolo+))">
<!ENTITY % CMparte "(meta?, num, rubrica?, (titolo+|capo+|articolo+))">
<!ENTITY % CMtitolo "(meta?, num, rubrica?, (capo+|articolo+))">
<!ENTITY % CMcapo "(meta?, num, rubrica?, (sezione+|articolo+))">
<!ENTITY % CMsezione "(meta?, num, rubrica?, (articolo+))">
<!ENTITY % CMparagrafo "EMPTY">
<!ENTITY % CMarticolo "(meta?, num, rubrica?, (comma+))">
<!ENTITY % CMcomma "(meta?, num, (corpo | (alinea, el+, coda?)))">
● Elemento "meta"
In entrambi i documenti, ogni elemento della struttura formale contiene il sottoelemento "meta" - facoltativo.
In questo elemento è possibile registrare la meta-informazione relativa alla parte che si descrive con
l'elemento stesso (i vari tipi di meta-informazioni sono richiamati nel paragrafo Panoramica sul DTD).
● Entità esterne : caratteri e DTD accessori
In entrambi i documenti vengono definiti ed inclusi gli insiemi di caratteri e i DTD accessori.
E' stato usato il metodo delle entità esterne: prima si indica la definizione come entità esterna, quindi l'inclusione della
stessa
caratteri DTD accessori
<!ENTITY % ISOlat1 SYSTEM "ISOlat1.pen"> %ISOlat1; <!ENTITY % glb_DTD SYSTEM "globali.dtd">
<!ENTITY % ISOlat2 SYSTEM "ISOlat2.pen"> %ISOlat2; %glb_DTD;
<!ENTITY % ISOgrk3 SYSTEM "ISOgrk3.pen"> %ISOgrk3; <!ENTITY % txt_DTD SYSTEM "testo.dtd" >
<!ENTITY % ISOdia SYSTEM "ISOdia.pen"> %ISOdia; %txt_DTD;
<!ENTITY % ISOnum SYSTEM "ISOnum.pen"> %ISOnum; <!ENTITY % nrm_DTD SYSTEM "norme.dtd" >
%nrm_DTD;
<!ENTITY % ISOpub SYSTEM "ISOpub.pen"> %ISOpub;
<!ENTITY % metaDTD SYSTEM "meta.dtd">
<!ENTITY % ISOtech SYSTEM "ISOtech.pen"> %ISOtech;
%metaDTD;
Nel documento globali.dtd sono contenute le definizioni di entità usate in tutti i documenti.
Qui si trovano attributi e blocchi di attributi comuni a molti elementi, modelli di contenuti condivisi da diversi elementi,
ed infine la definizione di elementi generici che potranno essere usati, con opportuna denominazione, per scopi non
prevedibili al momento attuale.
In questo modo - cioè mettendo i namespace come attributi - il documento normativo risulta più ordinato e facile da
leggere.
versione con attributi fissi versione con attributi esplicitati
<?xml version='1.0' ?>
<!DOCTYPE leggeordinaria SYSTEM "nirloose.dtd">
<?xml version='1.0' ?>
<leggeordinaria
<!DOCTYPE leggeordinaria SYSTEM
xmlns:xlink='http://www.w3.org/1999/xlink'
"nirloose.dtd">
xmlns:css='http://www.w3.org./HTML/1998/html4'
<leggeordinaria>
xmlns:dc='http://purl.org/dc/elements/1.1/'
...
xmlns='http://www.normeinrete.it/nir/1.0' >
</leggeordinaria>
...
</leggeordinaria>
● LINK
Sebbene ancora XLink non sia una specifica definitiva del Web Consortium, nel documento globali.dtd viene fatta la
definizione degli attributi con caratteristiche ipertestuali secondo la forma più semplice dei link definibili con XLink.
attributi per i link
<!ENTITY % link "xlink:type CDATA #FIXED 'simple'
xlink:href CDATA #REQUIRED">
Si noti l'utilizzo del namespace apposito: vengono quindi usati l'attributo type con valore fisso 'simple' e l'attributo
HREF il cui valore sarà la destinazione del link.
● NOME
attributo nome
<!ENTITY % nome "nome CDATA #IMPLIED ">
Questo attributo - non obbligatorio - viene utilizzato per dare un nome significativo a parti di un documento non
descrivibili con elementi specifici.
● VIGENZA
Le informazioni sugli intervalli di vigenza di un documento normativo (ufficiale) sono registrate fra le
meta-informazioni.
blocco attributi per la vigenza
<!ENTITY % vigenza "inizio CDATA #IMPLIED
inizio_sospensione CDATA #IMPLIED
fine_sospensione CDATA #IMPLIED
fine CDATA #IMPLIED">
Invece il blocco di attributi serve a caratterizzare le parti modificate nei testi coordinati.
Questi attributi rendono conto dell'evoluzione storica di un testo a seguito delle sue varie modifiche. Si trovano negli
elementi della struttura formale che descrivono le parti di un documento normativo che hanno subito modifiche,
abrogazioni.
● CSS
Questo blocco contiene due attributi ereditati direttamente da HTML, mentre il terzo - con valore predefinito -
permette di specificare la lingua in cui viene espresso un elemento del documento.
blocco attributi CSS
<!ENTITY % css "h:style CDATA #IMPLIED
h:class CDATA #IMPLIED
xml:lang CDATA 'it'">
I primi due attributi dovranno essere utilizzati tutte le volte che per una parte di un documento ci sia la necessità di
una rappresentazione che si differenzia da quella normalmente usata.
● IDREQ e IDFAC
Ogni elemento della struttura formale deve avere un identificatore univoco, che permetterà di "rintracciare" l'elemento
all'interno del documento: per questo si userà l'attributo idreq.
IDREQ e IDFAC
<!ENTITY % idreq "id ID #REQUIRED">
In tutti gli altri casi in cui il redattore ritiene utile identificare un elemento che non appartiene alla struttura formale, si
userà l'attributo idfac.
● GLOBALIREQ e GLOBALIFAC
Queste sono le entità che rappresentano gli attributi che si trovano effettivamente negli elementi del DTD.
GLOBALIREQ e GLOBALIFAC
<!ENTITY % globalireq "%css;%idreq;%vigenza;">
Come si può notare la differenza consiste nella presenza dell'attributo idreq da una parte e dell'attributo idfac
dall'altra.
L'uso così "intensivo" di entità rende pulita ed ordinata la definizione dei modelli degli elementi del DTD.
Per semplicità, non riportiamo qui la definizione di queste entità: per visualizzarle clicca qui.
< !ENTITY % nrm_inline "rif | mrif | mod | def | atto | soggetto | luogo | ente | data" >
< !ENTITY % nrm_struct "identificazione | formulainiziale | preambolo | articolato |
formulafinale | conclusione | annessi ">
In questo documento si trovano le definizione degli elementi con semantica non legata alla normazione. In esso si
ridefiniscono elementi tratti dal linguaggio HTML.
● Elementi di tipo EMPTY con i relativi attributi
Definizioni
<!ELEMENT h:br EMPTY > h:br = ritorno a capo obbligato, senza divisione in
<!ATTLIST h:br %globalifac; > blocchi
<!ELEMENT h:sup %inline; > h:a = link ipertestuale generico, senza connotazioni
<!ATTLIST h:sup %globalifac; > legate alle norme
● Specifica di tabelle
Non esiste una versione XML ufficiale per il modello tabella. Ne esistono, invece, diverse ufficiose: fra queste è stata
scelta quella relativa alle specifiche di HTML versione 4. Nel DTD di NIR è fornita una versione semplificata ma fedele
del modulo tabelle del DTD di HTML espresso in SGML.
Per semplicità, non riportiamo qui la definizione di questi elementi e dei loro attributi: per visualizzarli clicca qui.
Tabelle : attributi
<!ENTITY % coreattrs "id ID #IMPLIED
class CDATA #IMPLIED
style CDATA #IMPLIED
title CDATA #IMPLIED" >
<!ENTITY % i18n "lang CDATA #IMPLIED
dir (ltr|rtl) #IMPLIED" >
<!ENTITY % attrs "%coreattrs; %i18n;" >
<!ENTITY % TFrame "(void|above|below|hsides|lhs|rhs|vsides|box|border)">
<!ENTITY % TRules "(none | groups | rows | cols | all)">
<!ENTITY % TAlign "(left|center|right)">
<!ENTITY % Scope "(row|col|rowgroup|colgroup)">
<!ENTITY % cellhalign "align (left|center|right|justify|char) #IMPLIED
char CDATA #IMPLIED
charoff CDATA #IMPLIED " >
<!ENTITY % cellvalign "valign (top|middle|bottom|baseline) #IMPLIED" >
<!ENTITY % CAlign "(top|bottom|left|right)">
Tabelle : elementi
<!ELEMENT h:table (
h:caption?,
(h:col*|h:colgroup*),
h:thead?, h:tfoot?,
h:tbody+|h:tr+)
)>
<!ATTLIST h:table
%attrs;
summary CDATA
#IMPLIED
width CDATA
#IMPLIED
border CDATA
#IMPLIED
frame %TFrame;
#IMPLIED
rules %TRules;
#IMPLIED
cellspacing CDATA
#IMPLIED
cellpadding CDATA
#IMPLIED
datapagesize
CDATA #IMPLIED>
<!ELEMENT
h:caption
%PhraseLevel; >
<!ATTLIST h:caption
%attrs; >
<!ELEMENT h:thead
(h:tr)+ >
<!ATTLIST h:thead
%attrs; %cellhalign;
%cellvalign; >
<!ELEMENT h:tfoot
(h:tr)+ >
<!ATTLIST h:tfoot
%attrs; %cellhalign;
%cellvalign; >
<!ELEMENT h:tbody
(h:tr)+ >
<!ATTLIST h:tbody
%attrs; %cellhalign;
%cellvalign; >
<!ELEMENT
h:colgroup (h:col)*
>
<!ATTLIST
h:colgroup %attrs;
span CDATA "1"
width CDATA
#IMPLIED
%cellhalign;
%cellvalign;>
<!ELEMENT h:col
EMPTY >
<!ATTLIST h:col
%attrs;
span CDATA "1"
width CDATA
#IMPLIED
%cellhalign;
%cellvalign;>
<!ELEMENT h:tr
(h:th|h:td)+ >
<!ATTLIST h:tr
%attrs; %cellhalign;
%cellvalign; >
<!ELEMENT h:th
%ParaLevel; >
<!ATTLIST h:th
%attrs;
abbr CDATA
#IMPLIED
axis CDATA
#IMPLIED
headers IDREFS
#IMPLIED
scope %Scope;
#IMPLIED
rowspan CDATA
"1"
colspan CDATA "1"
%cellhalign;
%cellvalign;>
<!ELEMENT h:td
%ParaLevel; >
<!ATTLIST h:td
%attrs;
abbr CDATA
#IMPLIED
axis CDATA
#IMPLIED
headers IDREFS
#IMPLIED
scope %Scope;
#IMPLIED
rowspan CDATA
"1"
colspan CDATA "1"
%cellhalign;
%cellvalign;>
Il documento norme.dtd raccoglie tutti gli elementi con semantica connessa agli atti normativi.
La creazione del DTD riflette due scelte di fondo: l'adesione al Manuale, da una parte, e, dall'altra, l'adeguamento del
DTD alle scelte del legislatore. Questo significa la possibilità di descrivere effettivamente documenti "reali",
ufficialmente pubblicati.
Il modulo introduce due categorie di elementi: gli elementi della struttura formale dell'atto normativo e gli elementi
inline con semantica rilevante ai fini della normazione, come per esempio, i riferimenti, le date, i luoghi, ecc..
● Entità: attributi comuni
All'apertura del documento c'è la definizione di tre entità per descrivere tre attributi: sono attributi il cui valore è la
normalizzazione di certi tipi di informazioni che si trovano nel testo.
Entità: attributi comuni
<!ENTITY % data "norm CDATA #REQUIRED" >
<!ENTITY % dove "codice CDATA #REQUIRED" >
<!ENTITY % codice "codice CDATA #REQUIRED" >
La sintassi dei valori di questi attributi ha valore prescrittivo anche se non è posta all'interno del DTD (vedi attributi
norm e codice).
● Elementi dell'articolato
I modelli degli elementi della gerarchia dell'articolato sono specificati nei documenti nirloose.dtd e nirstrict.dtd.
Ciascun elemento della gerarchia ha o può avere ulteriormente una rubrica testuale ed un numero d'ordine. Per
quanto riguarda gli attributi, questi comprendono anche l'attributo identificativo ID obbligatorio.
Elementi articolato e attributi relativi
<!ELEMENT articolato %CMcompleto; >
Sono previsti due tipi di elenchi, quelli con elementi lettera (el) e quelli con elementi numero (en): essi si annidano
l'uno dentro l'altro, iniziando, dentro l'elemento comma, dall'elenco di elementi lettera. Entrambi gli elenchi iniziano
con l'elemento alinea e sono seguiti, eventualmente, dall'elemento coda. Per quanto riguarda gli attributi, questi sono
del tipo con l'identificativo facoltativo.
Elementi sotto articolo e attributi relativi
<!ELEMENT comma %CMcomma; >
<!ATTLIST comma %globalireq; >
Per il blocco sottoscrizioni è stata scelta la definizione mediante blocchi di testo arbitrari, con la raccomandazione che
per tutti i nomi e i relativi ruoli si usino gli appositi elementi soggetto.
Elementi conclusione e attributi relativi
<!ELEMENT conclusione (dataeluogo?, sottoscrizioni?) >
<!ELEMENT dataeluogo %inline; >
<!ATTLIST dataeluogo %data; %dove; >
In questo paragrafo sono date le sintassi di alcuni attributi rilevanti. Tali specifiche hanno valore prescrittivo, anche se
non sono poste all'interno del DTD.
● xlink:href
Il valore di questo attributo indica la destinazione di un riferimento o altri elementi di natura ipertestuale: è un
Uniform Resource Identifier (URI) . Nel caso in cui la destinazione è un documento normativo, si richiede l'uso di un
URN (Uniform Resource Name) , secondo la sintassi definita dal gruppo di lavoro inerente URN nell'ambito del
progetto NIR.
Per le locazioni interne si deve preporre, come nel caso di URI, il carattere '#' all'indicazione della locazione. Questa
indicazione può essere sia un XPointer, oppure, preferibilmente, l'identificativo dell'elemento desiderato.
L'identificativo è il valore dell'attributo 'id'.
● id
Il valore di questo attributo indentifica in modo univoco l'elemento all'interno del documento normativo.
Un id è costituito da uno o più blocchi di 8 caratteri, separati dal carattere '-'. Ciascuno blocco descrive un
componente della gerarchia dall'alto verso il basso.
Un blocco è costituito da caratteri alfanumerici, così suddivisi:
* = le prime tre lettere dell'attributo 'nome' se non sono uguali ad altra sigla
Il numero, quando è presente, è quello d'ordine esplicito dell'elemento, altrimenti è il numero d'ordine assoluto
dell'elemento all'interno degli elementi con la stessa sigla. Il numero deve essere di quattro cifre, quindi,
eventualmente, completato a sinistra con degli '0'. Nei casi in cui, come è anche previsto dal Manuale, si abbia una
numerazione in cui siano presenti '0' a sinistra, il completamento deve essere fatto con degli '*'.
La lettera - sempre presente - è uguale ad 'a', oppure, in presenza di specifiche ulteriori dell'elemento (p.e. bis, ter,
...) assume il carattere 'b', 'c', ... rispettivamente per 'bis', 'ter', ...
Alcuni esempi:
elemento valore dell'attributo id
articolo 12 art0012a
terza sezione del capo IV del I libro lib0001a-cap0004a-sez0003a
numero 7 della lettera b dell'articolo 8 quater art0008d-let0002a-num0007a
terzo paragrafo del primo annesso ann0001a-prg0003a
● norm
L'attributo norm fornisce la normalizzazione per elementi di tipo data (p.e. data, dataeluogo, dataDoc). La forma
normalizzata ha il seguente formato:
AAAAMMGGhHHMM[SS[FFF]]
dove l'anno va indicato su 4 cifre, mese e giorno su 2; di seguito troviamo l'indicazione per la normalizzazione
dell'ora, che viene introdotta dal carattere "h", seguita da 2 cifre per l'ora e 2 per i minuti, ed infine, - facoltative - 2
cifre per i secondi e 3 cifre per le frazioni di secondo.
Esempio:
<data norm="19631117h0930">alle 9 e 30 del 17 novembre 1963</data>
● codice
Il valore di questo attributo fornisce un valore normalizzato per il nome di atti, soggetti ed enti citati negli atti
normativi. Si prevedono per questi valori delle tabelle di corrispondenza fra le varie citazioni e l'unica forma
normalizzata (codice).
Il DTD non dà indicazioni riguardo alla localizzazione delle meta-informazioni -internamente o esternamente - né dice
che queste devono essere raccolte in un unico blocco, se interne.
Ne fornisce la sintassi e l'organizzazione e ne suggerisce le posizioni standard del documento in cui inserirle, qualora si
decida di porle internamente.
Come già spiegato nella lezione sul DTD normativo di NIR, sono cinque le tipologie di meta-informazioni previste.
elemento meta
<!ELEMENT meta (dublin?, lavoripreparatori?, commenti?, redazionale?, disposizioni?)>
● Dublin Core - 15 elementi standard per la descrizione di risorse di rete, che vanno dal titolo
della risorsa al depositario dei diritti. La sintassi è tratta direttamente dallo standard del Dublin
Core 1.1.
elemento Dublin Core e sottoelementi annessi
<!ENTITY % dublincore "dc:title | dc:creator | dc:subject |
dc:description | dc:publisher | dc:contributor |
dc:date | dc:type | dc:format |
dc:identifier | dc:source | dc:language |
dc:relation | dc:coverage | dc:rights ">
● lavori preparatori
per le informazioni e documenti annessi alla fase preparatoria del testo
elemento lavori preparatori
<!ELEMENT lavoripreparatori %blocchi; >
● commenti
per le informazioni di natura libera sul testo, commenti di studiosi, riferimenti alla dottrina e alla
giurisprudenza di tipo redazionale, ecc.
elemento commenti
<!ELEMENT commenti %blocchi; >
● redazionale
per le informazioni a testo libero fatte dalla redazione
elemento redazionale
<!ELEMENT redazionale %blocchi; >
Le disposizioni costituiscono la struttura funzionale di un testo normativo, cioè descrivono le funzioni regolative del
testo stesso.
Distinta, quindi, dalla struttura formale, la struttura funzionale è ben più complessa da stabilire in quanto richiede
un'interpretazione linguistica del contenuto del testo, e quindi competenze specifiche.
In genere, non è possibile stabilire una corrispondenza fra una disposizione e un elemento della struttura formale, ad
esempio un comma o un articolo. Questo complica la sistemazione della struttura funzionale sopra la struttura formale
nella descrizione XML di un documento normativo.
Ciò ha condotto, dopo lo studio di alcune alternative, a sistemare le disposizioni fra le meta-informazioni. In questo
modo la descrizione di una disposizione può essere articolata permettendo di esprimere proprietà complesse. Poichè
ogni elemento della struttura formale è identificato univocamente, ciascuna disposizione potrà far riferimento alla
partizione dell'atto - o alle partizioni, anche non contigue - in modo semplice.
Inoltre, dal momento che sono richieste solide competenze giuridiche, l'analisi funzionale di un documento può essere
fatta in un secondo tempo rispetto alla strutturazione formale.
Al momento attuale sono state ipotizzate due categorie ben distinte di elementi funzionali:
● analitiche- le disposizioni, propriamente dette e descritte dal Manuale Rescigno;
● caratterizzanti - elementi analitici, per lo più connessi al preambolo, che descrivono informazioni di contesto del
documento.
Elemento disposizione
<!ELEMENT disposizioni (caratterizzanti?, analitiche?) >
<!ATTLIST disposizioni xmlns:dsp CDATA #FIXED
'http://www.normeinrete.it/nir/disposizioni/1.0' >
Per vedere le definizioni di elementi e attributi relativi alle disposizioni si può cliccare qui.
9. Altri argomenti
Nel Web Consortium esiste un gruppo di lavoro (XML Query Working Group) preposto alla definizione di un linguaggio
di interrogazione specifico per i documenti XML.
L'obiettivo del gruppo è quello di fornire un linguaggio potente e flessibile per estrarre dati dai documenti XML con
prestazioni paragonabili a quelle fornite dai linguaggi progettati per i database . In questo modo le collezioni di file
XML saranno accessibili nello stesso modo in cui lo sono attualmente i database.
Ad oggi non esiste una raccomandazione del W3C per un linguaggio d'interrogazione, ma esistono diverse proposte,
fra le quali si può citare XML Query Language (XQL), estensione di XSL Patterns, lo schema per la costruzione di
espressioni atte ad indicare gli elementi di un documento XML.
Le espressioni XQL assomigliano ai percorsi per individuare file e directory nel disco di un computer. Infatti XQL
sfrutta la natura gerarchica della struttura di un documento XML. Per esempio, l'espressione
/Legge//Comma
indica l'insieme degli elementi Comma discendenti dell'elemento Legge, che si trovano nel documento, mentre
l'espressione:
/Legge//Capo[@Num = "I"]/Articolo
Nella tabella che segue vengono indicate le principali espressioni usate per costruire le espressioni di
interrogazione (query) in XQL
Elemento/Funzione Esempio
nome di un elemento Articolo
carattere jolly *
nome di un attributo @IdNumero
uguaglianza NumeroLegge='383'
relazione genitore-figlio Capo/Articolo
relazione antenato/discendente Articolato//Comma
filtri Legge[NumeroLegge='383']
intersezione
unione
congiunzione
disgiunzione
negazione
Questi presupposti sono positivi, ma comportano anche degli svantaggi: per esempio, la compattezza porta, nel caso
di espressioni complesse, a compromettere la facilità dell'interpretazione.
Nonostante ciò, non mancano le implementazioni: XQL è supportato, per esempio dagli XML database server
eXcelon di ObjectStore e Tamino di Software AG.