Categorías destacadas
programacion php    
Artículo
16
¡votar!

 Curso de XML


Declarando la DTD

Las declaraciones que forman la DTD pueden estar definidas en los siguientes lugares:

  • Dentro del propio documento XML.
  • En algún fichero externo que luego referenciamos desde el documento XML.

Aunque esto no significa que se tengan que definir en su totalidad en alguno de estos lugares. Las declaraciones que la forman puede estar en parte en el fichero externo y en parte en el propio documento XML. Por tanto, hay que tener cuidado y no considerar simplemente como DTD el fichero externo, sino el conjunto de todas las declaraciones DTD, tanto las externas como las internas.

La declaración de una DTD empieza con la declaración DOCTYPE seguida del nombre de un elemento, que debe corresponder con el que definamos en la DTD, como el elemento raíz (Elemento documento).

<!DOCTYPE nombre_de_tipo_de_documento ....

En nuestro ejemplo tendría el siguiente aspecto:

<!DOCTYPE mihtml ....

A partir de aquí, dependiendo de si las declaraciones de la DTD, son exclusivamente internas, externas o mixtas, cambiará lo que tenemos que colocar en los puntos suspensivos.

La DTD en el interior del documento XML

En el caso de que las declaraciones de la DTD sean exclusivamente interiores, la declaración DOCTYPE tiene el siguiente aspecto:

  <!DOCTYPE nombre_de_tipo_de_documento
  [declaracions que forman la DTD]>

quedando en nuestro ejemplo de la siguiente manera:

  <?xml version="1.0"?>
  <!DOCTYPE mihtml [
     <!ELEMENT mihtml (c1 | parrafo)*>
     <!ELEMENT c1 (#PCDATA)>
     <!ELEMENT parrafo (#PCDATA|negrita)*>
     <!ELEMENT negrita (#PCDATA)>
  ]>
   <mithml>
      .....
   </mithml>

es decir, a la expresión de partida abrimos un corchete '[' realizamos las declaraciones, en las que definimos elementos, atributos, entidades, etc., y cerramos la declaración con la expresión "]>".

No es demasiado frecuente que una DTD sea declarada en su totalidad dentro del documento XML

La DTD exterior al documento XML

En este caso, el conjunto de las declaraciones DTD irán en un fichero externo, por lo que parece normal que a la declaración DOCTYPE tendremos que indicarle de alguna manera donde se encuentra este fichero.

Esto se realiza añadiendo a la expresión inicial las palabras clave SYSTEM o PUBLIC.

En el caso de que sea "SYSTEM",a continuacion indicamos el identificador de sistema, que no es más que una URI (Indenficador Universal de Recursos, una forma ampliada del URL) donde se encuentra el fichero que contiene la DTD.

Suponiendo que hemos guardado las declaraciones de la DTD en un fichero mihtml.dtd que se encuentra en el mismo directorio que el fichero XML,la declaración tendría el siguiente aspecto:

<!DOCTYPE mihtml SYSTEM "mihtml.dtd">
<mihtml>
....
</mihtml>

En el caso de utilizar PUBLIC estaremos indicando que, además del identificador de sistema, identificamos la DTD con un identificador público (unívoco).

<!DOCTYPE mihtml PUBLIC "-//Joaquin Bravo//DTD HTML Ciberaula//EN" "mihtml.dtd">
<mihtml>
....
</mihtml>

De esta manera el procesador XML ya se encargará de convertir dicho identificador en un URI. Esta equivalencia posiblemente se obtenga en un fichero que suele denominarse "catalógo de entidades" que es donde se establece tal relación.

En el caso de que no se pueda establecer esta relación utilizará el identificador de sistema.

Cabe destacar que esta última característica depende mucho de las aplicaciones XML que utilicemos y debemos tener en cuenta qué formato de catálogos maneja y si los maneja.

La ventaja de trabajar con DTD declaradas en ficheros externos es evidente, si tenemos en cuenta que esa misma DTD puede ser utilizada para múltiples documentos XML. La modificación de esta DTD sólo implicaría realizar modificaciones en un único fichero y no en todos los documentos XML que la utilizan.

La DTD con declaraciones interiores y exteriores

Es posiblemente la forma más habitual de trabajar con las DTD. En la declaración externa de la DTD se definen los elementos, atributos y entidades que formarán ese tipo de documento, y en la declaración interna se definen algunas características propias de ese documento que no van a aparecer en otros del mismo tipo.

La forma de indicarlo en la declaración DOCTYPE es una mezcla de las formas anteriores. Se define como una DTD externa, pero en lugar de cerrar con el símbolo mayor que ">" abrimos el símbolo "[" para poder definir declaraciones de DTD internas y cerramos con la expresión "]>".

Por ejemplo, esta forma de trabajar es muy utilizada para la declaración de entidades (en un capítulo posterior se estudia en detalle el tema de las entidades) particulares de ese documento. Imaginemos que estamos escribiendo un documento XML en el que una cadena de texto se repite constantemente y queremos evitarnos el tener que escribirla cada vez. Este problema lo podemos solucionar de la siguiente manera:

<!DOCTYPE mihtml SYSTEM "mihtml.dtd" [
<!ENTITY texto "En un lugar de la mancha"
]>
<mihtml>
<p>&texto;</p>
<p>&texto;</p>
<p>&texto;</p>
<p>&texto;</p>
</mihtml>

Si observamos este documento XML en el IE5 nos lo mostrará de la siguiente manera:

Entidad interna mostrada en el IE5

También se puede utilizar para añadir nuevos elementos, listas de atributos, etc.. Imaginemos que queremos añadir texto en cursiva dentro del elemento parrafo en un documento XML basado en nuestra mihtml, y sólo queremos que funcione en este documento. Y lo haremos creando un nuevo elemento que denominamos cursiva

<!DOCTYPE mihtml SYSTEM "mihtml.dtd" [
	<!ELEMENT parrafo (#PCDATA|negrita|cursiva)*>
	<!ELEMENT cursiva (#PCDATA)>
]>
<mihtml>
<parrafo>Texto en <cursiva>cursiva</cursiva></parrafo>
</mihtml>

Evidentemente, hemos tenido que redefinir el elemento parrafo para que en su contenido contemple el elemento cursiva. Hay que tener en cuenta que se procesan antes las declaraciones internas que las externas.

Publicado por:
Eduard Puigdemunt
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon