Capitolo III: Definizione del tipo di documento (DTD) |
Entità Oltre allentità 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 unentità interna definita SIGNATURE: <!ENTITY SIGNATURE "Bill"> Ogni volta che viene fatto riferimento allentità nel documento, &SIGNATURE, questultima 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 unazienda 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 allelaboratore dove reperire loggetto indicato nella dichiarazione. Nellesempio precedente, il nome di file era utilizzato perché il codice aveva impiego locale. Nella dichiarazione che segue, lURI è 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 unampia gamma di utenti. Sarebbe necessario utilizzare la parola chiave PUBLIC, seguita dallidentificatore pubblico che lelaboratore può impiegare se è disponibile una libreria standard. Dopo lidentificatore 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> Unannotazione NDATA GIF viene visualizzata nella parte finale della dichiarazione. Questa annotazione indica allelaboratore 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 lelaboratore, verrà visualizzato un messaggio di errore simile al seguente: Declaration IMAGE1 contains reference to undefined notation GIF. (La dichiarazione IMAGE1 contiene un riferimento a unannotazione GIF non identificata.) Lerrore si verifica perché la dichiarazione di entità fa riferimento a un tipo di file binario e allelaboratore non è stato indicato come operare con questo file. Si tratta di unentità non analizzabile che lelaboratore non è in grado di comprendere. In questo caso lannotazione deve essere dichiarata come dichiarazione di annotazione. Una dichiarazione di annotazione indica allelaboratore 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 allelaboratore 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 unimportante 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 dellentità 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 allentità 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 allinterno 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 allinterno di un documento in grado di rendere difficoltosa la gestione. |