DTD - Entidades


Advertisements

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 parámetro

Sintaxis para declaración 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.

Sintaxis

A continuación les mostramos la sintaxis para la declaración 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 aña diendo el prefijo & al nombre de la entidad esto es &entity_name.

Ejemplo

A continuación les exponemos un simple ejemplo para declaración de entidad interna:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA)>
<!ENTITY name "Tanmay patil">
<!ENTITY company "Howcodex">
<!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 añadiendo 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 públicos.

Sintaxis

A continuación una muestra de la sintaxis para la declaración 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 dirección de la fuente externa entre comillas.

Tipos

Usted puede referir un DTD externo usando:

  • Identificadores de sistema - Un identificador de sistema le permite especificar la localización 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 señalando la localización'del documento.

  • Identificadores públicos -

    Los identificadores públicos 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 públicos se usan para identificar una entrada en un catálogo. Los identificadores públicos pueden tener cualquier tipo de formato; sin embargo, un formato usado frecuentemente se llama Indentificadores públicos formales, o FPIs.

Ejemplo

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>Howcodex</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. También 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'): &amp;

  • Single quote(significa comillas simples): &apos;

  • Mejor que: &gt;

  • Menos que: &lt;

  • Double quote(significa comillas altas/inglesas) : &quot;

Ejemplo

El siguiente ejemplo muestra la declaración de la entidad integrada:

<?xml version="1.0"?>
<note>
   <description>I'm a technical writer & programmer</description>
<note>

Como puede ver el &amp; 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 simbólicas de información, esto es, caracteres que son dificilmente o imposibles de escribir, se pueden substituir por entidades de caracter.

Ejemplo

El siguiente ejemplo muestra la declaración de entidades de caracter:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Tanmay patil">
<!ENTITY copyright "&#169;">
]>
<author>&writer;&copyright;</author>

Podemos darnos cuenta que se ha usado &#169; 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, párrafos, y hasta documentos enteros.

Sintaxis

Para declarar entidades generales, use una declaración 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 "howcodex">
]>
<note>
&source-text;
</note>

Cuando un analizador XML encuentra una referencia a la entidad source-text aportará un texto de recambio a la aplicación en el lugar de la referencia.

Entidades de parámetro

El objetivo de la entidad de parámetro es permitir que usetd pueda crear secciones de texto de recambio reutilizables.

Sintaxis

A continuación la sintaxis para la declaración de entidad de parámetro:

<!ENTITY % ename "entity_value">
  • entity_value cualquier caracter que no sea ni '&', '%' ni ' " '.

Ejemplo

El siguiente ejemplo muestra la declaración de entidad de parámetro. Imagine que tiene declaraciones de elemento como se muestra a continuación:

<!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 añadir un elemento adicional country, entonces lo tendrá que añadir a las cuatro declaraciones. Por lo tanto podemos ir a por una referencia de entidad de parámetro. Ahora usando la referencia de entidad de parámetro con el ejemplo anterior:

<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">

La entidades de parámetro 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.

Advertisements