jueves, 7 de junio de 2012

Las entidades de nombre en XML

Las entidades de nombre, también conocidas como entidades internas en la especificación XML, constituyen las más comunes de las entidades de este lenguaje estructurado. Todo el mundo piensa en la entidades de nombre cuando se habla de las entidades de XML, aún así hay más tipos de entidades que puedes consultar en algún manual.

Para entender mejor cual puede ser el papel de las entidades dentro de nuestro documento XML, podemos imaginarlas como una especie de macros que expanden al momento de procesarlas y facilitan la edición del documento. Las entidades de nombre pueden ser de dos clases: externas e internas.

En esencia, definir una entidad de nombre consiste en asociar un nombre con un valor, sea en la declaración del documento o sea en un fichero externo. Cuando el procesador comienza a leer el documento guarda en memoria las relaciones que hemos establecido y luego, ya dentro del documento, lleva a cabo una sustitución cada vez que encuentre el nombre que hemos dado a nuestra entidad de nombre.

La utilidad más apropiada sería evitar las repeticiones durante la redacción de nuestro documento XML. Viene a ser una búsqueda con reemplazamiento, instrucción que se halla presente en todos los procesadores de texto.

La declaración de la entidad dentro del texto del documento encerrando el nombre entre los signos (&) y (;) de la siguiente manera: &nombre de la entidad;

En las declaraciones de nombre internas la declaración se lleva a cabo dentro de la etiqueta de tu documento.

Las entidades internas pueden hacer referencia a otras entidades internas, pero si creamos un bucle (cuando una entidad llama a otra y esta otra vuelve a llamar a la primera) se producirá un error

En las entidades de nombre internas la declaración se lleva a cabo dentro de la etiqueta del documento, por el contrario, en las entidades de nombre externas la declaración tiene lugar en un fichero externo al documento que tratamos, aunque, por supuesto, la llamada tiene lugar en el propio documento. El fichero externo puede contener datos binarios o texto

Si el entidad de nombre externa hace referencia a un texto, éste será insertado en el lugar donde indiquemos dentro del documento y será parseado junto con él. En cambio si los datos externos son binarios no se parsearán y el procesador se limitará a tomar nota. Los datos binarios se usan para introducir en el documento XML figuras y otros formatos que no pueden ser procesados por el parser XML

Ejemplo nº 1 Utilización de una entidad de nombre interna en XML
        <?xml version="1.0" encoding="UTF-8"?>

<!-- New document created with EditiX at Wed Jun 06 19:41:13 BST 2012 -->

<!DOCTYPE nota [
  <!ENTITY socio "Javier Rodríguez">
  <!ENTITY título-conferencia "Capitalización bancaria en un entorno de crísis europea">
  <!ENTITY fecha "18 de Junio de 2012">
  <!ENTITY nombre-salón "Cañadas del Teide">
  <!ENTITY nombre-hotel "Bahía del Duque">
  <!ENTITY dirección-hotel "Adeje">
]>
 
<nota>
 <entrada>
  Estimado asociado: D. &socio;
 </entrada>
 <cuerpo>
  Le recordamos que la conferencia "&título-conferencia;" se celebrará el próximo día &fecha; en el salón &nombre-salón; del hotel &nombre-hotel;, situado en la localidad de &dirección-hotel; 
 </cuerpo>
 <pie>
  Un saludo
 </pie>
</nota>

Vamos a poner ahora un ejemplo de utilización de una entidad de nombre externa en XML para obtener datos de una base de datos XML situada en la red.

Ejemplo nº 2 Utilización de una entidad de nombre externa en XML
        <?xml version="1.0" standalone="no" ?>
<!DOCTYPE descanso-dominical [
  <!ENTITY descanso SYSTEM "http://musicbrainz.org/ws/2/release/6a59e1fc-f8ba-408c-90d1-ce2693b4caee?inc=artist-credits%2Blabels%2Bdiscids%2Brecordings">
]>

<!--Mediante una entidad de nombre externa se llama al contenido del álbum "Descanso dominical" del grupo Mecano,
utilizando la base de datos de Musicbrainz-->

<!--Puedes utilizar Internet Explorer para abrir el documento XML resultante, en Chrome no funciona-->

<descanso_dominical>
&descanso;
</descanso_dominical>

No hay comentarios:

Publicar un comentario