ENTITY
La instrucción ENTITY
se emplea para definir entidades en la DTD para utilizarlas tanto en el documento XML asociado a la DTD como en la propia DTD. Una ENTIDAD ofrece una entrada abreviada que se puede situar en el documento XML. El nombre abreviado es lo que usted incluye en el parámetro de nombre. Las ENTIDADES resultan muy útiles para repetir información o bloques grandes de texto que pueden estar guardados en archivos separados. El nombre abreviado va seguido de un punto y coma (;) en el documento XML (&abbName;)
A continuación se muestra un ejemplo de ENTIDADES que se emplean en una DTD y un archivo XML.
longtext.txt
Lo siguiente es el contenido de 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
sample.dtd
Cuando se analiza el documento DTD, se obtienen los resultados siguientes. Observe que la sustitución solo se produce en la memoria. El analizador no cambia el archivo realmente.
sample.xml
Resultado del documento XML analizado.
Cuando se analiza el documento XML, se obtienen los resultados siguientes:
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.
Sintaxis
<!ENTITY [%] name [SYSTEM|PUBLIC publicID] resource [NDATA notation] >
Parámetros
- name
Nombre de la entidad. Requerido para todas las definiciones de entidad.
- publicID
Identificador público de la entidad. Solo es necesario si la declaración utiliza la palabra clave PUBLIC.
- recurso
El valor de la entidad. Requerido para todas las definiciones de entidad. En el caso de entidades internas, se trata de una cadena de texto que se analiza y expande. En el caso de entidades externas, se trata de un identificador de recursos uniforme (URI) que identifica una entidad externa como un nombre de archivo o tipo de archivo.
- notation
El nombre de una notación declarada en otro lugar de la DTD mediante la instrucción NOTATION. Solo es necesaria cuando se declara una entidad sin analizar mediante el uso de la palabra clave NDATA (dato que no es XML).
Ejemplos
Entidad general (interna analizada)
El ejemplo siguiente declara entidades generales internas a las que se puede hacer referencia como öaut;
y &xml;
en documentos XML que utilizan la DTD.
<!ENTITY oumlaut "&#246;">
o un ejemplo simple de sustitución de texto es
<!ENTITY xml "eXtensible Markup Language">
El analizador XML expande el valor sin formato de la entidad (&#246;) para incluirlo en el documento XML interno. En el resultado final del documento analizado, se utiliza el valor "&" para crear el carácter "&" y el valor aparece en el documento XML como "ö".
Entidad de parámetro (interna analizada)
El ejemplo siguiente declara una entidad de parámetro interna a la que puede hacerse referencia como %lists;
en otros lugares de la DTD. Esto permite que aparezcan varias referencias a los elementos de la lista XHTML, <ul>
y <ol>
.
<!ENTITY % lists "ul | ol">
Entidad externa sin analizar
El siguiente ejemplo muestra una entidad externa sin analizar que le permite codificar vínculos con datos que no son XML (en este caso, un archivo de imagen con formato GIF) para incluirlos en el documento XML.
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
En ese caso, el uso de la palabra clave NDATA
obliga a utilizar una declaración NOTATION
para una notación llamada "jpg" junto con esta declaración. Para obtener más información, vea NOTATION.
Comentarios
Las ENTIDADES pueden utilizarse de distintos modos. Si no está seguro de cómo definir una entidad para utilizarla, tal vez las siguientes preguntas le ayuden a comprender mejor las distintas condiciones en las que se utilizan las entidades que declara en la DTD:
El valor de la entidad, ¿se debe utilizar simplemente para abreviar una cadena de texto más grande que puede sufrir cambios mientras exista el documento? Utilice una entidad general.
¿Se usará como un puntero para algo externo a la DTD o al documento XML (es decir, entidades externas), como un nombre de archivo o un tipo MIME? Utilice una entidad externa sin analizar.
¿El valor URI de la entidad se analizará (es decir, se expande como parte de la DTD o de un documento XML que la usa), o permanecerá sin analizar (es decir, el analizador XML omitirá sus contenidos del documento analizado final)?
Si se analizó, ¿el contenido de la entidad expandida será parte del documento XML que usa la DTD (es decir, las entidades generales) o parte de la propia DTD (es decir, las entidades de parámetro)?