eXtensible Markup Language Tutorial - by Marco Giannì
Capitolo III: Definizione del tipo di documento (DTD)

Entità

Oltre all'entità generale viste nel capitolo precedente esiste un altro tipo di entità definita entità di parametro.

La maggior parte delle entità deve essere dichiarata nella DTD. Alcune entità predefinite sono incorporate nel codice XML e sono utilizzate per visualizzare i caratteri generalmente impiegati per il markup. Le dichiarazioni di entità seguono la stessa sintassi di base utilizzata dalle altre dichiarazioni:

<!ENTITY EntityName EntityDefinition>

Le entità della DTD possono essere analizzabili o non analizzabili. Le entità del primo tipo o entità di testo contengono testo che farà parte del documento XML. Le entità del secondo tipo o entità binarie sono in genere riferimenti a un file binario esterno. Le entità non analizzabili possono anche essere costituite da testo non analizzabile ed è quindi preferibile pensare a queste entità come elementi che non sono stati creati per essere considerati parte del codice XML.

ENTITA' INTERNE

Le entità interne vengono dichiarate nella DTD e includono il contenuto che verrà utilizzato nel documento. Ad esempio, questa riga di codice aggiunge un'entità interna definita SIGNATURE:

<!ENTITY SIGNATURE "Bill">

Ogni volta che viene fatto riferimento all'entità nel documento, &SIGNATURE, quest'ultima verrà sostituita dal relativo contenuto, in questo caso Bill.

ENTITA' ESTERNE: PAROLE CHIAVE SYSTEM E PUBLIC

Le entità esterne fanno riferimento a file esterni, anche ad altri file XML. Ad esempio, questa entità fa riferimento a un file GIF esterno e verrà visualizzata nel corpo del documento XML:

<!ENTITY IMAGE1 SYSTEM "Xmlquot.gif" NDATA GIF>

Una dichiarazione di entità esterna può includere la parola chiave SYSTEM o PUBLIC. Molte DTD sono sviluppate localmente, vengono cioè sviluppate per un'azienda o organizzazione specifica o per un sito Web particolare. In questo caso andrebbe utilizzata la parola chiave SYSTEM. Questa parola chiave è seguita da un URI (Uniform Resource Identifier) che indica all'elaboratore dove reperire l'oggetto indicato nella dichiarazione. Nell'esempio precedente, il nome di file era utilizzato perché il codice aveva impiego locale. Nella dichiarazione che segue, l'URI è un indirizzo Web che collega alla posizione dei file di riferimento:

<!ENTITY IMAGE1 SYSTEM http://XMLCo.com/Images/Xmlquot.gif NDATA GIF>

Alcune DTD sono standard stabiliti disponibili per un'ampia gamma di utenti. Sarebbe necessario utilizzare la parola chiave PUBLIC, seguita dall'identificatore pubblico che l'elaboratore può impiegare se è disponibile una libreria standard. Dopo l'identificatore pubblico è inserito un URI, simile a quello utilizzato con la parola chiave SYSTEM. Un esempio potrebbe essere questo:

<!ENTITY IMAGE1 PUBLIC "-//XMLCo//TEXT Standard Images//EN" 
 "http://XMLCo.com/Images/Xmlquot.gif" NDATA   GIF>

ENTITA' ESTERNE: ANNOTAZIONI E DICHIARAZIONI DI ANNOTAZIONI

Consideriamo la dichiarazione di entità:

<!ENTITY IMAGE1 SYSTEM "Xmlquot.gif" NDATA GIF>

Un'annotazione NDATA GIF viene visualizzata nella parte finale della dichiarazione. Questa annotazione indica all'elaboratore il tipo di oggetto a cui viene fatto riferimento. A questo punto se viene semplicemente aggiunta la dichiarazione di entità alla DTD e viene eseguita attraverso l'elaboratore, verrà visualizzato un messaggio di errore simile al seguente:

Declaration 'IMAGE1' contains reference to undefined notation 'GIF'.

(La dichiarazione 'IMAGE1' contiene un riferimento a un'annotazione 'GIF' non identificata.)

L'errore si verifica perché la dichiarazione di entità fa riferimento a un tipo di file binario e all'elaboratore non è stato indicato come operare con questo file. Si tratta di un'entità non analizzabile che l'elaboratore non è in grado di comprendere. In questo caso l'annotazione deve essere dichiarata come dichiarazione di annotazione. Una dichiarazione di annotazione indica all'elaboratore come operare con un tipo di file binario specifico. Le dichiarazioni di annotazione hanno il seguente formato:

<!NOTATION GIF SYSTEM "Iexplore.exe">

Questa dichiarazione indica all'elaboratore di utilizzare il programma Iexplore.exe per elaborare il file GIF ogni volta che nella DTD ne viene rilevato uno.

ENTITA' DI PARAMETRO

Anche se le entità di parametro funzionano in modo simile alle entità generali, possiedono un'importante differenza sintattica. Le entità di parametro utilizzano il simbolo di percentuale (%) nelle dichiarazioni e nei riferimenti. Nella dichiarazione di entità il simbolo di percentuale segue la parola chiave !ENTITY, ma precede il nome dell'entità come illustrato di seguito. Si noti che è richiesto uno spazio singolo prima e dopo il simbolo &:

<!ENTITY % ENCRYPTION
 "40bit CDATA #IMPLIED
 128bit CDATA #IMPLIED">

E' ora possibile fare riferimento a questa entità in un altro punto della DTD. Ad esempio:

<!ELEMENT EMAIL (TO+, FROM, CC*, BCC*,  SUBJECT?, BODY?)>
<!ATTLIST EMAIL
 LANGUAGE(Western|Greek|Latin|Universal)  "Western"
 ENCRYPTED %ENCRYPTION;
 PRIORITY (NORMAL|LOW|HIGH) "NORMAL">

Il riferimento all'entità di parametro &ENCRYPTION; utilizza lo stesso formato di base del riferimento di entità generale, a eccezione del simbolo % che sostituisce il simbolo &.

Le entità di parametro possono rivelarsi un metodo utile per creare uno stile personale all'interno delle DTD e rendere queste ultime più concise e meglio organizzate. Tuttavia queste entità dovrebbero essere utilizzate con cautela, dato che possono creare situazioni complesse all'interno di un documento in grado di rendere difficoltosa la gestione.

<indietro home page avanti>

Copyright © 2000-2005. Tutti i diritti sono riservati. Per informazioni: mgianni@infinito.it