ENTITY (XML)
L'istruzione ENTITY viene usata per definire entità nella DTD, sia per l'uso nei documenti XML associati alla DTD che nella DTD stessa. Una ENTITY fornisce una voce abbreviata da posizionare nel documento XML. Il nome abbreviato è ciò che si inserisce come parametro di nome. Le istruzioni ENTITY consentono di ripetere informazioni o grandi blocchi di testo che possono essere archiviati in file separati. Il nome abbreviato è seguito da ; nel documento XML (&abbName;)
Di seguito è riportato un esempio in cui istruzioni ENTITY vengono usate in una DTD e in un file XML.
longtext.txt
Di seguito è illustrato il contenuto del file longtext.txt:
<definition>ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.
</definition>
dtd_chunk.dtd
<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>
sample.dtd
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>
<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">
<!ENTITY % lists "(ol | ul)">
<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
%dtd_chunk;
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type &lists;>
]>
Quando si analizza il documento DTD, si ottengono i risultati seguenti. Si noti che la sostituzione avviene solo in memoria. Il parser non modifica effettivamente il file.
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>
<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">
<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type (ol | ul)>
]>
sample.xml
<?xml version="1.0" standalone="no" ?>
<heading>Definition list for &xml; attributes used in DTD files.</heading>
<file_info name="topfile">
<icon source="file_pic"/>
<list list_type="ul"/>
%attlist_def
</file_info>
<footer>Conclusion of definition list for &xml; attributes.</footer>
Risultato del documento XML analizzato
Quando si analizza il documento XML, si ottengono i risultati seguenti:
Definition list for eXtensible Markup Language attributes used in DTD files.
top file
ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.
Conclusion of definition list for eXtensible Markup Language attributes.
Sintassi
<!ENTITY [%] name [SYSTEM|PUBLIC publicID] resource [NDATA notation] >
Parametri
name
Nome dell'entità. Richiesto per tutte le definizioni di entità.IDpubblico
L'identificatore pubblico per l'entità. Richiesto solo se la dichiarazione usa la parola chiave PUBLIC.risorsa
Il valore per l'entità. Richiesto per tutte le definizioni di entità. Nel caso di entità interne, questa è una stringa di testo analizzata ed espansa. Le entità esterne, quali il nome o il tipo di file, vengono identificate da un URI (Uniform Resource Identifier).notazione
Il nome di una notazione dichiarato in un punto diverso della DTD usando l'istruzione NOTATION. Obbligatorio solo quando un'entità non analizzata viene dichiarata con la parola chiave dei dati non XML (NDATA).
Esempi
Entità generale (interna analizzata)
Nell'esempio seguente viene dichiarata un'entità generale interna alla quale si può fare riferimento come öaut; e &xml; in documenti XML che usano la DTD.
<!ENTITY oumlaut "&#246;">
oppure un esempio di sostituzione di testo semplice è il seguente
<!ENTITY xml "eXtensible Markup Language">
Il parser XML espande il valore di entità non elaborato (&#246;) per includerlo nel documento XML interno. Nell'output finale del documento analizzato il valore "&" viene usato per creare il carattere "&" e il valore è presente nel documento XML come "ö".
Entità parametro (interna analizzata)
Nell'esempio seguente viene dichiarata un'entità parametro interna alla quale si può fare riferimento come %lists; in punti diversi della DTD. Questo consente più riferimenti agli elementi di elenco XHTML, <ul> e <ol>.
<!ENTITY % lists "ul | ol">
Entità esterna non analizzata
Nell'esempio seguente viene dichiarata un'entità esterna non analizzata che consente di codificare i collegamenti a dati non XML (in questo caso un file di immagine in formato GIF) da includere nel documento XML.
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
In questo caso, l'uso della parola chiave NDATA richiede anche l'utilizzo di una dichiarazione NOTATION per una notazione denominata "jpg". Per altre informazioni, vedere NOTATION.
Note
Le istruzioni ENTITY possono essere usate in diversi modi. Se non si è sicuri su come definire un'entità, le seguenti domande possono aiutare a comprendere le diverse condizioni per l'utilizzo delle entità che si dichiarano nella DTD:
Il valore dell'entità serve solo per abbreviare una lunga stringa di testo che potrebbe cambiare durante il ciclo di vita del documento? In questo caso usare un'entità generale.
L'entità verrà usata come puntatore a qualcosa di esterno alla DTD o al documento XML (ad esempio entità esterne), come un nome di file o un tipo MIME? In questo caso usare un'entità esterna non analizzata.
Il valore URI dell'entità deve essere analizzato (ovvero espanso come parte della DTD o di un documento XML che lo usa) oppure rimane non analizzato (ovvero il parser XML ne ometterà il contenuto dal documento finale analizzato)?
Se analizzato, il contenuto dell'entità espansa verrà incluso nel documento XML che usa la DTD (entità generali) oppure verrà incluso nella DTD stessa (entità parametro)?