Curso de XML

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO