DTD - Entidades
Las entidades se usan para definir atajos para caracteres especiales en documentos XML. Las entidades pueden ser de cuatro tipos:
Entidades integradas
Entidades de caracter
Entidades generales
Entidades de parmetro
Sintaxis para declaracin de entidades
En general, las entidades se pueden declarar de forma interna o de forma externa. Veamos cada una de sus formas y su sintaxis correspondiente:
Entidad interna
Si una entidad se declara en un DTD se llamar entidad interna.
SintaxisA continuacin les mostramos la sintaxis para la declaracin de entidades internas:
<!ENTITY entity_name "entity_value">
En la sintaxis mostrada:
entity_name es el nombre de la entidad seguida de su valor entre comillas simples o dobles.
entity_value contiene el valor para el nombre de la entidad.
El valor de la entidad para la entidad interna se puede dereferenciar aa diendo el prefijo & al nombre de la entidad esto es &entity_name.
Ejemplo
A continuacin les exponemos un simple ejemplo para declaracin de entidad interna:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE address [ <!ELEMENT address (#PCDATA)> <!ENTITY name "Tanmay patil"> <!ENTITY company "TutorialsPoint"> <!ENTITY phone_no "(011) 123-4567"> ]> <address> &name; &company; &phone_no; </address>
En el ejemplo de arriba, los nombres de entidad respectivosname, company y phone_no se reemplazan por sus valores en el documento XML. Los valores de entidad se dereferencian aadiendo el prefijo & al nombre de la entidad.
Guarde este archivo como sample.xml y bralo en cualquier explorador web, notar que los valores de entidad para name, company, phone_no son reemplazados respectivamente.
Entidad externa
Si una entidad se declara fuera del DTD se denomina entidad externa. Usted puede referir una entidad externa usando identificadores de sistema o bien identificadores pblicos.
SintaxisA continuacin una muestra de la sintaxis para la declaracin de entidad externa:
<!ENTITY name SYSTEM "URI/URL">
En la sintaxis mostrada:
name es el nombre de la entidad.
SYSTEM es la palabra clave.
URI/URL es la direccin de la fuente externa entre comillas.
Usted puede referir un DTD externo usando:
-
Identificadores de sistema - Un identificador de sistema le permite especificar la localizacin de un archivo externo que contenga declaraciones de DTD declarations. La sintaxis es la siguiente:
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Como puede ver contiene la palabra clave SYSTEM y una referencia URI sealando la localizacin'del documento.
-
Identificadores pblicos -
Los identificadores pblicos aportan un mecanismo para localizar recursos de DTD y se escriben de la siguiente forma:<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Como puede observar, empieza con al palabra clave PUBLIC, seguido de un identificador especializado. Los identificadores pblicos se usan para identificar una entrada en un catlogo. Los identificadores pblicos pueden tener cualquier tipo de formato; sin embargo, un formato usado frecuentemente se llama Indentificadores pblicos formales, o FPIs.
Entenderemos mejor la entidad externa con el siguiente ejemplo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE address SYSTEM "address.dtd"> <address> <name>Tanmay Patil</name> <company>TutorialsPoint</company> <phone>(011) 123-4567</phone> </address>
Debajo se encuentra el contenido de el archivo de DTD address.dtd:
<!ELEMENT address (name, company, phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)>
Entidades integradas
Todos los analizadores XML deben ser compatibles con entidades integradas. En general, se pueden usar estas referencias de entidad en cualquier lugar. Tambin se puede usar texto normal en documentos XML document, como en el caso de los contenidos de elemento y valores de atributo.
Hay 5 entidades integradas que juegan su papel en XML bien formados, estas son:
ampersand(significa 'Y'): &
Single quote(significa comillas simples): '
Mejor que: >
Menos que: <
Double quote(significa comillas altas/inglesas) : "
Ejemplo
El siguiente ejemplo muestra la declaracin de la entidad integrada:
<?xml version="1.0"?> <note> <description>I'm a technical writer & programmer</description> <note>
Como puede ver el & caracter es reenplazado por & cuando el procesador halla esto.
Entidades de caracter
Las entidades de caracter se usan para nombrar alguna de las entidades que son representaciones simblicas de informacin, esto es, caracteres que son dificilmente o imposibles de escribir, se pueden substituir por entidades de caracter.
Ejemplo
El siguiente ejemplo muestra la declaracin de entidades de caracter:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE author[ <!ELEMENT author (#PCDATA)> <!ENTITY writer "Tanmay patil"> <!ENTITY copyright "©"> ]> <author>&writer;©right;</author>
Podemos darnos cuenta que se ha usado © como valor para el caracter copyright(con derechos de autor). Guarde este archivo como sample.xml y bralo en su explorador, ver que copyright es reemplazado por el carcater ©.
Entidades generales
Las entidades generales se deben declarar en el DTD antes de que se puedan usar en el documento XML. En vez de representar un solo carcater, las entidades generales pueden representar caracteres, prrafos, y hasta documentos enteros.
Sintaxis
Para declarar entidades generales, use una declaracin de este formulario general en su DTD:
<!ENTITY ename "text">
Ejemplo
El siguiente ejemplo muestra declaraciones de entidad general:
<?xml version="1.0"?> <!DOCTYPE note [ <!ENTITY source-text "tutorialspoint"> ]> <note> &source-text; </note>
Cuando un analizador XML encuentra una referencia a la entidad source-text aportar un texto de recambio a la aplicacin en el lugar de la referencia.
Entidades de parmetro
El objetivo de la entidad de parmetro es permitir que usetd pueda crear secciones de texto de recambio reutilizables.
Sintaxis
A continuacin la sintaxis para la declaracin de entidad de parmetro:
<!ENTITY % ename "entity_value">
entity_value cualquier caracter que no sea ni '&', '%' ni ' " '.
Ejemplo
El siguiente ejemplo muestra la declaracin de entidad de parmetro. Imagine que tiene declaraciones de elemento como se muestra a continuacin:
<!ELEMENT residence (name, street, pincode, city, phone)> <!ELEMENT apartment (name, street, pincode, city, phone)> <!ELEMENT office (name, street, pincode, city, phone)> <!ELEMENT shop (name, street, pincode, city, phone)>
Ahora imagine que quiere aadir un elemento adicional country, entonces lo tendr que aadir a las cuatro declaraciones. Por lo tanto podemos ir a por una referencia de entidad de parmetro. Ahora usando la referencia de entidad de parmetro con el ejemplo anterior:
<!ENTITY % area "name, street, pincode, city"> <!ENTITY % contact "phone">
La entidades de parmetro se dereferencia de la misma forma que la referencia de entidad general, solo que con un signo de porcentaje (%) en vez de con un ampersand(&):
<!ELEMENT residence (%area;, %contact;)> <!ELEMENT apartment (%area;, %contact;)> <!ELEMENT office (%area;, %contact;)> <!ELEMENT shop (%area;, %contact;)>
Cuando el analizador lee estas declaraciones, substituye el texto de recambio de la entidad por la referencia de entidad.